Помощь - Поиск - Пользователи - Календарь
Полная версия: разделить список
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Rabbit
Разделить упорядоченный список на два по отношению к заданному ключу: ( < и >= ) и отпечатать полученные списки.
Вот как я сделала, но опять же не работает:


PROCEDURE DIVIDE (FIRST2,FIRST3:EL);
TYPE
MAS1=ARRAY[1..100] OF INTEGER;
TMAS1=^MAS1;
MAS2=ARRAY[1..100] OF STRING;
TMAS2=^MAS2;
VAR
Z1,Z3:TMAS1;
Z2,Z4: TMAS2;
OK: BOOLEAN;
X,K1,K2: INTEGER;
R: EL;
BEGIN
NEW(Z1);
NEW(Z2);
print;
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;
P:=FIRST;
K1:=0; K2:=0;
WHILE P<> NIL
DO BEGIN
IF P^.INF1<Q^.INF1
THEN BEGIN
INC(K1);
Z1^[K1]:=P^.INF1;
Z2^[K1]:=P^.INF2;
END
ELSE BEGIN
INC(K2);
Z3^[K2]:=P^.INF1;
Z4^[K2]:=P^.INF2;
END;
END;
Q:=NIL;
FIRST1:=NIL;
FOR I:=1 TO K1 DO
BEGIN
new(p);
if first1=nil then first1:=p;
p^.inf1:=Z1^[i];
p^.inf2:=Z2^[i];
if q<>nil then q^.next:=p;
q:=p;
end;
p^.next:=nil;
print;
WRITELN('NAGMITE ENTER');
READLN;
Q:=NIL;
FIRST2:=NIL;
FOR I:=1 TO K2 DO
BEGIN
new(p);
if first1=nil then first2:=p;
p^.inf1:=Z3^[i];
p^.inf2:=Z4^[i];
if q<>nil then q^.next:=p;
q:=p;
end;
p^.next:=nil;
print;
END;

вызов: divide(FIRST2,FIRST1);

volvo
Во-первых, опять же:
PROCEDURE DIVIDE (var FIRST2,FIRST3:EL);

, тебе же надо вернуть указатели на первый и второй список в вызывающую программу... А во-вторых, вот этого:

...
print;
writeln ('Vvedite znachenie kluchevogo priznaka');
readln(x);
r:= first; prev := nil;
ok:= true;
while (r<>nil) and ok do
if r^.inf1=x then begin
q:=r;
ok:= false;
end
else begin
if (r^.next <> nil) and (r^.next^.inf1 = x) then prev := r;
r:=r^.Next;
end;

if ok=true then begin
writeln (' takogo el net' ); Exit;
end;

if prev = nil then first2 := nil
else begin
first 2 := first;
prev^.next := nil;
end;
first3 := q;
...
(по-моему, нигде не ошибся, набирал прямо здесь) должно хватить, чтобы first2 указывал на первую часть списка - ту, в которой значения inf1 меньше ключа, а first3 - на вторую (где inf1 больше или равно ключу)...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.