Sunteți pe pagina 1din 16

1

ATESTAT LA INFORMATICA

SPANZURATOAREA

Prof. Coord.

Elev:

2011
Cuprins Numarul paginii

Tema proiectului Introducere in C Limbajul C Caracteristici ale C-ului C i C++ Desfasurarea programului Aspecte generale Descrierea funciilor Codul sursa Print-screen a unei rulari a programului Concluzii

3 4 4 4 5 7 7 7 9 14 15

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)

- Cuvntul ce trebuie ghicit este reprezentat de un ir de linii, fiecare linie reprezentnd o liter a cuvntului. - Sunt oferite ca ajutor prima si ultima litera a cuvantului. - Dac juctorul care ghicete sugereaz o liter ce se afl n cuvnt, programul completeaz spatiile cu litera corespunzatoare n toate poziiile unde aceasta apare. - Dac litera nu se afl n cuvnt, programul deseneaz un element din diagrama spnzurtoarea. - Limita de greseli este de: 4 Jocul se ncheie cnd:

Juctorul care ghicete completeaz tot cuvntul, sau l ghicete exact. Este completata diagrama.

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 eficiena codului obiect pe care l poate genera, i pentru portabilitatea sa. (Noiunea de portabilitate nu este nc definit riguros. n mod intuitiv, spunem c un program este portabil daca el poate fi transferat uor de la un tip de calculator la altul) C este prezentat uneori ca "asamblor portabil", fcndu-se astfel diferenele principale fa de limbajele de asamblare: codul unui program C poate fi compilat i rulat pe aproape orice tip de main (calculator), asemntor altor limbaje de programare, n timp ce limbajele de asamblare sunt specifice unui anumit model de main. Limbajul C aparine clasei limbajelor de nivel sczut sau de nivel mediu, aceasta indicnd strnsa legtur ntre interoperabilitate i echipamentul hardware. UNIX sunt scrise n C ntr-o proporie 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, ncepnd cu microcalculatoarele personale i terminnd cu supercalculatoarele. Ex: Pe calculatoarele de tip IBM PC este implementat o variant a limbajului C numit TURBO C. Insi compilatorul C este scris n C n proporie de 80%. n felul acesta limbajul C asigur o portabilitate bun pentru programele scrise n el.

Caracteristici ale C-ului


C a fost creat avnd drept scop important de a face ca programele mari s poat fi scrise mai uor i cu mai puine erori n paradigma programrii procedurale, dar fr a pune un obstacole n scrierea compilatorului de C, care este ncrcat de caracteristicile complexe ale limbajului. C are urmatoarele caracteristici importante:

Este un limbaj de baz simplu, cu importante funcionaliti cum ar fi funciile matematice sau cele de manipulare ale fiierelor Este focalizat pe paradigma programrii procedurale, care faciliteaz programarea ntr-un mod structurat

Utilizeaz un set simplu de tipuri de date ce mpiedic multe operaii neintenionate Folosete un limbaj preprocesor, preprocesorul C, pentru sarcini cum ar fi definirea de macrouri i includerea mai multor fiiere surs Permite accesarea la nivel sczut a memoriei calculatorului prin utilizarea pointerilor Permite folosirea parametrilor, care sunt comunicai funciilor prin valoare i nu prin referin Pointeri la funcii, 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 gsite 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 Suprancrcarea Metaprogramarea Suport nativ pentru programarea multifir (englez multithreaded) i funciile de reea Procesarea listelor

Dei 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 dect dac ar fi scris n alte limbaje de programare. In plus, una din consecinele acceptrii i eficienei 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 iniial derivat din C. Totui, nu absolut orice program scris n C este valid C++. Deoarece C i C++ au evoluat independent, au aprut, din nefericire, o serie de incompatibiliti ntre cele dou limbaje de programare [1]. Cea mai ampl revizie a limbajui C, C99, a creat un numr suplimentar de conflicte. Diferenele 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. Diferenele 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 nenumrate ori [2] s se reduc incompatibilitile pe ct 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 diferene sunt:

inline funciile inline apar n seciunea de declarare a variabilelor globale n C++, iar in C acestea apar n aa zisele fiiere statice. Cuvntul cheie bool are n C99 propriul su header, <stdbool.h>. 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 condiii, valoarea acestui tip de constante nu va depi valoarea maxim ce poat fi pstrat 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 aa 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 enumeraie (enum), astfel nct struct S {}; n C++ este echivalent cu typedef struct S {} S; n C.

C99 a adoptat unele funcionaliti ce au aprut iniial n C++. Printre acestea se enumer:

Declararea obligatorie a prototipului funciilor Cuvntul cheie inline Eliminarea variabilei implicite int ca valoare de ntoarcere.

Desfasurarea programului

