Программирование на языке Паскаль

advertisement
1
Программирование
на языке Паскаль
Матрицы
2
Матрицы
Задача: запомнить положение фигур на шахматной доске.
1
a
b
c
2
d
e
f
3
g
4
h
5
6
1
2
3
4
5
6
7
8
8
8
0
0
0
0
2
0
0
0
7
7
0
0
0
0
0
0
0
0
6
6
0
0
3
0
0
0
0
0
5
5
0
0
0
0
0
0
0
0
4
0
0
0
0
4
0
3
3
0
0
0
0
0
0
0
0
2
2
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
4
c6
0 0
A[6,3]
3
Матрицы
Матрица – это прямоугольная таблица чисел.
Матрица – это массив, в котором каждый элемент имеет два
индекса (номер строки и номер столбца).
столбец 3
A
1
2
3
4
5
1
1
4
7
3
6
2
2
-5
0
15 10
3
8
9
строка 2
11 12 20
ячейка A[3,4]
4
Матрицы
Объявление:
const N = 3;
M = 4;
var A: array[1..N,1..M] of integer;
B: array[-3..0,-8..M] of integer;
Q: array['a'..'d',False..True] of real;
Ввод с клавиатуры:
?
Если переставить циклы?
j
i
for i:=1
j:=1 to N
M do
for j:=1
i:=1 to M
N do begin
write('A[',i,',',j,']=');
read ( A[i,j] );
end;
A[1,1]=
A[1,2]=
A[1,3]=
...
A[3,4]=
25
14
14
54
5
Матрицы
Заполнение случайными числами
?
цикл по строкам
Какой интервал?
for i:=1 to N do
цикл по столбцам
for j:=1 to M do
A[i,j] := random(25) - 10;
Вывод на экран
вывод строки
for i:=1 to N do begin
12 25
1 13
for j:=1 to M do
write ( A[i,j]:5 );
156
1 12 447
writeln;
1 456 222 23
end;
в той же строке
перейти на
новую строку
?
Если переставить циклы?
Обработка всех элементов матрицы
Задача: заполнить матрицу из 3 строк и 4 столбцов
случайными числами и вывести ее на экран. Найти
сумму элементов матрицы.
program qq;
const N = 3; M = 4;
var A: array[1..N,1..M] of integer;
i, j, S: integer;
begin
{ заполнение матрицы и вывод на экран}
S := 0;
for i:=1 to N do
for j:=1 to M do
S := S + A[i,j];
writeln('Сумма элементов матрицы ', S);
end;
6
Создание матрицы 5x4, вывод ее на экран по строкам
•
program Massiv_2;
const
N = 5; { Число строк }
M = 4; { Число столбцов }
var
Table : array [1..N, 1..М] of integer; { Заказываем область памяти для хранения двумерного массива из
N строк и М столбцов }
{ Вообще говоря, нигде не определено, что первый индекс - это номер строки, а второй - это номер
столбца. Так как выводом на экран занимается программист, он сам решает, как ему удобнее.
Нам удобнее считать, что номер строки - первый индекс, а номер столбца - второй }
i, j : integer; { Переменные для хранения индексов строки и столбца }
begin
{ Заполнение массива датчиком случайных чисел;}
randomize;
for i:=1 to N do
for j:=l to M do
Table[i, j]:=Random(100); { Запись случайного числа в массив на место с номером строки i и номером
столбца j }
{ Вывод матрицы на экран по строкам; }
for i:=1 to N do
begin
for j:=1 to M do
write(Table[i, j]);
writeln { Переход на новую строку после вывода всех элементов строки i }
end;
readln
end.
Найти максимальный элемент каждой строки массива и его индексы (всего массива и его
индексы).
•
{Так как элементы могут повторяться, то договоримся, что будем запоминать только индексы первого
максимального элемента.}
program prim2;
uses crt;
type mas=array[1..100,1..100] of integer;
var a:mas;
i,j,n: integer;
max,min,i1,j1,i2,j2:integer;
begin
clrscr;
randomize;
write('n=');readln(n);
for i:=1 to n do
begin
{Так как тип массива integer, то за начальные значения возьмем.}
max: =-32 768;
for j:=1 to n do
begin
{Получаем случайные значения элементов матрицы.}
a[i,j]:=random(45)-22;
{Выводим элементы матрицы на экран.}
write(a[i,j]:4);
{Находим максимальный элемент в каждой строке и его индексы.}
if a[i,j]>max then
begin
max:=a[i,j];i1 :=i; j1 :=j;
end;
end;
{Печатаем максимальный элемент в каждой строке и его индекс.}
write (' max=', max, ' строка=',i1,' столбец =',j1);
writeln;
end;
readln;
end.
{Для нахождения максимального элемента всего массива необходимо:
- перенести начальный максимум на одну строку выше;
- перенести печать максимального элемента на две строки вниз.}
•
Найти сумму всех элементов
двумерного массива и сумму элементов
каждой строки.
•
program prim J;
uses crt;
type mas=array[1..100, 1..100] of integer;
var a:mas;
i,j,n,s,sl :integer;
begin
clrscr;
randomize;
write('n=');readln(n);
for i:=1 to n do
begin
for j:=1 to n do
begin
{Получаем случайные значения элементов
матрицы.}
a[i,j]=random(45)-22;
write(a[i,j]:4);
{Находим сумму элементов.}
s:=s+a[i,j]; sl:=sl+a[i,j];
end;
{Печатаем сумму всех элементов каждой
строки и обнуляем значение суммы.}
writeln('сумма строки =',s);s:=0;
writeln;
end;
writeln('сумма всех элем. sl=',sl);
readln;
end.
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
var a:array [1..5,1..8] of integer;
x,y,x1,y1:integer;
begin
randomize;
x1:=1;y1:=1;
for x:=1 to 5 do
begin writeln;
for y:=1 to 8 do
begin
a[x,y]:=random(20)-10;
write(a[x,y]:3,' ');
end;
end;
writeln;
for x:=1 to 5 do
for y:=1 to 8 do
if a[x1,y1]<a[x,y] then begin x1:=x; y1:=y;
end;
writeln('MAX a[',x1,',',y1,']=',a[x1,y1]);
x1:=1;y1:=1;
for x:=1 to 5 do
for y:=1 to 8 do
if a[x1,y1]>a[x,y] then begin x1:=x; y1:=y;
end;
writeln('MIN a[',x1,',',y1,']=',a[x1,y1]);
readln;
end.
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
var a:array [1..5,1..8] of integer;
b,c,d,x,y,x1,y1:integer;
begin
randomize;
x1:=1;y1:=1;
for x:=1 to 5 do
begin writeln;
for y:=1 to 8 do
begin
a[x,y]:=random(20)-10;
write(a[x,y]:3,' ');
end;
end;
writeln;
for x:=1 to 5 do
for y:=1 to 8 do
if a[x1,y1]<a[x,y] then begin x1:=x; y1:=y;
end;
writeln('MAX a[',x1,',',y1,']=',a[x1,y1]);
x1:=1;y1:=1;
for x:=1 to 5 do
for y:=1 to 8 do
if a[x1,y1]>a[x,y] then begin x1:=x; y1:=y;
end;
writeln('MIN a[',x1,',',y1,']=',a[x1,y1]);
end.
Поменять местами строки с номерами К1 и К2.
•
program prim4;
uses art;
type mas=array[1..100,1..100] of integer;
var a:mas;
i,j,n,k1,k2,r: integer;
begin
clrscr;
randomize;
write('n=');readln(n);
{Создаем и распечатываем двумерный массив.}
for i:=1 to n do
begin
for j:=1 to n do
begin
a[i,j]:=random(45)-22;
write(a[i,j]:4);
end;
writeln;
end;
{Вводим номера строк, которые будем менять местами.}
write('stroki k1=k2=');readln(k1,k2);
{Меняем значения К1 и К2 строк между собой.}
for j:=1 to n do
begin
r:= a[k1,j];a[k1,j]:=:=a[k2,j];
a[k2,j]:=r;
end;
{Распечатаем измененный массив.}
for i:=1 to n do
begin
for j:=1 to n do
begin
write(a[i,j]:4);
end;
writeln;
end;
readln;
end.
12
Задания
Заполнить матрицу из 8 строк и 5 столбцов случайными
числами в интервале [-10,10] и вывести ее на экран.
"4": Найти минимальный и максимальный элементы в матрице
их номера. Формат вывода:
Минимальный элемент
A[3,4]=-6
Максимальный элемент A[2,2]=10
"5": Вывести на экран строку, сумма элементов которой
максимальна. Формат вывода:
Строка 2:
3
5
8
9
8
Операции с матрицами
Задача 1. Вывести на экран главную диагональ квадратной
матрицы из N строк и N столбцов.
A[1,1]
A[2,2]
A[3,3]
for i:=1 to N do
write ( A[i,i]:5 );
A[N,N]
Задача 2. Вывести на экран вторую диагональ.
A[1,N]
A[2,N-1]
A[N-1,2]
A[N,1]
сумма номеров строки и столбца N+1
for i:=1 to N do
write ( A[i, N+1-i ]:5 );
13
14
Операции с матрицами
Задача 3. Найти сумму элементов, стоящих на главной
диагонали и ниже ее.
?
Одиночный цикл или вложенный?
строка 1: A[1,1]
строка 2: A[2,1]+A[2,2]
...
строка N: A[N,1]+A[N,2]+...+A[N,N]
S := 0;
for i:= 1 to N do
for j:= 1 to i do
S := S + A[i,j];
цикл по всем строкам
складываем нужные
элементы строки i
Операции с матрицами
Задача 4. Перестановка строк или столбцов. В матрице из N
строк и M столбцов переставить 2-ую и 4-ую строки.
j
A[2,j]
2
1
2
5
2
1
4
7
3
1
3
7
A[4,j]
for j:=1 to M do begin
c := A[2,j];
A[2,j] := A[4,j];
A[4,j] := c;
end;
Задача 5. К третьему столбцу добавить шестой.
for i:=1 to N do
A[i,3] := A[i,3] + A[i,6];
15
16
Задания
Заполнить матрицу из 7 строк и 7 столбцов случайными
числами в интервале [-10,10] и вывести ее на экран. Обнулить
элементы, отмеченные зеленым фоном, и вывести полученную
матрицу на экран.
"4":
"5":
Download