Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.10.2011, 17:13
cash cash вне форума
Прохожий
 
Регистрация: 15.03.2011
Сообщения: 35
Репутация: 10
По умолчанию Задача с массивом

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

Я написал программу, все работает, но возникает одна ошибка.
После заполнения массива, когда мы возвращаемся в основное тело программы, у меня почему то само по себе меняется 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.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:16.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025