Documente Academic
Documente Profesional
Documente Cultură
Ciausu Eduard-Florian
Craiova 2011
Tema:
Coada-Intrarea si iesirea locomotivelor dintr-un depou
Cuprins:
1.Scurta introducere in Turbo Pascal.4 2.COADA (F I F O)...6 2.1.Crearea listei de tip coada...7 2.2.Parcurgerea elementelor unei cozi8 2.3.Stergerea unui element al cozii..9 2.4.Utilitatea unei cozi10 2.5.Exemplu de program in care este utilizata coada.11 2.6.Dispecerizarea locomotivelor14 3.Bibliografie.................................................18
Structura programelor Pascal 1. Orice program ncepe printr-un cuvnt numit PROGRAM care este urmat de numele propriu-zis al programului, adica de un nume ales de utilizator si de semnul ; (punct si virgula) 2. Orice program contine cel putin odata cuvintele cu un nteles special BEGIN si END 3. Orice program se termina prin punct 4. Orice cuvant al programului poate fi scris cu litere mari sau mici, deoarece nu are importanta 5. n versiunea Turbo, prima linie poate lipsi, desi nu se recomanda acest lucru, din ratiuni de ordine 6. Plasarea cuvintelor pe linie si numarul de spatii dintre ele sunt la alegerea programatorului. Se poate scrie tot programul pe o singura linie, nsa este bine ca programul sa fie scris n asa fel nct sa fie usor de nteles.
Turbo Pascal - Un program scris n Pascal, orict de complex ar fi, are urmatoarea structura : PROGRAM nume: definitii de constante ; definitii de tipuri ; declaratii de variabile ;
4
!Nu este obligatoriu ca ntr-un program sa figureze toate acestea, dar daca
ele figureaza, trebuie sa apara n aceasta ordine.
Orice program cuprinde doua parti esentiale : o descrierea instructiunilor ( a actiunilor) si o descrierea datelor care snt prelucrate de instructiuni
Un program Turbo Pascal este structurat astfel : a) un antet de program, care contine cuvntul rezervat PROGRAM urmat de numele programului b) o declaratie, introdusa n cuvntul rezervat USES, a numelor unit-urilor, care se vor folosi ntr-un program c) o parte obligatorie formata dintr-un bloc, urmat de caracterul punct
COADA (F I F O)
Reprezinta o categorie speciala de lista liniara, n care elementele se adauga la un capat (sfrsit) si se suprima la celalalt (nceput). Asemanarea cu o coada care se formeaza la un magazin va usura ntelegerea acestui tip de lista. Si denumirea este semnificativa : F I F O = First In First Out adica primul venit- primul servit Spre deosebire de stiva , la care operatiile se executa doar la un capat al stivei(vrf), la coada , adaugarile se fac numai la sfrsitul cozii (ca si asezarea unei persoane la rnd), iar iesirile sau stergerile , se realizeaza numai la nceputul cozii . Reprezentarea grafica a unei cozi :
Cnd coada este vida , pointerul prim va indica valoarea NIL. Deci conditia de coada vida este : prim=nil ; Variabila reper prim are ca valoare adresa primului element din lista, n timp cevariabila reper ultim,are ca valoare adresa ultimului element din lista.
Deci, spre deosebire de stiva, coada va avea doi pointeri (variabile de tip reper) : prim si ultim. Elementul curent a carui adresa este retinuta n variabila reper p,contine cele doua zone : o zona de informatie; o zona de legatura; Operatiile specifice acestei structuri sunt: crearea listei liniare de tip coada adaugarea unui element n structura stergerea unui element din structura parcurgerea (traversarea ) elementelor structurii
Trebuie sa se tina seama de ordinea n care se executa operatiile, pentru a nu se pierde informatiile. Legarea noului element n structura presupune existenta variabilei dinamice ultim^. In cazul n care lista este vida, variabila ultim nu exista, de aceea nu este necesara legarea elementului n structura.
Crearea cozii:
Procedure creare; Begin Write( dati informatia : );readln(text); If prim=nil {coada este vida} then begin {adaugarea primului element} new(prim); prim^.info:=text; prim^.next:=nil; ultim:=prim; end else {adaugare element la sfrsitul cozii} begin new(p); p^.info:=text; p^.next:=nil; ultim^.next:=p ultim:=p end end;
Parcurgerea cozii:
Procedure listare; begin if prim=nil {coada vida} then writeln (coada este vida) else begin p:=prim; repeat writeln(p^.info); p:=p^.next until p=nil end end;
10
......cod:=false ...else ...begin ......x:=coada[pcap]; ......pcap:=(pcap+1) mod max_aloc; ......if pcap=0 then .........pcap:=max_aloc; ......n:=n-1; ......cod:=true ...end end; procedure Listare; var ...i:integer; begin ...writeln('Elementele cozii sint:'); ...if pcap<pcoada then ......for i:=pcap to pcoada-1 do .........writeln(coada[i]:3) ...else ...begin ......for i:=pcap to max_aloc do .........writeln(coada[i]:3); ......for i:=1 to pcoada-1 do .........writeln(coada[i]:3) ...end end; begin {program principal} ...repeat ......writeln('I.Initializare coada'); ......writeln('A.Adauga element in coada'); ......writeln('E.Extrage element din coada'); ......writeln('L.Listare elemente coada'); ......writeln('S.Sfirsit program'); ......write('Optiunea dvs. va rog:');readln(ch); ......case upcase(ch) of ......'I':InitCoada; ......'A':begin
12
.........write('Valoarea de adaugat =');readln(x); .........AdaugaEl(x,cod); .........if cod then ............Listare .........else ............writeln('Dimensiune alocare coada insuficienta!') .........end; ......'E':begin .........ExtragEl(x,cod); .........if cod then ............writeln('S-a extras elementul',x:3) .........else ............writeln('Coada vida!') .........end; ......'L':Listare ......end; ......readln ...until ch in ['S','s'] end {Static_Coada}.
13
Dispecerizarea locomotivelor
Un exemplu clasic pentru probleme ce se rezolva utiliznd liste de tip coada este problema urmatoare: Se considera un depou de locomotive cu o singura linie de cale ferata cu o intrare si o iesire. Sa se scrie programul care realizeaza dispecerizarea locomotivelor din depou: Sa se scrie programul care realizeaza dispecerizarea locomotivelor prelucrnd comenzi de forma: I-intrarea unei locomotive, E-iesirea unei loc, Llistarea si S- oprirea programului afisnd locomotivele existente. program depozit; uses crt; type reper =^element; element=record cod:word; next:reper end; var prim, ultim, p:reper; comanda:char; procedure intrare; {adaugarea unui element}
14
var codul:word; begin write(codul locomotivei: ); readln(codul); if prim=nil then begin new(prim); prim^.cod:=codul; prim^.next:=nil; ultim:=prim; end else begin new(p); p^.cod:=codul; p^.next:=nil; ultim^.next:=p; ultim:=p end end; procedure iesire; begin if prim=nil then writeln(depoul este gol)
15
else begin writeln(iese locomotiva cu codul ,prim^.cod); p:=prim; prim:=prim^.next; dispose(p) end end; procedure listare; begin if prim=nil then writeln(depoul este gol) else begin writeln(locomotivele din depou sunt: ); p:=prim; repeat writeln(p^.cod); p:=p^.next until p=nil end end; Begin clrscr; prim:=nil; repeat
16
{traversarea cozii}
write(comanda: ); readln(comanda); comanda:=UpCase(comanda); case comanda of I:intrare; E:iesire; S,L:listare; end until comanda=S ; readln end.
17
Bibliografie:
1. Algoritmi & Limbajul Pascal - Teorie si aplicatii-Eugen Popescu, Ecaterina Ursache, Cristinele Claudia Neacsu, Editura Else 2. Informatica generala, Radu Marsanu, Editura Tehnica Bucuresti
18