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

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

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

> Сортировка матрицы, динамика, файлы, драйверы
punkska
сообщение 6.01.2006 18:07
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


Проверрить, Все лия строки матрицы упорядочны по убыванию. Упорядочить массив по неубыванию элементов второго столбца. Сортировка вставкаими.


program laba2;
uses Crt;
type
Mas=array[1..1] of integer;
dinmas=^mas;

function takesize:integer;
var
i:integer;
begin
writeln('KO/\U4ECTBO ELEMEHTOB MACCUBA:');
repeat
readln(i);
until i>0;
takesize:=i;
end;

procedure EnterMassive(var A:dinmas; const n:integer);
var
i:integer;
begin
writeln;
writeln('BBEgUTE MACCUB:');
i:=0;
repeat
i:=i+1;
write(i,' element = ');
readln(A^[i]);
until i=n;
end;

procedure ShowMassive(var A:dinmas; const n:integer);
var
i:integer;
begin
writeln;
writeln('BBEgEHHb|U MACCUB:');
i:=0;
repeat
i:=i+1;
write(A^[i],' ');
until i=n;
writeln;
end;

procedure sorting(var A:dinmas; const n:integer);
var
j,i:integer;
endof:boolean;
add:integer;
begin
writeln;
writeln('COPTUPOBKA MACCUBA...');
for i:=2 to n do
begin
j:=i;
endof:=true;
while( j>1 ) and endof do
if (A^[j]<A^[j-1]) then
begin
add:=A^[j-1];
A^[j-1]:=A^[j];
A^[j]:=add;
j:=j-1;
end
else
endof:=false;
end;
end;


var
n:integer;
A:dinmas;

begin
clrscr;
writeln('LABA 2');

n:=takesize;
GetMem(A,sizeof(real)*n);
EnterMassive(A,n);
showMassive(A,n);

