-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathREADME
More file actions
119 lines (98 loc) · 4.76 KB
/
Copy pathREADME
File metadata and controls
119 lines (98 loc) · 4.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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