Помощь - Поиск - Пользователи - Календарь
Полная версия: Исправить процедуру
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
}0pa
Дана вот такая процедура, вычисляющая сумму положительных элементов каждой строки. Но необходимо избавиться от write(...) в этой процедуре.
Код
procedure summa (mx:PDynMatrix;c1:integer;c2:integer);
  var i,j, s:integer;
  begin
    for i:=1 to c1 do begin
    s:=0;
     writeln;
     for j:=1 to c2 do begin
      if  mx^[I]^[J]>0 then
       s:=s+mx^[I]^[J]
     end;
     write('Matrica А :summa polozhitelnih elementov ',i,'-oy stroki = ',s);
  end;
  writeln;
end;

А вывести нужно в самой основной программе для любой дин.матрицы.
что-то вроде
Код
procedure summa (mx:PDynMatrix;c1:integer;c2:integer;s:integer);
begin
.....
.....
....
end;
  begin
  summa(A,n,m,s1);
  write(s1);
  end.

Но так как там сумма динамическая, у меня возникли некоторые проблемы
мисс_граффити
а ты бы в основную программу что-нибудь возвращал...
сумму одной строки, например. а подпрограмму вызывал в цикле.
или вектор сумм.
}0pa
Я не могу понять, как это организовать нужно. Сумма динамическая. Нужно делать два цикла и процедуре и в основной программе? Помогите плиз. очень надо
volvo
Цитата
Сумма динамическая
Поясни... Что в твоем понимании динамическая сумма?

Вообще-то это извращение, делать подпрограмму, которая должна вернуть результат, процедурой. Функции в Паскале - не для красоты, кстати... Но если так нужно -

procedure summa (mx:PDynMatrix;c1:integer;c2:integer;VAR s:integer);
begin
...
end;
}0pa
Я понимаю, что немного некорректно выразился...В общем, эта процедура вычисляет сумму элементов каждой строки матрицы. Т.е. понятно, что нужно будет вызывать ее в цикле. Неужели в этом случае нельзя обойтись без циклов в каком-то месте (в подпрограмме или в осн.программе)?
Цитата
Вообще-то это извращение, делать подпрограмму, которая должна вернуть результат, процедурой. Функции в Паскале - не для красоты, кстати... Но если так нужно -
Я с тобой полностью согласен, но задание требует это "извращение".
Хотя, если получится с функцией, то фиг с ним.
volvo
Цитата
Т.е. понятно, что нужно будет вызывать ее в цикле
Это с чего ты решил?
Цитата
Неужели в этом случае нельзя обойтись без циклов в каком-то месте
Все можно...

procedure summa(mx: PDynMatrix; c1, c2: integer; var s: array of integer);
var i, j: integer;
begin
for i:=1 to c1 do begin
s[pred(i)] := 0;
for j := 1 to c2 do
if mx^[I]^[J]>0 then s[pred(i)]:=s[pred(i)]+mx^[I]^[J]
end;
end;

var
vec: array[1 .. 10] of integer;
begin
...
summa(a, n, m, vec);
{ Цикл - не для вычисления, а только чтобы распечатать результаты }
for i := 1 to n do
writeln('Сумма положительных элементов ', i, '-ой строки = ', vec[i]);
...
end.
}0pa
Весьма благодарен... good.gif
Malice
...
vec: array[1 .. 10] of integer;
for i:=1 to c1 do begin
s[pred(i)] := 0;
...
Неверное так не надо.
volvo
Malice, ты с открытыми массивами встречался? Индексация ВСЕГДА с нуля, им по барабану, как описана сама переменная... Хоть так:
Var
vec: array[-100 .. 199] of Integer;

хоть так
Var
vec: array[100 .. 400] of Integer;

- обращаться в процедуре все равно надо от 0 до 299...
Malice
Неа, не встречался, поэтому "наверное" и написал.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.