IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Помогите решить задачу на матрицы. В ответе выводит старые данные
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской

Репутация: -  0  +


Доброго времени суток. Такая задача: задать размер массива в ручную, элементы автоматически. строку с наименьшей сумой элементов разделить на главную диагональ.( так же добавить защиту от неправильного ввода)
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). Подскажите, в чем ошибка?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 481
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


Инициализация ГПСЧ (randomize) должна ыполняться в программе ОДИН раз - при инициализации программы, а не каждый раз при заполнении массива (в процедуре readmtr).
Перениеси randomize из процедуры в основную программу сразу после begin.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 16.05.2024 1:01
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name