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

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

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

Автор: MyNameIs 20.12.2006 2:03

Не пойму, в чём ошибка при сортировке матрицы. Читаю из файла матрицу, всё ок. Но после сортировки на местах элементов появляются числа типа 15358. Помогите unsure.gif

procedure k1(n:integer;x:mat;k2:string;var z:mat);
var i,j,l,k,t:integer;
b:array [1..10] of integer;
begin
if (k2='>') then begin
k:=0;
for i:=1 to n do
for j:=1 to n do begin
k:=k+1;
b[k]:=x[i,j];
end;
for l:=k downto 2 do
for i:=1 to k-1 do
if (b[i+1]>b[i]) then begin
t:=b[i];b[i]:=b[i+1];b[i+1]:=t;
end;
k:=0;
For i:=1 to n do
for j:=1 to n do begin
k:=k+1;x[i,j]:=b[k];
end;
end;

Автор: мисс_граффити 20.12.2006 2:10

ты что делаешь?
у тебя запрет на изменение х.
какой нафиг

x[i,j]:=b[k];
?

Автор: MyNameIs 20.12.2006 2:14

Так, и как это обойти?

Автор: мисс_граффити 20.12.2006 2:29

procedure k1(n:integer;x:mat;k2:string;var z:mat); 

либо писать var x: mat, либо результат записывать в непонятно для чего предназначенную z (второе - если хочешь сохранить в неприкосновенности исходный массив)

Автор: MyNameIs 20.12.2006 2:38

Цитата(MyNameIs @ 19.12.2006 22:03) *

Не пойму, в чём ошибка при сортировке матрицы. Читаю из файла матрицу, всё ок. Но после сортировки на местах элементов появляются числа типа 15358. Помогите unsure.gif

procedure k1(n:integer;x:mat;k2:string;var z:mat);
var i,j,l,k,t:integer;
b:array [1..10] of integer;
begin
if (k2='>') then begin
k:=0;
for i:=1 to n do
for j:=1 to n do begin
k:=k+1;
b[k]:=x[i,j];
end;
for l:=k downto 2 do
for i:=1 to k-1 do
if (b[i+1]>b[i]) then begin
t:=b[i];b[i]:=b[i+1];b[i+1]:=t;
end;
k:=0;
For i:=1 to n do
for j:=1 to n do begin
k:=k+1;x[i,j]:=b[k];
end;
for i:=1 to n do
for j:=1 to n do
z[i,j]:=x[i,j];
end;



Всё равно ругается unsure.gif

Автор: volvo 20.12.2006 2:42

Цитата
Всё равно ругается
Где, и (главное) - как ругается, покажи...

Автор: MyNameIs 20.12.2006 2:52

1 2 3 4 5
2 2 2 2 2
0 0 0 1 5
4 4 4 4 4
8 5 0 0 3

моя матрица, читается из файла.

вот что получается-

3 1 5 4 4
4 4 4 8 5
0 12 24932 4 3
15873 0 0 0 0
0 0 0 0 0


Автор: мисс_граффити 20.12.2006 3:35

For i:=1 to n do
for j:=1 to n do begin
k:=k+1;x[i,j]:=b[k];
end;
for i:=1 to n do
for j:=1 to n do
z[i,j]:=x[i,j];

зачем???
For i:=1 to n do
for j:=1 to n do begin
k:=k+1;z[i,j]:=b[k];
end;


покажи, как вызываешь эту процедуру.
то есть текст программы полностью приведи.

Автор: MyNameIs 20.12.2006 3:40


это из юнита.

procedure k1(n:integer;x:mat;k2:string;var z:mat);
var i,j,l,k,t:integer;
b:array [1..10] of integer;
begin
if (k2='>') then begin
k:=0;
for i:=1 to n do
for j:=1 to n do begin
k:=k+1;
b[k]:=x[i,j];
end;
for l:=k downto 2 do
for i:=1 to k-1 do
if (b[i+1]>b[i]) then begin
t:=b[i];b[i]:=b[i+1];b[i+1]:=t;
end;
k:=0;
For i:=1 to n do
for j:=1 to n do begin
k:=k+1;x[i,j]:=b[k];
end;
end;
if (k2='<') then begin
k:=0;
for i:=1 to n do
for j:=1 to n do begin
k:=k+1;
b[k]:=x[i,j];
end;
for l:=k downto 2 do
for i:=1 to k-1 do
if (b[i+1]<b[i]) then begin
t:=b[i];b[i]:=b[i+1];b[i+1]:=t;
end;
k:=0;
For i:=1 to n do
for j:=1 to n do begin
k:=k+1;x[i,j]:=b[k];
end;
end;
for i:=1 to n do
for j:=1 to n do
z[i,j]:=x[i,j];
end;



это сама прога

program Modul;
uses crt,D11D;
var A,B,C,A1,B1,C1,T,T1:mat;
i,j,n,n11,s,v:integer;
ab,ac,ad:string;
l:string;

begin
clrscr;
write('ђ §¬Ґа­®бвм ¬ ваЁжл = ');readln(n11);
ab:=('dk.dat');
ac:=('dk1.dat');
ad:=('dk2.dat');
vvod (ab,n11,n11,A);
vvod (ac,n11,n11,B);
vvod (ad,n11,n11,C);
l:='>';
{k1(n11,A,l,A1);
k1(n11,B,l,B1);
k1(n11,C,l,C1);}

sum(n11,A1,B1,T1);
sum(n11,T1,C1,T);
writeln('summarnaia Matrica');
Vivod(n11,n11,T);
readkey;
clrscr;
writeln('Matrica1');
{k1(n11,A,l,A1);}
Vivod(n11,n11,A1);
readkey;
clrscr;
writeln('Matrica2');
{k1(n11,B,l,B1);}
Vivod(n11,n11,B1);
readkey;
clrscr;
writeln('Matrica3');
{k1(n11,C,l,C1);}
Vivod(n11,n11,C1);
readkey;

end.


Автор: мисс_граффити 20.12.2006 3:49

как описан тип mat?

Автор: MyNameIs 20.12.2006 3:55

Цитата(мисс_граффити @ 19.12.2006 23:49) *

как описан тип mat?


Описан в модуле
type mat=array [1..10,1..10] of integer;

Автор: мисс_граффити 20.12.2006 3:57

а как ты пытаешься его запихнуть в b:array [1..10] of integer;?

Автор: MyNameIs 20.12.2006 4:00

Цитата(мисс_граффити @ 19.12.2006 23:57) *

а как ты пытаешься его запихнуть в b:array [1..10] of integer;?



Напиши плиз, как ты бы это сделала, а то мнещас ещё лабу по ссылкам делать, рисовать птичку, и в цикле графику.
Б Эррэй вроде для пузырька нужен, нет? unsure.gif

Автор: мисс_граффити 20.12.2006 4:01

я просто не могу понять, как сунуть 100 элементов в 10 ячеек

Автор: MyNameIs 20.12.2006 4:07

Цитата(мисс_граффити @ 20.12.2006 0:01) *

я просто не могу понять, как сунуть 100 элементов в 10 ячеек


Так, значит надо запихать 100 элементов в массив, там его пузырём а потом обратно в матрицу. Массив просто чтоль поменять?


Цитата(MyNameIs @ 20.12.2006 0:05) *

Так, значит надо запихать 100 элементов в массив, там его пузырём а потом обратно в матрицу. Массив просто чтоль поменять?



Блин, с меня конфетка good.gif