Public feed
#722245
//Robertas Jurkaitis, 6 grupe, 3 uzduotis, variantas 8
//8. Sudaryti vienpusį sąrašą. Parašyti paprogramę, kuri iš sąrašo pašalina mažiausią elementą.
program trecia;
type sarasas=^elementas;
elementas=record
info:integer;
kitas:sarasas;
raktas:integer;
end;
//SUKURIAM
procedure sukurti(var pirmas:sarasas; var kiekis:integer);
var klaida,info,ct:integer;
laikinas:sarasas;
input:string;
begin
ct:=0;
kiekis:=0;
new(pirmas);
new(laikinas);
laikinas:=pirmas;
while input<>'stop' do
begin
writeln('Iveskite ', kiekis+1,'-aji saraso elementa, noredami nutraukti ivedima, rasykite ''stop''');
readln(input);
val(input, info, klaida);
if klaida=0 then
begin
if kiekis>=1 then
begin
new(laikinas^.kitas);
laikinas:=laikinas^.kitas;
end;
laikinas^.info:=info;
ct:=ct+1;
laikinas^.raktas:=ct;
kiekis:=kiekis+1;
end
else
if klaida=0 then writeln('Jus ivedete ne skaiciu, prasome ivesti skaiciu');
end;
end;
//ISVEDAM
procedure spausdinti(var pirmas:sarasas; kiekis:integer);
var laikinas:sarasas;
i:integer;
begin
laikinas:=pirmas;
for i:=1 to kiekis do
begin
writeln(i,') ',laikinas^.info);
laikinas:=laikinas^.kitas;
end;
end;
//SURANDAM MAZIAUSIA
procedure maziausias(var pirmas:sarasas; var kiekis:integer; var didziausias:integer);
var i:integer;
laikinas:sarasas;
begin
new(laikinas);
laikinas:=pirmas;
didziausias:=1;
for i:=1 to kiekis-1 do
begin
if laikinas^.info>laikinas^.kitas^.info then didziausias:=i+1;
laikinas:=laikinas^.kitas;
end;
end;
//------------------------------------------------------------------------------
//Elemento trynimas is saraso---------------------------------------------------
procedure trinti(var pirmas:sarasas; raktas:integer; var kiekis:integer);
var i:integer; laikinas, po, pries:sarasas;
begin
new(laikinas);
new(po);
new(pries);
laikinas:=pirmas;
if raktas=1 then //bus du variantai: kai naikinamas 1as elementas, ir kai naikinami visi elementai
begin
for i:=2 to kiekis do //ciklas skirtas eiles numeriams normalizuoti
begin
pirmas:=pirmas^.kitas; //iskart pereina prie antro nes pirma ir taip reikes trinti
pirmas^.raktas:=pirmas^.raktas-1;
end;
pirmas:=laikinas; //gryztama prie pirmo elemento kad butu galima ji istrinti
new(pirmas);
pirmas:=laikinas^.kitas; //dabar pirmas elementas yra buves antras elementas
end
else //antras variantas:kai trinamas ne pirmas elementas
begin
for i:=1 to raktas-1 do // raktas-1 nes jei reiktu pirmo elemento tai nieko daryt nereiktu //surandamas tas elementas
begin
pries:=pirmas;
pirmas:=pirmas^.kitas;
end;
pries^.kitas:=pirmas^.kitas; //nurodo kad elementas esantis pries istrintaji elementa rodys i elementa esanti po istrintojo elemento
po:=pirmas; //nukopijuoja pirmas i po kad po galetu normalizuoti likusi sarasa, taip nepakeiciant pirmas kuris dar bus reikalingas dispousinant elementa, ir laikinas, kuris bus reikalingas grazinant sarasa i pradzia
for i:=raktas to kiekis-1 do //normalizuoja
begin
po:=po^.kitas;
po^.raktas:=po^.raktas-1;
end;
dispose(pirmas); //atlaisvina cele ir grazina pirmas i pradzia
new(pirmas);
pirmas:=laikinas;
end;
kiekis:=kiekis-1;
end;
//------------------------------------------------------------------------------
var pirmas:sarasas;
kiekis, maz:integer;
begin
maz:=0;
writeln('Programa sarase suranda maziausia elementa ir ji pasalina.');
writeln;
sukurti(pirmas, kiekis);
writeln('');
writeln('Jusu ivestas sarasas: ');
spausdinti(pirmas, kiekis);
maziausias(pirmas, kiekis, maz);
writeln;
writeln('Didziausias yra ', maz, '-as elementas.');
writeln('Sarasas be didziausio nario: ');
trinti(pirmas, maz, kiekis);
spausdinti(pirmas, kiekis);
readln;
end.