Pascal: Занятие № 6. Одномерные массивы (сложные задачи в Pascal)

На занятии разбираются разного уровня сложности задачи в 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.
Задача 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, то необходимо прибавить к ней минимальный положительный элемент.
сложные задачи в Pascal

Следующую сложную задачу с одномерными массивы следует разобрать подробно.

Пример: Имеется одномерный массив, содержащий числа от 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.

Рассмотрим представленный алгоритм решения данной сложной задачи с одномерным массивом:

  • строка 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.

  1. Определите в массиве A номер первого элемента, равного X.
  2. Определите номер первого элемента, равного X, в первой половине массива A (массив имеет чётное число элементов).
  3. Определите номер первого элемента, равного X, во второй половине массива A (массив имеет чётное число элементов).

[Название файла: task20.pas]

Задача Array 21. Найти количество различных чисел в одномерном массиве.

[Название файла: task21.pas]

Рассмотрим алгоритм решения:
алгоритм решения кол-во разлинчых чисел в массиве

Задача Array 22. Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и сделать реверс отдельно для 1-ой и 2-ой половин массива.
Пример:
перестановка элементов массива

[Название файла: task22.pas]

Задача Array 23. Заполнить массив из 12 элементов случайными числами в интервале [-12..12] и выполнить циклический сдвиг ВПРАВО на 4 элемента.
Пример:
1

[Название файла: task23.pas]

Потренируйтесь в решении задач по теме, щелкнув по пиктограмме:

проверь себя