Sunteți pe pagina 1din 24

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Pentru nici una din problemele care se vor rezolva la disciplina Programarea calculatoarelor NU SE FOLOSESC VARIABILE GLOBALE

PREZENTAREA GENERAL A MEDIULUI DE DEZVOLTARE


1. Scurt istoric al mediului de dezvoltare Eclipse La sfritul anilor 90, IBM a nceput dezvoltarea a ceea ce este cunoscut azi ca Eclipse. n noiembrie 2001, s-a decis s se adopte licenierea open source i modelul acestei tehnologii pentru a accelera adoptarea Eclipse ca platform global de dezvoltare. Principiul de baz al consoriului a fost urmtorul: comunitile open source vor dirija programarea, iar consoriul comercial va promova produsul respectiv. Aceasta era o aplicaie nou si interesant a modelului open source, bazat pe o platform gratuit i deschis. Pentru mai multe informaii accesai: www.eclipse.org http://www.ibm.com/developerworks/rational/library/nov05/cernosek/ Eclipse este mediul de dezvoltare integrat (IDE Integrated Development Environment) pe care l vom folosi pentru scrierea programelor C. El permite dezvoltarea de aplicaii n mai multe limbaje de programare: Java, C, C++, C#, Fortran, Ada. n cadrul laboratorului vom scrie programe C de tip consol (care pot fi lansate n execuie n mod linie de comand MS-DOS sau Linux). Pentru instalarea versiunii de lucru (existenta pe staiile din laborator) trebuie accesate urmtoarele link-uri: a) Jave SE Runtime Environment (JRE) - JRE Update 23 jre-6u24-windows-i586.exe http://www.java.com/en/download/manual.jsp b) Mediul de dezvoltare Eclipse Helios SR1 Packages 1) eclipse-cpp-helios-SR1-win32.zip (pentru Windows pe 32 de bii) http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/heliossr1 Din partea dreapt a ecranului se selecteaz sistemul de operare pe care se lucreaz i se descarc arhiva corespunztoare. 2) cdt-master-7.0.1-I201009241320.zip se descarc de la adresa http://download.eclipse.org/tools/cdt/builds/7.0.1/I.I201009241320/index.html c) Compilatorul MinGW (mingw-get-inst-20110211.exe) pentru Windows http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw -get-inst/mingw-get-inst-20110211/mingw-get-inst-20110211.exe/download d) Debugger gdb 7.0.2 (numai pentru Linux) gdb-7.0.2.tar.gz http://www.gnu.org/software/gdb/download/

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Modalitatea de instalare (link-urile indicate mai sus sunt pentru pachetele corespunztoare sistemului de operare Windows pe 32 de bii). Pentru alte sisteme de operare paii de instalare sunt aceeai difer doar arhivele. 1. Se instaleaz, daca nu exist, Java Runtime Environment jre-6u18-windows-i586-s.exe. 2. Se dezarhiveaz eclipse-cpp-helios-SR1-win32.zip n directorul corespunztor (de ex. C:\Eclipse) 3. Se lanseaz n execuie eclipse.exe. a. Se nchide fereastra Welcome (Figura a) care apare la prima execuie a programului Eclipse (fereastra poate fi reafiat alegnd Help Welcome)

Figura a. Fereastra Welcome a mediului Eclipse b. Se selecteaz Help Install New Software (Figura 1b).

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

b. Deschiderea meniului Help i alegerea opiunii Install New Software c. n fereastra care se deschide se selecteaz Add (Figura c)

Figura c. d. Se selecteaz Archive i se alege din directorul unde este salvat arhiva cdtmaster-7.0.1-I201009241320.zip

