Создать в динамической памяти односвязный линейный список(цепочка) из n элементов. Заполнение информационных полей элементов списка(в моей проге это data) можно провести генератором случ. чисел. Реализировать процедуры: добавления элемента в любую точку списка, удаление, вывода на экран полученной в куче числ. посл-ти.
И еще одна процедура по пребразованию последовательности из x1,x2,x3,...xn надо получить (x1-xn),(x2-xn),...(xn-1 -xn) воть!
Теперь что у меня не работает:
1. выводит на экран на 1 элемент меньше (не знаю почечу)
2. процедура вставки некоректно работает при замене 1-го элемента
3. процедура удаления также не работает при удалении 1-го элемента
4. процедура преобразования отнимает не последний элемент, а какой попадется=(( вот... кто-чем сможет - помогите!!!
program lab_12_1;
uses crt;
type
point=^element;
element=record
Data:integer;
Next:point;
end;
var
P,H,PBegin:point;
i,n:integer;
MemBegin:longint;
Simvol:char;
procedure Vivod(P:point);
begin
writeln('Tekushaya posledivatelnost:');
repeat
write(P^.data,' ');
P:=P^.Next;
until
P^.Next=Nil;
end;
procedure Vstavka(var Pred:point; Nomer,Chislo:integer);
var
i:integer;
Vst:point;
begin
if Nomer=1 then begin
New(Vst);
Vst^.Data:=Chislo;
Vst^.Next:=Pred;
Pred:=Vst;
end
else for i:=1 to Nomer-2 do begin
Pred:=Pred^.Next;
end;
New(Vst);
Vst^.Data:=Chislo;
Vst^.Next:=Pred^.Next;
Pred^.Next:=Vst;
end;
procedure Udalenie(var Pred:point; Nomer:integer);
var
i,Chislo:integer;
Ud:point;
begin
if Nomer=1 then begin
Ud:=Pred;
Pred:=Pred^.Next;
Chislo:=Ud^.data;
Dispose(Ud);
end
else for i:=1 to Nomer-2 do begin
Pred:=Pred^.Next;
end;
Ud:=Pred^.Next;
Pred^.Next:=Pred^.Next^.Next;
Chislo:=Ud^.Data;
Dispose(Ud);
end;
procedure NovPosl(var P:point);
var
PBegin:point;
Chislo:integer;
begin
PBegin:=P;
while P^.Next <> Nil do begin
P:=P^.Next
end;
Chislo:=P^.Data;
P:=PBegin;
while P^.Next <> Nil do begin
P^.Data:=P^.Data-Chislo;
P:=P^.Next;
end;
end;
begin {----------------------------}
clrscr;
randomize;
New(P);
PBegin:=P;
MemBegin:=MemAvail;
write('Vvedite kol-vo elementov: '); readln(N);
for i:=1 to n do begin
P^.Data:=random(100);
P^.Next:=Nil;
if i<n then begin
H:=P;
New(P);
H^.Next:=P;
end;
end;
p:=PBegin;
Vivod(PBegin);
N:=0;
writeln;
writeln;
repeat begin
writeln('Najmit:');
writeln('D - udalit element');
writeln('A - dobavit element');
writeln('F - preobrazovanie');
writeln('E - vihod');
Simvol:=readkey;
case Simvol of
'd': begin
write('Vvedite poziciu elementa: ');
read(N);
P:=PBegin;
Udalenie(P,N)
end;
'a': begin
write('Vvedite poziciu novogo elementa: ');
read(n);
P:=PBegin;
Vstavka(P,N,0)
end;
'f': begin
P:=PBegin;
NovPosl(P);
end;
end;
clrscr;
P:=PBegin;
Vivod(P);
end;
until Simvol='e';
end.
если что спрашивайте, постараюсь ответить... однако не так быстро..