На занятии разбираются разного уровня сложности задачи в Pascal для работы с одномерными массивами
Задача сайта labs-org.ru — получение пользователями практических навыков работы с языком. Уроки по Паскалю, изложенные по мере увеличения их сложности и подкрепляемые наглядными решенными примерами, позволят с легкостью освоить изучаемый материал.
Для начала рассмотрим не сильно сложную задачу с одномерными массивами в Pascal:
Пример: Найти максимальный элемент численного массива и его индекс.
Результат:
Подумайте, пригодится ли в программе счетчик или нет, нужны ли дополнительные переменные.
Показать листинг программы:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| const
m = 20;
var
arr: array[1..m] of byte;
max_index: byte;
i: byte;
begin
randomize;
for i := 1 to m do begin
arr[i] := random(100);
write (arr[i]:3);
end;
max_index := 1;
for i := 2 to m do
if arr[i] > arr[max_index] then begin
max_index := i;
end;
writeln;
writeln ('Max = ',arr[max_index]);
writeln ('position: ', max_index);
end. |
const
m = 20;
var
arr: array[1..m] of byte;
max_index: byte;
i: byte;
begin
randomize;
for i := 1 to m do begin
arr[i] := random(100);
write (arr[i]:3);
end;
max_index := 1;
for i := 2 to m do
if arr[i] > arr[max_index] then begin
max_index := i;
end;
writeln;
writeln ('Max = ',arr[max_index]);
writeln ('position: ', max_index);
end.
Задача Array 15. Требуется заполнить массив числами, которые вводит пользователь, и вычислить их
сумму. Если пользователь вводит ноль или превышен размер массива, то запросы на ввод должны прекратиться. Использовать
цикл с постусловием (repeat)
Результат:
Число: 3
Число: 2
Число: 5
Число: 0
3 2 5 0
sum = 10
[Название файла: task15.pas
]
Задача Array 16. Дан массив из 50 элементов, значения которых формируются
функцией random и лежат в диапазоне от
-50 до
49 включительно. Требуется из одного массива скопировать в другой массив значения в диапазоне от -5 до 5 включительно и подсчитать их
количество.
[Название файла: task16.pas
]
Задача Array 17. В одномерном массиве (заполнение массива
случайными числами от
-50 до
49) найти
сумму отрицательных элементов. Если эта сумма меньше
-100, то необходимо прибавить к ней
минимальный положительный элемент.
Следующую сложную задачу с одномерными массивы следует разобрать подробно.
Пример: Имеется одномерный массив, содержащий числа от 0 до 49 включительно. Требуется исключить из него все элементы, значения которых меньше 15.
Сложность этого задания состоит в том, что нужно не просто удалять элементы, значения которых < 15, а требуется при этом передвигать остальные элементы, стоящие за удаляемым, на позицию влево. Как бы сжимая массив, чтобы не оставались «пустые» элементы.
Показать решение
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| const n=20;
var
arr: array[1..n] of integer;
i,j,m:integer;
begin
randomize;
for i:=1 to n do begin
arr[i]:=random(50);
write(arr[i]:4);
end;
writeln;
m:=n;
i:=1;
while i<=m do
if arr[i]<15 then begin
for j:=i to m-1 do
arr[j]:=arr[j+1];
m:=m-1
end
else
i:=i+1;
writeln('Результат:');
for i:=1 to m do
write(arr[i]:4)
end. |
const n=20;
var
arr: array[1..n] of integer;
i,j,m:integer;
begin
randomize;
for i:=1 to n do begin
arr[i]:=random(50);
write(arr[i]:4);
end;
writeln;
m:=n;
i:=1;
while i<=m do
if arr[i]<15 then begin
for j:=i to m-1 do
arr[j]:=arr[j+1];
m:=m-1
end
else
i:=i+1;
writeln('Результат:');
for i:=1 to m do
write(arr[i]:4)
end.
Рассмотрим представленный алгоритм решения данной сложной задачи с одномерным массивом:
- строка 12: Здесь присваивание значения
n
переменной m
требуется, т.к. n
— константа и не может быть изменена. Поскольку при «просмотре» массива в цикле while
некоторые элементы будут удаляться, то значение m
, обозначающее длину массива, будет уменьшаться.
- строка 21: Если очередной элемент не удаляется, то переходим к просмотру следующего элемента (
i := i + 1
) и не уменьшаем массив (m
не меняется).
Задача Array 18. Дан массив из N элементов в диапазоне [100;300]. Сжать массив, оставив в нем только те элементы, сумма цифр которых четная.
101 245 167 295 133 >>> 101(2) 167(14) 295(16)
[Название файла: task18.pas
]
Задача Array 19. Заполнить массив из 10 элементов случайными числами в интервале [0..4] и определить, есть ли в нем одинаковые соседние элементы.
Пример:
Исходный массив:
4 0 1 2 0 1 3 1 1 0
Ответ: есть
[Название файла: task19.pas
]
Задача Array 20.
- Определите в массиве
A
номер первого элемента, равного X
.
- Определите номер первого элемента, равного
X
, в первой половине массива A
(массив имеет чётное число элементов).
- Определите номер первого элемента, равного
X
, во второй половине массива A
(массив имеет чётное число элементов).
[Название файла: task20.pas
]
Задача Array 21. Найти количество различных чисел в одномерном массиве.
[Название файла: task21.pas
]
Рассмотрим алгоритм решения:
Задача Array 22. Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и сделать реверс отдельно для 1-ой и 2-ой половин массива.
Пример:
[Название файла: task22.pas
]
Задача Array 23. Заполнить массив из 12 элементов случайными числами в интервале [-12..12] и выполнить циклический сдвиг ВПРАВО на 4 элемента.
Пример:
[Название файла: task23.pas
]
Потренируйтесь в решении задач по теме, щелкнув по пиктограмме: