Задача,в общем-то,не сложная,но косячит немного…
Условие задачи:
Задача-считалка:В кругу стоят n детей.Среди них выбирается водящий.Водящим считается тот,кто останется последним.
Используются кольцевые однонаправленные списки.
uses crt;
type ExO=^sp;
sp=record
data:integer;
next:ExO;
end;
var sBegin,sEnd,Buf:ExO;i,j,x,n:integer;
{процедура вывода списка на экран}
procedure OutSp(sBegin:ExO);
var px:ExO;
begin
writeln('================');
repeat
write(sBegin^.data:4);
sBegin:=sBegin^.next;
until sBegin=sEnd^.next;
writeln;
writeln('================');
end;
{процедура Удаления K-ого элемента.Key – указ на начало}
procedure DelSp(var Key:ExO;k:integer);
var dx,px:ExO;{px-элемент списка,dx-предидущ элемент}
begin
px:=Key;
repeat{определяем К-ый элемент}
for i:=1 to k do begin
dx:=px;{элемент предшествующий К-му}
px:=px^.next;{сам элемент}
end;
dx^.next:=px^.next;{Разрываем связи К-ого элемента}
px:=dx;
until px^.next=px;{??? Условие выхода-если элемент ссылается сам на себя,т.е.остался один}
dispose(px);
end;
procedure FormSp(var sBegin:ExO);
begin
write('4islo:');
readln(x);
if x<>0 thenbegin
new(sBegin);
sBegin^.next:=nil;
sBegin^.data:=x;
sEnd:=sBegin;
end;
end;
procedure AddComp(var sEnd:ExO);
beginwrite('4islo:');
readln(x);
while x<>0 do begin
new(buf);
buf^.next:=nil;
sEnd^.next:=buf;
sEnd:=buf;
sEnd^.data:=x;
write('4islo:');
readln(x);
end;
dispose(buf);
sEnd^.next:=sBegin;
end;
begin
clrscr;
write('Vvedite kol-vo slov:');readln(n);
FormSp(sBegin);
AddComp(sEnd);
writeln('****Spisok****');
OutSp(sBegin);
DelSp(sBegin,n);
OutSp(sEnd);
readkey;
end.
Элементы списка-целые числа(это,в общем-то,не важно),условие заканчивания ввода-0.
вот основная процедурка-то у меня и касячит:
procedure DelSp(var Key:ExO;k:integer);
var dx,px:ExO;{px-элемент списка,dx-предидущ элемент}
begin
px:=Key;
repeat{определяем К-ый элемент}
for i:=1 to k do begin
dx:=px;{элемент предшествующий К-му}
px:=px^.next;{сам элемент}
end;
dx^.next:=px^.next;{Разрываем связи К-ого элемента}
px:=dx;
until px^.next=px;{??? Условие выхода-если элемент ссылается сам на себя,т.е.остался один}
dispose(px);
end;
27 декабря 2008 в 21:02
так это она и задала)
27 декабря 2008 в 16:04
фига се… видела бы Зонова С.А….