This shows you the differences between two versions of the page.
programare:teme_2021:tema1_2021_cbd [2021/11/03 10:23] razvan.nitu1305 [Task 1 - Decodificare instructiune (40p)] |
programare:teme_2021:tema1_2021_cbd [2021/12/02 16:25] (current) razvan.nitu1305 [Trimitere temă] |
||
---|---|---|---|
Line 69: | Line 69: | ||
- rezolvarea acestui task se va afla in fisierul **task1.c** | - rezolvarea acestui task se va afla in fisierul **task1.c** | ||
- | ===== Task 2: Executare instructiune (50p) ===== | + | ===== Task 2 - Executare instructiune (50p) ===== |
În cadrul acestui exercițiu vom continua task-ul anterior prin: | În cadrul acestui exercițiu vom continua task-ul anterior prin: | ||
Line 135: | Line 135: | ||
- numerele citite de la tastatura sunt considerate fara pozitive, insa rezultatul poate fi negativ asa ca folositi o variabila de tip **int** pentru a salva rezultatul executarii instructiunii. | - numerele citite de la tastatura sunt considerate fara pozitive, insa rezultatul poate fi negativ asa ca folositi o variabila de tip **int** pentru a salva rezultatul executarii instructiunii. | ||
- | ===== Task 3 - Operanzi cu dimensiuni ciudate (20p) ===== | + | - afisati doar numarul rezultat, altfel checker-ul nu va lua in considerare testul |
+ | |||
+ | ===== Bonus 1 - Operanzi cu dimensiuni ciudate (20p) ===== | ||
In cadrul acestui task vom extinde implementarea de la Task 2 pentru a executa instrucțuni ale căror operanzi pot avea **orice** dimensiune din intervalul [1, 16]. În continuare, operanzii for fi citiți de la intrarea standard sub forma **unsigned short**, însă un operand ar putea să se întindă pe 2 citiri succesive. | In cadrul acestui task vom extinde implementarea de la Task 2 pentru a executa instrucțuni ale căror operanzi pot avea **orice** dimensiune din intervalul [1, 16]. În continuare, operanzii for fi citiți de la intrarea standard sub forma **unsigned short**, însă un operand ar putea să se întindă pe 2 citiri succesive. | ||
Line 142: | Line 144: | ||
Exemplu: | Exemplu: | ||
- | **N = 1**, **Dim = 11**. (1+1)*11/16 = 1,375 => se citesc 2 numere de tipul **unsigned short**. Sa presupunem ca acestea sunt 374444 (**10010010010 00100**) si 33792 (**100001 0000000000**). Va trebuie sa facem o operație intre 1170 (**10010010010**) si 289 (**00100 100001**) | + | **N = 1**, **Dim = 11**. (1+1)*11/16 = 1,375 => se citesc 2 numere de tipul **unsigned short**. Sa presupunem ca acestea sunt 37444 (**10010010010 00100**) si 33792 (**100001 0000000000**). Va trebuie sa facem o operație intre 1170 (**10010010010**) si 289 (**00100 100001**) |
</note> | </note> | ||
**Precizări:** | **Precizări:** | ||
- | - Pentru acest task veti modifica modifica fisierul task2.c astfel incat sa extindeti functionalitatea pentru a rezolva task-ul curent. | + | - Acest task se va rezolva in fisierul task3.c |
- | ===== Bonus: Precedenta operatorilor (20p) ===== | + | - Pentru acest task veti copia continutul fisierul task2.c in fisierul task3.c si veti extinde functionalitatea acestuia. |
+ | |||
+ | - Pentru acest task, veti afisa doar rezultatul final. | ||
+ | |||
+ | |||
+ | ===== Bonus 2 - Precedenta operatorilor (20p) ===== | ||
Implementati precedenta operatilor, astfel incat * si / au precedenta egala intre ei, insa precdenta mai mai mare ca + si -. | Implementati precedenta operatilor, astfel incat * si / au precedenta egala intre ei, insa precdenta mai mai mare ca + si -. | ||
Line 158: | Line 165: | ||
Pentru + * - / si 1 2 3 4 5 vom avea 1 + 2*3 - 4/5 = 1 + 6 - 0 = 7 | Pentru + * - / si 1 2 3 4 5 vom avea 1 + 2*3 - 4/5 = 1 + 6 - 0 = 7 | ||
</note> | </note> | ||
+ | |||
+ | **Precizari**: | ||
+ | |||
+ | - Acest task se va rezolva in fisierul task4.c. | ||
+ | |||
+ | - Veti afisa doar rezultatul final. | ||
==== Trimitere temă ==== | ==== Trimitere temă ==== | ||
- | Tema va fi trimisă folosind [[https://v2.vmchecker.grid.pub.ro/homepage/|vmchecker]], cursul **Programarea Calculatoarelor (CB & CD)**. \\ | + | Tema va fi trimisă folosind [[https://vmchecker.cs.pub.ro/ui/#PCCB|vmchecker]], cursul **Programarea Calculatoarelor (CB & CD)**. \\ |
- | Găsiți arhiva cu checker-ul si makefile-ul {{:programare:teme_2020:pc_tema_1.zip|aici}}. | ||
Formatul arhivei va fi următorul: | Formatul arhivei va fi următorul: | ||
- | - {task1.c task2.c} | + | - {task1.c task2.c task3.c task4.c Makefile} |
- Un fișier [[https://en.wikipedia.org/wiki/README|README]] în care vă descrieți rezolvarea taskurilor. | - Un fișier [[https://en.wikipedia.org/wiki/README|README]] în care vă descrieți rezolvarea taskurilor. | ||
+ | |||
<note warning> | <note warning> | ||
- | - O parte din cerințe conțin explicații și în cod. | ||
- Arhiva trebuie să fie de tipul **zip**. | - Arhiva trebuie să fie de tipul **zip**. | ||
- | - Codul va fi scris doar în fișierele //gates.c//, //communication.c// și //hunt.c// | + | - Makefile-ul și testele vor fi cele din aceasta arhiva: {{:programare:teme_2021:miniprocesor.zip|}} |
- | - Makefile-ul și testele vor fi cele din arhiva de test - noi vom dezarhiva arhiva voastră direct in folderul //src// | + | |
- | - În scheletul de cod veți vedea bucăți de cod care conțin assert-uri **assert(condiție)** - acestea sunt folosite pentru a valida inputul | + | |
</note> | </note> | ||
+ | <note warning> | ||
+ | Nu includeti fisierele checkerului in arhiva voastra. **Nu folositi Makefile.checker** pe post | ||
+ | de Makefile in arhiva voastra: asta va duce la recursivitate infinita pe vmchecker. Puteti sa folositi | ||
+ | direct makefile-ul prezent in arhiva (**Makefile, nu Makefile.checker**). | ||
+ | </note> | ||
+ | |||
+ | <note warning> | ||
+ | In cazul in care testele va trec local, insa pica pe vmchecker cel mai probabil aveti | ||
+ | o sursa de "undefined behavior in cod". Pentru a va asigura ca scapati de aceste probleme, | ||
+ | compilati cu flagul de compilare `-Wall` si rezolvati toate warning-urile. | ||
+ | </note> | ||
=== Listă depunctări === | === Listă depunctări === | ||
Line 186: | Line 207: | ||
* [-5.0]: abordare ineficientă | * [-5.0]: abordare ineficientă | ||
* [-10.0]: variabile globale | * [-10.0]: variabile globale | ||
+ | * [-25.0]: Daca se folosesc vectori pentru stocarea bitilor | ||
* [-100.0]: TOT punctajul, în cazul în care se încearcă "obținerea" punctajului pe temă folosind alte metode decât cele normale | * [-100.0]: TOT punctajul, în cazul în care se încearcă "obținerea" punctajului pe temă folosind alte metode decât cele normale | ||
* în cadrul cursului de programare nu avem ca obiectiv rezolvarea în cel mai eficient mod posibil a programelor; totuși, ne dorim ca abordarea să nu fie una ineficientă, de genul să nu folosiți instrucțiuni repetitive acolo unde clar nu era cazul, etc. | * în cadrul cursului de programare nu avem ca obiectiv rezolvarea în cel mai eficient mod posibil a programelor; totuși, ne dorim ca abordarea să nu fie una ineficientă, de genul să nu folosiți instrucțiuni repetitive acolo unde clar nu era cazul, etc. | ||