Skip to content

Programul creeaza un trenulet, care este reprezentat folosind o structura ce contine o lista dublu inlantuita circulara cu santinela.

Notifications You must be signed in to change notification settings

camistrate/Trenulet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Pentru compilare: make build
Pentru rulare: make run
Pentru stergerea executabilelor create: make clean

Programul creeaza un trenulet, care este reprezentat folosind o structura ce 
contine o lista dublu inlantuita circulara cu santinela (locomotiva) cu 
vagoanele inscriptionate cu elemente de tip
caracter si adresa vagonului în care se află mecanicul. Pe acest trenulet se 
pot efectua mai multe operatii.

Dupa rularea programului, se va initializa locomotiva (prin apelul functiei 
init_lcm) si primul vagon din tren, in care se afla mecanicul. Apoi, se va 
apela functia pentru citirea si executarea comenzilor.

citire_comenzi:
-deschide fisierele de input si output
-apeleaza functia care initializeaza coada pentru comenzi (init_coada)
-citeste din fisier numarul de comenzi si fiecare comanda in parte

-verifica pentru fiecare comanda ce tip de functie  este (functie care se 
adauga in coada sau functie care se executa pe loc - SHOW, SHOW_CURRENT, 
SWITCH, EXECUTE)
-pentru functiile care se executa pe loc, se apeleaza functia corespunzatoare
acesteia, dar daca functia este cea EXECUTE, se apeleaza functia 
corespunzatoare primei comenzi din coada, dupa care comanda din coada este 
eliminata prin apelul functiei dequeue
-celelalte functii sunt adaugate in coada prin apelul functiei engueue

-dupa citirea si executarea comenzilor din fisier, se inchid ambele fisiere.

functii:

show:
-se afiseaza de la locomotiva spre ultimul vagon fiecare valoare 
corespunzatoare vagonului curent, avand in vedere evidentierea vagonului in 
care se afla mecanicul

show_current:
-se afiseaza valoarea corespuncatoare vagonului in care se afla mecanicul

switch_coada:
-inverseaza legaturile pentru fiecare element din coada
-inverseaza inceputul cozii cu sfarsitul

move_right:
-daca mecanicul se afla pe ultimul vagon, se va adauga un nou vagon la tren 
inscriptionat cu valoarea "#"
-muta mecanicul pe urmatorul vagon

move_left:
-daca mecanicul se afla in primul vagon, mecanicul se va muta pe ultimul vagon
din tre, altfel se va muta pe vagonul anterior

wirte:
-schimba inscriptionarea de pe vagonul in care se afla mecanicul

clear_cell:
-daca trenul are un singur vagon, trenul revine la starea initiala (vagonul va
avea acum inscriptia "#")
-daca mecanicul se afla in primul vagon, se va elimina acest vagon, iar 
mecanicul o sa fie mutat in ultimul vagon
-altfel, se va elimina vagonul in care se afla mecanicul, iar mecanicul o sa 
fie mutat pe vagonul de dinaintea celui eliminat
-cand se elimina un vagon, se elibereaza memoria ocupata de acesta

clear_all:
-se porneste din primul vagon al trenului si se elimina fiecare vagon, pana 
cand ramane unul singur
-cand se elimina un vagon, se elibereaza memoria ocupata de acesta
-mecanicul se muta pe vagonul ramas, care ia inscriptia "#"

insert_right:
-se aloca memorie pentru un nou vagon
-se verifica daca mecanicul se afla in ultimul vagon sau nu si se efectueaza 
legaturile specifice fiecarui caz
-mecanicul este mutat pe vagonul nou inserat (se muta la dreapta)

insert_left:
-se aloca memorie pentru un nou vagon
-daca mecanicul se afla in primul vagon, se afiseaza in fisierul pentru output
mesajul "ERROR", se elibereaza memoria alocata pentru vagonul nou, iar 
mecanicul isi va pastra pozitia
-altfel, se creeaza legaturile necesare pentru adaugarea vagonului nou la 
stanga mecanicului, dupa care acesta este mutat pe noul vagon (se muta la 
stanga)

search:
-daca trenul are un singur vagon, verificam daca sirul cautat are un singur 
caracter, care e acelasi cu cel de pe vagon, mecanicul isi pastreaza pozitia,
altfel se afiseaza in fisiserul de output mesajul "ERROR" si mecanicul isi 
pastreaza pozitia. executia functiei ia sfarsit
-altfel, cu ajutorul a doi pointeri catre vagoane verificam daca se gaseste 
sirul cautat
-daca sirul a fost gasit, mecanicul este mutat pe vagonul care reprezinta prima
pozitie din sir, altfel se afiseaza in fisiserul de output mesajul "ERROR" si 
mecanicul isi pastreaza pozitia

search_left:
-se cauta incepand cu mecanicul, catre stanga, pana se intalnese locomotiva
-cu ajutorul a doi pointeri catre vagoane verificam daca se gaseste sirul 
cautat
-daca sirul este gasit, mecanicul este mutat in vagonul inscriptionat cu 
ultimul caracter din sir, altfel se afiseaza in fisiserul de output mesajul 
"ERROR" si mecanicul isi pastreaza pozitia

search_right:
-se cauta incepand cu mecanicul, catre dreapta, pana se intalnese locomotiva
-cu ajutorul a doi pointeri catre vagoane verificam daca se gaseste sirul 
cautat
-daca sirul este gasit, mecanicul este mutat in vagonul inscriptionat cu 
ultimul caracter din sir, altfel se afiseaza in fisiserul de output mesajul 
"ERROR" si mecanicul isi pastreaza pozitia

enqueue:
-functie care adauga un element in coada

dequeue:
-functie care elimina un element din coada si elibereaza memoria ocupata de 
acesta

About

Programul creeaza un trenulet, care este reprezentat folosind o structura ce contine o lista dublu inlantuita circulara cu santinela.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published