Atestat La Info Spanzuratoare [PDF]

  • 0 0 0
  • Gefällt Ihnen dieses papier und der download? Sie können Ihre eigene PDF-Datei in wenigen Minuten kostenlos online veröffentlichen! Anmelden
Datei wird geladen, bitte warten...
Zitiervorschau

1

ATESTAT LA INFORMATICA

Spanzuratoarea

Prof. Coord. Stan Maria

Elev: Munteanu Nicolae

2

2019 Cuprins

Numarul paginii

Tema proiectului

3

Introducere in C

4

Limbajul C

4

Caracteristici ale C-ului

4

C şi C++

5

Desfasurarea programului

7

Aspecte generale

7

Descrierea funcţiilor

7

Codul sursa

9

Print-screen a unei rulari a programului

14

Concluzii

15

3

Tema proiectului Lucrarea de fata isi propun sa studieze functionalitatea, eficienta si utilitatea limbajului de programare C++ prin compunerea unui cod si compilarea acestuia in practica. Problema aleasa ca domeniu de studiu este jocul “Spanzuratoarea”, un joc emblematic pentru utilizatorii de calculator din toate grupele de varsta, iar grafica pentru ilustrarea “spanzuratorii” este realizata din caractere simple. In continuare va vom prezenta caracteristicile si regulile jocului ilustrat: Informatii utile:  

Jocul “Spanzuratoarea” a fost adaptat pentru un singur utilizator al aplicatiei Se poate ghici atat o litera, cat si un grump de litere (sir de caractere)

- Cuvântul ce trebuie ghicit este reprezentat de un şir de linii, fiecare linie reprezentând o literă a cuvântului. - Sunt oferite ca ajutor prima si ultima litera a cuvantului. - Dacă jucătorul care ghiceşte sugerează o literă ce se află în cuvânt, programul completează spatiile cu litera corespunzatoare în toate poziţiile unde aceasta apare. - Dacă litera nu se află în cuvânt, programul desenează un element din diagrama „spânzurătoarea”. - Limita de greseli este de: 4 Jocul se încheie când:  

Jucătorul care ghiceşte completează tot cuvântul, sau îl ghiceşte exact. Este completata diagrama.

4

Introducere in C Limbajul C Limbajul C este un limbaj de programare standardizat, compilat, de nivel mediu. Este implementat pe majoritatea platformelor de calcul existente azi, şi este cel mai popular limbaj de programare pentru scrierea de software de sistem. Este apreciat pentru eficienţa codului obiect pe care îl poate genera, şi pentru portabilitatea sa. (Noţiunea de portabilitate nu este încă definită riguros. În mod intuitiv, spunem că un program este portabil daca el poate fi transferat uşor de la un tip de calculator la altul) C este prezentat uneori ca "asamblor portabil", făcându-se astfel diferenţele principale faţă de limbajele de asamblare: codul unui program C poate fi compilat şi rulat pe aproape orice tip de maşină (calculator), asemănător altor limbaje de programare, în timp ce limbajele de asamblare sunt specifice unui anumit model de maşină. Limbajul C aparţine clasei limbajelor de nivel scăzut sau de nivel mediu, aceasta indicând strânsa legătură între interoperabilitate şi echipamentul hardware. 

UNIX sunt scrise în C într-o proporţie majoritara. Astfel, din cele 13000 linii sursă ale sistemului de operare UNIX, numai 800 linii sunt scrise în limbaj de asamblare, restul fiind scrise în C.  In prezent limbajul C este implementat şi sub alte sisteme de operare. Practic el este disponibil pe toate calculatoarele, începând cu microcalculatoarele personale şi terminând cu supercalculatoarele. Ex: Pe calculatoarele de tip IBM PC este implementată o variantă a limbajului C numită TURBO C.  Insăşi compilatorul C este scris în C în proporţie de 80%. În felul acesta limbajul C asigură o portabilitate bună pentru programele scrise în el.

Caracteristici ale C-ului C a fost creat având drept scop important de a face ca programele mari să poată fi scrise mai uşor şi cu mai puţine erori în paradigma programării procedurale, dar fără a pune un obstacole în scrierea compilatorului de C, care este încărcat de caracteristicile complexe ale limbajului. C are urmatoarele caracteristici importante:  

Este un limbaj de bază simplu, cu importante funcţionalităţi cum ar fi funcţiile matematice sau cele de manipulare ale fişierelor Este focalizat pe paradigma programării procedurale, care facilitează programarea într-un mod structurat

