Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Двумерный Массив

Автор: forMator 23.09.2006 22:20

Не получается найти последние f столбцы и вычислить их среднее арифметическое. Размерность матрицы k на l.
Запутался в циклах!Последние f столбцы нашёл,а при вычислении среднего арифметического выдаётся неправильный ответ.

Автор: volvo 23.09.2006 22:26

Цитата
при вычислении среднего арифметического выдаётся неправильный ответ.
Код в студию...

Автор: forMator 23.09.2006 23:01

Код
Program primer;
const k=4;
const l=5;
Var M:array[1..k,1..l] of integer;
i,j,f,c:integer;
begin
for i:=1 to k do
for j:=1 to l do
begin
write('M[',i,',',',j,']=');
readln(M[i,j]);
end;
write('vvedi f poslednix ctolbcov=');
for i:=1 to k do
for c:=f to l do

а дальше загнался, хотя в голове заранее продумывал, вроде получалось....

Автор: volvo 23.09.2006 23:19

Ты меня, конечно извини, но здесь НИКАКОГО ответа не выдается, ибо что ты дальше делаешь - известно только тебе... Думай дальше, если не хочешь показывать весь код... Телепаты в отпуске.

Автор: forMator 23.09.2006 23:24

Ну хорошо,сможешь хотябы подсказать как найти среднее арифметическое последних столбцов в двумерном массиве..

Автор: klem4 24.09.2006 19:53

среднее арфиметическое последних f столбцов :

s := 0;
for i := 1 to RowCount do
for j := ColCount - f + 1 to ColCount do
s := s + x[i, j];
s := s / (RowCount * f);


RowCount - количество строк
ColCount - количество столбцов

Автор: forMator 24.09.2006 20:51

Код

Program primer;
Const k=3;l=3;
Var M:array[1..k,1..l] of integer;
i,j,s,f:integer;  sum:real;
begin
for i:=1 to k do
for j:=1 to l do
begin
write('M[',i,',',j,']=');
readln(M[i,j]);
end;
write('vvedi f=');read(f);
s:=0;
for i:=1 to k do
for j:=l-f+1 to l do
s:=M[i,j]+s;
sum:=s/(k*f);
readln;
writeln('crednee ariphmeticheckoe=',sum:3:2);
readln;
end.

Посидел помозговал, вот такое получилось..
Воспользовался советом, но не работает..
выдаёт не правильное среднее арифметическое..

Автор: мисс_граффити 25.09.2006 2:54

правильно.
просто у тебя выводится на экран построчно. то есть последние 3 числа, которые ты видишь - это не последний столбец, а последняя строка.

вставь такой фрагмент:

Код
for i:=1 to k do
begin
  for j:=1 to l do
    write(m[i,j], ' ');
  writeln;
end;

и сам все увидишь smile.gif

Автор: forMator 29.09.2006 19:53

Всем большое спасибо за помощь!!1

Автор: forMator 1.10.2006 21:27

А как сосчитать сумму первых p-элементов в двумерном массиве?

Автор: klem4 1.10.2006 22:14

Это зависит от того как ты собираешься идти по матрице. Сверху вниз справа на лево, а может быть по спирали из центра ? Гадать никто не собирается.

Автор: forMator 3.10.2006 20:24

Сверху вниз слева направо! Пробовал сам не получается!

Автор: volvo 3.10.2006 20:26

Цитата
Пробовал сам
Как пробовал, можно посмотреть?

Автор: klem4 3.10.2006 20:28

i := 1;
j := 1;
s := 0;

count := 0;

repeat

inc(count);

s := s + x[i, j];

if (j = m) then begin
inc(i);
j := 1;
end
else inc(j);

until (count = p) or (i > n);

Автор: forMator 3.10.2006 20:29

Конечно!

Код

Program Primer;
Const n=3;m=4;
Var X:array[1..n,1..m] of integer;
i,j,p,s:integer;
begin
s:=0;
writeln('vvod matrici');
for i:=1 to n do
begin
for j:=1 to m do read(X[i,j]);
readln;
end;
write('vvedi pervie p elementi=');
read(p);
for i:=1 to n do
for j:=1 to p do
s:=s+X[i,j];
writeln('summa pervix p elementov=',s);
readln;
end.

Автор: forMator 3.10.2006 21:13

А можно ещё вопрос??!!
Нужно поменять местами элементы к-го и р-го столбцов! Написал! А элементы программа меняет только в последней строке!

Код

Program ne;
Const n=3;l=4;
Var m:array[1..n,1..l] of integer;
i,j,k,p,c:integer;
begin
writeln('vvod matrici');
for i:=1 to n do
begin
for j:=1 to l do read(M[i,j]);
readln;
end;
write('vvedi k-i ctolbec=');
read(k);
write('vvedi p-i ctolbec=');
read(p);
c:=m[n,k];
m[n,k]:=m[n,p];
m[n,p]:=c;
for i:=1 to n do
begin
for j:=1 to l do
write(m[i,j],' ');
writeln;
readln;
end;
end.

Автор: мисс_граффити 3.10.2006 22:45

ты что-то с циклами и begin/end намудрил....

Код
c:=m[n,k];
m[n,k]:=m[n,p];
m[n,p]:=c;

это не внутри цикла. вот и выполняется один раз...

в первом у тебя неправильно пределы циклов расставлены.
она сумму не p элементов посчитает, а p*n элементов.

Автор: klem4 3.10.2006 22:46

forMator, Смотри пост №14 я открыл ...

Автор: forMator 4.10.2006 1:17

Большое СПАСИБО!!

Автор: forMator 9.10.2006 22:08

Пытаюсь решить задачу!Опять же с двумерном массивом!!
Дана квадратная матрица разм. n на n. Вычислить сумму элементов тех столбцов первый элемент которых равен 1!
Нужен ли здесь одномерный массив для вывода этих сумм? Или же можно обойтись и без него!!
И как можно посчитать сумму столбцов где 1, описывая через string что ли??? Я делаю через string, а TP мне сразу выдаёт ошибку!! Подскажите пожалуйста как найти эту сумму!!!!!

Код

Program lo;
Const n=5;
Var a:array[1..n,1..n] of integer;
b:array[1..n] of integer;
i,s:integer;j:string;
begin
writeln('vvod matrici');
for i:=1 to n do
begin
for j:=1 to n read(a[i,j]);
readln;
end;
if j='1' then begin
for i:=1 to n do begin
s:=0;
for i:=1 to n do begin s:=s+a[i,j];
end;
b[j]:=s;
end;
end;

Автор: volvo 9.10.2006 22:13

{ Цикл по столбцам ... }
for j := 1 to n do
if arr[1, j] = 1 then begin
s := 0;
{ Цикл по строкам }
for i := 1 to n do s := s + arr[i, j];
writeln('Столбец №', j:2, ' ; сумма = ', s);
end;

Автор: forMator 9.10.2006 22:15

СПАСИБО ОГРОМНОЕ!!