Figura d. Alegerea arhivei cu actualizrile pentru dezvoltarea de programe n C e. Se alege arhiva cu actualizrile de instalat (Figura 1e). Se selecteaz Open. Va fi afiat fereastra fin Figura 1f. Se selecteaz pentru instalare CDT Main Features (tot),, iar din CDT Optional Features tot n afar de (C/C++ Cross Compiler Support) i opiunile legate de Unified Parralel C ... i XL C/C++ Compiler .... Apoi se selectez Next. Se trece cu Next urmtoarele ecrane, se bifeaz acceptarea condiiilor de utilizare (n ecranul

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

n care este cerut acest lucru) i Finish. n acest moment se ateapt instalarea softwareului necesar. (ATENIE: dureaz cteva minute pn la finalizarea operaiei).

Figura e. Alegerea CDT master pentru instalare

Figura f. Componentele care vor fi instalate Operaia de actualizare este terminat n momentul n care apare fereastra din Figura g. care cere restartarea programului Eclipse. Se alege opiunea Restart Now.

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Figura g. Fereastra care apare la terminarea actualizrilor i care cere restartarea Eclipse 4. Se lanseaz n execuie mingw-get-inst-20110211.exe (trebuie s existe legtur la Internet pentru ca s aduc fiierele necesare).

Figura h. Lansarea n execuie a programului de instalare pentru MinGW. n acest fel se lanseaz n execuie un program care ne ajut s nstalm acest compilator. Se trece cu Next de la o fereastr la alta, iar pentru instalare se alege Use pre-packaged repository catalogues (care este i opiunea implicit premarcat). Se alege directorul de lucru c:\MinGW. Pentru instalare nu se selecteaz nici un alt compilator (compilatorul pentru C standard este implicit), dar se selecteaz MSYS Basic System (Figura i). Se continu pn la afiarea ecranului de final (Finish).

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Figura i. Selectarea pentru instalare a compilatorului implicit i a componentei MSYS Basic System. 5. Se completeaz calea implicit din sistem cu directoarele c:\MinGW\bin i c:\MinGW\include procednd astfel: se alege Start Settings Control Panel. Se face dublu click pe System, apoi click pe Advanced (Figura 2c). Se selecteaz Environment variable.

Se selecteaz Path din seciunea System variables

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Se face click pe Edit i apare fereastra din figura urmtoare.

Presupunnd c MinGW a fost instalat n directorul C:\MinGW la sfritul irului Variable value se adaug ;C:\MinGW\bin;C:\MinGW\include ATENIE: semnul ; din faa irului este esenial pentru sintaxa corect a valorii variabilei PATH i trebuie s ne asigurm c nu exist spaii ntre caracterul; i numele cii. Noua valoarea a variabilei PATH apare n Figura de mai jos:

Se face click pe OK pentru ca modificrile s fie aplicate, apoi OK i iar OK. 6. Se lanseaz n execuie Eclipse i se stabilete ca directorul de lucru Se bifeaz Default workspace. 2. Pornirea aplicaiei Pentru a lansa mediul de programare Eclipse se face dublu clic pe fiierul eclipse.exe existent n directorul n care a fost instalat aplicaia sau pe icoana corespunztoare de pe desktop. Apare fereastra Workspace Launcher (prezentat n Figura 1). Aceast fereastr permite alegerea directorului n care vor fi stocate proiectele realizate. n exemplul din Figura 1 se stabilete ca director de lucru directorul c:\Temp. Facei clic pe OK pentru a confirma alegerea directorului de lucru.

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Figura 1. Fereastra Workspace Launcher. Dup nchiderea ferestrei Workspace Launcher apare fereastra Welcome (Figura 2) dac mediul Eclipse este lansat pentru prima dat, sau fereastra mediului de dezvoltare (prezentat n Figura 3). Fereastra Welcome poate fi reafiat din Help->Welcome.

Figura 2. Fereastra Welcome a mediului Eclipse nchiderea ferestrei Welcome are ca efect apariia ferestrei mediului de dezvoltare (Figura 3).

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Figura 3. Fereastra mediului de dezvoltare 3. Crearea unui proiect Pentru fiecare problem pe care trebuie s o rezolvm trebuie s crem un proiect. Pentru a crea un proiect nou alegem File -> New -> C Project (Figura 4)

