1 Программирование на языке Паскаль Обработка массивов
2 Реверс массива Задача: переставить элементы массива в обратном порядке. Алгоритм: поменять местами A[1] и A[N], A[2] и A[N-1], … Псевдокод: 35…97 79…53 12…N-1N 12… N for i:=1 to N do { поменять местами A[i] и A[N+1-i] } for i:=1 to N do { поменять местами A[i] и A[N+1-i] } сумма индексов N+1 Что неверно? ? N div 2 do
3 Как переставить элементы? Задача: поменять местами содержимое двух чашек. Задача: поменять местами содержимое двух ячеек памяти ? ? x y c c := x; x := y; y := c; c := x; x := y; y := c; x := y; y := x; x := y; y := x; Можно ли обойтись без c ? ?
4 Программа program qq; const N = 10; var A: array[1..N] of integer; i, c: integer; begin { заполнить массив } { вывести исходный массив } { вывести полученный массив } ReadLn end. program qq; const N = 10; var A: array[1..N] of integer; i, c: integer; begin { заполнить массив } { вывести исходный массив } { вывести полученный массив } ReadLn end. for i:=1 to N div 2 do begin c:=A[i]; A[i]:=A[N+1-i]; A[N+1-i]:=c; end; for i:=1 to N div 2 do begin c:=A[i]; A[i]:=A[N+1-i]; A[N+1-i]:=c; end;
5 Задания "4": Заполнить массив из 10 элементов случайными числами в интервале [ ] и выполнить инверсию отдельно для 1-ой и 2-ой половин массива. Пример: Исходный массив: Результат: "5": Заполнить массив из 12 элементов случайными числами в интервале [ ] и выполнить инверсию для каждой трети массива. Пример: Исходный массив: Результат:
6 Циклический сдвиг Задача: сдвинуть элементы массива влево на 1 ячейку, первый элемент становится на место последнего. Алгоритм: A[1]:=A[2]; A[2]:=A[3];… A[N-1]:=A[N]; Цикл: 3581… …N-1N 581…973 for i:=1 to N-1 do A[i]:=A[i+1]; for i:=1 to N-1 do A[i]:=A[i+1]; Что неверно? ? почему не N ?
7 Программа program qq; const N = 10; var A: array[1..N] of integer; i, c: integer; begin { заполнить массив } { вывести исходный массив } { вывести полученный массив } end; program qq; const N = 10; var A: array[1..N] of integer; i, c: integer; begin { заполнить массив } { вывести исходный массив } { вывести полученный массив } end; c := A[1]; for i:=1 to N-1 do A[i]:=A[i+1]; A[N] := c; c := A[1]; for i:=1 to N-1 do A[i]:=A[i+1]; A[N] := c;
8 Задания "4": Заполнить массив из 10 элементов случайными числами в интервале [ ] и выполнить циклический сдвиг ВПРАВО. Пример: Исходный массив: Результат: "5": Заполнить массив из 12 элементов случайными числами в интервале [ ] и выполнить циклический сдвиг ВПРАВО на 4 элемента. Пример: Исходный массив: Результат:
Сформировать одномерный массив из N элементов, где элементы и массива- целые случайные числа в пределах от 1 до 45. Напечатать элементы массива в прямом и обратном порядке. program prim1; uses crt; var i, n:integer; a:array[ ] 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 { Заполним массив случайными числами в диапазоне } 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 { Заполним массив случайными числами в диапазоне } 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.