All pastes #474294 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-05-06 19:03 UTC
rendered paste body
//Uzduotis: Sudaryti vienpusi saraša. Parašyti paprograme, kuri iš sarašo pašalina didžiausia
program trecia;
type sarasas=^elem;
     elem=record
        inf:integer;
        kitas:sarasas;
        raktas:integer;
        end;
        
//Saraso sukurimas--------------------------------------------------------------
procedure kurti_sarasa(var pradinis:sarasas; var count:integer);

var klaida,inf,ct:integer;
    laikinas:sarasas;
    input:string;
    
begin
    ct:=0;
    count:=0;
    New(pradinis);
    New(laikinas);
    laikinas:=pradinis;
    while input<>'s' do
    begin
        WriteLn('Iveskite ',count+1,'-aji saraso elementa, noredami nutraukti ivedima, rasykite ''s''');
        ReadLn(input);
        Val(input,inf,klaida);
        if klaida=0 then
        begin
            if count>=1 then
            begin
                new(laikinas^.kitas);
                laikinas:=laikinas^.kitas;
            end;
       laikinas^.inf:=inf;ct:=ct+1;
       laikinas^.raktas:=ct;
       count:=count+1;
       end
       else
       if klaida=0 then WriteLn('Jus ivedete ne skaiciu, prasome ivesti skaiciu');
    end;
end;
//------------------------------------------------------------------------------

//Saraso isvedimas--------------------------------------------------------------
procedure spausdinti(var pradinis:sarasas; count:integer);
var laikinas:sarasas;
    i:integer;

begin
    laikinas:=pradinis;
    for i:=1 to count do
    begin
        WriteLn(i,'-as elementas ',laikinas^.inf);
        laikinas:=laikinas^.kitas;
    end;
end;
//------------------------------------------------------------------------------

//Didziausio elemento radimas---------------------------------------------------
procedure rasti_didziausia(var pradinis:sarasas; var count:integer; var didziausias:integer);
var i:integer;
    laikinas:sarasas;

begin
    New(laikinas);
    laikinas:=pradinis;
    didziausias:=1;
    for i:=1 to count-1 do
    begin

        if laikinas^.inf<laikinas^.kitas^.inf then didziausias:=i+1;
        laikinas:=laikinas^.kitas;

    end;
end;
//------------------------------------------------------------------------------

//Elemento trynimas is saraso---------------------------------------------------
procedure trinti(var pradinis:sarasas; raktas:integer; var count:integer);
    var i:integer; laikinas,po,pries:sarasas;
begin
    New(laikinas);
    New(po);
    New(pries);
    laikinas:=pradinis;

    if raktas=1 then //bus du variantai: kai naikinamas 1as elementas, ir kai naikinami visi elementai
    begin
        for i:=2 to count do  //ciklas skirtas eiles numeriams normalizuoti
        begin
            pradinis:=pradinis^.kitas; //iskart pereina prie antro nes pirma ir taip reikes trinti
            pradinis^.raktas:=pradinis^.raktas-1;
        end;
    pradinis:=laikinas;  //gryztama prie pirmo elemento kad butu galima ji istrinti
    New(pradinis);

    pradinis:=laikinas^.kitas; //dabar pirmas elementas yra buves antras elementas
    end else //antars 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:=pradinis;
            pradinis:=pradinis^.kitas;
        end;

        pries^.kitas:=pradinis^.kitas;  //nurodo kad elementas esantis pries istrintaji elementa rodys i elementa esanti po istrintojo elemento
        po:=pradinis;      //nukopijuoja pradinis i po kad po galetu normalizuoti likusi sarasa, taip nepakeiciant pradinis kuris dar bus reikalingas dispousinant elementa, ir laikinas, kuris bus reikalingas grazinant sarasa i pradzia

        for i:=raktas to count-1 do //normalizuoja
        begin
            po:=po^.kitas;
            po^.raktas:=po^.raktas-1;
        end;

        Dispose(pradinis);   //atlaisvina cele ir grazina pradinis i pradzia
        New(pradinis);

        pradinis:=laikinas;
    end;
    
count:=count-1;
end;
//------------------------------------------------------------------------------

var pradinis:sarasas;
    count, didz:integer;

begin
    didz:=0;
    writeln('Programa sarase suranda didziausia elementa ir ji pasalina.');
    writeln('');
    kurti_sarasa(pradinis,count);
    writeln('');
    writeln('Jusu ivestas sarasas:');
    spausdinti(pradinis,count);
    rasti_didziausia(pradinis,count,didz);
    writeln('');
    writeln('Didziausias yra ',didz,'-as elementas.');
    writeln('Sarasas be didziausio nario:');
    trinti(pradinis,didz,count);
    spausdinti(pradinis,count);
    Readln;
end.