Figura 4. Deschiderea unui proiect C nou

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Selectarea opiunii C Project are ca efect afiarea ferestrei C New Project wizard, dup cum este prezentat n Figura 5. n cmpul Project Name se introduce numele proiectului (n Figura 5 este MyFirstProgram). Pe msur ce se tasteaz numele programului, cmpul Directory devine d:\Temp\MyFirstProgram. Se alege tipul proiectului (din meniul Project types) ca fiind Empty Project. Se poate alege tipul de compilator pe care l folsim din meniul Toolchain. n acest caz singurul compilator instalat este MinGW GCC dup cum este prezentat n Figura 5 (care este compilatorul implicit n aceast instalare).

F Figura 5: Deschiderea unui nou proiect cu numele MyFirstProgram Se selecteaz Finish pentru a finaliza crearea proiectului C. Se deschide proiectul n perspectiv C. O perspectiv definete setarea iniial a modului de vizualizare n fereastr. Perspectiva controleaz ceea ce apare n anumite meniuri i bare de instrumente. Proiectul este creat i deschis, ar trebui s vedem fereastra Project explorer n partea stng. De aici se pot crea sau deschide fiierele proiectului. Iniial proiectul conine (n mod implicit) fiierele header de bibliotec disponibile (Figura 6).

10

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Figura 6. Fereastra iniial a proiectului Putem stabili un stil de scriere pentru programele sursa din Window->Preferences

Figura 6a. Alegerea opiunilor mediului Pentru lucrrile de laborator din acest semestru vom utiliza stilul BSD/Allman (built-in) (Figura 6b).

11

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Figura 6b. Alegerea stilului de scriere a codului. 3.1. Adugarea de fiiere la proiect Pentru a putea scrie cel mai simplu program C n Eclipse, trebuie s adugm fiiere surs / header. Pentru nceput vom aduga directorul src, iar n acest director vom aduga fiierele proiectului. Pentru crearea directorului src vom executa urmtorii pai Selectare folder MyFirstProgram n Project Explorer File / New / Folder Selectare Folder name: src Acum vom aduga urmtoarele fiiere n directorul src: FirstProgramMain.c fiierul care va conine funcia main MyFunction.h fiierul care va conine definiia funciilor MyFunction.c . fiierul care va conine implementarea funciilor

12

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Figura 7: Creare director src. Pentru adugarea celor trei fiiere vom executa urmtorii pai: 1. Adugare fiier header (Figura 8): Selectare folder src n Project Explorer File / New / HeaderFile Scriei numele fiierului header Header File: MyFunction.h - figura 8.

Figura 8: Adaugare fiier header. 2. Adugare fiiere surs (Figura 9) Selectare folder src n Project Explorer File / New / SourceFile Scriei numele fiierului surs Source File: MyFunction.c - figura 7 File / New / SourceFile Scriei numele fiierului surs Source File: FirstProgramMain.c

13

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Figura 9. Adugare fiier surs. Atenie: cnd adugai fiiere header sau fiiere surs este obligatoriu s precizai i extensia acestora. 3.2 Scrierea primului program S se scrie un program care citete de la tastatur trei numere ntregi i afieaz maximul lor. Selectai din Project Explorer fiierul care vrei s-l editai (clic pe el), apoi scriei codul C dorit:

Figura 10. Eclipse IDE dup adugarea fiierelor proiectului

14

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Mai jos este listat codul surs din cele trei fiiere ale aplicaiei. Observaie: Fiecare student va completa cu numele su linia de comentariu care se refer la autorul programului. /* * MyFunction.h - Proiect MyFirstProgram * * Creat pe 11.02.2009 * Autor <nume autor program> * Copyright 2009 * * Descriere Fisierul cu prototipurile functiilor * pentru primul proiect */ #ifndef MYFUNCTION_H_ #define MYFUNCTION_H_ int maxim(int x, int y, int z); #endif /* MYFUNCTION_H_ */ /* * MyFunction.c - Proiect MyFirstProgram * * Creat pe 11.02.2009 * Autor <nume autor program> * Copyright 2009 * * Descriere: Functiile pentru primul proiect */ #include "MyFunction.h" /* * maxim Functie pentru determinarea maximului dintre numere * intregi * Parametri de intrare: trei numere intregi * Parametri de iesire: maximul dintre cele trei numere */ int maxim(int x, int y, int z) { int nrMaxim; if (x > y) { nrMaxim = x; } else { nrMaxim = y; } if(nrMaxim < z) { nrMaxim = z; } return nrMaxim; } /* 15

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

