Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика (Delphi) (3 семестр) / лк2_3Алгоритмы на матрицах.ppt
Скачиваний:
7
Добавлен:
31.03.2015
Размер:
118.27 Кб
Скачать

АЛГОРИТМЫ НА МАТРИЦАХ

 

 

 

 

Столбец

 

 

 

 

 

- k

 

 

 

 

 

 

A11

A12

...

A

 

1k

... A1n

 

 

 

 

 

 

 

 

 

A21

A22

...

A2k

... A2n

 

 

 

 

A31

A32

...

A3k

... A3n

... ... ...

...

... ...

 

Строка-

 

i

 

Ai1

Ai2 ...

Aik

... Ain

 

 

 

 

 

 

... ... ...

...

... ...

 

 

 

 

 

 

 

Am1

Am2 ...

Amk

... Amn

МАССИВЫ В ПРОГРАММЕ

ОПИСАНИЕ

ОБРАЩЕНИЕ К

 

 

 

 

ЭЛЕМЕНТУ

Паскаль

 

 

 

МАССИВА

 

 

 

Паскаль

 

границы - только

 

 

 

константы

 

 

 

 

 

 

 

Имя: array[нг1..вг1]…[нгN.. вгN]of тип имя[индекс_1,…,индекс_N]

индекс_i - целое выражение, индекс_i = нг, нг+1…,вг

ДВУМЕРНЫЕ МАССИВЫ ПАСКАЛЬ-ПРОГРАММЕ

Пример.

B:array [1..3,1..5]of integer;

b[1][1]

b[1][1] ... b[1][5]

 

b[2][1]

b[2][2] ... b[2][5]

Первый индекс - номер

 

 

 

 

b[3][1]

b[3][2] ... b[3][5]

строки, второй - столбца

В памяти компьютера элементы массива расположены по строкам (чаще меняется последний индекс)

Задача. По итоговой экзаменационной ведомости

вычислить средний балл каждого студента и число

отличников.

Предметы

 

N 30, M 5

 

С

т

у

д

е

н

т

ы

 

Состав данных

Имя

Смысл

Тип

 

Исходные данные

N

число студентов

целый

M

число предметов

целый

A

матрица-ведомость

вещественный

 

Выходные данные

B

средний балл каждого студента

вещественный

К

число отличников

целый

 

Промежуточные переменные

i

номер строки (студента)

целый

j

номер строки (предмета)

целый

Структура

простая переменная

простая переменная двумерный массив 30*5

простая переменная простая переменная

простая переменная простая переменная

Форма ввода

Input N,M

 

<N> <M>

 

Input matrix <N>*<M>

 

<A[1][1]> < A[1][2]>…

<A[1][M]>

 

<A[N][1]> < A[N][2]>…

<A[N][M]>

Форма вывода

i

B

<i>

<B>} N раз

K=<K>

1начало

2ввод N,M,{A[i,j]}

3 K:=0

4i:=1

NM i 1 j 1

6

7

в теле цикла имеется циклполучаем цикл

кратности 2

5

i N+

 

 

 

 

 

 

вычисление B

 

 

 

вывод i,B

 

 

 

8

+

 

 

B=5

 

 

 

 

9

K:=K+1

10

i:=i+1

 

 

11вывод K начало

Блок 6. Вычисление среднего балла

5

B:=0

j:=1

j M

+

B:=B+A[i,j]

j:=j+1

B:=B/M

7

Program sr_ball;

 

 

Var N,M,K,i, j:integer;

real; B:real;

A: array[1..30,1..5] of

Begin

 

 

 

 

writeln(´Input N, M´);

 

readln(N,M);

 

 

writeln(´Input matrix ´,N,´*´,M);

for i:=1 to N do

 

 

for j:=1 to M do

 

 

read(A[i,j]);

 

readln;{закончен ввод}

K:=0;

 

i

B´); {вывод “шапки” таблицы}

writeln(´

for i:=1 to N do {перебор строк – студентов}

begin

 

 

 

B:=0;

 

 

 

for j:=1 to M do {движение по строке – перебор предметов}

 

B:=B+A[i,j];

 

B:=B/M; {вычислили средний балл}

writeln(´

´,i,´

´, B:4:2);

if

abs(B-5)<1.0e-7 then

end;

K:=K+1;

 

 

writeln(´

K=´,K);

 

readln

 

 

 

 

End.

 

 

 

 

Задача. Для каждой строки матрицы найти минимальное значение элементов

Состав данных

Имя

Смысл

Тип

Структура

 

Исходные данные

 

N

число строк

целый

простая переменная

M

число столбцов

целый

простая переменная

A

заданная матрица

вещественный

двумерный массив

 

Выходные данные

10*10

 

 

min

минимальное значение

вещественный

одномерный массив

 

элементов строки

 

из 10 элементов

 

Промежуточные переменные

 

 

i

номер строки

целый

простая переменная

j

номер строки

целый

простая переменная

 

 

 

 

 

 

 

 

 

начало

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Program min_strok;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ввод N,M,{A[i,j]}

N M

 

 

 

 

Var N,M, i,j:integer;

 

 

 

 

 

 

 

i 1 j 1

 

 

 

 

A:array[1..10,1..10] of real;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

min:array[1..10] of real;

 

 

 

 

 

 

 

 

 

 

 

i:=1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

Begin

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

writeln (´Input N, M´);

 

 

 

 

 

 

 

 

 

 

 

 

i≤N

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

readln (N, M);

 

 

 

 

 

 

 

 

 

 

 

 

да

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

writeln(´Input matrix ´,N,´*´,M);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

min[i]=A[i,1]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for i:=1 to N do

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for j:=1 to M do

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

j:=2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

read(A[i,j]);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

readln; {закончен ввод}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

j≤M

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for i:=1 to N do

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

begin

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

 

 

да

 

 

 

 

min[i]=A[i,1];

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for j:=2 to M do

 

 

 

 

 

 

 

 

 

 

 

a[i]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[j]<min[i]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

if

A[i,j]<min[i] then

 

 

 

 

 

 

 

 

 

 

 

 

min[i]:=a[i,j]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

end;

min[i]=a[i,j];

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

j:=j+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

writeln(´ Results´);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Цикл в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for i:=1 to N do

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

write(min[i]:8:2,´ ´);

 

цикле -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i:=i+1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

writeln;

 

 

кратный

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

readln

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вывод K

 

 

 

 

 

 

 

 

 

 

 

 

 

 

End.

 

 

цикл

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

конец