Язык программирования Паскаль (версия PascalABC.NET)
Массивы в языке программирования Pascal
Массив – совокупность пронумерованных величин одного типа, объединённых одним именем.
Индекс – порядковый номер элемента в массиве.
Каждый элемент массива обозначается индексированным именем :
Имя[индекс]
Например:
A[1] – первый элемент массива A.
Массивы бывают одномерные ( линейные ) и двумерные ( прямоугольные ).
Одномерный (линейный) массив A
i →
A[i]
1
2
-5
3
-3
4
-6
-1
5
6
0
4
7
2
8
3
9
10
-1
-3
i – номер элемента
A[1]=-5; A[2]=-3; . . . A[10]=-3
Двумерный (прямоугольный) массив B
i – номер строки
j – номер столбца
B[i,j]
i ↓
1
j →
2
1
0
2
3
-1
1
3
-2
0
4
2
-1
1
-3
0
-2
-4
B[1,3]=-2
B[3,1]= 2
Описание массивов
Необходимо указать имя, диапазон изменения индексов, тип.
Var : array [N..K] of ;
N – первый индекс
K – последний индекс
Например:
var A: array [ 1..10 ] of real ;
B: array [ 1..3 , 1..4 ] of integer ;
Первый и последний индексы могут быть описаны как константы (легче модифицировать программу):
const N = 5 ;
var A: array [ 1. .N] of integer ;
Вывод линейного массива на экран
for i:= 1 to 10 do //перебор индексов
write(A[i], ' ' ); //вывод через пробел
for i:= 1 to 10 do //перебор индексов
write(A[i]:5); //вывод по 5 позиций
Заполнение массивов
1 способ. Ввод с клавиатуры (при небольшом количестве элементов)
for i:= 1 to 5 do //перебор индексов
read (A[i]); //ввод значения
Значения вводятся через пробел, завершается ввод нажатием Enter.
Заполнение массивов
2 способ. Вычисление по формуле (функция от индекса)
for i:= 1 to 10 do //перебор индексов
A[i]:=i*i; //квадрат индекса
Заполнение массивов
3 способ. Заполнение случайными числами
- Функция Random(x) создаёт случайное целое число в диапазоне от 0 до x-1 .
- Для получения случайного целого числа в диапазоне [A, B] используется выражение: Random(B-A+1)+A .
for i:= 1 to 10 do //перебор индексов
A[i]:=random( 11 )- 5 ; //число от -5 до 5
Заполнение массивов
4 способ. Описание массива как константы (элементы массива нельзя изменять)
const A: array [ 1..10 ]
of integer =(- 5 ,- 3 ,- 6 ,- 1 , 0 , 4 , 2 , 3 ,- 1 ,- 3 );
Задача 1
Определить средний балл 10 учеников, сдававших ЕГЭ по информатике.
Program Sred_ball;
Const n= 10 ;
Var a: array [ 1. .n] of integer ;
i, sum: integer ; sred: real ;
Begin
writeln( 'Введите оценки:' );
for i:= 1 to n do //перебор индексов от 1 до n
begin
write (i, ' оценка: ' ); //вывод номера элемента
readln (a[i]); //ввод i-го элемента
end ;
sum:= 0 ; //начальное значение суммы
for i:= 1 to n do //перебор индексов от 1 до n
sum:=sum+a[i]; //добавление элемента к сумме
sred:=sum/n; //среднее арифметическое
writeln ( 'Средний балл: ' , sred: 5 : 2 );
End .
0 then pol:=pol+ 1 ; //если положит., то +1 writeln( 'Количество положительных ' , pol); End . " width="640"
Задача 2
Подсчитать количество положительных значений функции y(x) = x 2 – x – 10 для x = 1; 2; 3;…; 20 .
Program Kol_Pol;
Const n= 20 ;
Var y: array [ 1. .n] of integer ;
x, pol: integer ;
Begin
writeln ( 'Данный массив:' );
for x:= 1 to n do //перебор индексов от 1 до n
begin
y[x]:=x*x-x- 10 ; //вычисление элемента массива
write(y[x]: 4 ); //вывод его на экран
end ;
writeln; //вывод со следующей строки
pol:= 0 ; //начальное значение счетчика
for x:= 1 to n do //перебор индексов от 1 до n
if y[x] 0 then pol:=pol+ 1 ; //если положит., то +1
writeln( 'Количество положительных ' , pol);
End .
Задача 3
Получить новый массив, каждый элемент которого противоположен по знаку соответствующим элементам исходного массива.
Program New_Mas;
Const n = 20 ;
Var a, b: array [ 1. .n] of integer ; i: integer ;
Begin
writeln ( 'Исходный массив' );
for i:= 1 to n do //перебор индексов от 1 до n
begin
a[i]:=random( 21 )- 10 ; //очередной элемент массива
write(a[i]: 4 ); //вывод элемента на экран
end ;
writeln; //вывод с новой строки
writeln ( 'Новый массив' );
for i:= 1 to n do //перебор индексов от 1 до n
begin
b[i]:=-a[i]; //противоположный по знаку
write(b[i]: 4 ); //вывод элемента на экран
end ;
End .
Задача 4
В таблице значений среднесуточной температуры за декаду месяца найти самый холодный день и указать его номер.
Program Min_temp;
Const n=10;
t: array [ 1..10 ] of integer =(3,5,6,4,2,9,7,5,4,7) ;
Var i, imin: integer ;
Begin
writeln ( 'Среднесуточная температура за декаду' );
for i:= 1 to n do //вывод массива на экран
write(t[i]: 4 );
writeln; //переход на новую строку
imin:= 1 ; //считаем 1-й минимальным
for i:= 2 to n do //перебор элементов от 2 до n
if t[i]then //если знач. меньше меньшего
imin:=i; //запоминаем текущий индекс
writeln( 'Минимальная температура ' , t[imin]);
writeln( 'День номер ' , imin);
End .
Обработка двумерных массивов
Для работы с элементами двумерного массива используются вложенные циклы .
T[i,j]
j →
1
4
3
2
i ↓
i
1
j
1
2
3
2
4
1
2
3
3
4
1
2
3
4
1
2
3
for i:= 1 to 3 do begin //перебор строк
for j:= 1 to 4 do begin //перебор столбцов
T[i,j]:=i*j; //вычисление элемента
write(T[i,j]: 3 ); //вывод на экран
end ; //конец цикла по столбцам
writeln; //переход на новую строку
end ; //конец цикла по строкам
Обработка двумерных массивов
T[i,j]
Для работы с элементами двумерного массива используются вложенные циклы .
j →
3
4
1
2
i ↓
4
2
3
i
j
1
1
2
3
2
4
1
2
3
4
3
1
2
3
4
1
1
2
3
for i:= 1 to 3 do begin //перебор строк
for j:= 1 to 4 do begin //перебор столбцов
T[i,j]:=i*j; //вычисление элемента
write(T[i,j]: 3 ); //вывод на экран
end ; //конец цикла по столбцам
writeln; //переход на новую строку
end ; //конец цикла по строкам
Обработка двумерных массивов
T[i,j]
Для работы с элементами двумерного массива используются вложенные циклы .
j →
1
2
3
4
i ↓
2
3
4
i
1
j
1
2
3
4
2
1
2
3
4
3
1
2
3
4
1
1
2
4
6
8
2
3
for i:= 1 to 3 do begin //перебор строк
for j:= 1 to 4 do begin //перебор столбцов
T[i,j]:=i*j; //вычисление элемента
write(T[i,j]: 3 ); //вывод на экран
end ; //конец цикла по столбцам
writeln; //переход на новую строку
end ; //конец цикла по строкам
Обработка двумерных массивов
T[i,j]
Для работы с элементами двумерного массива используются вложенные циклы .
j →
2
4
3
1
i ↓
2
3
4
i
j
1
1
2
3
4
2
1
2
3
4
3
1
2
3
4
1
1
8
2
4
6
2
12
9
6
3
3
for i:= 1 to 3 do begin //перебор строк
for j:= 1 to 4 do begin //перебор столбцов
T[i,j]:=i*j; //вычисление элемента
write(T[i,j]: 3 ); //вывод на экран
end ; //конец цикла по столбцам
writeln; //переход на новую строку
end ; //конец цикла по строкам
Задача 5
Вывести на экран таблицу Пифагора, в которой каждый элемент равен произведению номера строки на номер столбца.
Program Pifagor;
Const k= 9 ; n= 9 ; //количество строк и столбцов
Var p: array [ 1. .k, 1. .n] of integer ;
i, j: integer ;
Begin
writeln ( 'Таблица Пифагора' );
for i:= 1 to k do begin //цикл по строкам
for j:= 1 to n do begin //цикл по столбцам
p[i,j]:=i*j; //вычисление элемента
write(p[i,j]: 4 ); //вывод на экран
end ; //конец цикла по столбцам
writeln; //переход на новую строку
end ; //конец цикла по строкам
End .
Задача 6
Вычислить среднее арифметическое элементов двумерного массива.
Program Mas2_sred;
Const k= 10 ; n= 10 ; //количество строк и столбцов
Var a: array [ 1. .k, 1. .n] of integer ;
i, j, s: integer ; sred: real ;
Begin
s:= 0 ; //начальное значение суммы
writeln ( 'Случайные элементы массива' );
for i:= 1 to K do begin //цикл по строкам
for j:= 1 to N do begin //цикл по столбцам
a[i,j]:=random( 100 ); //случайное число от 0 до 99
write(a[i,j]: 4 ); //вывод на экран
s:=s+a[i,j]; //накопление суммы
end ; //конец цикла по столбцам
writeln; //переход на новую строку
end ; //конец цикла по строкам
sred:=s/(N*K); //среднее арифметическое
writeln ( 'Среднее арифметическое ' , sred);
End .
Сортировка массива
Задача . Упорядочить массив в порядке возрастания значений его элементов.
Алгоритм сортировки методом обмена (метод «пузырька»)
Последовательно сравнить пары соседних чисел и при необходимости поменять их местами, и т.д. для каждой пары. За один проход самое большое число окажется на последнем месте. Затем повторить проход до элемента, уже находящегося на своем месте. И т. д.
Исходные значения
A[1]
1-й проход
A[2]
5
A[3]
4
2-й проход
A[4]
2
3-й проход
3
4-й проход
A[5]
1
Сортировка массива
Задача . Упорядочить массив в порядке возрастания значений его элементов.
Алгоритм сортировки методом обмена (метод «пузырька»)
Последовательно сравнить пары соседних чисел и при необходимости поменять их местами, и т.д. для каждой пары. За один проход самое большое число окажется на последнем месте. Затем повторить проход до элемента, уже находящегося на своем месте. И т. д.
Исходные значения
A[1]
1-й проход
A[2]
5
A[3]
4
2-й проход
3-й проход
A[4]
2
4-й проход
3
A[5]
1
4
2
3
1
5
Сортировка массива
Задача . Упорядочить массив в порядке возрастания значений его элементов.
Алгоритм сортировки методом обмена (метод «пузырька»)
Последовательно сравнить пары соседних чисел и при необходимости поменять их местами, и т.д. для каждой пары. За один проход самое большое число окажется на последнем месте. Затем повторить проход до элемента, уже находящегося на своем месте. И т. д.
Исходные значения
A[1]
1-й проход
A[2]
5
2-й проход
4
A[3]
2
A[4]
3-й проход
4-й проход
3
A[5]
1
2
3
1
4
5
5
4
2
3
1
Сортировка массива
Задача . Упорядочить массив в порядке возрастания значений его элементов.
Алгоритм сортировки методом обмена (метод «пузырька»)
Последовательно сравнить пары соседних чисел и при необходимости поменять их местами, и т.д. для каждой пары. За один проход самое большое число окажется на последнем месте. Затем повторить проход до элемента, уже находящегося на своем месте. И т. д.
Исходные значения
A[1]
1-й проход
A[2]
5
2-й проход
A[3]
4
A[4]
2
3-й проход
4-й проход
3
A[5]
1
1
4
3
2
5
4
2
1
3
5
4
2
3
1
5
Сортировка массива
Задача . Упорядочить массив в порядке возрастания значений его элементов.
Алгоритм сортировки методом обмена (метод «пузырька»)
Последовательно сравнить пары соседних чисел и при необходимости поменять их местами, и т.д. для каждой пары. За один проход самое большое число окажется на последнем месте. Затем повторить проход до элемента, уже находящегося на своем месте. И т. д.
Исходные значения
A[1]
1-й проход
A[2]
5
A[3]
4
2-й проход
A[4]
3-й проход
2
3
4-й проход
A[5]
1
1
3
4
2
5
4
2
3
1
5
4
2
1
3
5
4
2
3
1
5
Сортировка массива
Задача . Упорядочить массив в порядке возрастания значений его элементов.
Алгоритм сортировки методом обмена (метод «пузырька»)
Последовательно сравнить пары соседних чисел и при необходимости поменять их местами, и т.д. для каждой пары. За один проход самое большое число окажется на последнем месте. Затем повторить проход до элемента, уже находящегося на своем месте. И т. д.
Исходные значения
A[1]
1-й проход
A[2]
5
A[3]
4
2-й проход
A[4]
3-й проход
2
3
4-й проход
A[5]
1
1
3
4
2
5
4
2
3
1
5
4
2
1
3
5
4
2
1
3
5
M[i+ 1 ] then begin //если неупорядочены x:=M[i]; //то меняем местами M[i]:=M[i+ 1 ]; M[i+ 1 ]:=x end ; writeln ( 'Отсортированный массив' ); for i:= 1 to n do write(M[i]: 4 ); //вывод массива End . " width="640"
Сортировка массива
Program Sort;
Const n = 20 ;
Var M: array [ 1. .n] of integer ; i, k, x: integer ;
Begin
writeln ( 'Исходный массив' );
for i:= 1 to n do begin //заполнение массива
M[i]:=random( 50 )+ 1 ; //случайными числами
write(M[i]: 4 ); //от 1 до 50
end ;
writeln; //вывод с новой строки
for k:= 1 to n- 1 do //номер прохода
for i:= 1 to n-k do //просмотр за 1 проход
if M[i]M[i+ 1 ] then begin //если неупорядочены
x:=M[i]; //то меняем местами
M[i]:=M[i+ 1 ];
M[i+ 1 ]:=x
end ;
writeln ( 'Отсортированный массив' );
for i:= 1 to n do write(M[i]: 4 ); //вывод массива
End .