5       

Utilizează un set simplu de tipuri de date ce împiedică multe operaţii neintenţionate Foloseşte un limbaj preprocesor, preprocesorul C, pentru sarcini cum ar fi definirea de macrouri şi includerea mai multor fişiere sursă Permite accesarea la nivel scăzut a memoriei calculatorului prin utilizarea pointerilor Permite folosirea parametrilor, care sunt comunicaţi funcţiilor prin valoare şi nu prin referinţă Pointeri la funcţii, ce permit forme rudimentare de închidere (engleză closure) şi polimorfism Declararea variabilelor Structuri de date sau tipuri de date agregate, definite de utilizator prin (struct), ce permit ca date înrudite să fie combinate şi manipulate ca un întreg[necesită citare]

Printre caracteristicile ce lipsesc în C, dar care pot fi găsite în alte limbaje de programare se enumeră:        

Un sistem automat de colectare a reziduurilor (de memorie) (engleză Garbage collection) Clasele şi obiectele (programarea orientată pe obiecte) Un sistem avansat de tipuri de date Programarea generică Supraîncărcarea Metaprogramarea Suport nativ pentru programarea multifir (engleză multithreaded) şi funcţiile de reţea Procesarea listelor

Deşi lista minusurilor limbajului C este destul de lungă, aceasta nu reprezintă un dezavantaj suficient de mare pentru inhiba utilizarea limbajului C în practică, deoarece permite ca noi compilatoare să poată fi scrise pe noi tipuri de platforme şi pentru că permite programatorului să ţină bine sub control programul pe care îl scrie. Acesta este unul din motivele care face ca un cod scris în C să fie mult mai eficient decât dacă ar fi scris în alte limbaje de programare. In plus, una din consecinţele acceptării şi eficienţei C-ului este aceea că multe compilatoare, biblioteci şi interpretoare ale limbajelor de nivel înalt sunt adesea implementate în C.

C şi C++ Limbajul de programare C++ a fost iniţial derivat din C. Totuşi, nu absolut orice program scris în C este valid C++. Deoarece C şi C++ au evoluat independent, au apărut, din nefericire, o serie de incompatibilităţi între cele două limbaje de programare [1]. Cea mai amplă revizie a limbajui C, C99, a creat un număr suplimentar de conflicte. Diferenţele fac să fie greu de scris programe şi biblioteci care să fie compilate şi să ruleze corect în calitate de cod C sau C++, şi produce confuzii celor care programează în ambele limbaje. Diferenţele fac ca fiecare din cele două limbaje de programare să împrumute din caracteristicile celuilalt limbaj de programare. Bjarne Stroustrup, creatorul limbajului C++, a sugerat de nenumărate ori [2] să se reducă incompatibilităţile pe cât de mult posibil pentru a maximiza interoperabilitatea dintre cele două limbaje de programare. Unii au argumentat că C şi C++ sunt două limbaje de programare distincte, compatibilitatea dintre ele fiind utilă dar nu vitală; potrivit acestei opinii, eforturile de a

6 reduce incompatibilitatea nu trebuie să reducă eforturile de a aduce elemente noi în mod independent celor două limbaje de programare. Cele mai importante diferenţe sunt:  







inline —funcţiile inline apar în secţiunea de declarare a variabilelor globale în C++, iar in C acestea apar în aşa zisele „fişiere statice“. Cuvântul cheie bool are în C99 propriul său header, . În variantele anterioare de C tipul de date boolean nu era definit, în schimb erau folosite o serie de metode (incompatibile) pentru a simula acest tip de date. Constantele caracter (cuprinse între apostrofuri) au dimensiunea unui int în C şi char în C++. Cu alte cuvinte, în C, sizeof('a') == sizeof(int); în C++, sizeof('a') == sizeof(char). Chiar şi în aceste condiţii, valoarea acestui tip de constante nu va depăşi valoarea maximă ce poată fi păstrată de char, deci o conversie de genul (char)'a' este sigură. Cuvinte cheie suplimentare au fost introduse în C++, deci acestea nu pot fi folosite ca identificatori aşa cum ar putea fi folosite în C. (de exemplu, code>try, catch, template, new, delete, ...) În C++, compilatorul creează automat o „etichetă“ pentru orice structură (struct), uniune (union) sau enumeraţie (enum), astfel încât struct S {}; în C++ este echivalent cu typedef struct S {} S; în C.

C99 a adoptat unele funcţionalităţi ce au apărut iniţial în C++. Printre acestea se enumeră:   

