Помощь - Поиск - Пользователи - Календарь
Полная версия: Сортировка матрицы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
MyNameIs
Не пойму, в чём ошибка при сортировке матрицы. Читаю из файла матрицу, всё ок. Но после сортировки на местах элементов появляются числа типа 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;
мисс_граффити
ты что делаешь?
у тебя запрет на изменение х.
какой нафиг
x[i,j]:=b[k];
?
MyNameIs
Так, и как это обойти?
мисс_граффити
procedure k1(n:integer;x:mat;k2:string;var z:mat); 

либо писать var x: mat, либо результат записывать в непонятно для чего предназначенную z (второе - если хочешь сохранить в неприкосновенности исходный массив)
MyNameIs
Цитата(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
Цитата
Всё равно ругается
Где, и (главное) - как ругается, покажи...
MyNameIs
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

мисс_граффити
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

это из юнита.

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.

мисс_граффити
как описан тип mat?
MyNameIs
Цитата(мисс_граффити @ 19.12.2006 23:49) *

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


Описан в модуле
type mat=array [1..10,1..10] of integer;
мисс_граффити
а как ты пытаешься его запихнуть в b:array [1..10] of integer;?
MyNameIs
Цитата(мисс_граффити @ 19.12.2006 23:57) *

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



Напиши плиз, как ты бы это сделала, а то мнещас ещё лабу по ссылкам делать, рисовать птичку, и в цикле графику.
Б Эррэй вроде для пузырька нужен, нет? unsure.gif
мисс_граффити
я просто не могу понять, как сунуть 100 элементов в 10 ячеек
MyNameIs
Цитата(мисс_граффити @ 20.12.2006 0:01) *

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


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


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

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



Блин, с меня конфетка good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.