Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.10.2011, 17:17   #1
*cash*
Пользователь
 
Регистрация: 15.04.2011
Сообщений: 25
По умолчанию Задача с массивом

Суть задачи: Дана прямоугольная матрица. Найти строку с наибольшей и наименьшей суммой элементов. Вывести на печать найденные строки и суммы их элементов.

Я написал программу, все работает, но возникает одна ошибка.
После заполнения массива, когда мы возвращаемся в основное тело программы, у меня почему то само по себе меняется b и естественно потом он все считает с ошибкой ((( Помогите разобраться
Код:
program massivi81;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type matr=array[2..22,2..22] of integer;

procedure razmernost(out a:integer);
begin
a:=random(20)+2;
end;

procedure zapolnenie_matr (a,b:integer; var m:matr);
var i,i2:byte;
  begin
  writeln (a,'&&&',b);
    for I:=1 to a do //цикл для перебора всех строк
        for I2:=1 to b do //цикл для перебора всех элементов строки по столбцам
        begin
          m[i,i2]:=random(10);
        end;
        writeln (a,'***',b);
end;

procedure vyvod_matr (a,b:integer; var m:matr);
  var i,i2:byte;
  begin
  writeln (a,'!!!',b);
  for I := 1 to a do//цикл для перебора всех строк
  begin
  for I2:=1 to b do//цикл для перебора всех элементов строки по столбцам            -
  write (m[i,i2]:3);
  writeln;
  end;
  end;


procedure max_min  (a,b:integer; var m:matr);
var i,i2:byte; s, stroka1,stroka2, max, min: integer; p:boolean;
begin
max:=0;
 for I:=1 to a do //цикл для перебора всех строк
        begin
        s:=0;
        for I2:=1 to b do //цикл для перебора всех элементов строки по столбцам
        begin
        s:=s+m[i,i2];
        end;
        if s>max then begin max:=s; stroka1:=i; end;
        if p then begin min:=s; stroka2:=i; p:=false end;
        if s<min then begin min:=s; stroka2:=i; end;
        end;
        writeln;
        writeln ('max symma ',max, ', stroka ',stroka1);
        writeln ('min symma ',min,', stroka ',stroka2);
end;

var a,b:integer; m:matr;
begin
randomize;
razmernost(a);
razmernost(b);
writeln ('Razmernost matrizi [',a,',',b,']');
zapolnenie_matr(a,b,m);
writeln (a,'^^^',b);
vyvod_matr(a,b,m);
max_min(a,b,m);
readln;
end.
Причем если убрать процедуру razmernost
И заменить
Код:
  
var a,b:integer; m:matr;
begin
randomize;
razmernost(a);
razmernost(b);
на
Код:
var a,b:integer; m:matr;
begin
randomize;
a:=random(20)+2;
b:=random(20)+2;
то все работает нормально!

Последний раз редактировалось *cash*; 29.10.2011 в 17:33.
*cash* вне форума Ответить с цитированием
Старый 29.10.2011, 19:27   #2
Dush
Форумчанин
 
Регистрация: 29.09.2011
Сообщений: 116
По умолчанию

вместо out напишите var
Dush вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача с массивом. lammy Помощь студентам 2 22.12.2013 22:06
Задача с массивом Zalim Фриланс 8 27.09.2011 11:34
Задача с массивом st1ng3r Паскаль, Turbo Pascal, PascalABC.NET 1 06.06.2011 11:31
Задача с массивом AleNa666 Паскаль, Turbo Pascal, PascalABC.NET 1 27.04.2009 21:06
задача с массивом bonys91 Помощь студентам 4 01.04.2009 00:43