Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Прикладное программирование. Учебное пособие
.pdf
End.
Примеры заданий для самостоятельного решения
«Работа с символьными переменными»
1. В поле ввода вводится строка. Заменить в ней все буквосочетания оо на
*.
2. В поле ввода вводится строка. Заменить в ней каждую запятую на 2 про-
бела.
3. В поле ввода вводится строка. Удалить из нее все символы, стоящие на
четных местах.
4. В поле ввода вводится строка. Добавить знак + после каждого пятого
символа.
5. В поле ввода вводится строка. Определить каких символов в строке
встретилось больше а или в.
6. В поле ввода вводится строка. Удалить из нее все символы, стоящие на
первом, третьем, пятом и т.д. местах.
7. В поле ввода вводится строка, содержащая три слова, разделенных про-
белами. Напишите программу, которая при нажатии кнопки меняет местами 2 и
3 слово.
8. В поле ввода вводится строка, одна из которых содержит слово DOG, а
другая CAT. Напишите программу, которая при нажатии кнопки меняет слово
DOG на слово CAT и наоборот.
Пример отчета «Работа с символьными переменными»
В поле ввода вводится строка. Заменить в ней все буквосочетания оо на *.
31

Рисунок 2. Пример решения задания «Работа с символьными переменными»
32

Структурированный тип данных — массивы
Структурированные типы данных определяют наборы однотипных или
разнотипных компонентов; при этом каждый из них образуется из других типов
данных — простых или структурированных.
Массивом называется упорядоченная последовательность однотипных пе-
ременных, обозначенных одним именем.
Элементы массива относятся к одному типу, количество их фиксировано.
Каждый элемент может быть явно обозначен с помощью имени перемен-
ной массива, за которым в квадратных скобках следует индекс.
Индекс — это величина, характеризующая положение элемента относи-
тельно начала массива; индексом может быть произвольное выражение порядкового типа, заключенное в квадратные скобки.
b[1], b[2], b[b[10]+1] — элементы массива B;
c[i+1], c[i*5-2] — элементы массива C;
Массивы бывают одномерными и многомерными. Количество индексов в
квадратных скобках определяется размерностью массива
a[1], b[2,5], c[1,3,2];
Размерность массива практически может быть любой.
Каждому массиву, используемому в программе, отводится место в памяти.
Но в отличие от простых переменных массиву отводится не одна ячейка, а последовательность расположенных друг за другом ячеек, в каждую из которых
записывается значение соответствующего элемента.
Время доступа к любому элементу массива не зависит от значения индекса
— это прямой доступ.
Описание массивов
Описать массив — это значит задать:
имя массива;
число элементов;
тип элементов;
33

тип индексов.
Описать массив можно двумя способами:
1). Тип – массив является типом, определяемым пользователем, его можно
определить в разделе описания типов.
Формат записи:
TYPE <имя типа> = ARRAY [< тип >] OF <тип элементов > ;
индексов
где:
ARRAY , OF — кодовые слова
<имя типа> : правильный идентификатор;
<тип индексов> : список из одного или нескольких индексных типов, разделенный запятыми;
<тип элементов> : любой тип ТР;
[ ] – квадратные скобки, обрамляющие список индексов, определяют требования синтаксиса языка.
Вместо квадратных скобок [ ] можно использовать круглые скобки с точками (. .);
Индекс может быть любого порядкового типа, кроме Longint.
Обычно в качестве индексного типа используют тип-диапазон, в котором
задаются границы изменения индексов.
Введя тип-массив, можно затем задать переменные или типизированные
константы этого типа.
ПРИМЕРЫ:
1. Тип-массив определяется в разделе описания типов
Type
mass = Array[1..5] of integer;
m1= array[1..10] of real;
m2 = array[1..3] of char;
m3 = array[1..5] of byte;
Var
34

a1, b1,c1 : mass;
a2 : m1;
b2 : m2; c2 : m3;
Размерность реальных массивов не должна превышать верхней границы,
указанной в описании типа.
2. Типизированная константа использует тип-массив, объявленный ранее
Type
mass = array[1..5] of integer;
Const
Y : mass = (2, 4, 6, 8,0); {Y(4)}
X : mass = (1, 5, 7, 0,0); {X(3)}
Если размерность массива меньше указанной в Type, свободные позиции
заполняются нулями.
Тип-массив можно вводить непосредственно при определении переменных
или типизированных констант.
3. Тип-массив задается непосредственно в разделе описания констант и
переменных
Const n=4; m: integer=10;
a1 : array[1..4] of integer = (1, 4, 3, 7);
a2 : array[1..3] of real = (1., 4., -5);
a3 : array[1..3] of char = (‘n’, ‘o’, ‘t’);
Var
a6, b6 : array[1..5] of integer;
a5, c1: array[1..5] of integer;
a4 : array[1..m] of real;
3. Ввод — вывод одномерных массивов.
Значения элементов одномерного массива
(вектора) можно ввести в программу следующими способами:
1) типизированной константой;
2) ввод с клавиатуры;
35

3) ввод из файла;
значения отдельных элементов массива можно задать оператором присваивания.
Вывод элементов массива и результатов вычислений:
1) вывод на экран;
2) вывод в файл.
Program Vvod;
Type mass = array[1..5] of integer;
Const A: mass = ( 2, -4, 3, -6, 8 );
Var B: mass; {или B,C: mass;}
C: array[1..4] of integer;
i: byte;
BEGIN
{ ввод массива B с клавиатуры }
writeln(‘ введите массив B‘);
For i := 1 to 5 do read(b[i]);
{ввод массива C с клавиатуры}
writeln(‘ введите массив С‘);
For i := 1 to 4 do read(c[i]);
{ вывод массива A на экран }
writeln(‘ массив A:’);
For i := 1 to 5 do write(A[i]:5,’ ‘);
writeln; {выводится вектор-строка}
{вывод массива B на экра }
writeln(‘ массив B:’);
For i := 1 to 5 do
writeln(B[i]); {выводится вектор-столбец}
36