* FirstProgramMain.c - Proiect MyFirstProgram * * Creat pe 11.02.2009 * Autor <nume autor program> * Copyright 2009 * * Descriere: Fisierul cu functia main pentru primul proiect * de calculare a maximului dintre 3 numere */ #include <stdio.h> #include "MyFunction.h" int main(void) { int nr1, nr2, nr3; int max; printf("Citeste primul numar: "); scanf("%d", &nr1); printf("Citeste al doilea numar: "); scanf("%d", &nr2); printf("Citeste al treilea numar: "); scanf("%d", &nr3); max = maxim(nr1, nr2, nr3); printf("Cel mai mare numar este %d\n", max); return 0; } 3.3 Compilarea i rularea proiectului. Detectarea erorilor. Pentru a compila proiectul selectm din meniul principal Project Build Project. Atenie: ceea ce se compileaz este codul de la ultima salvare. De aceea salvai ntotdeauna nainte de compilare: CTRL + S. Dac sunt detectate erori de compilare, n partea de jos a ecranului va aprea fereastra Problems. S introducem intenionat o eroare, de exemplu, putem nlocui linia scanf(%d, &nr); cu scanf(%d, &nr) scond ;. La compilare, compilatorul i d seama c lipsete ; i afieaz n fereastra Problems urmtorul mesaj:

Figura 11. Compilare cu erori

16

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Atenie: se observ X - ul rou cu care este marcat att fiierul, ct i linia unde a aprut eroarea. Dac dm dublu-clic pe mesajul de eroare, cursorul se va deplasa la linia de cod coninnd eroarea. n general s-a observat urmtoarea regul eroarea trebuie cutat ori pe linia afiat n error list, ori cu o linie mai sus. n exemplul nostru, mesajul de eroare ne duce cu o linie mai jos. Dup compilare, link-editare i eliminarea tuturor erorilor lansarea n execuie se poate face n dou moduri: A. Folosind Command prompt din Windows (cmd.exe) pornim cmd.exe: Start /Run

Figura 12. Rulare cmd.exe din linia de comand a aplicaiei cmd, folosind comanda MS-DOS cd (change directory), setm directorul n care se gsete programul executabil (fiierul de tip exe). Alte comenzi MS-DOS utile: type <nume_fisier> - listeaz pe monitor coninutul fiierului <nume_fisier> dir listeaz toate fiierele din directorul curent lansm n execuie fiierul exe rezultat n urma link-editrii tastnd numele dat proiectului: MyFirstProgram Observaie: pentru fiierele de tip exe (executabile) nu este necesar indicarea extensiei atunci cnd sunt lansate n execuie. B. Folosind Total Commander lansm n execuie Total Commander i ne poziionm pe subdirectorul Debug al directorului n care se gsete programul surs (Figura 13).

Figura 13. Fereastr Total Commander

17

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Selectm din meniul Command Run Dos (Figura 14).

Figura 14. Lansarea n execuie a MS-DOS Apare fereastra MS-DOS din Figura 15.

Figura 15. Fereastera MS-DOS Se lanseaz n execuie programul prin tastarea numelui su (aici p1). Numele programului coincide ntotdeauna cu numele proiectului. n Figura 16 este fereastra MS-DOS n care s-a executat programul p1 (programul cere numele utilizatorului i afieaz mesajul Primul program n C)

Figura 16. Lansarea n execuie i rularea programului p1

18

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

4. Deschiderea unui proiect existent Pentru a ncrca un proiect existent se vor executa urmtorii pai: Selectai File / Import Selectai General / Existing Projects ca n figura de mai jos. Apsai butonul Next.

