Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите решить задачу на матрицы. В ответе выводит старые данные
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
kirik67
Доброго времени суток. Такая задача: задать размер массива в ручную, элементы автоматически. строку с наименьшей сумой элементов разделить на главную диагональ.( так же добавить защиту от неправильного ввода)
program rp_1;
uses crt;
const NN=10;
MM=10;
var i,j:word;
type
Matrix=array[1..NN,1..MM] of integer;
procedure readmatr(var A:Matrix; var n,m:word);
begin
randomize;
repeat
writeln('vvedite razmer stroki=');;readln(N);
until (N>0) and (N<=NN);
repeat
writeln('vvedite razmer stolbca='); readln(M);
until (M=N) ;
for i:=1 to n do begin
for j:=1 to m do begin
A[i,j]:=Random(10)-Random(10);
end
end
end;
Procedure PrintMatr(A:Matrix; n,m:word);
var i,j:word;
begin
For i:=1 to n do begin
for j:=1 to m do write(A[i,j],' ');
writeln
end
end;
var n,m:word;
a:matrix;
ts,mts,dig:integer;
res:real;
begin
clrscr;
readmatr(a,n,m);
printmatr(a,n,m);
ts:=0;
for i:=1 to m do
ts:=ts+A[i,j];
if ts<mts then
mts:=ts;
for i:=1 to n do
begin
for j:=1 to n do
begin
if j=i then dig:=dig+A[i,j];
end;
end;
writeln('Minimalnaya_stroka=',mts,' ','Diagonal=',dig);
res:=(mts)/(dig);
Writeln('Resultat=',res:6:4);
readln;
end.


Так вот, проблема в том, что при задании одного и того же размера матрицы он выдает значения, которые были верны в первый раз. Т.е. допустим в первый раз в матрице 3х3 мин. строка=6(-2 2 6); во второй раз в матрице 3х3 мин.строка опять=6(-2 8 -8). Подскажите, в чем ошибка?
Федосеев Павел
Инициализация ГПСЧ (randomize) должна ыполняться в программе ОДИН раз - при инициализации программы, а не каждый раз при заполнении массива (в процедуре readmtr).
Перениеси randomize из процедуры в основную программу сразу после begin.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.