Сортировка одномерных массивов
Рассмотрим массив целых или действительных чисел А1, ..., Аn.
Пусть требуется переставить элементы этого массива так, чтобы после
перестановки они были упорядочены по не убыванию А1<=A2<=...<=An.
Эта задача называется задачей сортировки или упорядочения массива.
Для решения этой задачи можно воспользоваться следующими алгоритмами:
I. Сортировка выбором
Сортировка элементов массива
Сортировка массива — это изменение порядка его элементов таким образом, чтобы они располагались либо строго по возрастанию, либо строго по
убыванию. Необходимость этой операции объясняется прямыми задачами
(например, расстановка списка фамилий в алфавитном порядке), так и нуждами
в быстром поиске среди большого объема данных.
Если элементы отсортированы, то поиск осуществлять намного проще, чем
в хаотически расположенных элементах. Так, если мы имеем дело с отсортированным по возрастанию массивом, то его минимальный элемент будет первым,
а максимальный — последним.
Существует большое разнообразие алгоритмов сортировки. Каждый из них
отличается типом данных, которые необходимо сортировать, и временем (в зависимости от количества элементов), которое им в худшем случае приходится
затратить на полную сортировку.
В настоящем разделе мы рассмотрим самый простой в реализации метод,
который получил название «сортировка вставками». Суть его заключается в
сравнении каждого элемента с каждым и, если проверяемое неравенство выполняется, сравниваемые элементы меняются местами. Вычислительная сложность этого алгоритма довольно большая. В общем случае ему потребуется
сделать ~ n2 операций. Если n (это количество элементов массива) достаточно
велико, то алгоритм работает крайне медленно.
37

В качестве примера рассмотрим сортировку массива, состоящего из трех
элементов
2, 5, 1
Сортировать будем по возрастанию.
На первом шаге зафиксируем первый элемент и будем его сравнивать
(число 2) со вторым (число 5), поскольку второе число больше, то никаких действий не требуется — между ними установлено правильное соотношение. На
следующем шаге — сравниваем зафиксированный элемент со следующим числом — числом 1. Поскольку 1<2, то меняем эти элементы местами, получив
следующий массив:
1, 5, 2
Таким образом, после первого шага, мы переместили наименьший эле-
мент в начало.
Теперь, мы можем повторить операцию для оставшейся части массива,
т.е. выполнив те же самые последовательные сравнения второго элемента со
всеми оставшимися. В итоге — получим полностью отсортированный массив.
Исходный текст, реализующий такой метод сортировки, приведем ниже:
Uses Crt;
Var randomArray: Array[1..10] Of Integer;
temp, i,j: Integer;
Begin
Randomize;
ClrScr;
WriteLn('Исходный массив:');
{Генерация и вывод исходного массива}
For i:=1 To 10 Do
Begin
randomArray[i]:=random(100);
If i<>1 Then
Write(',',randomArray[i])
38

Else
Write(randomArray[i]);
End;
{Сортировка массива}
For i:=1 To 10 Do
For j:=i To 10 Do
If randomArray[j]<randomArray[i] Then
Begin {можно использовать swap}
temp:=randomArray[i];
randomArray[i]:=randomArray[j];
randomArray[j]:=temp;
End;
WriteLn;
WriteLn('Отсортированный массив:');
{Вывод отсортированного массива}
For i:=1 To 10 Do
If i<>1 Then
Write(',',randomArray[i])
Else
Write(randomArray[i]);
End.
Обратите внимание, что мы впервые использовали вложенные циклы: т.е.
один цикл «крутится» внутри другого. Первый цикл (по переменной i) фиксирует элемент массива, который надо сравнить с другими элементами, а вложенный цикл (по j) перебирает оставшиеся элементы, чтобы их можно было сравнить с i-ым элементом.
В этом примере, мы использовали переменную temp для того, чтобы поменять местами элементы массива, для которых выполняется неравенство
randomArray[j]<randomArray[i]: — сначала «спасли» значение i-го элемента
массива, т.е. записали его значение в переменную temp;
39

вместо значения i-го элемента массива записываем значение j-го элемен-
та;
вместо j-го элемента записываем значение, которое раньше было в i-ом
элементе, т.е. значение переменной temp.
Для сортировки массива в обратном порядке, достаточно поменять знак
неравенства
randomArray[j]<randomArray[i] на противоположный.
II. Сортировка обменами (метод пузырька)
Последовательным просмотром чисел А1, ..., Аn найти наименьшее i такое,
что А(i)>A(i+1).
Поменять местами A(i) и A(i+1), возобновить просмотр с элемента A(i+1)
и т.д.
Тем самым наибольшее число передвинется на последнее место.
Следующие просмотры начинать опять сначала, уменьшая на единицу количество просматриваемых элементов.
Массив будет упорядочен после просмотра, в котором участвовали только
первый и второй элементы.
const
m = 10;
var
arr: array[1..m] of integer;
i, j, k: integer;
begin
randomize;
write ('Исходный массив: ');
for i := 1 to m do begin
arr[i] := random(256);
write (arr[i]:4);
end;
writeln; writeln;
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