Figura 17. Deschiderea unui proiect existent Apsai butonul Browse i selectai directorul n care se afl aplicaia: C:\Temp\MyFirstProgram Bifai proiectele dorite din lista Projects. n cazul nostru avem doar un proiect n directorul specificat Figura 18.

Figura 18. Selectare proiecte. Facei clic pe Finish pentru a ncrca proiectul.

5. Utilizarea debuger-ului Debuger-ul din acest mediu integrat este puternic i uor de folosit. Pentru a starta aplicaia n modul debug: 19

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Clic Run / Debug (F11). n acest moment vei fi ntrebai dac dorii s deschidei perspectiva debug. O perspectiv definete setarea iniial a modului de vizualizare n fereastr. Perspectiva Debug conine moduri de vizualizare ce sunt folosite pentru depanare de programe (clic pe yes). n acest moment aplicaia se va deschide n modul debug dup cum este prezentat n Figura 19.:

Figura 19. Perspectiva Debug. Acum putem trasa aplicaia pas cu pas. Exist cteva butoane pe care le vom utiliza pentru a depana proiectul nostru (meniul Run): o Butonul "Resume" - F8 este folosit pentru a relua executarea pn cnd se termin sau ntlnete un alt breakpoint. o Butonul "Stop" CTRL-F2 va opri procesul de depanare. o Butonul "Step into" F5 va executa codul linie cu linie i va intra n metodele care vor fi apelate. Altfel, se va comporta ca butonul "Step over". o Butonul "Step over" F6 va executa codul linie cu linie fr a intra n metode. Apsai F5 i observai linia la care a ajuns programul, linia selectat este linia care se execut cnd apsai F5. Cnd ai ajuns pe instruciunea scanf (citete un numr de la tastatur) apsai nc o dat F5, apoi introducei valoarea primului numr n consol ca n figura de mai jos:

20

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Figura 20. Debug pas cu pas. Variabile: uitai-v n cadrul dreapta sus la fereastra Variables aici vor aprea valorile variabilelor. Parcurgei liniile de cod pas cu pas apsnd butonul Step over (F5 ca o comand rapid), uitai-v n fereastra Variables. O dat ce o nou variabil este iniializat va aprea acolo i atunci cnd ea i schimb valoarea, se va actualiza automat. Se vor introduce valorile nr1= 3, nr2 = 76, nr3 = 43. Observai c, apsnd F5 cnd linia selectat este: printf("Cel mai mare numar este %d", maxim(nr1, nr2, nr3)); se va trasa codul funciei maxim, urmrii ramurile de execuie ale algoritmului n cadrul acestei funcii. Putei pune un breakpoint pe o anumit linie: o selectnd linia respectiv - de exemplu: printf("Citeste al doilea numar: "); o apsnd CTRL + SHIFT + B sau meniul Run Toggle Breakpoint acum aplicaia se va opri la fiecare execuie n mod debug la linia ce conine breakpointul.

PROBLEME DE REZOLVAT Fiecare problem se va rezolva folosind un proiect care va conine: - un fiier header cu prototipurile funciilor folosite - un fiier cu funcia main - un fiier cu funciile din program (Dup modelul de la curs). De asemenea, pentru fiecare problem se va face o analiz pentru identificarea datelor de intrare i de ieire din program i din fiecare funcie, a algoritmilor folosii, ct i a seturilor de date de test). TEMA 1 Problema nr. 1.1 Se citesc de pe dispozitivul de intrare 3 numere care reprezint lungimile laturilor unui triunghi. S se calculeze aria triunghiului folosind formula lui Heron. A= p(p a)(p b )(p c ) 21

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

