Программирование на языке Паскаль 1. 2. 3. 4. 5. Массивы Максимальный элемент массива Обработка массивов Сортировка массивов Двоичный поиск К. Поляков, 2006-2011 6. 7. 8. 9. Символьные строки Рекурсивный перебор Матрицы Файлы http://kpolyakov.narod.ru Программирование на языке Паскаль Тема 1. Массивы К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 3 Массивы Массив – это группа однотипных элементов, имеющих общее имя и порядковые номера (индексы). Особенности: • все элементы имеют один тип • весь массив имеет одно имя • каждый элемент имеет свой индекс Примеры: • список учеников в классе • квартиры в доме • школы в городе • данные о температуре воздуха за год К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 4 Массивы A массив 1 НОМЕР элемента массива (ИНДЕКС) 2 5 20 A[1] A[2] 33 15 15 4 5 10 25 A[3] A[4] ЗНАЧЕНИЕ A[5] элемента массива НОМЕР (ИНДЕКС) элемента массива: 2 A[2] ЗНАЧЕНИЕ элемента массива: 20 К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 5 Объявление массивов Зачем объявлять? • определить имя массива • определить тип массива • определить число элементов • выделить место в памяти Массив целых чисел: имя начальный индекс конечный индекс тип элементов var A : array[ 1 .. 5 ] of integer ; К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 6 Объявление массивов Массивы других типов: var X, Y: array [1..10] of real; C: array [1..20] of char; Другой диапазон индексов: var Q: array [0..9] of real; C: array [-5..13] of char; К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 7 Что неправильно? var a: array[10..1] [1..10] of integer; ... A[5] := 4.5; var a: array ['a'..'z'] ['z'..'a'] of integer; ... A['B'] := 15; A['b'] var a: array [0..9] of integer; ... A[10] := 'X'; К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 8 Массивы Объявление: const N = 5; var a: array[1..N] of integer; i: integer; Чтение элементов массива: for i:=1 to N do read (a[i]); Поэлементные операции: for i:=1 to N do a[i]:=a[i]+1; Вывод на экран: writeln('Массив A:'); for i:=1 to N do write(a[i], ‘ ‘); К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 9 Задания Ввести c клавиатуры массив из N элементов (N<100), найти среднее арифметическое всех элементов массива. Пример: 5 4 15 9.200 3 10 14 var a: array[1..100] of integer; i, n, sum: integer; sr: real; begin read (n); sum:=0; for i:=1 to n do read (a[i]); for i:=1 to n do sum := sum + a[i]; sr := sum / n; write (sr); end. К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль Тема 2. Максимальный элемент массива К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 11 Максимальный элемент Задача: найти в массиве максимальный элемент. Алгоритм: Псевдокод: ? Почему цикл от i=2? { считаем, что первый элемент – максимальный } for i:=2 to N do if a[i] > { максимального } then { запомнить новый максимальный элемент a[i] } Программа: max := a[1]; for i:=2 to N do if a[i] > max then max := a[i]; К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 12 Максимальный элемент Дополнение: как найти номер максимального элемента? max := a[1]; { считаем, что первый – максимальный } iMax := 1; for i:=2 to N do { проверяем все остальные } if a[i] > max then { нашли новый максимальный } begin max := a[i]; { запомнить a[i] } iMax := i; { запомнить i } end; К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 13 Программа var a: array [1..100] of integer; n, i, max, k: integer; begin read (n); for i:=1 to n do read (a[i]); max := a[1]; k := 1; for i:=2 to n do if a[i] > max then begin max := a[i]; k := i; end; write(k); end. К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль Тема 3. Обработка массивов К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 15 Подсчет элементов Задача: в прочитанном массиве из N элементов подсчитать количество нулевых элементов. Идея: используем переменную-счётчик. Решение: 1) записать в счётчик ноль 2) просмотреть все элементы массива: если очередной элемент = 0, то увеличить счётчик на 1 3) вывести значение счётчика К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 16 Подсчет элементов var a: array [1..100] of integer; n, i, count: integer; begin read (n); for i:=1 to N do read (a[i]); count:= 0; for i:=1 to N do if A[i] = 0 then count:= count + 1; write(count); end. К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 17 Сумма выбранных элементов Задача: в прочитанном массиве из N элементов подсчитать сумму положительных элементов. Идея: используем переменную sum для накопления суммы. Решение: 1) записать в переменную sum ноль 2) просмотреть все элементы массива: если очередной элемент > 0, то добавить к сумме этот элемент 3) вывести значение суммы sum := sum + a[i] К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 18 Сумма выбранных элементов var A: array [1..100] of integer; n, i, sum: integer; begin read (n); for i:=1 to N do read (a[i]); sum:= 0; for i:=1 to N do if A[i] = 0 then sum:= sum + a[i]; write(sum); end. К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 19 Поиск в массиве Задача – найти в массиве элемент, равный X, или установить, что его нет. Алгоритм: 1) начать с 1-ого элемента (i:=1) 2) если очередной элемент (A[i]) равен X, то закончить поиск иначе перейти к следующему элементу К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 20 Поиск элемента в массиве var a:array[1..100] of integer; n, i, X: integer; begin read (n); for i:=1 to N do read (a[i]); i:=1; while (a[i]<>X) and (i<=n) do i:=i+1; if i <= N then write(i) else write('Нет такого'); end. К. Поляков, 2006-2011 http://kpolyakov.narod.ru Программирование на языке Паскаль. Часть II 21 Конец фильма ПОЛЯКОВ Константин Юрьевич д.т.н., учитель информатики высшей категории, ГОУ СОШ № 163, г. Санкт-Петербург kpolyakov@mail.ru К. Поляков, 2006-2011 http://kpolyakov.narod.ru