Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] Матрица.Умножение 1й строки на столбец


Автор: InviZible 26.1.2007, 14:24
В чем ошибка? Функция возвращает неверный результат

Код

program spr2;
uses crt;
const n=3;
type matr=array[1..n,1..n] of integer;
function spr(m:matr;n:integer):integer;
var i,j,k,min,sum,stl:integer;
begin
 min:=m[1,1];
 for i:=1 to n do
  for j:=1 to n do begin
   if (m[i,j]<min) then begin
    min:=m[i,j];
    stl:=j;
   end;
  end;
 sum:=0;
 for k:=1 to n do begin
  sum:=sum+m[1,k]*m[k,stl];
 end;

 writeln(sum);
end;
var
 m:matr;
 i,j:integer;
begin
 clrscr;
 for i:=1 to n do
  for j:=1 to n do
   read(m[i,j]);
 readln;
 spr(m,n);
 readln;
end.


Автор: Rodman 26.1.2007, 14:50
ты пошагово пробовал??? то что надо он берет???

Автор: InviZible 26.1.2007, 14:58
минимальный находит правильно, столбец тоже правильно, а вот сумма выдаётся не верно

Автор: Strannik 26.1.2007, 15:04
Попробуй инициализировать переменную stl...
Код

stl:=1

Может ещё баги есть, но это точно у тебя глюк. 

Автор: Shadowlord 26.1.2007, 16:14
При поиске минимума  первый раз сравнивается один и тот же элемент начни  цикл с 2 (for j:=2 to n do)
Я не множ ко не понял у тебя есть функция а в основной программе ты ее вызываешь как процедуру
Код

function spr(m:matr;n:integer):integer;
...
spr(m,n);
...

Но если  расмотреть это как процедуру то 
Код

procedure spr (stl:integer; m:mart: n:integer;);
begin
...
end;
...
spr(m,n);
...

Есть еще другой вариант, если хочется через функцию
Код

function spr(m:matr;n:integer):integer;
var i,j,k,min,sum,stl:integer;
begin
 min:=m[1,1];
 for i:=1 to n do
  for j:=2 to n do begin
   if (m[i,j]<min) then begin
    min:=m[i,j];
    stl:=j;
   end;
  end;
 spr:=0;
 for k:=1 to n do begin
  spr:=spr+m[1,k]*m[k,stl];
 end;

begin
....
writeln(spr(m,n));
...


Автор: Strannik 26.1.2007, 16:57
Shadowlord, не путай человека... Проблема не в этом... то что у него написано  - неаккуратно, но вроде работает (если учесть мой предыдущий пост)

Автор: Shadowlord 26.1.2007, 23:10
аккуратность тут вобще не причем, тут идет различие между функцией и процедурой это разные вещи и не стоит их путать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)