Declararea obligatorie a prototipului funcţiilor Cuvântul cheie inline Eliminarea variabilei implicite int ca valoare de întoarcere.

7

Desfasurarea programului

Aspecte generale 

După declararea bibiotecilor s-au declarat variabile ce vor fi folosite pe parcursul programului.Variabilele reprezintă spaţii în memoria calculatorului avînd acelaşi rol în timp.Limbajul C++ recunoaşte 5 tipuri de variabile: - Caracter: char (rang -127 ..+128) - Întreg : int (rang -32768..+32767) - Tip de variabilă neprecizat sau inexistent:void - Real în virgulă mobilă în simplă precizie:float (10-37..10+37) - Real în virgulă mobilă în dublă precizie:double(10-308.10’+308)



Modul de memorare a acestor tipuri de date depinde de tipul calculatorului şi de varianta limbajului C++. Moduri de implementare: Signed(cu semn) Unsigned(fără semn) Long(lung) Short(scurt)

S-au folosit variabile globale deoarece ele sunt recunoscute pe parcursul înteguluiprogram. 

Orice program în C se compilează de la funcţia principală main() . - Funcţia main() este aceea către care sistemul de operare transferă controlul atunci când se lansează în execuţie programul. - Parametrul void înaintea funcţiei arată că funcţia nu întoarce valori, void între paranteze arată că funcţia nu foloseşte parameti.



Întregul program e construit pe subprograme (funcţii) fiecare avînd numele său şi rol în program.

Descrierea funcţiilor În programul dat se conţin diferite funcţii destinate prelucrării şirurilor de caractere. Aceste funcţii sunt standarte, adică declarate cu prototip într-o bibliotecă specială. Toate funcţiile sunt declarate în bibliotecile: , , , , ,

8 În timpul rezolvării acestei lucrări ne-am întâlnit cu situaţii când era necesară prelucrarea şi păstrarea unei informaţii mai complexe care conţinea date de diferite tipuri. Gruparea acestor date într-o variabilă complexă a fost posibilă datorită tipului de date “structură”. De asemenea trebuie de menţionat faptul că un rol important în această lucrare au avut-o funcţiile şi fişierele în C. Funcţiile le-am folosit în scopul evidenţierii unor sarcini concrete şi încapsularea lor în module aparte, pentru a preveni probabilitatea de apariţie a erorilor atât logice cât şi sintactice.

9

Codul sursa (scris conform compilatorului Devcpp) #include #include #include #include #include #include using namespace std; //functie de afisare a spanzuratorii -parametru formal int i: nr de litere gresite void spanzuratoarea(int i){ char afis[100]; memset(afis,0,100); if(i==0){ strcpy(afis," ----\n } if(i==1){ strcpy(afis," ----\n } if(i==2){ strcpy(afis," ----\n } if(i==3){ strcpy(afis," ----\n } if(i==4){ strcpy(afis," ----\n } puts(afis);

|

|\n

|

|\n < > |\n

|\n

|\n

|\n

|\n

|\n");

|

|\n < > |\n |

|\n

|\n |

|\n

|\n

|\n");

|

|\n < > |\n |

|\n / \\ |\n |

|\n

|

|\n < > |\n |

|\n / \\ |\n |

|\n / \\ |\n

} //am terminat daca contor = 0 int gata(char s[30]){ int contor = 0; for(int i = 0; i < strlen(s); i++){ if(s[i] == '_'){ contor = -1; }

|\n

|\n

|\n

|\n

|\n");

|\n

|\n"); |\n");

10 } return contor; } //functia principal de joc void joaca(char ghici[30] , int n){ int ind, contR; char sol[30] , c, *poz , restrictii[30]; for(int i = 0; i < n; i++){ sol[i]='_'; } //terminator de sir sol[n] = '\0'; sol[0]=ghici[0]; //caut un caracter intr-un sir, se cauta toate aparitiile primului si ultimului character din cuvant. poz = strchr(ghici+1,ghici[0]); while(poz){ ind = poz - ghici; sol[ind]=ghici[ind]; poz = strchr(ghici+ind+1 , ghici[0]); } poz = strchr(ghici,ghici[n-1]); while(poz){ ind = poz - ghici; sol[ind]=ghici[ind]; poz = strchr(ghici+ind+1 , ghici[n-1]); } restrictii[0] = ghici[0]; //un sir ce contine litere deja folosite restrictii[1]=ghici[n-1]; contR=2; spanzuratoarea(0); cout