Public feed #722245

Something

public text v1 · immutable
Raw Edit
·published 2007-10-01 21:18 UTC
rendered paste body
//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.