unde p este semiperimetrul triunghiului. (Rezolvarea va cuprinde o funcie pentru calculul ariei). Problema nr. 1.2. S se scrie un program care citete de la tastatur trei numere ntregi i afieaz maximul lor. (Rezolvarea va cuprinde o funcie pentru determinarea maximului). Problema nr. 1.3. S se scrie un program care citete de la tastatur cinci numere ntregi (nu se vor folosi vectori), dup care determin i afieaz media lor aritmetic (pentru mprire se folosete operatorul '/'; pentru a lucra cu numere reale - necesar probabil pentru medie se folosete tipul de data float / double pentru reprezentarea n simpl /dubl precizie, cu specificatorii de conversie '%f' i respectiv '%lf'). (Rezolvarea va cuprinde o funcie pentru calculul mediei aritmetice). Problema nr. 1.4 Fie urmtoarea funcie:
x 2 + 3 x + 5, x ( ,2] f (x ) = 3 x, x (2,8) e x + 2, x [8, )

S se calculeze valoarea funciei f pentru un x citit de pe dispozitivul de intrare. Se va scrie o funcie care primete ca parametru valoarea lui x i returneaz valoarea funciei. Problema nr. 1.5. S se scrie un program care citete de la tastatur trei numere ntregi i determin dac aceste numere pot reprezenta lungimile laturilor unui triunghi. n caz afirmativ, programul trebuie s determine i tipul triunghiului (isoscel sau dreptunghic sau echilateral sau oarecare). (Rezolvarea va cuprinde funcii pentru determinarea calitii de triunghi, triunghi echilateral, triunghi isoscel sau triunghi dreptunghic). Problema nr. 1.6. S se scrie un program care determin cel mai mare divizor comun pentru dou numere ntregi strict pozitive dup algoritmul lui Euclid: se mparte numrul mai mare la cel mai mic att timp ct mpritorul este nenul; la fiecare pas, pn cnd restul este zero, se nlocuiete dempritul cu mpritorul i mpritorul cu restul; ultimul mpritor nenul este c.m.m.d.c. Pentru rest se folosete operatorul modulo: % (exemplu: a%b nseamn restul mpririi lui a la b) se va scrie o funcie pentru calculul cmmdc. Problema nr. 1.7. S se scrie un program care determin i afieaz vrsta utilizatorului (msurat n ani i n luni). Luna i anul naterii, luna i anul curent se citesc de la tastatur. Atenie NU se transform vrsta n luni ca s se calculeze vrsta. TEMA 2 Problema nr. 2.1. Se citesc de pe dispozitivul de intrare 3 numere reale care reprezint coeficienii unei ecuaii de gradul 2. S se determine rdcinile acestei ecuaii. n cazul n care ecuaia nu poate fi rezolvat se vor afia mesaje corespunztoare. Problema nr. 2.2. 22

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

