Приветик всем! У меня небольшая проблемка - функция в проге должна находить сумму всех элементов матрицы, но выдает всегда 0 (может не те параметры ). Пож. помогите
program zadacha; uses crt; type mt=array [1..20,1..20] of real; var A,H:mt; K:array [1..20] of real; b:array [1..20] of integer; IM1:char; n1,m1:integer; ch, fl:char; regim: byte; formula: byte; sum: real; l: real; function sumelem(IM: char; Matr1: mt; n,m:integer):real; var i,j:integer; sum: real; begin writeln; sum:=0; begin for i:=1 to n do for j:=1 to m do sum:=sum+Matr1[i,j]; end; sumelem:=sum; end; . . . .
l:= sumelem (IM1, A, n1, m1); textcolor(green); write('Сумма всех элементов матрицы: ',l:8:2); textcolor(white); writeln; writeln; writeln ('Завершить работу программы?'); writeln (' Y -да;'); writeln (' N - нет.'); fl:=readkey; until (fl='Y') or (fl='y'); end.
заранее спасибо.
Айра
13.06.2008 21:38
хм.. интересно.. сейчас убрала все, что не относится к функции и добавила заполнение.. все считает:
program zadacha; const n1=2; n2=3; type mt=array [1..20,1..20] of real; var A,H:mt; i,j: integer; IM1:char; l: real; function sumelem(IM: char; Matr1: mt; n,m:integer):real; var i,j:integer; sum: real; begin writeln; sum:=0; for i:=1 to n do for j:=1 to m do sum:=sum+Matr1[i,j]; sumelem:=sum; end;
begin for i:=1 to n1 do begin for j:=1 to n2 do begin A[i,j]:=random(5); write('',A[i,j]:3 :2,' '); end; writeln; end;
l:= sumelem (IM1, A, n1, n2); write('Сумма всех элементов матрицы: ',l:8:2); end.
Возможно ошибка где-то в другом месте.. без полного кода угадать где она не могу..
добавлено: ребят, что-то с тегами не то, вот тут смайлик хочет отобразиться - write('',A[i,j]2,' ');
Alеx J'Root
13.06.2008 21:40
Покажи всю программу.
Интересно, как у тебя тут прога работает???
fl:=readkey; until (fl='Y') or (fl='y');
volvo
13.06.2008 22:03
Цитата(Айра @ 13.06.2008 17:38)
что-то с тегами не то, вот тут смайлик хочет отобразиться
Не позволяй
write('',A[i,j]:3 :2,' ');
Никаких смайлов, с точки зрения синтаксиса языка тоже нет ошибки ...
ship
13.06.2008 22:33
вот весь код.
program zadacha; uses crt; type mt=array [1..20,1..20] of real; var A,H:mt; K:array [1..20] of real; b:array [1..20] of integer; IM1:char; n1,m1:integer; ch, fl:char; regim: byte; formula: byte; sum: real; l: real; function sumelem(IM: char; Matr1: mt; n,m:integer):real; var i,j:integer; sum: real; begin writeln; sum:=0; begin for i:=1 to n do for j:=1 to m do sum:=sum+Matr1[i,j]; end; sumelem:=sum; end;
begin writeln; textcolor(yellow); writeln('‚введите размеры матрицы); writeln('n-строки, m-столбцы');
repeat write ('n='); {$i-} readln(n); Error:=IOResult; {$i+} if (n>20) or (n<2) or (Error<>0) then writeln('неверно!'); until (n<=20) and (n>=2) and (error=0); writeln;
repeat write('m='); {$i-} readln(m); Error:=IOResult; {$i+} if (m>20) or (m<2) or (Error<>0) then writeln('неверно!'); until (m<=20) and (m>=2) and (error=0); writeln;
for i:=1 to n do for j:=1 to m do begin repeat write('‚ўҐ¤ЁвҐ Matr1[',i,',',j,']='); {$i-} readln(Matr1[i,j]); Error:=IOResult; {$i+} if (Matr1[i,j]>=10000) or (Matr1[i,j]<=-10000) or (Error<>0) then writeln('ЋиЁЎЄ .Џ®ўв®аЁвҐ ўў®¤!'); until (Matr1[i,j]<=10000) and (Matr1[i,j]>=-10000) and (error=0); writeln; end; clrscr;
for i:=1 to n do begin for j:=1 to m do write(Matr1[i,j]:8:0,''); writeln; end;
case schet of 1: begin writeln; for j:=1 to m do begin b[j]:=0; for i:=1 to n do if Matr1[i,j]>0 then b[j]:=b[j]+1; end; textcolor(white); writeln; for j:=1 to m do writeln('‚ в столбце № ',j,' кол-во положит элементов: ',b[j]:4); writeln; end;
2: begin
writeln; for j:=1 to m do begin K[j]:=0; for i:=1 to n do if Matr1[i,j]>0 then K[j]:=K[j]+Matr1[i,j]; end; writeln('Сумма положит. элементов'); for j:=1 to m do write(K[j]:8:0); writeln; end;
3: begin writeln; writeln; for j:=1 to m do begin K[j]:=0; for i:=1 to n do if Matr1[i,j]>0 then K[j]:=K[j]+Matr1[i,j]; end;
for j:=1 to m do begin for i:=1 to n do if Matr1[i,j]<>0 then Matr2[i,j]:=K[j] / Matr1[i,j]; end; for i:=1 to n do begin for j:=1 to m do write(Matr2[i,j]:8:2,''); writeln; end; end; end;
case Form of
1: begin sum:=0; for i:=1 to n do for j:=1 to m do if i=j then sum:= sum + Matr1[i,j]; z:=sum; writeln; writeln ('сумма элементов главной диагонали:'); writeln (sum:8:2,' '); end;
2: begin writeln; max:=Matr1[1,1]; min:=Matr1[1,1]; for i:=1 to n do begin for j:=1 to m do if Matr1[i,j]>max then max:=Matr1[i,j]; if Matr1[i,j]<min then min:=Matr1[i,j]; pr:=max-min; z:=pr; end;
writeln ('Разница между максимумом и минимумом:',pr:8:2); end; end;
end;
begin clrscr; ch:=readkey; repeat clrscr; textcolor(yellow); writeln ('—Что вы хотите найти'); textcolor(white); writeln; writeln ('1 => кол-во полож. элем.;'); writeln; writeln ('2 => сумму полож. элем.;'); writeln; writeln ('3 => новую матрицу...');
readln (regim); writeln; textcolor(yellow); writeln ('Какой формулой хотите восп.?'); textcolor(white); writeln; writeln ('1 => суммы элем. главной диагонали;'); writeln; writeln ('2 => разница между макс. и миним..'); readln (formula);
PRC1 (IM1, A, n1, m1, regim, formula); l:= sumelem (IM1, A, n1, m1); textcolor(green); write('‘Сумма полож. элементов',l:8:2); textcolor(white); writeln; writeln; writeln ('завершить?'); writeln (' Y - да'); writeln (' N - нет.'); fl:=readkey; until (fl='Y') or (fl='y'); end.
у тебя матрица здесь параметр-значение, т.е. ты что-то делаешь с ней в процедуре, а когда выходишь из нее, ее значение все равно не меняется.. т.е. она у тебя остается забита нулями, поэтому и сумма = 0. Тебе нужно, чтоб матрица была параметр-переменная, т.е. var Matr1: mt. Насчет остальных переменных не знаю, может где-то еще такие ошибки проскочат..
Добавлено через 1 мин. еще.. зачем тебе im: char в функции подсчета суммы? оно там не используется же..
Добавлено через 3 мин. ага.. тоже самое происходит у тебя и с n1, m1.. после выхода из процедуры PRC1 их значения будут равны 0.. нужно var добавить..
ship
13.06.2008 22:59
Большое спасибо . Сейчас попробую исправить.
Вот так должно получиться???
function sumelem(IM: char; n,m:integer):real; var Matr1: mt; n1,m1:integer i,j:integer; sum: real; begin writeln; sum:=0; begin for i:=1 to n do for j:=1 to m do sum:=sum+Matr1[i,j]; end; sumelem:=sum; end;
Айра
13.06.2008 23:20
Нет функция, которая считает сумму у тебя правильная, только не знаю зачем в ней IM: char; Тебе нужно немного переделать PRC1. Вот:
procedure PRC1 (IM:char; var Matr1:mt; //теперь это параметр-переменная var n,m: integer; //и здесь так же schet: byte; Form: byte );
Добавлено через 6 мин. знаешь, у меня такой вопрос.. ты пробовал компилировать то, что написал?
Добавлено через 2 мин. и еще, sumelem у тебя считает сумму всех элементов матрицы, а ты когда выводишь, говоришь, что это сумма положительных.. в общем дорабатывай
volvo
13.06.2008 23:33
Цитата
знаешь, у меня такой вопрос.. ты пробовал компилировать то, что написал?
Встречный вопрос: пробовал, и что? Компилируется... И работает. Только считать будет всякий мусор, но компиляцию проходит успешно...
Айра
13.06.2008 23:35
у меня не компилируется О_о (я про всю программу)
Alеx J'Root
13.06.2008 23:35
2 Айра, ship - это девушка.
Айра
13.06.2008 23:51
Сорри..
ship
14.06.2008 20:33
procedure PRC1 (IM:char; var Matr1:mt; //теперь это параметр-переменная var n,m: integer; //и здесь так же schet: byte; Form: byte );
Айра, еще раз спасибо!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.