Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Прикладное программирование. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
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