//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.