6 - Двумерные массивы
.pdfЛ. Р. |
Студент |
Иванов И. И. |
|
Группа |
ХХ-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 |