Помощь - Поиск - Пользователи - Календарь
Полная версия: и снова матрици
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
JoB
я ее уже сделал, но в ней есть какая-то ошибка, пожалусто посмотрите...
И еще мне необходимо изменить процедуру вывода таким образом, что бы она выводила матрицу m на p и распологала ее по центру. (по любому с помощью goto, наверное надо взять сначало центральный эллимент матрици и уже от него отталкиваться)
Задача: даны три матрици по пять строк и четыре эллимента в каждой 1) Заполнить матрици случайными числами; 2) переставить строки матрици , что бы эллименты шли от меньшего к большему 3) вывести на экран исправленную матрицу с задаными номером.

uses crt;
const n=3;
m=5;
p=4;
type aaaa = array [1..p] of byte;
aaa = array [1..n] of aaaa;
aa= array [1..n] of aaa;
var i,j,s,d: byte;
a:aa;
procedure ran (var b:aaa);
var i,j:byte;
z:aaaa;
begin
for i:=1 to m-1 do
for j:=1+i to m do
if b[i,1] > b[j,1] then begin
z:=b[i];
b[i]:=b[j];
b[j]:=z;
end;
end;
procedure vivod (b:aaa) ;
var i, j: byte;
begin
for j:=1 to p do
write (b[i,j]);
writeln;
end;
begin
clrscr;
randomize;
for i:=1 to n do
for j:=1 to m do
for s:=1 to p do
a[i,j,s]:= random (100);
writeln ('isxod matr');
for i:=1 to n do
begin
for s:= 1 to p do
write (a[i,j,s]:5);
writeln
end;
for i:=1 to n do
ran (a[i]);
write ('nomer davay');
readln (d);
writeln ('isxodnai matrica');
vivod (a[d]);
readln
end.

volvo
Цитата
я ее уже сделал, но в ней есть какая-то ошибка, пожалусто посмотрите...

Ты бы задание-то не хотел показать? Чего программа делать должна???
Зачем, например, число вводить?
volvo
Все, предыдущий вопрос снят...
Вот так?
uses crt;

const
n=3;

m=5;
p=4;
type
vector = array[1 .. p] of byte;
matrix = array[1 .. m] of vector;
arr_matrix = array[1 .. n] of matrix;


var
i,j,s,d: byte;
a: arr_matrix;

procedure ran(var mx: matrix);
var
i, j: byte;
T: vector;
begin
for i:=1 to m-1 do
for j:=1+i to m do
if mx[i][1] > mx[j][1] then begin
T:=mx[i]; mx[i]:=mx[j]; mx[j]:=T;
end;
end;

procedure vivod(b: matrix);
var
i, j: byte;
begin
for i := 1 to m do begin
for j := 1 to p do
write (b[i,j]:5);
writeln;
end;
end;

begin
clrscr;
randomize;
for i:=1 to n do

for j:=1 to m do
for s:=1 to p do
a[i][j][s]:= random (100);

writeln ('isxod matr');
for i:=1 to n do begin
writeln('#', i:2);
vivod(a[i]);
end;

for i:=1 to n do
ran(a[i]);

write ('nomer davay'); readln (d);
writeln ('result:');
vivod (a[d]);
readln
end.
JoB
Классно, теперь все работает, СПС, но только матрица не в центре экрана... .
Цитата
А мне
не необходимо изменить процедуру вывода таким образом, что бы она выводила матрицу m на p и распологала ее по центру
GoodWind
проще всего методом тыка пододвинуть ближе к центру таблицу, куда матрица будет выводиться, а потом позиционироать вывод в её ячейки...
=Volvo=
GoodWind,
Я бы слова "метод тыка" вообще не применял blum.gif

JoB, исправь процедуру Vivod на такую:
procedure vivod(b: matrix);
var
i, j: byte;
space: byte;
begin
space := 75 div p;

for i := 1 to m do begin
for j := 1 to p do
write (b[i,j]:space);
writeln;
end;
end;
JoB
спс
=Volvo=
А так:
procedure vivod(b: matrix);
var
i, j: byte;
space: byte;
begin
space := (76 - p*5) div 2;

for i := 1 to m do begin
write('':space);
for j := 1 to p do
write (b[i,j]:5);
writeln;
end;
end;
?
GoodWind
Цитата
К сожадению так не пойдет... Сам так сделал, препод сказал делай нормально... =)

xcuse me... а это разве ненормально ?! blink.gif
JoB
Извените парни реально не заметил... и огромное спасибо за програмку... good.gif
Guest
JoB, пост №8 читал? blink.gif
GoodWind
считаю решение, представленное Volvo в 8-мом посте правильным.
Дальнейшее рассусоливание темы вывода по центру рассчитывается как флейм и будет удалено!
----
Виновные будут соответствующим образом наказаны.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.