Паскаль_Массивы 7 класс.ppt
- Количество слайдов: 27
Тема 1. Массивы К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 2 Массивы Массив – это группа однотипных элементов, имеющих общее имя и расположенных в памяти рядом. Особенности: • все элементы имеют один тип • весь массив имеет одно имя • все элементы расположены в памяти рядом Примеры: • список учеников в классе • квартиры в доме • школы в городе • данные о температуре воздуха за год К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 3 Массивы A НОМЕР массив 1 2 5 10 A[1] A[2] 3 3 15 15 элемента массива (ИНДЕКС) 4 5 20 25 A[3] A[4] ЗНАЧЕНИЕ A[5] элемента массива НОМЕР (ИНДЕКС) элемента массива: 2 A[2] ЗНАЧЕНИЕ элемента массива: 10 К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 4 Объявление массивов Зачем объявлять? • определить имя массива • определить тип массива • определить число элементов • выделить место в памяти Массив целых чисел: имя начальный индекс конечный индекс тип элементов var A : array[ 1. . 5 ] of integer ; Размер через константу: const N=5; var A: array[1. . N ] of integer; К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 5 Объявление массивов Массивы других типов: 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; Индексы других типов: var A: array ['A'. . 'Z'] of real; B: array [False. . True] of integer; . . . A['C'] : = 3. 14259*A['B']; B[False] : = B[False] + 1; К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 6 Что неправильно? var a: array[10. . 1] of integer; [1. . 10]. . . A[5] : = 4. 5; var a: array ['a'. . 'z'] of integer; ['z'. . 'a']. . . A['B'] A['b'] : = 15; var a: array [0. . 9] of integer; . . . A[10] : = 'X'; К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 7 Массивы Объявление: var a: array[1. . 5] of integer; i: integer; Ввод с клавиатуры: for i: =1 to N do begin write('a[', i, ']='); read ( a[i] ); end; a[1] = a[2] = a[3] = a[4] = a[5] = 5 12 34 56 13 ? Почему write? Поэлементные операции: for i: =1 to N do a[i]: =a[i]+1; Вывод на экран: writeln('Массив A: '); for i: =1 to N do write(a[i]: 4); К. Поляков, 2006 -2011 Массив A: 6 13 35 57 14 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 8 Максимальный элемент Задача: найти в массиве максимальный элемент. Алгоритм: Псевдокод: { считаем, что первый элемент – максимальный } for i: =2 to N do if a[i] > { максимального } then { запомнить новый максимальный элемент a[i] } ? К. Поляков, 2006 -2011 Почему цикл от i=2? http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 9 Максимальный элемент Дополнение: как найти номер максимального элемента? max : = a[1]; { считаем, что первый – максимальный } i. Max : = 1; for i: =2 to N do { проверяем все остальные } if a[i] > a[i. Max] then { нашли новый максимальный } max begin max : = a[i]; { запомнить a[i] } i. Max : = i; { запомнить i } end; ? Как упростить? По номеру элемента i. Max всегда можно найти его значение a[i. Max]. Поэтому везде меняем max на a[i. Max] и убираем переменную max. К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 10 Программа program qq; var a: array [1. . 100] of integer; i, i. Max, n: integer; Begin Readln(n); { здесь нужно ввести массив с клавиатуры } i. Max : = 1; {считаем, что первый – максимальный} for i: =2 to N do { проверяем все остальные} if a[i] > a[i. Max] then { новый максимальный} i. Max : = i; { запомнить i } writeln; {перейти на новую строку} writeln('Максимальный элемент a[', i. Max, ']=', a[i. Max]); end. К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Тема 3. Обработка массивов К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 12 Случайные процессы Случайно… 1)встретить друга на улице 2)разбить тарелку 3)найти 10 рублей 4)выиграть в лотерею Случайный выбор: 1)жеребьевка на соревнованиях 2)выигравшие номера в лотерее Как получить случайность? К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 13 Генератор случайных чисел в Паскале Целые числа в интервале [0, N): var x: integer; . . . x : = random ( 100 ); { интервал [0, 99] } Вещественные числа в интервале [0, 1) var x: real; . . . x : = random; К. Поляков, 2006 -2011 { интервал [0, 1) } http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 14 Заполнение массива случайными числами var A: array [1. . 100] of integer; n, i: integer; Количество элементов в массиве Begin Readln(n); случайные числа в writeln('Исходный массив: '); интервале [50, 150) for i: =1 to N do begin A[i] : = random(100) + 50; write(A[i]: 4); end; . . . Зачем сразу выводить? ? К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 15 Подсчет элементов Задача: заполнить массив случайными числами в интервале [-1, 1] и подсчитать количество нулевых элементов. Идея: используем переменную-счётчик. Решение: 1)записать в счётчик ноль 2)просмотреть все элементы массива: если очередной элемент = 0, то увеличить счётчик на 1 3)вывести значение счётчика К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 16 Подсчет элементов начало начать с 1 -ого пока ни одного не нашли count: = 0 i: = 1 i <= N? нет конец да A[i] = 0? нет нашли еще 1 count: = count + 1 i: = i + 1 К. Поляков, 2006 -2011 да перейти к следующему http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 17 Подсчет элементов program qq; var A: array [1. . 100] of integer; i, n, count: integer; Количество Begin элементов в массиве Readln(n); { здесь надо заполнить массив } count: = 0; перебираем все элементы массива for i: =1 to N do if A[i] = 0 then count: = count + 1; writeln('Нулевых элементов: ', count); end. К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 18 Сумма выбранных элементов Задача: заполнить массив случайными числами в интервале [-10, 10] и подсчитать сумму положительных элементов. Идея: используем переменную S для накопления суммы. S: =0 S: = A[1]+A[2]+A[3] S: = A[1]+A[2]+…+A[N] Решение: 1)записать в переменную S ноль 2)просмотреть все элементы массива: если очередной элемент > 0, то добавить к сумме этот элемент 3)вывести значение суммы К. Поляков, 2006 -2011 S: = S+A[i] http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 19 Сумма выбранных элементов начало начать с 1 -ого пока ни одного не нашли S: = 0 i: = 1 i <= N? нет конец да A[i] > 0? нет i: = i + 1 К. Поляков, 2006 -2011 да нашли еще 1 S: = S + A[i] перейти к следующему http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 20 Сумма выбранных элементов program qq; var A: array [1. . 100] of integer; i, S: integer; Количество Begin элементов в массиве Readln(n); { здесь надо заполнить массив } S: = 0; перебираем все элементы массива for i: =1 to N do > S: = S + A[i]; if A[i] = 0 then count: = count + 1; writeln('Cумма полож. элементов: ', S); end. К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 21 Поиск в массиве Задача – найти в массиве элемент, равный X, или установить, что его нет. Пример: если в классе ученик с фамилией Пупкин? Алгоритм: 1)начать с 1 -ого элемента (i: =1) 2)если очередной элемент (A[i]) равен X, то закончить поиск иначе перейти к следующему элементу: К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 22 Поиск элемента, равного X начало начать с 1 -ого i: = 1 i <= N? нет ‘Не нашли’ да A[i] = X? нет i: = i + 1 К. Поляков, 2006 -2011 да ‘Есть!’ перейти к следующему конец ? Как найти номер? http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 23 Поиск элемента в массиве program qq; var a: array[1. . N] of integer; i, n, X: integer; Количество begin элементов в массиве Readln(n); { здесь надо заполнить массив } i: =1; while (i<=N) and (A[i]<>X) do A[i]<>X do i: =i+1; if i <= N then writeln('A[', i, ']=', X) else writeln('Не нашли. . . '); end. К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 24 Реверс массива Задача: переставить элементы массива в обратном порядке. 1 2 … N-1 N 3 5 … 9 7 Алгоритм: 1 2 … N-1 N 7 9 … 5 3 сумма индексов N+1 поменять местами A[1] и A[N], A[2] и A[N-1], … Псевдокод: for i: =1 to N do 2 do N div { поменять местами A[i] и A[N+1 -i] } К. Поляков, 2006 -2011 ? Что неверно? http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 25 Как переставить элементы? 2 Задача: поменять местами содержимое двух чашек. 3 1 Задача: поменять местами содержимое двух ячеек памяти. y x Можно ли обойтись без c? К. Поляков, 2006 -2011 6 4 2 1 ? 4 6 3 x : = y; y : = x; c : = x; x : = y; y : = c; ? 4 c http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 26 Программа program qq; var A: array[1. . N] of integer; i, n, c: integer; Begin Readln(n); { заполнить массив } { вывести исходный массив } for i: =1 to N div 2 do begin c: =A[i]; A[i]: =A[N+1 -i]; A[N+1 -i]: =c; end; { вывести полученный массив } end. К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru
Программирование на языке Паскаль. Часть II 27 Задачи: Выбрать любую из предложенных : 1. Найти сумму элементов массива с четными номерами, содержащего N элементов. Элементы вводятся с клавиатуры. 2. Сформировать и вывести на экран массив, элементы которого заданы датчиком случайных чисел на интервале [-19, 26] (размер произвольный). Найти произведение элементов с нечетными номерами. 3. Сформировать и вывести на экран массив, элементы которого заданы датчиком случайных чисел на интервале [-56, 47] (размер произвольный). Найти произведение элементов с четными номерами, которые превосходят некоторое число t. 4. Найти номер наименьшего элемента в массиве, заданного датчиком случайных чисел на интервале [-20, 25]. 5. В заданном одномерном массиве, состоящем из n целых чисел, подсчитать количество нулей. 6. В заданном одномерном массиве, состоящем из n целых чисел, подсчитать количество четных элементов. К. Поляков, 2006 -2011 http: //kpolyakov. narod. ru