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

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

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

 
 Ответить  Открыть новую тему 
> Помогите решить задачу на матрицы. В ответе выводит старые данные
kirik67
сообщение 21.11.2014 22:06
Сообщение #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 
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 22.11.2014 9:07
Сообщение #2


Бывалый
***

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

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


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

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

 



- Текстовая версия 27.04.2024 11:09
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"