Un punct din plan este dat prin coordonatele sale (x, y). S se stabileasc poziia punctului prin indicarea cadranului (1, 2, 3, 4) n care este plasat. Pentru un punct situat pe una din semiaxe se vor preciza cadranele separate de semiaxa respectiv (de exemplu 23). Problema nr. 2.3. S se calculeze durata unei conexiuni Internet cunoscndu-se momentul conectrii (dat prin or, minut i secund) i momentul deconectrii (de asemenea dat prin or, minut i secund). Trebuie s se ia n consideraie cazul n care o conexiune ncepe ntr-o zi i se ncheie n ziua urmtoare. Atenie: rezultatul trebuie afiat sub forma ore, minute, secunde, deci pentru calcul NU se va transforma totul n secunde. Problema nr. 2.4. S se calculeze momentul ntreruperii unei conexiuni Internet dac se cunoate momentul de conectare (dat prin or, minut i secund) i durata total a conexiunii (dat prin ore, minute i secunde). Se ia n consideraie i cazul n care o conexiune nceput ntr-o anumit i se poate ncheia n ziua urmtoare. Atenie: rezultatul trebuie afiat sub forma ore, minute, secunde, deci pentru calcul NU se va transforma totul n secunde. Problema nr. 2.5. O pereche de numere naturale a i b se numesc prietene dac suma divizorilor unuia din numere este egal cu cellalt numr (i invers). De exemplu, 220 i 284 sunt numere prietene deoarece: 1, 2, 4, 5, 10, 11, 20, 22, 44, 55, 110 sunt divizori ai numrului 220 i suma lor este 284 1, 2, 4, 71, 142 sunt divizori ai numrului 284 i suma lor este 220. S se scrie un program care gsete toate numerele prietene dintr-un interval dat de numere naturale [x, y]. Cele dou numere care reprezint capetele intervalului sunt citite de la tastatur i programul face i validarea datelor (verific corectitudinea datelor de intrare). Nu se vor folosi tablouri. Indicaii: n afara funciei main se vor mai scrie dou funcii ale cror prototipuri se vor indica ntr-un fiier header: 1. o funcie care primete ca parametru un numr natural i returneaz suma divizorilor numrului. 2. o funcie avnd ca parametri dou numere naturale i care returneaz 1 sau 0 dup cum cele numere sunt sau nu prietene. Problema nr. 2.6. Numerele naturale pot fi clasificate n: deficiente, perfecte sau abundente dup cum suma divizorilor este mai mic, egal sau mai mare dect valoarea numrului. Astfel: n = 12 este abundent deoarece are suma divizorilor sd = 1+2+3+4+6 = 16 > 12, n = 6 este perfect pentru c sd = 1+2+3 = 6, n=14 este deficient deoarece sd = 1 + 2 + 7 = 10 < 14. Scriei un program care citete dou valori naturale x i y i, n funcie de opiunea utilizatorului, afieaz toate numerele perfecte, abundente sau deficiente din intervalul [x, y]. Programul trebuie s conin o secven de validare a datelor. Nu se vor folosi tablouri. Indicaii: n afara funciei main se vor mai scrie dou funcii ale cror prototipuri se vor indica ntr-un fiier header: 23

PROGRAMAREA CALCULATOARELOR

LUCRAREA NR. 2

1. o funcie care primete ca parametru un numr natural i returneaz suma divizorilor numrului. 2. o funcie avnd ca parametru un numr natural, funcie care returneaz -1, 1 sau 0 dup cum numrul transmis ca parametru este deficient, perfect sau abundent. Problema nr. 2.7. Se citesc de la tastatur un numr necunoscut de numere ntregi nenule terminate cu caracterul CTRL/Z. S se stabileasc dac acestea: - formeaz un ir strict cresctor (tip ir = 6) - formeaz un ir cresctor (tip ir = 5) - formeaz un ir strict descresctor (tip ir = 2) - formeaz un ir descresctor (tip ir = 3) - sunt identice (irul este constant) (tip ir = 4) - nu sunt ordonate (tip ir = 1) Programul are posibilitatea de a analiza mai multe seturi de date (va exista posibilitatea de reluare a programului). Observaii: 1. Numerele citite nu se vor memora ntr-un vector (tablou). 2. Caracterul CTRL/Z se obine prin apsarea simultan a tastelor Ctrl i Z i are semnificaie de sfrit de fiier asociat tastaturii. Se va consulta Help-ul pentru a vedea cum se comport funcia scanf n cazul ntlnirii sfritului de fiier. Indicaii: Intre doua elemente ale irului se pot stabili urmtoarele relaii de ordine: - mai mic - egal - mai mare Se determina numrul de relaii de ordine de fiecare tip i n funcie de acest numr se stabilete tipul irului astfel: a. numai relaii mai mic - sir strict cresctor b. relaii mai si relaii egal sir cresctor c. numai relaii egal sir constant d. relaii egal si relaii mai mare sir descresctor e. numai relaii mai mare sir strict descresctor f. toate tipurile de relaii sir oarecare n afara funciei main se vor mai scrie dou funcii ale cror prototipuri se vor indica ntr-un fiier header: 1. o funcie care nu are nici un parametru i returneaz o valoare n funcie de tipul irului analizat. Aceast funcie citete i analizeaz irul. 2. o funcie care primete ca parametru un numr natural reprezentnd tipul irului i afieaz mesajul corespunztor.

24