Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Матрица

Автор: 1111 30.10.2007 20:19

Народ помогите пожайлуста дополнить эту программу(надо дополнить её выводом исходной матрицей) и посмотреть правильно ли я её сделал. Заранее всех благодарю.
Сама задача.
В данной действительной матрице 6х9 поменять местами строку, содержащую элемент с наибольши значение. предпологается, что эти элементы единственные.

Program matr;
var
mat:array[1..6,1..9] of integer;
max,b:integer;
j,i,maxj:byte;
BEGIN
randomize;
for i:=1 to 6 do
begin
for j:=1 to 9 do
begin
mat[i,j]:=integer (random(100))-50;
write(mat[i,j]:4,' ');
end;
writeln;
end;
max:=mat[1,1]; maxj:=1;
for i:=1 to 6 do
for i:=1 to 9 do
if mat[i,j]>max then begin
maxj:=j;
max:=mat[i,j];
end;
end.


Автор: compiler 30.10.2007 20:25

а полное задание засекречино? smile.gif

добавленно
о задание появилось! smile.gif

А что означает <<поменять местами строку>>? превернуть?

Автор: 1111 30.10.2007 20:36

постовить строку на место другой

Автор: compiler 30.10.2007 20:45

Цитата(1111 @ 30.10.2007 15:36) *
постовить строку на место другой
на место какой?

Автор: 1111 30.10.2007 23:30

на любую. Как мне сказали что этоя сделал правильно надо теперь чтобы выводилась исходная матрица

Автор: КМА 30.10.2007 23:34

A стабильно, точно так же как и вводил(а) не подойдет? в смысле


for i:=1 to 6 do
begin
for j:=1 to 9 do
write (mat [i, j], ' ');
writeLn;
end



Это я про вывод. Про строку, сейчас что нибудь придумаем.

Добавлено через 7 мин.
Я у тебя ошибку нашел, вот здесь:


for i:=1 to 6 do
for i:=1 to 9 do
if mat[i,j]>max then begin
maxj:=j;
max:=mat[i,j];
end;



Во втором цикле желательно бы использовать j. У меня еще вопрос, индекс строки это второй или первый? Т. е. сколько строк 6 или 9?

А integer тут при чем?

mat[i,j]:=integer (random(100))-50;


Автор: volvo 31.10.2007 0:06

Цитата
А integer тут при чем?
При генерации случайных чисел без приведения к Integer-у при некоторых условиях можно получить RunTime Error... Поэтому использован (кстати, совершенно правильно) Integer...

Автор: КМА 31.10.2007 0:41

volvo, спасибо, не знал

Автор: 1111 31.10.2007 1:33

за ошибку спасибо а вывод исходной матрицы неработает.
6-строк 9-столбцов

Автор: КМА 31.10.2007 3:05

Ну тогда смотри:


Program matr;
var
mat:array[1..6,1..9] of integer;
i, j, nMax: byte;
max, item: integer;
BEGIN
randomize;
for i:=1 to 6 do {введем матрицу}
begin
for j:=1 to 9 do
begin
mat[i,j]:=integer (random(100))-50;
write(mat[i,j]:4,' ');
end;
writeln;
end;
{ищем максимальный, точнее его номер}
max:=mat[1,1];
nMax:=1;
for i:=1 to 6 do
for i:=1 to 9 do
if mat[i,j]>max
then
begin
nMax:=i;
max:=mat[i,j];
end;

{теперь меняем местами, если это первая строка, то меняем со второй, если какая либо другая, то с верхней}
if nMax=1
then
for j:=1 to 9 do
begin
item:=mat[nMax, j];
mat[nMax, j]:=mat[nMax+1, j];
mat[nMax+1, j]:=item
end
else
for j:=1 to 9 do
begin
item:=mat[nMax, j];
mat[nMax, j]:=mat[nMax-1, j];
mat[nMax-1, j]:=item
end;
{выведем массив}
for i:=1 to 6 do
begin
for j:=1 to 9 do
write (mat [i, j], ' ');
writeLn
end
END.


Автор: volvo 31.10.2007 3:07

Цитата(KMA)
          begin
item:=mat[nMax, j];
mat[nMax, j]:=mat[nMax+1, j];
mat[nMax-1, j]:=item { <--- Здесь должен быть плюс... }
end

Автор: КМА 31.10.2007 3:09

Единственное что, это надо сказать, что раз ты задаешь все однозначно (т. е. максимальный элемент 1), то тогда нужно пользовать ручным вводом (т. е. с клавиатуры), иначе может попасться два одинаковых элемента.

To volvo, я пока редактировал, ты уже успел отправить(у меня еще одна ошибка была)... Оперативно... спасибо что заметил.

Автор: 1111 1.11.2007 0:48

всем большое спасибо

Автор: 1111 5.11.2007 18:13

помогите с выводом исходной матрицы