This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
laboratoare:laborator-02 [2015/10/23 18:53] razvan.deaconescu |
laboratoare:laborator-02 [2015/10/23 19:05] (current) razvan.deaconescu [4. [40p] C: GOTOs] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Laborator 02: Toolchain ====== | ====== Laborator 02: Toolchain ====== | ||
| + | |||
| În acest laborator, vom trece prin fiecare nivel de procesare a unui limbaj de nivel înalt și prin toolchain-ul pe care îl vom folosi de acum încolo. | În acest laborator, vom trece prin fiecare nivel de procesare a unui limbaj de nivel înalt și prin toolchain-ul pe care îl vom folosi de acum încolo. | ||
| ===== C basics: GOTOs ===== | ===== C basics: GOTOs ===== | ||
| + | |||
| Un concept mai puțin abordat în tutoriale de C este instrucțiunea **goto**. | Un concept mai puțin abordat în tutoriale de C este instrucțiunea **goto**. | ||
| Prin instrucțiunea **goto**, un program poate sări în puncte intermediare în cadrul unei funcții. | Prin instrucțiunea **goto**, un program poate sări în puncte intermediare în cadrul unei funcții. | ||
| - | Aceste puncte intermediare se numesc **label**-uri (etichete).\\ | + | Aceste puncte intermediare se numesc **label**-uri (etichete). |
| Un exemplu de cod: | Un exemplu de cod: | ||
| <code c> | <code c> | ||
| Line 279: | Line 282: | ||
| </note> | </note> | ||
| - | Creați un fișier nou în **cadrul proiectului**, numit ''main.cpp'' și adăugați următorul cod în fișier. Puteți da click dreapta pe intrarea ''Source files'' din partea dreapta a ecranului ''Visual Studio'' și apoi puteți folosi ''Add -> New Item''. | + | Pentru a adăuga un fișier nou în cadrul proiectului mergeți cu mouse-ul în zona ''Solution Explorer'' (din partea dreapta sus a ecranului) și apoi folosiți click dreapta pe intrarea ''Source files'', apoi folosiți ''Add'' și apoi, după caz, ''New Item'' sau ''Existing Item''. Adăugați un fișier nou în **cadrul proiectului**, numit ''main.cpp'' și adăugați următorul cod în fișier: |
| <code c> | <code c> | ||
| #define DATA_LEN 100 | #define DATA_LEN 100 | ||
| Line 356: | Line 359: | ||
| ==== 4. [40p] C: GOTOs ==== | ==== 4. [40p] C: GOTOs ==== | ||
| - | Implementați algoritmii de mai jos în C **fără a folosi apeluri de funcţii (exceptând //scanf()// şi //printf()//), else, for, while, do {} while; și construcțiile cu if nu pot conține return**. Adică va trebui să folosiți multe instrucțiuni ''goto''. | + | <note important> |
| - | - maximul dintr-un vector [20p] | + | |
| - | - căutare binară [20p] | + | Când scrieți cod cu etichete (label-uri) țineți cont de următoarele recomandări de indentare: |
| + | * Nu indentați etichetele (label-urile). "Lipiți-le" de marginea din stânga a ecranului de editare. | ||
| + | * O etichetă este singură pe linie. Nu există cod după etichetă. | ||
| + | * Nu țineți cont de indentare în indetarea codului. Codul trebuie indendat în același mod și cu etichete și fără etichete. | ||
| + | * Puneți o linie liberă înaintea linie care conține o etichetă. | ||
| + | |||
| + | </note> | ||
| + | |||
| + | Pentru algoritmii de mai jos scrieți cod în C **fără** a folosi: | ||
| + | * apeluri de funcţii (exceptând //scanf()// şi //printf()//) | ||
| + | * else | ||
| + | * for | ||
| + | * while | ||
| + | * do {} while; | ||
| + | * construcțiile ''if'' care conțin return | ||
| + | |||
| + | Adică va trebui să folosiți ''if'' și multe instrucțiuni ''goto''. | ||
| + | |||
| + | **[20p]** Implementați maximul dintr-un vector folosind cod C și constrângerile de mai sus. | ||
| + | |||
| + | **[20p]** Implementați căutare binară folosind cod C și constrângerile de mai sus. | ||
| <note warning> | <note warning> | ||