Programos sprendžiamas uždavinys NR04: Valgykloje į eilę stoja studentai. Stojant į eilę fiksuojamas studento vardas ir jo draugo (tik vieno) vardas. Jei draugo eilėje nėra, tai studentas stoja į eilės galą, o jei yra, tai prieš draugą. Jei studentas stoja ne į eilės galą, tai turi būti atspausdintas studentų, kuriuos jis “pralenkė” sąrašas. Aptarnaujant studentą turi būti spausdinamas jo vardas ir užleistų į priekį draugų skaičius. Turi būti numatytos galimybės: “atlaisvinti” eilę darbui pasibaigus; pasižiūrėti kiek eilėje studentų ir kiek “užleistų be eilės studentų; išvesti “užleistų” ir “užleidusių” eilę studentų vardus. Programoje naudojami kintamieji: 1) Kintamieji naudojami studentų eilei formuoti: klient, zm (zmogus tipo); 2)Kintamieji naudojami užleistųjų ir užleidusiųjų sąrašam formuoti: uzleist,uzleidus,uz (zmogus tipo); 3) Kintamieji naudojami skaitiniai (integer tipo) informacijai apie studentus eilėje kaupti: nr(studento numeris eilėj), studsk(studentų skaičius eilė), beeilessk(studentų užleistų be eilės skaičius),uzl(užleidusiųjų skaičius). 4)Kintamieji naudojami studento vardui ir draugo vardui perduoti į procedūras vard, drvard(string tipo) 5) Kintamieji naudojami kaip saugikliai: M_sk,k(integer tipo). Programoje naudojamos procedūros: MENIU- procedūra vartotojui pateikia pasirenkamą veiksmų sąrašą( meniu), kuriuos programa daro ir vartotojas gali pasirinkti. Spausdinti – procedūra išspausdina studentų esančių eilėj sąrašą, užleistųjų ir užleidusiųjų sąrašus. Tai padaroma spausdinant įrašo a elementus kiekvieno ciklo metu. Perėjimo nuo vieno elemento prie kito schema: Funkcijos pradžioje: Programa atspausdina: Kliento vardas: Paulius Kliento draugo vardas: Justinas Programa atspausdina: Kliento vardas: Jonas Kliento draugo vardas: Arunas Programa atspausdina: Kliento vardas: Marytė Kliento draugo vardas: Kazytė Procedūros spausdinti pabaiga Ieile – procedūra į eilės galą pastato naują studentą – klientą. Elemento pastatymo į eilės galą operacijos schema: Pradinė eilė Pirmiausia procedūra tikrina ar einamasis elementas yra paskutinis (if klient =Nil then...), jei ne rekursyviai kreipiasi į save kol pasiekia paskutini elementą(studentą) eilėje. Pasiekusi eilės galą procedūra vykdo pastatymo į eilės galą operaciją. Papildyta eilė Drpaieska – procedūra ieško naujo kliento-studento draugo eilėje. Perėjimo nuo vieno elemento prie kito schema Į procedūrą perduodama eilė (einamasis apibrauktas ryškiau) Eilė po pirmo paieškos ciklo, neradus draugo. Taip pasiekiamas eilės galas, jei dar prieš tai nerandamas kliento draugas. Ieile_pr_dr - procedūra naują elementą(klientą- studentą) pastato į eilę prieš jo draugą, kuris jau yra eilėje. Perduodant į procedūrą kintamasis zm^ tampa lokaliu kintamuoju klient^( kad nekiltų dviprasmybė schemose jį žymėsiu zm^). Elemento įterpimo prieš draugą schema: Pradinė eilė: Sukuriamas naujas elementas: New(asmuo); zm^ – elemento turinys perrašomas į elementą asmuo^: Nauja informacija įrašoma į zm^, o jo rodyklė nukreipiama į naują elementą asmuo^: klient^.uzleidimai:=uzl; klient^.vardas:=vard; klient^.drvardas:=drvard; klient^.rod:=asmuo; aptarnavimas – procedūra pašalina pirmą eilės elementą („aptarnauja klientą“) ir perduoda pagrindinei programai jo duomenis(vardą, draugo vardą, užleidimų skaičių) kad jie būtų atspausdinti. Elemento pašalinimo schema Pradinė eilė prieš pašalinimą: Pašalinamo elemento duomenys surašome darbiniame elemente (kintamajame): Antro elemento duomenys perrašomi į pirmą (sąrašas perstumiamas). Pašalinamas darbinis elementas asmuo^ ir jo duomenys: Dispose(asmuo); Ieile2 – procedūra naudojama sudaryti užleistųjų ir užleidusiųjų eilę sąrašams sudaryti. Jos veikimas toks pat kaip ir procedūros Ieile, bet ji pagrindiniai programai atiduoda kitus kintamuosius. Programos kodas program Laboras; uses crt; type zmogus = ^Z; Z = record vardas: string; drvardas:string; uzleidimai:integer; rod:zmogus; end; Procedure MENIU(var nr:integer); begin ClrScr; GOTOXY(30,1); textcolor(green); Writeln(' MENIU:'); Writeln(' 1 - Naujas narys eilej'); Writeln(' 2 - Aptarnaujamas vienas narys ir pasalinamas is eiles'); Writeln(' 3 - Spausdinti eiles nariu sarasa'); Writeln(' 4 - Valgykla baigia darba atlaisvinam eile'); Writeln(' 5 - Eiles ilgis ir uzleistu be eiles skaicius'); Writeln(' 6 - Uzleistieji ir uzleidusieji vieta eilej'); Writeln(' 7 - MENIU iskvietimas'); GOTOXY(20,9); textcolor(red); Writeln('RINKITES VEIKSMA '); textcolor(White); Readln(nr); end; procedure Spausdinti(klient:zmogus;k:integer); var a:zmogus; n:integer; begin n:=1; a:=klient; while a NIL do begin textcolor(white); if k=0 then begin Writeln(' ',n, '. Kliento vardas: ',a^.vardas); Write(' Kliento draugo vardas: ',a^.drvardas); Textcolor(red); Write(' Testi:ENTER'); Readln; end else if k=1 then begin Write(' ',n, '. Kliento vardas: ',a^.vardas); Textcolor(red); Write(' Testi:ENTER'); Readln; end; a:=a^.rod; n:=n+1; end; end; procedure Ieile(var klient:zmogus; vard, drvard:string); begin if klient =Nil then begin New(klient); klient^.uzleidimai:=0; klient^.vardas:=vard; klient^.drvardas:=drvard; klient^.rod:=Nil; end else Ieile(klient^.rod, vard, drvard); end; procedure Ieile_pr_dr(klient:zmogus; vard,drvard:string;uzl:integer ); var asmuo:zmogus; k:integer; begin New(asmuo); asmuo^:=klient^; klient^.uzleidimai:=uzl; klient^.vardas:=vard; klient^.drvardas:=drvard; klient^.rod:=asmuo; k:=1; textcolor(white); Writeln('Aplenktieji:'); Spausdinti(klient^.rod,k); end; procedure drpaieska(var klient,zm:zmogus; drvard:string); var dryra:boolean; begin dryra:=false; zm:=klient; While not dryra and(zmNil)do if zm^.vardas=drvard then begin dryra:=true; end else zm:=zm^.rod; end; procedure aptarnavimas(var klient:zmogus; var vard, drvard: string;var uzl:integer); var asmuo:zmogus; begin uzl:=klient^.uzleidimai; vard:=klient^.vardas; drvard:=klient^.drvardas; asmuo:=klient; klient:=klient^.rod; Dispose(asmuo); end; procedure uzleidpaieska(var uzleidus,uz,zm:zmogus); var yra:boolean; begin yra:=false; uz:=uzleidus; While (not yra) and(uzNil)do if (uz^.vardas=zm^.vardas) and(uz^.drvardas=zm^.vardas) then begin yra:=true; end else uz:=uz^.rod; end; procedure Ieile2(var uzleid,zm:zmogus); begin if uzleid =Nil then begin New(uzleid); uzleid^.uzleidimai:=zm^.uzleidimai; uzleid^.vardas:=zm^.vardas; uzleid^.drvardas:=zm^.drvardas; uzleid^.rod:=Nil; end else Ieile2(uzleid^.rod,zm); end; Pagrindine programa var klient, zm,uzleist,uzleidus,uz:zmogus; nr, studsk, beeilessk,uzl:integer; M_sk,k:integer;{saugiklis} vard, drvard:string; BEGIN ClrScr; MENIU(nr); klient^.uzleidimai:=0; klient:=Nil; uzleist:=Nil; uzleidus:=Nil; while nr0 do begin M_sk:=0; case nr of 1:begin textcolor(white); Writeln(' Iveskite asmens varda'); Readln(vard); Writeln(' Iveskite jo draugo varda'); Readln(drvard); drpaieska(klient,zm,drvard); if zm=Nil then begin Ieile(klient,vard, drvard); studsk:=studsk+1; end else if zmNil then begin studsk:=studsk+1; beeilessk:=beeilessk+1; zm^.uzleidimai:=zm^.uzleidimai+1; Ieile2(uzleidus,zm);{cia zm yra klientas pries kuri reikia iterpti drauga} Ieile_pr_dr(zm,vard,drvard,uzl); {uzleidpaieska(uzleist,uz,zm); if uz = Nil then} Ieile2(uzleist,zm);{cia zm jau yra iterptasis klientas pries drauga} end; end; 2 :begin if (klientNil) then begin aptarnavimas(klient,vard, drvard,uzl); studsk:=studsk-1; textcolor(white); Writeln (' Aptarnautas klientas - ', vard,' uzleido vieta ',uzl,' draugams'); end else begin while uzleist Nil do begin aptarnavimas(uzleist, vard,drvard,uzl); end; while uzleidus Nil do begin aptarnavimas(uzleidus, vard,drvard,uzl); end; textcolor(white); beeilessk:=0; Writeln(' Eile jau tuscia'); end; end; 3 :begin k:=0; if klientNIL then Spausdinti(klient,k) else begin textcolor(White); Writeln(' Eile tuscia'); end; end; 4 :begin while klient Nil do begin aptarnavimas(klient, vard, drvard,uzl); studsk:=studsk-1; beeilessk:=0; end; while uzleist Nil do begin aptarnavimas(uzleist, vard,drvard,uzl); end; while uzleidus Nil do begin aptarnavimas(uzleidus, vard,drvard,uzl); end; textcolor(white); Writeln(' Visi issivaiksciojo - eile TUSCIA'); end; 5 :begin textcolor(white); writeln(' Eileje yra- ',studsk,' klientu.Uzleistu be eiles: ',beeilessk); end; 6 :begin k:=1; if (uzleidusNil) or (uzleistNil)then begin Writeln(' Uzleidusieji eile:'); spausdinti(uzleidus,k); Writeln; textcolor(white); Writeln(' Uzleistieji eilej:'); spausdinti(uzleist,k); end else begin textcolor(white); writeln('Uzleistu ir uzleidusiu eile nera'); end; end; (smfing miss) if M_sk=0 then begin textcolor(red); Write(' RINKITES VEIKSMA '); textcolor(white); writeln('(7 - paziureti MENIU, jei nesimato)'); Readln(nr); end; {ClrScr;} end; END.{pabaiga}
Šį darbą sudaro 1006 žodžiai, tikrai rasi tai, ko ieškai!
★ Klientai rekomenduoja
Šį rašto darbą rekomenduoja mūsų klientai. Ką tai reiškia?
Mūsų svetainėje pateikiama dešimtys tūkstančių skirtingų rašto darbų, kuriuos įkėlė daugybė moksleivių ir studentų su skirtingais gabumais. Būtent šis rašto darbas yra patikrintas specialistų ir rekomenduojamas kitų klientų, kurie po atsisiuntimo įvertino šį mokslo darbą teigiamai. Todėl galite būti tikri, kad šis pasirinkimas geriausias!
Norint atsisiųsti šį darbą spausk ☞ Peržiūrėti darbą mygtuką!
Mūsų mokslo darbų bazėje yra daugybė įvairių mokslo darbų, todėl tikrai atrasi sau tinkamą!
Panašūs darbai
Atsisiuntei rašto darbą ir neradai jame reikalingos informacijos? Pakeisime jį kitu nemokamai.
Pirkdamas daugiau nei vieną darbą, nuo sekančių darbų gausi 25% nuolaidą.
Išsirink norimus rašto darbus ir gauk juos akimirksniu po sėkmingo apmokėjimo!