Aspecte generale
Dup declararea bibiotecilor s-au declarat variabile ce vor fi folosite pe parcursul programului.Variabilele reprezint spaii n memoria calculatorului avnd acelai rol n timp.Limbajul C++ recunoate 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(fr 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 funcia principal main() . - Funcia main() este aceea ctre care sistemul de operare transfer controlul atunci cnd se lanseaz n execuie programul. - Parametrul void naintea funciei arat c funcia nu ntoarce valori, void ntre paranteze arat c funcia nu folosete parameti. ntregul program e construit pe subprograme (funcii) fiecare avnd numele su i rol n program.

Descrierea funciilor n programul dat se conin diferite funcii destinate prelucrrii irurilor de caractere. Aceste funcii sunt standarte, adic declarate cu prototip ntr-o bibliotec special. Toate funciile sunt declarate n bibliotecile: <iostream>, <stdio.h>, <stdlib.h>, <string.h>, <conio.h>, <fstream.h>

8 n timpul rezolvrii acestei lucrri ne-am ntlnit cu situaii cnd era necesar prelucrarea i pstrarea unei informaii mai complexe care coninea date de diferite tipuri. Gruparea acestor date ntr-o variabil complex a fost posibil datorit tipului de date structur. De asemenea trebuie de menionat faptul c un rol important n aceast lucrare au avut-o funciile i fiierele n C. Funciile le-am folosit n scopul evidenierii unor sarcini concrete i ncapsularea lor n module aparte, pentru a preveni probabilitatea de apariie a erorilor att logice ct i sintactice.

Codul sursa (scris conform compilatorului Devcpp)


#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> #include <fstream.h> 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); } //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 |

|\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

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<<sol<<endl; int contor = 0; while(1){

11

//cat timp nu am gresit mai mult de 4 ori sau nu am terminat de ghicit, citesc o noua litera. if(contor > 4 || gata(sol) == 0){ break; } cout<<"Introduceti o litera\n"<<endl; cin>>c; poz = strchr(ghici,c); //incerc sa localizez litera in cuvant. if(!poz){ if( !strchr(restrictii,c) ){ cout<<"Litera nu exista in cuvant, mai incearca!\n"<<endl; restrictii[contR] = c; contR++; contor++; if(contor > 4) break; } //Mesaj de avertizare. else{ cout<<"Nu aveti voie sa repetati literele spuse deja!Mai incercati\n"<<endl; } } //litera se afla in cuvant else{ if( !strchr(restrictii,c) ){ cout<<"Felicitari!Ati ghicit o litera\n"<<endl; restrictii[contR] = c; contR++; while(poz){ ind = poz - ghici; sol[ind]=ghici[ind]; poz = strchr(ghici+ind+1 , c); } }

12 else{ cout<<"Nu aveti voie sa repetati literele spuse deja!Mai incercati\n"<<endl; } //daca nu mai exista _ in sol, s-a castigat jocul. } spanzuratoarea(contor); cout<<sol<<endl; } if(gata(sol)==0){ cout<<"Felicitari!Ati ghicit tot cuvantul\n"<<endl; } //altfel s-a pierdut. else{ cout<<"Din pacate ati pierdut\n"<<endl; } } //citire cuvinte din fisier. int main(){ char ans[5],ghici[30],c; int n; ifstream f("cuvinte.txt"); if(!f.eof()){ while(1){ cout<<"Doriti inceperea unui nou joc?(optiuni valide da/nu)"<<endl; cin>>ans; if(strcmp(ans,"da") == 0){ n = 0; f>>c; while(1){ if(f.eof()) break; if(c==',') break; ghici[n]=c; n++; f>>c; } ghici[n]='\0'; joaca(ghici,n); } else{

13 break; } } } else{ cout<<"Couldn't open file\n"<<endl; } getch(); return 0; }

14

Print-screen a unei rulari a programului (grafica)

15

Concluzii

16

Proprietati ale algoritmilor


Un algoritm trebuie sa posede urmatoarele proprietati: Generalitate un algoritm destinat rezolvarii unei probleme trebuie sa permita obtinerea rezultatului pentru orice date de intrare nu numai pentru valori particulare ale acestora Finitudine un algoritm trebuie sa admita o descriere finita si fiecare dintre prelucrarile pe care le contine trebuie sa poata fi executata in timp finit. Prin intermediul algoritmilor nu pot fi prelucrate structuri infinite. Rigurozitate prelucrarile algoritmului trebuie specificate riguros, fara ambiguitati. In orice etapa a executiei algoritmului trebuie sa se stie exact care este urmatoarea etapa si cum poate fi executata aceasta. Eficienta algoritmii pot fi efectiv utilizati doar daca folosesc resurse de calcul in volum acceptabil. Resursele de calcul se refera la spatiul necesar stocarii datelor si timpul necesar executiei prelucrarilor. Avand in vedere anterioarele remarci cu privire la proprietatile generale ale algoritmilor, putem spune ca modul de redactare a codului (jocului Spanzuratoarea) se inscrie in linia programelor utile, simplu de utilizat, cu aplicatii imediate in practica si care demonstreaza intrutotul eficacitatea si importanta limbajului de programare C++ si a unui compilator la indemana tutuor, Devcpp.

S-ar putea să vă placă și