урок посвящен решению задач на массивы. задача звучит следующим образом: Дан массив целых чисел. Проверить, есть ли в нем одинаковые элементы.
Решить нужно двумя способами. первый способ: нужно заполнить массив вручную, второй способ: нужно заполнить массив случайным образом, чтоб компьютер сам генерировал значения.
Тема «Массивы. Решение задач»
Задача:
Дан массив целых чисел. Проверить, есть ли в нем одинаковые элементы.
Алгоритм решения задачи:
Чтобы проверить каждый элемент массива на уникальность, надо
сравнить его с остальными элементами. Так первый элемент следует сравнить
со вторым, третьим и т. д. до конца. После этого второй элемент с третьим,
четвертым и т. д. Второй элемент с первым сравнивать не надо, т.к. они уже
сравнивались при оценке уникальности первого элемента. Когда очередь
дойдет до предпоследнего элемента, то он сравнивается только с последним.
Последний же уже сравнивать не надо. Таким образом, количество итераций
внешнего цикла на 1 меньше, чем элементов в массиве. Счетчик этого цикла
это номер элемента, который сравнивается с элементами стоящими после
него.
Внутренний цикл перебирает элементы от следующего за исследуемым до
последнего. На данном отрезке элементы массива сравниваются с
исследуемым элементом. Если какойто элемент окажется равен
исследуемому, то значит, что в массиве есть одинаковые значения. Следует
вывести соответствующее сообщение и завершить программу, т.к. дальше уже
можно не проверять.
Если программа в процессе выполнения циклов не завершилась, то значит,
одинаковых элементов найдено не было. Следует вывести сообщение, что все
элементы массива разные.const N = 10;
var
arr: array[1..N] of byte;
i, k: byte;
begin
randomize;
for i:=1 to N do begin
arr[i] := random(80);
write(arr[i]:3);
end;
writeln;
for i:=1 to N1 do
for k:=i+1 to N do
if arr[i] = arr[k] then begin
writeln('Есть одинаковые элементы');
exit;
end;
writeln('Все элементы уникальны');
end
Задача:
Заполнить массив случайными числами, вывести его на экран. Найти
самую длинную последовательность чисел, упорядоченную по возрастанию.Вывести ее на экран. Если таких последовательностей несколько (самых
длинных с одинаковой длиной), то вывести их все.
Описание переменных:
i индекс текущего элемента массива;
l длина текущей последовательности, упорядоченной по возрастанию;
lmax длина самой длинной последовательности, упорядоченной по
возрастанию;
j индекс текущего элемента выводимой на данный момент
последовательности.
Алгоритм решения задачи:
Задачу можно разбить на три подзадачи:
1.
Заполнение и вывод массива.
2. Определение длины самой длинной последовательности чисел,
упорядоченных по возрастанию.
3.
Вывод всех упорядоченных по возрастанию последовательностей с
найденной в п. 2 длинной.
Алгоритм определения длины:
1. Присвоить переменным lmax и l значение 1.
2.
В цикле перебирать элементы массива, начиная со второго:
1.
2.
если очередной элемент больше предыдущего, то увеличивать на 1
значение l;
иначе:
1.
2.
если l больше lmax, то присвоить lmax значение l,
снова присвоить l единицу.
Вывод всех самых длинных последовательностей, упорядоченных по
возрастанию:
1.
Снова просматриваем массив и находим длину текущей
последовательности, упорядоченной по возрастанию.2.
Если эта длина равна lmax, то выводим элементы массива, начиная с il
randomize;
for i:=1 to N do begin
arr: array[1..N] of byte;
i, j, l, lmax: byte;
до i1 (с начала последовательности до предыдущего элемента).
3. const N = 45;
4. var
5.
6.
7. begin
8.
9.
10. arr[i] := random(100);
11. write(arr[i]:3);
12. end;
13. writeln;
14.
15. lmax := 1;
16. l := 1;
17. for i:=2 to N do
18. if arr[i] > arr[i1] then
19. l := l + 1
20. else begin
21. if l > lmax then
22. lmax := l;
23. l := 1;
24. end;
25. writeln(lmax);
26. if lmax = 1 then exit;
27.
28. l := 1;
29. for i:=2 to N do
30. if arr[i] > arr[i1] then
31. l := l + 1
32. else begin
33. if l = lmax then begin
34. for j:=il to i1 do
35. write(arr[j]:3);
36. writeln;
37. end;
38. l := 1;
39. end;
40.end.Пример выполнения программы:
62 6 11 2 78 37 99 8 80 3 59 71 85 59 46 66 1 43 89 67 48 72 88 57 82 62 51 14
6 88 47 79 96 98 97 58 50 60 58 84 98 69 2 46 12 4
3 59 71 85
47 79 96 98