1 Программирование на языке Паскаль Обработка массивов 2 Реверс массива Задача: переставить элементы массива в обратном порядке. 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 NN do div 2 do { поменять местами A[i] и A[N+1-i] } ? Что неверно? 3 Как переставить элементы? Задача: поменять местами содержимое двух чашек. 2 Задача: поменять местами содержимое двух ячеек памяти. y x x := y; y := x; ? c := x; x := y; y := c; 4 6 Можно ли обойтись без c? 2 ? 4 c 6 4 Программа program qq; const N = 10; var A: array[1..N] of integer; i, c: integer; begin { заполнить массив } { вывести исходный массив } for i:=1 to N div 2 do begin c:=A[i]; A[i]:=A[N+1-i]; A[N+1-i]:=c; end; { вывести полученный массив } ReadLn end. 4 5 Задания "4": Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и выполнить инверсию отдельно для 1-ой и 2-ой половин массива. Пример: Исходный массив: 4 -5 3 10 -4 -6 8 -10 1 0 Результат: -4 10 3 -5 4 0 1 -10 8 -6 "5": Заполнить массив из 12 элементов случайными числами в интервале [-12..12] и выполнить инверсию для каждой трети массива. Пример: Исходный массив: 4 -5 3 10 -4 Результат: 10 3 -5 4 -10 -6 8 8 -10 -6 -4 1 0 5 7 7 5 0 1 6 Циклический сдвиг Задача: сдвинуть элементы массива влево на 1 ячейку, первый элемент становится на место последнего. 1 2 3 4 … N-1 N 3 5 8 1 … 9 7 5 8 1 … 9 7 3 Алгоритм: A[1]:=A[2]; A[2]:=A[3];… A[N-1]:=A[N]; Цикл: почему не N? for i:=1 to N-1 do A[i]:=A[i+1]; ? Что неверно? Программа program qq; const N = 10; var A: array[1..N] of integer; i, c: integer; begin { заполнить массив } { вывести исходный массив } c := A[1]; for i:=1 to N-1 do A[i]:=A[i+1]; A[N] := c; { вывести полученный массив } end; 7 8 Задания "4": Заполнить массив из 10 элементов случайными числами в интервале [-10..10] и выполнить циклический сдвиг ВПРАВО. Пример: Исходный массив: 4 -5 3 10 -4 -6 8 -10 1 0 Результат: 0 4 -5 3 10 -4 -6 8 -10 1 "5": Заполнить массив из 12 элементов случайными числами в интервале [-12..12] и выполнить циклический сдвиг ВПРАВО на 4 элемента. Пример: Исходный массив: 4 -5 3 10 -4 Результат: -4 -6 8 -10 1 -6 0 8 -10 1 0 5 7 5 4 -5 3 10 7 Сформировать одномерный массив из N элементов, где элементы и массива- целые случайные числа в пределах от 1 до 45. Напечатать элементы массива в прямом и обратном порядке. Вычисление суммы положительных элементов массива • • program prim1; uses crt; var i, n:integer; a:array[1..10000] of integer; begin clrscr; randomize; write(' размер =' );readln(n); for i:=1 to n do begin {Получаем случайные числа в пределах от 1 до 45.} a[i]:=random(46))+1; {Выводим элементы массива на экран.} write(a[i], ‘ ' ); end; writeln(‘ ' ); {Полученный массив печатаем в обратном порядке.} for i:=n downto 1 do write(a[i],' '); readkey; end. • program PositivSumm; const N=10; type Mas=array [1..N] of integer; var a: Mas; i: integer; { Счетчик цикла} S:integer; { Копилка - переменная для суммирования положительных элементов} begin { Заполним массив случайными числами в диапазоне -100..+100 } randomize; for i:=1 to N do begin a[i]:=-100+random(201); write(a[i]:5) end; writeln; { Присвоим переменным начальные значения } S:=0; { Переменная S - аккумулятор. Она будет накапливать сумму всех положительных элементов. Нужно присвоить ей такое начальное значение, чтобы оно не повлияло на результат суммирования. Таким числом является ноль } for i:=1 to N do { Перебираем все элементы массива } if A[i]>0 then { Проверяем каждый элемент на положительность } S:=S+A[i]; { Если элемент положительный, добавляем значение элемента к аккумулятору } { Выводим результат на экран: } writeln('Сумма положительных элементов =',S); readln end. Вычисление суммы положительных элементов массива • program PositivSumm; const N=10; type Mas=array [1..N] of integer; var a: Mas; i: integer; { Счетчик цикла} S:integer; { Копилка - переменная для суммирования положительных элементов} begin { Заполним массив случайными числами в диапазоне -100..+100 } randomize; for i:=1 to N do begin a[i]:=-100+random(201); write(a[i]:5) end; writeln; { Присвоим переменным начальные значения } S:=0; { Переменная S - аккумулятор. Она будет накапливать сумму всех положительных элементов. Нужно присвоить ей такое начальное значение, чтобы оно не повлияло на результат суммирования. Таким числом является ноль } for i:=1 to N do { Перебираем все элементы массива } if A[i]>0 then { Проверяем каждый элемент на положительность } S:=S+A[i]; { Если элемент положительный, добавляем значение элемента к аккумулятору } { Выводим результат на экран: } writeln('Сумма положительных элементов =',S); readln end.