lucrare de an

24
Ministerul Educației al Republicii Moldova Universitatea Tehnică a Moldovei Facultatea Calculatoare, Informatică și Microelectronică Catedra Informatică Aplicată Lucrare de curs La disciplina: Structuri de Date și Algoritmi Tema: Crearea unui joc pentru consolă A efectuat: st.gr. ISBM 141 Savca Eugeniu A verificat: dr. conf. univ. Stadler Lucia Chișinău 2015

Upload: eugen-savca

Post on 09-Sep-2015

26 views

Category:

Documents


1 download

DESCRIPTION

SDA UTM

TRANSCRIPT

  • Ministerul Educaiei al Republicii Moldova

    Universitatea Tehnic a Moldovei

    Facultatea Calculatoare, Informatic i Microelectronic

    Catedra Informatic Aplicat

    Lucrare de curs La disciplina: Structuri de Date i Algoritmi

    Tema: Crearea unui joc pentru consol

    A efectuat: st.gr. ISBM 141 Savca Eugeniu

    A verificat: dr. conf. univ. Stadler Lucia

    Chiinu 2015

  • Cuprins Introducerea

    Tipuri de date .....................................................................................................................................................4 Alocarea memoriei ............................................................................................................................................5 Sintaxa limbajului ...............................................................................................................................................5 Istoric .................................................................................................................................................................5

    nceputurile limbajului de programare C ......................................................................................................5 K&R ................................................................................................................................................................6 ANSI C ............................................................................................................................................................6 C99 .................................................................................................................................................................6

    Diferenele dintre C i C++ / Pascal .......................................................................................................................7 Comparaie cu limbajul Pascal ...........................................................................................................................7 Diferena dintre C i C++ ....................................................................................................................................7 Exemplu de programe .......................................................................................................................................8

    Pascal: ............................................................................................................................................................8 C: ....................................................................................................................................................................8 C++: ................................................................................................................................................................8

    Funcii utilizate-n C ................................................................................................................................................9 Funcii matematice (headerul ) .....................................................................................................9

    Valori absolute ...............................................................................................................................................9 Funcii de rotungire ......................................................................................................................................9 Funcii trigonometrice ...................................................................................................................................9 Funcii trigonometrice inverse ......................................................................................................................9 Funcii exponeniale i logaritmice ...............................................................................................................9 Funcii de generare a numerelor aleatoare ..................................................................................................9

    Funcii de testare a caracterelor ( - prototipul) ............................................................................. 10 Funcii de conversie din ir n numr (prototip ) ........................................................................... 10 Funcii de terminare a unui program (prototip ) ........................................................................ 10 Funcii de intrare/ieire (prototip n ) ............................................................................................. 10

    Elemente de grafic n C ..................................................................................................................................... 11 Moduri video ................................................................................................................................................... 11 Modul text ...................................................................................................................................................... 11 Funcii utilizate pentru proiectarea grafic n C ............................................................................................. 12

    Sarcina ................................................................................................................................................................ 13 Codul surs al programului ................................................................................................................................ 14 Afiarea rezultatelor ........................................................................................................................................... 22

    Meniul principal .............................................................................................................................................. 22 Submeniuri ...................................................................................................................................................... 22

    Apsarea tastei 1 ........................................................................................................................................ 22 Submeniul de introducere a datelor n baza de date ................................................................................ 22 Submeniul Pauz ........................................................................................................................................ 23 Apsarea tastei r ..................................................................................................................................... 23

    Descrierea programului ...................................................................................................................................... 24 Bibliografia

    Introducerea 3

  • 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.

    A fost dezvoltat la nceputul anilor 1970 de Ken Thompson i Dennis Ritchie, care aveau nevoie de un limbaj simplu i portabil pentru scrierea nucleului sistemului de operare UNIX.

    Sintaxa limbajului C a stat la baza multor limbaje create ulterior i nc populare azi: C++, Java, JavaScript, C#.

    C este un limbaj de programare relativ minimalist ce opereaz n strns legtur cu hardware-ul, fiind cel mai apropiat de limbajul de asamblare fa de majoritatea celorlalte limbaje de programare.

    Tipuri de date C are un sistem de tipuri de date similar cu cel al descendenilor ALGOL, cum ar fi Pascal, dar totui cu anumite diferene. Cuprinde tipuri de date cum ar fi ntregi de diferite dimensiuni, cu sau fr semn, numere n virgul mobil, enumerri (enum), structuri de date (struct) i uniuni (union).

    C utilizeaz foarte mult pointerii, un tip de referin foarte simplu, care pstreaz adresa locaiei din memorie. Adresa poate fi manipulat cu ajutorul atribuirilor i a aritmeticii pointerilor. n momentul rulrii unui program, un pointer reprezint o adres de memorie. n momentul compilrii, un pointer este un tip de dat complex, ce reprezint att adresa de memorie ct i tipul de dat. Acest lucru permite expresiilor ce utilizeaz pointeri s fie evaluate dup tipul de dat. Pointerii au mai multe utilizri n C. De exemplu, irurile de caractere (englez text string) sunt adesea reprezentate printr-un pointer la un vector de caractere. Alocarea dinamic a memoriei este realizat tot cu ajutorul pointerilor.

    Un pointer null are o valoare rezervat, indicnd faptul c face referire la o locaie nevalid. Acest lucru este folositor n cazuri speciale cum ar fi pointerul next (urmtorul) n nodul final al unei liste nlnuite. Dereferenierea unui pointer null poate cauza un comportament imprevizibil al aplicaiei. De asemenea, exist i pointeri de tip void, fapt ce indic referirea la un obiect de tip necunoscut. Aceti pointeri sunt foarte folositori n programarea generic. Deoarece dimensiunea i tipul obiectelor la care acest tip de pointeri face referire sunt necunoscute, acetia nu pot fi derefereniai, dar pot fi convertii la alt tip de pointeri.

    n C, anterior standardului C99, tablourile (vectorii) sunt de dimensiune fix, static, cunoscut la momentul compilrii; n practic, acest lucru nu reprezint o piedic, avnd n vedere c se pot aloca blocuri de memorie n momentul rulrii, tratndu-le ca pe tablouri utiliznd librria standard. Spre deosebire de multe alte limbaje de programare, C reprezint tablourile ca i pe pointeri: o adres i un tip de dat. Prin urmare, valorile index pot depi dimensiunea actual a unui tablou.

    De asemenea, C ofer posibilitatea de lucru cu tablouri multidimensionale. Din punct de vedere semantic, tablourile multidimensionale sunt tablouri de tablouri, dar, din punct de vedere fizic, acestea sunt stocate ca un singur tablou unidimensional cu un offset calculat.

    C este adesea folosit n programarea de nivel sczut, unde poate fi necesar ca un ntreg s fie tratat ca o adres de memorie, un numr n virgul mobil ca un ntreg sau un tip de pointer ca un alt tip de pointer. Pentru astfel de cazuri C ofer operatorul de casting, care foreaz explicit conversia unei valori dintr-un tip de dat n alt tip de dat.

    4

  • Alocarea memoriei Una din cele mai importante funcii ale unui limbaj de programare este ca acesta s furnizeze metode de management a memoriei i al obiectelor stocate n memorie. C furnizeaz trei metode distincte de alocare a memoriei pentru obiecte:

    Alocarea static a memoriei: adresele i dimensiunile obiectelor ce fac uz de alocarea static a memoriei sunt fixate n momentul compilrii i pot fi plasate ntr-o zon de dimensiune fix ce corespunde unei seciuni din cadrul fiierului linkedidat final. Acest tip de alocare a memoriei se numete static deoarece locaia i dimensiunea lor nu variaz pe durata de execuie a programului.

    Alocarea automat a memoriei: obiectele temporare (variabilele locale declarate n cadrul unui bloc de cod) sunt stocate n cadrul de stiv asociat funciei apelate, iar spaiul alocat este automat eiberat i reutilizat dup ce s-a prsit blocul n care acestea au fost declarate.

    Alocarea dinamic a memoriei: blocuri de memorie de orice dimensiune pot fi alocate ntr-o zon de memorie numit heap prin intermediul funciilor malloc(), calloc() i realloc(). Aceste blocuri de memorie pot fi reutilizate dup ce zona de memorie a fost eliberat prin apelul funciei free().

    Sintaxa limbajului Spre deosebire de alte limbaje de programare cum ar fi Fortran 77, C-ul are o form liber, lsnd programatorul s-i organizeze codul folosind spaiile albe. Comentarii pot fi nserate oriunde n cadrul programului utiliznd delimitatorii /* i */ sau //.

    Fiecare fiier surs conine declaraii de variabile i definiii de funcii. Funciile, la rndul lor, conin alte declaraii de variabile i comenzi. Declaraiile de variabile fie definesc noi tipuri folosind cuvinte cheie precum struct, union i enum sau atribuind un tip de date predefinite, prin scrierea tipului de dat i urmat de numele variabilei. Cuvinte cheie precum char, int, precum i pointerul la unul din aceste tipuri * reprezint tipuri de date implementate nativ n C. Seciuni de cod sunt incluse ntre paranteze acolade ({ i }), pentru a indica pentru ce poriune a codului se aplic declaraiile de variabile i celelalte structuri de control.

    Comenzile execut aciuni cum ar fi cele de modificare ale valorii unei variabile sau afiarea unui text la consol. Structurile de control sunt variabile pentru execuii condiionale sau iteraii, realizate cu ajutorul cuvintelor rezervate if, else, switch, do, while i for. Salturi arbitrare sunt posibile prin folosirea cuvntului cheie goto. Cu ajutorul unei varieti de operatori implementai n C, se pot realiza operaii aritmetice, logice, comparative, pe bii, indexarea tablourilor i atribuiri. Comenzile pot de asemenea apela funcii, incluznd un numr mare de funcii din bibliotecile standard ale limbajului C, necesare pentru realizarea diferitelor sarcini cerute de programator.

    Istoric

    nceputurile limbajului de programare C Etapa iniial de dezvoltare a limbajului de programare C a avut loc n cadrul laboratoarelor AT&T Bell ntre anii 1969 i 1973. Dup spusele lui Dennis Ritchie, cea mai creativ perioad a avut loc n 1972. A fost denumit C deoarece multe din caracteristicile sale au fost derivate din limbajul de programare B. ncepnd cu anul 1973, limbajul de programare C a devenit destul de robust, astfel nct mare parte a kernelului Unix, scris iniial n limbaj de asamblare pentru PDP 11/20, a fost rescris n C. Acesta a fost unul din primele kernele ale unui sistem de operare scris ntr-un limbaj de programare, altul dect limbajul de asamblare. ncercri anterioare au fost pentru scrierea sistemului Multics (scris n PL/I) i TRIPOS (scris n BCPL).

    5

  • K&R n 1978, Dennis Ritchie i Brian Kernighan au publicat prima ediie a crii Limbajul de programare C. Aceast carte, cunoscut n cercul programatorilor sub numele K&R, a servit pentru muli ani ca un mijloc de informare asupra specificaiilor limbajului C. Versiunea limbajului C descris este cunoscut sub numele K&R C.

    K&R aduce n discuie urmtoarele caracteristici ale limbajului:

    Tipul de dat struct Tipul de dat long int Tipul de dat unsigned int Operatorul =+ a fost schimbat n +=, precum i ceilali operatori nrudii (=+ producea confuzii

    analizorului lexical al compilatorului limbajului C; de exemplu: i += 10 comparat cu i = +10).

    n anii ce au urmat publicaiei K&C R, cteva caracteristici neoficiale au fost adugate limbajului C, fiind suportate de compilatoarele celor de la AT&T, precum i de ali productori. Acestea includ:

    funciile void i tipul de date void * funciile care ntorc tipul struct sau union numele cmpurilor unei structuri struct ntr-un spaiu de nume pentru fiecare tip de structur atribuirea pentru tipurile de date de tip struct calificatorul const pentru a face un obiect de tip read only bibliotec standard ncorpornd funcii implementate de diveri dezvoltatori enumeraiile tipul float n precizie simpl.

    ANSI C Una din intele procesului de standardizare ANSI C a fost acela de a produce un superset al K&C R, ncorpornd multe dintre caracteristicile neoficiale introduse secvenial. Totui, comitetul pentru standardizare a introdus cteva caracteristici noi, cum ar fi prototipul funciilor (mprumutat din C++) i un preprocesor mult mai capabil.

    ANSI C este suportat de marea majoritate a compilatoarelor folosite astzi. Mare parte din codul C scris acum este bazat pe ANSI C. Orice program scris exclusiv n standardul C este garantat s funcioneze corect pe orice platform cu o implementare C conform.

    C99 La sfritul anilor 1990, standardul C existent a suferit o revizie, conducnd la publicarea standardului ISO 9899:1999 n anul 1999. Acest standard este cunoscut sub numele C99. A fost adoptat ca standard ANSI n martie 2000.

    Noile aspecte ale limbajului C includ:

    funcii inline variablele pot fi declarate oriunde n cadrul unui program (la fel ca i n C++) cteva noi tipuri de date, incluznd i long long int (pentru a reduce efortul legat de tranziia de la

    32-bii la 64-bii), un tip explicit de date boolean i un tip compl. de date reprezentnd num. Compl. tablourile de dimensiuni variabile suport pentru comentariile pe o singur linie, marcate la nceput de // noi funcii, cum ar fi snprintf() noi fiiere header, cum ar fi stdint.h

    6

  • Diferenele dintre C i C++ / Pascal Comparaie cu limbajul Pascal

    Sintaxa Pascal Sintaxa C Explicaie begin

    {

    nceput bloc de instruciuni

    end. / end

    }

    Sfrit bloc de instruciuni

    if () then

    if()

    Instruciune condiional: adevarat determin execuia codului dup if ()

    while() do

    while()

    Repet cat timp adevrat

    a b

    a!=b

    Valoarea variabilei a e diferit de valoarea variabilei b

    for i:=1 to n do

    for(i=1;i

  • 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, . 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.

    Exemplu de programe Ca sarcin, pentru a demonstra diferena dintre limbaje, mi-am propus ceva mai simplu: citirea de la tastier a unui ir de caractere i afiarea ulterioar la ecran a acestuia

    Pascal: program test; var i:char[10]; begin writeln('introduceti un sir:'); read(i); //citire numar introdus de la tastatura writeln(i); //afisare numar citit end. C: #include /* contine declaratiile functiilor de intrare/iesire */ int main() /* program principal */ { char i[10]; printf("Introduceti un nr:"); scanf("%c",&i); /* citire numar introdus la tastatura */ printf("%c", i); /* afiare numr citit */ getch(); }

    C++: #include //conine declaraiile funciilor de intrare/ieire int main() //program principal { int i; std::couti; //citire std::cout

  • Funcii utilizate-n C Funciile mpart taskuri complexe n buci mici mai uor de neles i de programat. Acestea pot fi refolosite cu alte ocazii, n loc s fie rescrise de la zero. De asemenea, funciile sunt utile pentru a ascunde detalii de funcionare ale anumitor pri ale programului, ajutnd la modul de lucru al acestuia. Utiliznd funcii, care reprezint unitatea fundamental de execuie a programelor C, se obine o divizare logic a programelor mari i complexe. Utilizatorul poate crea o mulime de funcii pentru simplificarea lucrului su. Pe lng aceasta, limbajul C prevede un ir de funcii predefinite care stau la baza funcionrii programului:

    Funcii matematice (headerul ) Valori absolute int abs(int x)- Returneaz un ntreg care reprezint valoarea absolut a argumentului. long int labs(long int x)- Analog cu funcia abs, cu deosebirea c argumentul i valoarea returnat sunt de tip long int. double fabs(double x)- Returneaz un real care reprezint valoarea absolut a argumentului real.

    Funcii de rotungire int abs(int x)- Returneaz un ntreg care reprezint valoarea absolut a argumentului. long int labs(long int x)-Analog cu funcia abs, cu deosebirea c argumentul i valoarea returnat sunt de tip long int. double fabs(double x)- Returneaz un real care reprezint valoarea absolut a argumentului real.

    Funcii trigonometrice double sin(double x)- Returneaz valoarea lui sin(x), unde x este dat n radiani. Numrul real returnat se afl n intervalul [-1, 1]. double cos(double x)- Returneaz valoarea lui cos(x), unde x este dat n radiani. Numrul real returnat se afl n intervalul [-1, 1]. double tan(double x)- Returneaz valoarea lui tg(x), unde x este dat n radiani.

    Funcii trigonometrice inverse double asin(double x)- Returneaz valoarea lui arcsin(x), unde x se afl n intervalul [-1, 1]. Numrul real returnat (n radiani) se afl n intervalul [-pi/2, pi/2]. double acos(double x)- Returneaz valoarea lui arccos(x), unde x se afl n intervalul [-1, 1]. Numrul real returnat se afl n intervalul [0, pi]. double atan(double x)- Returneaz valoarea lui arctg(x), unde x este dat n radiani. Numrul real returnat se afl n intervalul [0, pi]. double atan2(double y, double x) - Returneaz valoarea lui tg(y/x), cu excepia faptului ca semnele argumentelor x i y permit stabilirea cadranului i x poate fi zero.

    Funcii exponeniale i logaritmice long double exp(long double x)- Returneaz valoarea e double log(double x)- Returneaz logaritmul natural al argumentului ( ln(x) ). double log10(double x)- Returneaz logaritmul zecimal al argumentului (lg (x) ). double pow(double baza, double exponent)- Returneaz un real care reprezint rezultatul ridicrii bazei la exponent (). double sqrt(double x)- Returneaz rdcina ptrat a argumentului. double hypot(double x, double y)- Funcia distanei euclidiene - returneaz , deci lungimea ipotenuzei unui triunghi dreptunghic, sau distana punctului P(x, y) fa de origine.

    Funcii de generare a numerelor aleatoare int rand(void) - Genereaz un numr aleator n intervalul [0, RAND_MAX].

    9

  • Funcii de testare a caracterelor ( - prototipul) int isalnum(int c) - Returneaz valoare ntreag pozitiv daca argumentul este liter sau cifr. Echivalent cu: isalpha(c)||isdigit(c) int isalpha(int c) - Testeaz dac argumentul este liter mare sau mic. Echivalent cu isupper(c)|| islower(c). int iscntrl(int c) - Testeaz dac argumentul este caracter de control (neimprimabil). int isdigit(int c) - Testeaz dac argumentul este cifr. int isxdigit(int c) - Testeaz dac argumentul este cifr hexagesimal (0-9, a-f, A-F). int islower(int c) - Testeaz dac argumentul este liter mic. int isupper(int c)- Testeaz dac argumentul este liter mare. int ispunct(int c)- Testeaz dac argumentul este caracter de punctuaie (caracter imprimabil, dar nu liter sau spaiu). int isspace(int c) - Testeaz dac argumentul este spaiu alb (' ', '\n', '\t', '\v', '\r') int isprint(int c) - Testeaz dac argumentul este caracter imprimabil, inclusiv blancul. int tolower(int c) - Funcia schimb caracterul primit ca argument din liter mare, n liter mic i returneaz codul ASCII al literei mici. Dac argumentul nu este liter mare, codul returnat este chiar codul argumentului. int toupper(int c) - Funcia schimb caracterul primit ca argument din liter mic, n liter mare i returneaz codul acesteia. Dac argumentul nu este liter mic, codul returnat este chiar codul argumentului.

    Funcii de conversie din ir n numr (prototip ) long int atol(const char *npr) - Funcia convertete irul transmis ca argument (spre care pointeaz npr) ntr-un numr cu semn, care este returnat ca o valoare de tipul long int. irul poate conine caracterele '+' sau '-'. Se consider c numrul este n baza 10 i funcia nu semnalizeaz eventualele erori de depire care pot apare la conversia din ir n numr. int atoi(const char *sir) - Converteste irul spre care pointeaza sir ntr-un numr ntreg. double atof(const char *sir) - Funcia converteste irul transmis ca argument ntr-un numr real cu semn (returneaz valoare de tipul double). n secvena de cifre din ir poate apare litera 'e' sau 'E' (exponentul), urmat de caracterul '+' sau '-' i o alt secven de cifre. Funcia nu semnaleaz eventualele erori de depire care pot apare.

    Funcii de terminare a unui program (prototip ) void exit(int status) - Termin execuia unui program. Codul returnat de terminarea corect este memorat n constanta simbolicEXIT_SUCCES, iar codul de eroare - nEXIT_FAILURE. void abort()- Termin forat execuia unui program.

    Funcii de intrare/ieire (prototip n ) Streamurile (fluxurile de date) implicite sunt: stdin(fiierul, dispozitivul standard de intrare), stdout (fiierul, dispozitivul standard de ieire), stderr (fiier standard pentru erori), stdprn (fiier standard pentru imprimant) i stdaux (dispozitivul auxiliar standard). De cte ori este executat un program, streamurile implicite sunt deschise automat de ctre sistem. int getchar(void) - Citete un caracter (cu ecou) din fiierul standard de intrare (tastatur). int putchar(int c) - Afieaz caracterul primit ca argument n fiierul standard de ieire (monitor). char *gets(char *sir) - Citete un ir de caractere din fiierul standard de intrare (pn la primul blank ntlnit sau linie nou). Returneaz pointerul ctre irul citit. int puts(const char *sir) - Afieaz irul argument n fiierul standard de ieire i adaug terminatorul de ir. Returneaz codul ultimului caracter al irului (caracterul care precede NULL) sau -1 n caz de eroare. int printf(const char *format, ... ) - Funcia permite scrierea n fiierul de ieire (pe monitor) a datelor, ntr-un anumit format. Funcia returneaz numrul de octei (caractere) afiai, sau 1 n cazul unei erori.

    10

  • Elemente de grafic n C Moduri video Un numr ridicat de funcii predefinite video din fiierul antet conio.h i din biblioteca graphics.lib definesc posibiliti semnificative pentru utilizarea ecranului n cercetare i proiectare, n prognozare sau chiar n scopuri comerciale, sub forma clipurilor. n funcie de destinaia lor, acestea pot fi mprite n mai multe categorii, astfel: iniializare i instalare mod grafic, tratare erori grafice, desenare linii, trasare cercuri, arcuri i alte curbe, desenare poligoane i haurri, desenare puncte, scriere texte grafice, salvare imagini, definire culori i definire i utilizare de ferestre i de pagini.Pe de o parte, n configuraiile hardware ale calculatoarelor compatibile IBM PC intervin monitoare de diverse tipuri (monocolor, color sau color extins), iar pe de alta, comunicarea dintre microprocesorul i monitorul unui calculator nu se face direct, ci prin intermediul memoriei video (memoriei ecran), care se afl pe placa adaptorului video (adaptorului grafic), aa numita plac video (plac grafic, cartel video, cartel grafic). Un program de interfa (un driver grafic) cu extensia .BGI (Borland Graphics Interface), specific adaptorului folosit, permite controlul interfeei ntre funciile video prin care microprocesorul depune n memoria video semnale care reprezint texte i imagini i facilitile oferite de adaptorul grafic, prin care monitorul i extrage continuu date din memoria video i le trimite pe ecran.

    Dintre cele mai des ntlnite adaptoare video se enumer: CGA (Color Graphics Adapter), MCGA ( MultiColor Graphics Adapter), EGA (Enhanced Graphics Adapter), EGA64, EGAMono, IBM8514, HGA (Hercules Graphics Adapter), ATT, VGA (Video graphics Array) i PC3270. Aproape toate adaptoarele grafice pot fi comutate n modurile Hercules, VGA i EGA, care este i cel mai vechi.

    Densitatea punctelor care alctuiesc imaginea (rezoluia) i numrul maxim de culori (paleta de culori) permise pe ecranul monitorului snt dou caracteristici importante care rezult din legtura monitor adaptor i care determin modul de operare al adaptoarele video, modul text sau modul grafic.

    n modul text ecranul este gndit ca o matrice (25, 43 sau 50 linii i 80 sau 40 coloane) ale crei elemente sn caractere ASCII. Colul din stnga sus are coordonatele (1,1). Pentru o poziie oarecare (x, y), abscisa x crete de la stnga ctre dreapta i fixeaz coloana, iar ordonata y de sus n jos i fixeaz linia. n memoria video se rezerv doi octei pentru fiecare poziie din matrice, primul octet conine codul ASCII al caracterului care ocup acea poziie, iar al doilea este octetul atribut, care determin modul de reprezentare al caracterului: normal sau intens luminat, cu subliniere sau clipitor (blinking), iar pentru monitoarele color, care este culoare fundalului i care cea a textului. n mod normal, pagina de ecran conine 25 de rnduri a cte 80 de coloane, deci colul din stnga sus este (1, 1), iar colul din dreapta jos (80, 25). Ceea ce rezult c n modul text snt necesari 2000 de octei carcter i 2000 de octei atribut, deci n total 4000 de octei.

    n modul grafic, ecranul este descris tot ca o matrice ale crei elemnte snt puncte individuale, numite pixeli. Colul din stnga sus are coordonatele (0,0). Un numr de 8 pixeli pot fi tratai ca un octet, unde un bit setat nseamn pixel luminos, iar unul ters pixel ntunecat. Imaginea pe ecran este o mulime de pixeli luminoi i colorai ntr-un anume fel.

    Modul text Modul grafic original de lucru al calculatorului la lansarea n execuie a unui program este modul text. Funciile predefinite aplicabile lucrului n modul text ofer faciliti pentru controlul ferestrei, scrierea i modificarea textului cu anumite atibute de culoare, sublinierea i clipirea unor caractere sau deplasarea, stingerea i aprinderea cursorului. Aceste funcii snt grupate n biblioteca standard i n plus, pentru fiecare model de memorie exist versiuni distincte pentru biblioteca standard.

    11

  • Funcii utilizate pentru proiectarea grafic n C

    Funcia Descriere SetColor (culoare) Stabilete culoarea de desenare SetBkColor (culoare) Stabilete culoarea fundalului GetBkColor Returneaz culoarea cureant a fundalului PutPixel (x,y,culoare) Aprinde un pixel cu coordonata (x,y) cu culoarea culoare SetLineStyle(tip,mod,gr) Definete tipul (tip),mode-lul (mod) i grosimea (gr) a lini Line (x1,y1,x2,y2) Deseneaz o linie ntre punctele de coordonate (x1,y1) i (x2,y2). LineTo (x,y) Deseneaz o linie ntre punctul curent i punctul de coordonate (x,y). LineRel (dx,dy) Deseneaz o linie ntre pct. curent (x,y) i pct. de coordonate (x+dx,y+dy). MoveTo (x,y) Mutcursorul n punctul de coordonate (x,y). MoveRel (dx,dy) Mut cursorul din punctul curent (x,y) n punctul de coordonate (x+dx,y+dy). Rectangle (x1,y1,x2,y2) Deseneaz un dreptunghi cu vrful stnga-sus (x1,y1) i vrful dreapta-jos (x2,y2). Drawpoly (n,varf) Deseneaz o linie frnta ntre punctele de coordonate din tabloul vrf Drawpoly (n+1,varf) Deseneaz un poligon cu n vrfuri ntre pct. de coor-donate din tabloul vrf (primul vrf = cu ultimul) Circle (x,y,raza) Deseneaz un cerc cu centrul n (x,y) i de raza raza. Arc (x,y,ui,uf,raza) Deseneaz un arc de cerc n sens trigonometric, cuprins ntre unghiurile ui i uf ,de centru (x,y) i raza raza. Ellipse(x,y,ui,uf,rx,ry) Deseneaz un arc de elipsa de centru (x,y) i semiaxe rx i ry, cuprins ntre unghiurile ui i uf . SetFillStyle(model,culoare) Selecteaz modelul de haurare model i culoarea culoare Bar (x1,y1,x2,y2) Deseneaz i haureaz un dreptunghi Bar 3D(x1,y1,x2,y2,a,c) Deseneaz i haureaz un paralelipiped cu adncimea a i cu capac (c=true) sau fr (c=false) FillPoly (n,varf) Deseneaz i haureaz un poligon. Vrf este vetorul care reine coordonatele vrfurilor FillEllipse (x,y,rx,ry) Deseneaz i haureaz o elips Sector(x,y,ui,uf,rx,ry) Deseneaz i haureaz un sector de elipsa PieSlice(x,y,ui,uf,raza) Deseneaz i haureaz un sector de cerc FloodFill(x,y,cul-margine) Deseneaz cu modelul i culoarea curent o zon de ecran definit printr-un pct. interior (x,y) i cul.frontierei ClearDevice / ClearViewPort terge ecranul grafic cu culoarea fondului dat de SetBkColor. ClearViewPort terge ecranul cu culoarea de fond GetMaxColor Returneaz nr. maxim de culori ce se pot folosi. GetMaxX / GetMaxY Returneaz nr. maxim de linii / coloane folosit de driverul curent. GetX / GetY Returneaz valoarea coordonatei x /y a poziiei curente a cursorului GetPixel(x,y) Returneaz valoarea punctului de coordonate (x,y) InitGraph (gd,gm,cale) Iniializeaz modul grafic CloseGraph Inchide modul grafic. GraphErrorMsg Returneaz mesajul de eroare corespunzator lui ErrorCode. SetRGBPalette(c,r,g,b) Atribuie culorii care are codul c, codul obinut din culorile red, green i blue de intensiti r, g i b SetPalette (nr,c) Modific n paleta culoarea nr cu o culoare de indice c.SetAllPalette(paleta).Modific culorile paletei GetDefaultPalette(paleta) Returneaz culorile paletei.GetPalette(paleta) Copiaz coninutul paletei curente in var. paleta. SetWriteMode(mod) Stabilete modul de desenare a liniei SetFillPatern.Alege modelul definit de utilizator. SetTextStyle(tip,dir,dim) Stabilete tipul i dimensiunea setului de caractere curent SetTextJustify(oriz,vert) Stabilete alinierea textului pe orizontal i pe vertical pentru procedurile OutText i OutTextXY OutText(sir) Afieaz un text cu atributele stabilite anterior, la poziia cursorului grafic OutTextXY(x,y,sir) Afieaz un text cu atributele stabilite anterior, de la poz. (x,y). Procedura nu modific poziia punctului curent. GetAspectRatio(numr, numt) Returneaz raportul ntre dim. pe orizontal i cea pe vertical SetAspectRatio(numr,numt) Modific raportul aspect SetViewPort(x1,y1,x2,y2,t) Definete o fereasta grafic Var. booleana t este true pentru tiere, false altfel. GetImage(x1,y1,x2,y2,mem) Salveaz o zona dreptunghiu-lara da ecran (mem sa fie de 4 ori mai mare decat zona) ImageSize(x1,y1,x2,y2) Returneaz nr. de octei ai zonei grafice dreptunghiulare care va fi salvata. PutImage(x,y,mem, XorPut) Suprapune regiunea (zona imagine salvata) pe ecran. SetActivePage(pagina) Deschide o nou pagina pentru ecranul grafic. SetVisualPage(pagina) Vizualizeaz pagina grafic data. GetArcCoords(coord-arc) Returneaz coordonatele de nceput i de sfrit ale ultimului arc desenat. GetPaletteSize Furnizeaz dimensiunea paletei de culori curente (nr. de culori). GetTextSetting Furnizeaz tipul,direcia, mrimea i poziia setului de caractere poziionate cu SetTextStyle, SetTextJustify DetectGraph(driver,mod) Verific hardware-ul i defineste driver-ul i modul grafic care se poate folosi. GetDriverName Returneaz numele driver-ului grafic curent. GetFillPattern(tip) Returneaz modelul de hasurare pozitionat anterior cu SetFillPattern. GetFillSettings(mod) Returneaz atributele pozitionate cu SetFillStyle. GetGraphMode Returneaz modul grafic curent. GetLineSettings(linie) Returneaz tipul, modelul i grosimea liniei determinate de SetLineStyle. GetMaxMode Returneaz numrul maxim de culori ce se pot folosi. GetModeName(mod) Returneaz ntr-un ir numele modului grafic. GetModeRange(driver,mod) Returneaz modul grafic cel mai mic i cel mai mare GetViewSettings(fereast) Furnizeaz datele ferestrei actuale poziionate cu SetViewPort. GraphDefaults Pozitioneaz modul grafic n varianta implicit. SetGraphMode Instaleaz modul grafic i terge ecranul grafic. TextHeight(text) Returneaz nlimea textului msurat n elemente de imagine. TextWidth(text) Returneaz limea textului msurat n elemente de imagine.

    12

  • Sarcina De creat un joc pentru consol care ar rula pe orice computer i ar avea posibilitatea de creare a unei baze de date cu rezultatele nregistrate de utilizator i ulterioara afiarea a acestora.

    13

  • Codul surs al programului #include #include #include #include #include #include #define UP 72 #define DOWN 80 #define LEFT 75 #define RIGHT 77 int length; int bend_no; int len; char key; void record(); void load(); int life; void Delay(long double); void Move(); void Food(); int Score(); void Print(); void gotoxy(int x, int y); void GotoXY(int x,int y); void Bend(); void Boarder(); void Down(); void Left(); void Up(); void Right(); void ExitGame(); int Scoreonly(); struct coordinate{ int x; int y; int direction; }; typedef struct coordinate coordinate; coordinate head, bend[500],food,body[30]; int main() { char key; Print(); system("cls"); load(); length=5; head.x=25; head.y=20; head.direction=RIGHT; Boarder(); Food(); life=3;

    14

  • bend[0]=head; Move(); //iniializeaz coordonatele primare return 0; } void Move() { int a,i; do{ Food(); fflush(stdin); len=0; for(i=0;i
  • else { printf("\a"); Move(); } } void gotoxy(int x, int y) { COORD coord; coord.X = x; coord.Y = y; SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); } void GotoXY(int x, int y) { HANDLE a; COORD b; fflush(stdout); b.X = x; b.Y = y; a = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(a,b); } void load(){ int row,col,r,c,q,o1,o; gotoxy(30,0);printf ("\tInstructiuni"); for(r=1;r
  • if(!kbhit()) head.y++; } void Delay(long double k) { Score(); long double i; for(i=0;i
  • { food.x=rand()%70; if(food.x
  • if(diff
  • { GotoXY(i,10); printf("."); GotoXY(i,30); printf("."); } for(i=10;i
  • char c; FILE *info; system ("cls"); info=fopen("record.txt","r"); do{ putchar(c=getc(info)); }while(c!=EOF); fclose(info); } int Score() { int score; GotoXY(20,8); score=length-5; printf("Sc : %d",(length-5)); score=length-5; GotoXY(50,8); printf("Incercari : %d",life); return score; } int Scoreonly() { int score=Score(); system("cls"); return score; } void Up() { int i; for(i=0;i
  • Afiarea rezultatelor Meniul principal

    Submeniuri

    Apsarea tastei 1

    Submeniul de introducere a datelor n baza de date

    22

  • Submeniul Pauz

    Apsarea tastei r

    23

  • Descrierea programului Jocul Snake are o istorie veche, fiind una dintre primele jocuri lansate pe telefoanele mobile aprute-n anii 2000. Ideea este foarte simpl, iniial juctorul are un anumit numr de ncercri care pot fi folosite pe parcursul procesului de joc. Personajul principal este o rm iar scopul juctorului este mrirea dimensiunii rmei prin achiziionarea a ct mai mult mncare. O ncercare este euat atunci cnd rma se atinge cu capul de corpul su sau de una din mrginile care marcheaz teritoriul de joc. La epuizarea ncercrilor are loc ieirea din joc i nregistrarea scorului obinut.

    Aplicaia este compus dintr-un ir de funcii destinate simplificrii timpului de programare i a gruprii codului, pe lng aceasta au fost folosite funcii predefinite din bibliotecile , , , , , , .

    Void record a fost folosit pentru nregistrarea rezultatelor i exportarea acestora n documentul record.txt;

    Void load pentru fereastra de ncrcare a resurselor;

    Void delay prezint funcia care determin viteza de micare-a rmei pe ecran

    Void move caracterizeaz toate micrile ce pot fi efectuate de rm

    Void food folosit pentru generarea hranei ( a x-urilor)

    Void print afieaz pe ecran meniul principal, conine instruciuni pentru prelucrarea punctelor ce pot fi selectate din meniu

    Void gotoxy mut cursorul n poziia necesar, respectiv coordonata X- abscisa, Y- ordonata

    Void boarder funcie ce caracterizeaz graniele ce nu pot fi nclcate de rm.

    Void bend funcie necesar pentru mrirea rmei dup strngerea mai multor X-uri.

    Void down, left, up, right reprezint funcii ce transform indicatoarele de pe sgeile de pe tastatur n direcii pentru micarea rmei, spre exemplu, tastarea sgeii dreapta va face ca rma s mearg spre dreapta.

    Void exitgame conine un set de instruciuni care duc la ieirea din joc

    De asemenea am creat o structur nou, numit coordinate care conine 3 variabile de tip integer care, vor fi folosite mai apoi n program ca coordonate pentru cursor.

    Am definit 4 directive up,down,left i right asociate tastelor de pe tastatur.

    Pentru a exporta rezultatul curent am creat un nou document record.txt n care am notat numele juctorului (citit de la tastier), data i ora ( le-am obinut folosind funcia time_t / ctime; din biblioteca ) la care-a fost nregistrat recordul curent. Toate rezultatele obinute se sorteaz automat dup data i ora nregistrrii rezultatului.

    Am declarat cteva variabile globale care-au fost folosite pe tot parcursul programului, printre care:

    int length; - lungimea rmei

    int life numrul de ncercri rmase

    char key; - tasta apsat

    int score / scoreonly pstreaz nr de puncte acumulate.

    24

  • Bibliografia The C programming language by Brian W. Kernighan, Dennis M.Ritchie

    Totul despre C i C++ de Kris Jamsa, Lars Klander

    Programarea n limbajul C/C++ de Emanuela Cerchez, Marinel Serban

    https://limbajul-c.wikispaces.com/Functii+predefinite

    http://ocw.cs.pub.ro/courses/programare/laboratoare/lab04

    http://www.tex.tuiasi.ro/biblioteca/carti/CURSURI/Conf.%20dr.%20mat.%20Valeria%20Slabu/cursuri-programare/PRELEGEREA_XIV.pdf

    http://www.unibuc.ro/prof/vlada_m/Grafica_pe_calculator.php

    http://infoscience.3x.ro/c++/Grafica%20Pascal%20si%20C.htm

    http://www.tutorialspoint.com/cprogramming/

    http://www.cprogramming.com/tutorial/c-tutorial.html

    http://ro.wikipedia.org/wiki/C_%28limbaj_de_programare%29

    25

    Tipuri de dateAlocarea memorieiSintaxa limbajuluiIstoricnceputurile limbajului de programare CK&RANSI CC99

    Diferenele dintre C i C++ / PascalComparaie cu limbajul PascalDiferena dintre C i C++Exemplu de programePascal:C:C++:

    Funcii utilizate-n CFuncii matematice (headerul )Valori absoluteFuncii de rotungireFuncii trigonometriceFuncii trigonometrice inverseFuncii exponeniale i logaritmiceFuncii de generare a numerelor aleatoare

    Funcii de testare a caracterelor ( - prototipul)Funcii de conversie din ir n numr (prototip )Funcii de terminare a unui program (prototip )Funcii de intrare/ieire (prototip n )

    Elemente de grafic n CModuri videoModul textFuncii utilizate pentru proiectarea grafic n C

    SarcinaCodul surs al programuluiAfiarea rezultatelorMeniul principalSubmeniuriApsarea tastei 1Submeniul de introducere a datelor n baza de dateSubmeniul PauzApsarea tastei r

    Descrierea programuluiBibliografia