1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Приветик всем! У меня небольшая проблемка - функция в проге должна находить сумму всех элементов матрицы, но выдает всегда 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.
хм.. интересно.. сейчас убрала все, что не относится к функции и добавила заполнение.. все считает:
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,' ');
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 добавить..
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;
Нет функция, которая считает сумму у тебя правильная, только не знаю зачем в ней IM: char; Тебе нужно немного переделать PRC1. Вот:
procedure PRC1 (IM:char; var Matr1:mt; //теперь это параметр-переменная var n,m: integer; //и здесь так же schet: byte; Form: byte );
Добавлено через 6 мин. знаешь, у меня такой вопрос.. ты пробовал компилировать то, что написал?
Добавлено через 2 мин. и еще, sumelem у тебя считает сумму всех элементов матрицы, а ты когда выводишь, говоришь, что это сумма положительных.. в общем дорабатывай