{////}
sorting(A,n);
showMassive(A,n);
Freemem(A,sizeof(real)*n);
writeln('THE END.');
readln;
end.





1 вопрос как сделать сортировку *по неубыванию элементов второго столбца. Сортировка вставкаими.*
я написал..но явно не для 2ого столбца....что-то я не понял...
и пока что-то ни как ни хочет работать *Проверрить, Все лия строки матрицы упорядочны по убыванию*
хелп


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
punkska
сообщение 6.01.2006 18:18
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


блин матрица а не массив! ёмоё


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.01.2006 18:52
Сообщение #3


Гость






Цитата
Упорядочить массив по неубыванию элементов второго столбца
Задание уточни... Что именно тебе нужно - отстртировать ТОЛЬКО второй столбец по неубыванию, не трогая остальные, или поменять местами строки матрицы так, что второй столбец окажется отсортированным по неубыванию?

Это разные вещи...
 К началу страницы 
+ Ответить 
punkska
сообщение 6.01.2006 18:59
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


т.к. сказано Упорядочить массив, то я думаю нужно *поменять строки матрицы так, что второй столбец окажется отсортированным по неубыванию* unsure.gif

Сообщение отредактировано: punkska - 6.01.2006 19:03


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 6.01.2006 19:23
Сообщение #5


Гость






Ну, тогда я могу тебе сказать, что ты СОВСЕМ неправильно работаешь с матрицей... Тот способ, которым ты пользуешься - работает с массивами... Матрицы - вот так: FAQ: Работа с динамическими матрицами

Ну, а вот рабочий каркас программы, только поставь где тебе нужно функции/процедуры...
{$R-}
Type
TType = Word;
Type
PVector = ^TVector;
TVector = Array[1 .. 1] of TType;

PDynMatrix = ^TDynMatrix;
TDynMatrix = Array[1 .. 1] of PVector;

Var
mxDynamic: PDynMatrix;
n, i, j: Word;
T: PVector;
Begin
Write('n = '); ReadLn(n);
{ Alloc }
GetMem(mxDynamic, n * SizeOf(PVector));
For i := 1 To n Do
GetMem(mxDynamic^[i], n * SizeOf(TType));

{ Enter Data }
Randomize;
For i := 1 To n Do
For j := 1 To n Do
mxDynamic^[I]^[J]:=random(20);
{ Show: Before }
For i := 1 To n Do Begin
WriteLn;
For j := 1 To n Do
Write(mxDynamic^[I]^[J]:4);
End;

{Sorting}
For i := 1 To n do Begin
T := mxDynamic^[i];
j := Pred(i);
While (T^[2] < mxDynamic^[j]^[2]) and (j > 0) Do Begin
mxDynamic^[Succ(j)] := mxDynamic^[j]; Dec(j);
End;
mxDynamic^[Succ(j)] := T;
End;


{ Show: After }
For i := 1 To n Do Begin
WriteLn;
For j := 1 To n Do
Write(mxDynamic^[I]^[J]:4);
End;

{ Free }
For i := 1 To n Do
FreeMem(mxDynamic^[i], n * SizeOf(TType));
FreeMem(mxDynamic, n * SizeOf(PVector));
End.
 К началу страницы 
+ Ответить 
punkska
сообщение 7.01.2006 15:13
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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



{$R-}
uses Crt;
Type
TType = Word;
Type
PVector = ^TVector;
TVector = Array[1 .. 1] of TType;

PDynMatrix = ^TDynMatrix;
TDynMatrix = Array[1 .. 1] of PVector;

procedure EnterMatr(var mxDynamic: PDynMatrix; const n:integer );
Var i,j:integer;
Begin
For i := 1 To n Do
For j := 1 To n Do
read( mxDynamic^[I]^[J]);
end;

procedure ShowMatr(var mxDynamic: PDynMatrix; const n:integer );
Var i,j:integer;
Begin
For i := 1 To n Do Begin
WriteLn;
For j := 1 To n Do
Write(mxDynamic^[I]^[J]:4);
End;
End;

procedure TakeSize(var mxDynamic: PDynMatrix; const n:integer );
Var i,j:integer;
Begin
GetMem(mxDynamic, n * SizeOf(PVector));
For i := 1 To n Do
GetMem(mxDynamic^[i], n * SizeOf(TType));
end;

procedure FreeSize(var mxDynamic: PDynMatrix; const n:integer );
Var i,j:integer;
Begin
For i := 1 To n Do
FreeMem(mxDynamic^[i], n * SizeOf(TType));
FreeMem(mxDynamic, n * SizeOf(PVector));
end;


procedure SortMatr( mxDynamic: PDynMatrix; const n:integer );
Var i,j:integer;
T: PVector;
Begin
For
i := 1 To n do Begin
T := mxDynamic^[i];
j := Pred(i);
While (T^[2] < mxDynamic^[j]^[2]) and (j > 0) Do Begin
mxDynamic^[Succ(j)] := mxDynamic^[j]; Dec(j);
End;
mxDynamic^[Succ(j)] := T;
End;

Var
mxDynamic: PDynMatrix;
n, i, j: Word;

Begin
Write('n = '); ReadLn(n);


takesize(mxDynamic,n);
EnterMatr(mxDynamic,n);
clrscr;
ShowMatr(mxDynamic,n);
FreeSize(mxDynamic,n);

End.




сортировку ни пойму как заставить работать!(


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.01.2006 15:25
Сообщение #7


Гость






Во-первых, у тебя не хватает одного End-а в процедуре сортировки, а во-вторых, поменяй условие
While (T^[2] < mxDynamic^[j]^[2]) and (j > 0) Do Begin

на
While (j > 0) and (T^[2] < mxDynamic^[j]^[2]) Do Begin

, тогда оно перестанет зависеть от настроек компилятора...
 К началу страницы 
+ Ответить 
punkska
сообщение 7.01.2006 17:20
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 139
Пол: Мужской

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


unsure.gif не перестал
ему всё равно не нравиться что-то T^[2] Error 76 wacko.gif


--------------------
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА!!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 7.01.2006 17:39
Сообщение #9


Гость






Пример входных данных и версию компилятора приведи...
У меня как на FPC 2.0.0 так и на TP70 при матрице размером 3*3:
Цитата
1 8 3
4 1 5
2 7 3
прекрасно отрабатывает...

Вот так тоже попробуй, иногда помогает:
procedure SortMatr( mxDynamic: PDynMatrix; const n:integer );
Var
i,j:integer;
T: PVector;
Var
Two: Byte;
Begin
Two := 2;

For i := 1 To n do Begin
T := mxDynamic^[i];
j := Pred(i);
While (j > 0) and (T^[Two] < mxDynamic^[j]^[Two]) Do Begin
mxDynamic^[Succ(j)] := mxDynamic^[j]; Dec(j);
End;
mxDynamic^[Succ(j)] := T;
End;
End;
 К началу страницы 
+ Ответить 

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

 



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