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

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

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

> сортировка+список
Rabbit
сообщение 26.05.2007 17:33
Сообщение #1


Гость






надо отсортировать список по ключевому признаку, у меня все сортируется но обратно не записывается в список! подскажите где ошибка!
Может чтото с параметрами??


PROCEDURE SORT ( FIRST : EL);
TYPE
MAS1=ARRAY[1..100] OF INTEGER;
TMAS1=^MAS1;
MAS2=ARRAY[1..100] OF STRING;
TMAS2=^MAS2;
VAR
Z1:TMAS1;
Z2: TMAS2;
K,C,i,j: INTEGER;
D: STRING;
BEGIN
Q:=FIRST;
K:=0;
WHILE Q<> NIL DO
BEGIN
INC(K);
Z1^[K]:=Q^.INF1;
Z2^[K]:=Q^.INF2;
q:=q^.next;
END;

FOR J:=1 TO K-1 DO
FOR I:=1 TO K-J DO
IF Z1^[I]>Z1^[I+1]
THEN BEGIN
C:=Z1^[I];
Z1^[I]:=Z1^[I+1];
Z1^[I+1]:=C;
D:=Z2^[I];
Z2^[I]:=Z2^[I+1];
Z2^[I+1]:=D;
END;
{запись обратно в список}
q:=nil;
FIRST:=NIL;
FOR I:=1 TO K DO
BEGIN
new(p);
if first=nil then first:=p;
p^.inf1:=Z1^[i];
p^.inf2:=Z2^[i];
if q<>nil then q^.next:=p;
q:=p;
end;
p^.next:=nil;

writeln ('Operaciya vipolnena! Nagmite ENTER');
readkey;
END;

{ВЫЗОВ}
sort(first);




помогите пожалуйста!
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Rabbit
сообщение 26.05.2007 20:01
Сообщение #2


Гость






Спасибо исправила, все работает
а вот еще два кусочка:
тоже не работают
1, Поменять местами элемент с заданным ключом и следующий


PROCEDURE CHANGE ( FIRST : EL; Q : EL);
VAR
T, R : EL;
x : INTEGER;
ok: boolean;
BEGIN
q :=first;
while q<>nil do
begin
writeln (q^.inf1,' ',q^.inf2);
q:=q^.next;
end;
writeln ('Vvedite znachenie kluchevogo priznaka');
readln(x);
r:= first;
ok:= true;
while (r<>nil) and ok do
if r^.inf1=x then begin
q:=r ;
ok:= false;
end
else r:=r^.Next;
if ok=true
then begin
writeln (' takogo el net' );
exit;
end;

if q<> nil
then begin
T:=Q;
Q:=Q^.NEXT;
Q^.NEXT:=T;
end;
writeln ('Operaciya vipolnena! Nagmite ENTER');
readkey;
END;

вызов: change(FIRST,Q)





2. Исключить элемент перед i-ым элементом


PROCEDURE DEL_BEF_I( FIRST : EL; I : INTEGER);
VAR R : EL;
K ,N : INTEGER;
BEGIN
print;
writeln('Vvedite i ');
readln(i);
N:=COUNT_EL(FIRST);
IF (I<1) OR (I>N)
THEN BEGIN
WRITELN ('i zadano nekorrektno');
EXIT;
END
ELSE IF I=1
THEN WRITELN ('NET EL-TA PERED')
ELSE BEGIN
WRITELN ( ' YDALIT ELEMENT ? [Y-DA]' );
READLN ( ANS);
IF ANS='Y'
THEN BEGIN
IF I=2
THEN BEGIN {ydal 1 el}
T := FIRST;
FIRST:= FIRST^.NEXT;
DISPOSE ( T);
END
ELSE BEGIN
T := FIRST;
Q := NIL;
K := 1;
WHILE (K<I-1) DO
BEGIN
K := K+1;
Q := T;
T := T^.NEXT;
END;
BEGIN
R := T^.NEXT;
Q^.NEXT := R;
DISPOSE ( T ); {ydal i-1 }
END;
END;

END;
q :=first;
while q<>nil do
begin
writeln (q^.inf1,' ',q^.inf2);
q:=q^.next;
end;
readkey;
writeln ('Operaciya vipolnena! Nagmite ENTER');
readkey;
END;

END;

вызов: del_bef_i(first,i);

 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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