Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Informatika / 6 - Двумерные массивы

.pdf
Скачиваний:
35
Добавлен:
14.03.2016
Размер:
431.8 Кб
Скачать

Л. Р.

Студент

Иванов И. И.

Группа

ХХ-999

«Двумерные массивы»

 

 

Дата

дд.мм.гг

 

 

 

 

 

Допуск

 

 

 

 

 

Выполнение

 

 

 

 

 

Отчет

 

 

 

 

Условие задачи №1

Ввести двумерный массив A3×4 . Определить среднее геометрическое положительных чётных элементов, считая, что они в нём есть.

Тестовые примеры к задаче №1

1)

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

Исходный массив A:

3

4

25

8

 

 

 

 

2

1

7

11

 

 

 

 

12

4

7

9

 

 

 

 

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

В массиве всего 5 четных элементов, их произведение P = 4*8*2*12*4 = 3072

Среднее геометрическое равно SrG = 5 3072 = 4,98

2)

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

Исходный массив A:

13

4

5

8

 

 

 

 

12

11

17

14

 

 

 

 

10

41

16

91

 

 

 

 

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

В массиве всего 6 четных элементов, их произведение P = 4*8*12*14*10*16 = 860160

Среднее геометрическое равно SrG = 6 860160 = 9,75

1

Л. Г. Акулов, ВолгГТУ 2009

Блок-схема к задаче №1

Начало

i := 1 , 3

j := 1 , 4

Ввод A[i, j]

k := 0

1

i := 1 , 3

j := 1 , 4

(A[ i, j ] mod 2 = 0)

and (A[ i, j ]>0)

p := p*A[i,j]

k := k + 1

 

 

 

Srg := k p

p := 1

 

 

 

 

 

 

 

 

 

 

 

 

 

1

Вывод

k, p, SrG

Конец

Листинг программы на Pascal к задаче №1

program ABC;

var A:array[1..3,1..4] of integer; i,j,k: byte;

P,SrG:real; begin

cls;

//ручной ввод массива

writeLn('Вводим элементы массива A:'); for i:=1 to 3 do

for j:=1 to 4 do begin

write('A[',i,',',j,']=');

readLn(A[i,j]);

end;

k:=0;

P:=1;

for i:=1 to 3 do for j:=1 to 4 do

2

Л. Г. Акулов, ВолгГТУ 2009

if (A[i,j] mod 2=0) and (A[i,j]>0) then begin

p:=p*A[i,j];

k:=k+1;

end;

//вычисление среднего геометрического как корня k-й степени

//из произведения P, составленного из k сомножителей

SrG := exp((1/k)*ln(p)); writeLn('всего чётных элементов ', k); writeLn('их произведение ', p);

writeLn('среднее геометрическое ', SrG:8:2);

end.

Условие задачи №2

Ввести двумерный массив AN×M . Каждый положительный элемент

увеличить на произведение индексов этого элемента. Массив вывести до изменения и после.

Тестовые примеры к задаче №2

1)

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

N = 3 M = 3

 

3

4

 

2

 

 

 

Исходный массив A:

 

 

 

 

 

 

 

 

2

1

 

7

 

 

 

 

12

4

 

5

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

8

 

2

 

 

 

Полученный массив:

 

 

 

 

 

 

 

 

4

4

 

7

 

 

 

 

36

24

 

45

 

 

 

2)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

N = 3 M = 4

 

 

 

 

 

 

 

 

 

1

1

 

1

 

1

 

Исходный массив A:

 

 

 

 

 

 

 

1

1

 

1

 

1

 

 

1

1

 

1

 

1

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

2

 

3

 

4

 

Полученный массив:

 

 

 

 

 

 

 

2

4

 

6

 

8

 

 

3

6

 

9

 

12

 

 

 

 

 

 

 

 

 

 

3

Л. Г. Акулов, ВолгГТУ 2009

Блок-схема к задаче №2

Листинг программы на Pascal к задаче №2

program ABC; const Nmass=10;

var A:array[1..Nmass,1..Nmass] of integer; N,M,i,j: byte;

begin cls;

//ручной ввод массива

writeLn('Введите число элементов в массиве A'); readLn(N,M);

writeLn('Вводим элементы массива A:'); for i:=1 to N do

for j:=1 to M do begin

write('A[',i,',',j,']=');

 

4

Л. Г. Акулов, ВолгГТУ 2009

readLn(A[i,j]);

end;

//вывод массива до измененния

writeLn('Исходный массив A:'); for i:=1 to N do

begin

for j:=1 to M do write(A[i,j]:5);

writeLn;

end;

// умножение положительных элементов на произведение собственных индексов

for i:=1 to N do for j:=1 to M do

if A[i,j]>0 then A[i,j]:=A[i,j]*i*j;

//вывод массива поле измененния writeLn;

writeLn('массив A после изменения:'); for i:=1 to N do

begin

for j:=1 to M do write(A[i,j]:5);

