Помощь - Поиск - Пользователи - Календарь
Полная версия: матрица
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
лоен
по идеи этот код должен находить минимальную сумму столбцов.
помогите исправить.
Const
     max=20;
type
 mat:array[1..max,1..max] of integer;
var 
 i,j,x,y,s:integer;
 min:longint;
procedure vvod_m;
 Begin
  Writeln('Введите мерность матрици');
  Write('i='); readln(i);
  Write('j='); readln(j);
  Writeln('Введите массив:');
  for x:=1 to i do
   for y:=1 to j do
   Begin
    write('a[',x,',',y,']=');
    readln(a[x,y]);
   End;
 End;
begin
 vvod_m;
 Min:=0;
 for y:=1 to j do
 begin 
  s:=0
  for x:=1 to i do
  begin
   s:=s+A[x,y];
   if s<min then min:=s;
  end;
 end;
writeln(‘Минимальная сумма=’, min);
readln;
end.



Добавлено через 15 мин.
не знаю еще как сумму задать. написал ноль. но это по умолчанию неверно.
Client
А ты где описываешь САМ массив (не как тип)?
Основная твоя ошибка здесь:
Min:=0; //А если все элементы положительные?
 for y:=1 to j do
 begin 
  s:=0
  for x:=1 to i do
  begin
   s:=s+A[x,y];
   if s<min then min:=s; //эту строчку надо вынести в верхний цикл
  end;
Вот что получилось:
uses crt;
Const
     max=20;
type
 mat=array[1..max,1..max] of integer;
var
 i,j,x,y,s:integer;
 min:longint;
 a:mat;
procedure vvod_m;
 Begin
  Writeln('size');
  Write('i='); readln(i);
  Write('j='); readln(j);
  Writeln('matrix:');
  for x:=1 to i do
   for y:=1 to j do
   Begin
    write('a[',x,',',y,']=');
    readln(a[x,y]);
   End;
 End;
begin
 clrscr;
 vvod_m;
 for x:=1 to i do begin
     for y:=1 to j do
         WRITE(a[x,y]:5);
     writeln
 end;
 Min:=0;
 for x:=1 to j do
     min:=min+a[x,1];

 for y:=1 to j do
 begin
  s:=0;
  for x:=1 to i do
   s:=s+A[x,y];
  if s<min then min:=s;
 end;
writeln(' MIN= ', min);
readln;
end.

лоен
спасибо.
лоен
проверил. почему-то не работает.
задаю матрицу вида:
1 2
3 4
5 6
говорит, что минимум 4 blink.gif
вроде ж ужо все красиво.
volvo
Индексы надо в порядок привести:
 Min:=0;
 for x:=1 to i do { <--- Число строк - это I, а не J }
     min:=min+a[x,1];
Хотя я бы вместо этого просто присвоил в Min какое-нибудь очень большое значение. Желательно - самое большое: MaxInt
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.