writeLn;

end;

end.

Условие задачи №3

Ввести двумерный массив AN×M , вывести его. Определить k – номер

столбца, содержащего наибольшее количество положительных элементов. Далее найти максимум среди отрицательных элементов расположенных правее этого столбца и поменять его с первым элементом массива.

5

Л. Г. Акулов, ВолгГТУ 2009

Тестовые примеры к задаче №3

1)

 

 

 

 

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

 

 

N=4 M=5

массив A:

 

Исходный

-9

1

2

-3

-5

-2

0

-7

-5

-10

-6

7

-7

-1

1

-8

5

-4

-13

-8

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

больше всего положительных элементов в столбце номер 2 массив A после изменения:

-1

 

2

-3

-5

-9

-2

 

0

-7

-5

-10

-6

 

7

-7

 

1

1

-8

 

5

-4

-13

-8

6

Л. Г. Акулов, ВолгГТУ 2009

Блок-схема к задаче №3

Начало

Ввод N, M

i := 1 , N

j := 1 , M

Ввод A[i, j]

i := 1 , N

j := 1 , M

Вывод A[i, j]

Перевод

строки

1

 

1

 

Pmax:=0

 

i := 1 , N

 

A[ i, 1 ]>0

Pmax:= Pmax+1

 

 

k:=1

 

j := 2 , M

 

p:=0

 

i := 1 , N

 

A[ i, j ]>0

p := p+1

 

 

p > Pmax

Pmax := p

 

k := j

 

 

1

 

стр. 8

7

Л. Г. Акулов, ВолгГТУ 2009

2

1

 

 

 

 

стр. 7

 

i := 1 , N

 

 

 

вывод k

 

j := 1 , M

 

 

Вывод A[i, j]

k < M

 

 

‘Справа от

 

 

 

ZAMOK:=TRUE

найденного

 

столбца нет

Перевод

 

 

элементов’

строки

j := k+1 , M

 

 

 

Конец

i := 1 , N

 

 

 

 

A[i, j]<0

 

 

ZAMOK

 

Imax:=i;

A[i, j]>A[imax, jmax]

 

Jmax:=j

 

ZAMOK:=

Imax:=i;

 

Jmax:=j

 

FALSE

 

 

 

 

ZAMOK

 

‘Справа от

buf:=A[1,1]

 

найденного

 

 

столбца нет

 

 

отрицательных

A[1,1]:=A[Imax, Jmax]

 

элементов’

 

 

 

A[Imax, Jmax]:=buf

 

2

8

Л. Г. Акулов, ВолгГТУ 2009

Листинг программы на Pascal к задаче №3

program ABC; const Nmass=10;

var A:array[1..Nmass,1..Nmass] of integer; ZAMOK:boolean; N,M,i,j,k,Imax,Jmax,p,Pmax: byte; buf:integer;

begin cls;

//ручной ввод массива

writeLn('Введите число элементов в массиве A'); readLn(N,M);

writeLn('Вводим элементы массива A:'); for i:=1 to N do

for j:=1 to M do begin

write('A[',i,',',j,']=');

readLn(A[i,j]);

end;

//вывод массива до измененния

writeLn('Исходный массив A:'); for i:=1 to N do

begin

for j:=1 to M do write(A[i,j]:5);

writeLn;

end;

//определение столбца, в котором больше положительных элементов

//подсчёт положительных в первом столбце

Pmax:=0;

for i:=1 to N do if A[i,1]>0 then

Pmax:=Pmax+1;

//теперь, зная начальное значение Pmax,

//можем приступить к поиску максимума и

//k-номера столбца,

//содержащего наибольшее число положительных элементов k:=1;

for j:=2 to M do begin

p:=0;

for i:=1 to N do if A[i,j]>0 then

p:=p+1; if p>Pmax then

9

Л. Г. Акулов, ВолгГТУ 2009

begin Pmax:=p; k:=j;

end;

end;

writeLn('больше всего положительных элементов в столбце номер

', k);

// теперь ищем максимум среди отрицательных в столбцах справа от k-й

if k<M then begin

ZAMOK:=TRUE;

for j:=k+1 to M do for i:=1 to N do

if A[i,j]<0 then if ZAMOK then

begin Imax:=i; Jmax:=j;

ZAMOK:=FALSE; end

else

if A[i,j]>A[imax, jmax] then begin

Imax:=i;

Jmax:=j;

end; if ZAMOK then

writeLn('справа от найденного столбца нет отрицательных элементов')

else begin

buf:=A[1,1];

A[1,1]:=A[Imax,Jmax];

A[Imax,Jmax]:=buf;

end;

end else

writeLn('справа от найденного столбца нет элементов');

//вывод массива поле измененния writeLn;

writeLn('массив A после изменения:'); for i:=1 to N do

begin

for j:=1 to M do write(A[i,j]:5);

writeLn;

end;

end.

10

Л. Г. Акулов, ВолгГТУ 2009