Laborator 2-Prezentareamediuluideprogramare

24
PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2 1 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 sfârşitul anilor ’90, IBM a început dezvoltarea a ceea ce este cunoscut azi ca Eclipse. În noiembrie 2001, s-a decis să se adopte licenţierea open source şi modelul acestei tehnologii pentru a accelera adoptarea Eclipse ca platformă globală de dezvoltare. Principiul de bază al consorţiului a fost următorul: comunităţile open source vor dirija programarea, iar consorţiul comercial va promova produsul respectiv. Aceasta era o aplicaţie nouă si interesantă a modelului open source, bazată pe o platformă gratuită şi deschisă. Pentru mai multe informaţii accesaţi: 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 aplicaţii î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 execuţie în mod linie de comandă MS-DOS sau Linux). Pentru instalarea versiunii de lucru (existenta pe staţiile din laborator) trebuie accesate următoarele 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 biţi) 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 corespunzătoare. 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/

description

elena serban

Transcript of Laborator 2-Prezentareamediuluideprogramare

Page 1: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

1

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 sfârşitul anilor ’90, IBM a început dezvoltarea a ceea ce este cunoscut azi ca

Eclipse. În noiembrie 2001, s-a decis să se adopte licenţierea open source şi modelul acestei tehnologii pentru a accelera adoptarea Eclipse ca platformă globală de dezvoltare. Principiul de bază al consorţiului a fost următorul: comunităţile open source vor dirija programarea, iar consorţiul comercial va promova produsul respectiv. Aceasta era o aplicaţie nouă si interesantă a modelului open source, bazată pe o platformă gratuită şi deschisă. Pentru mai multe informaţii accesaţi:

• 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 aplicaţii î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 execuţie în mod linie de comandă MS-DOS sau Linux).

Pentru instalarea versiunii de lucru (existenta pe staţiile din laborator) trebuie accesate următoarele 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 biţi) http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/heliossr1Din partea dreaptă a ecranului se selectează sistemul de operare pe care se

lucrează şi se descarcă arhiva corespunzătoare. 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/

Page 2: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

2

Modalitatea de instalare (link-urile indicate mai sus sunt pentru pachetele corespunzătoare sistemului de operare Windows pe 32 de biţi). Pentru alte sisteme de operare paşii de instalare sunt aceeaşi 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 corespunzător

(de ex. C:\Eclipse)

3. Se lansează în execuţie eclipse.exe. a. Se închide fereastra Welcome (Figura a) care apare la prima execuţie a programului Eclipse (fereastra poate fi reafişată alegând Help Welcome)

Figura a. Fereastra Welcome a mediului Eclipse

b. Se selectează Help Install New Software (Figura 1b).

Page 3: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

3

b. Deschiderea meniului Help şi alegerea opţiunii 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 cdt-master-7.0.1-I201009241320.zip

Figura d. Alegerea arhivei cu actualizările pentru dezvoltarea de programe în C

e. Se alege arhiva cu actualizările de instalat (Figura 1e). Se selectează Open. Va fi afişată 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 opţiunile legate de Unified Parralel C ... şi XL C/C++ Compiler .... Apoi se selecteză Next. Se trece cu Next următoarele ecrane, se bifează acceptarea condiţiilor de utilizare (în ecranul

Page 4: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

4

în care este cerut acest lucru) şi Finish. În acest moment se aşteaptă instalarea software-ului necesar. (ATENŢIE: durează câteva minute până la finalizarea operaţiei).

Figura e. Alegerea CDT master pentru instalare

Figura f. Componentele care vor fi instalate

Operaţia de actualizare este terminată în momentul în care apare fereastra din Figura g. care cere restartarea programului Eclipse. Se alege opţiunea Restart Now.

Page 5: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

5

Figura g. Fereastra care apare la terminarea actualizărilor

şi care cere restartarea Eclipse

4. Se lansează în execuţie mingw-get-inst-20110211.exe (trebuie să existe legătură

la Internet pentru ca să aducă fişierele necesare).

Figura h. Lansarea în execuţie a programului de instalare pentru MinGW.

În acest fel se lansează în execuţie un program care ne ajută să înstalăm 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 opţiunea 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ă până la afişarea ecranului de final (Finish).

Page 6: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

6

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 procedând 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 secţiunea System variables

Page 7: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

7

Se face click pe Edit şi apare fereastra din figura următoare.

Presupunând că MinGW a fost instalat în directorul C:\MinGW la sfârşitul şirului Variable value se adaugă

;C:\MinGW\bin;C:\MinGW\include ATENŢIE: semnul ; din faţa şirului este esenţial pentru sintaxa corectă a

valorii variabilei PATH şi trebuie să ne asigurăm că nu există spaţii între caracterul; şi numele căii.

Noua valoarea a variabilei PATH apare în Figura de mai jos:

Se face click pe OK pentru ca modificările să fie aplicate, apoi OK şi iar OK.

6. Se lansează în execuţie Eclipse şi se stabileşte ca directorul de lucru Se bifează Default workspace.

2. Pornirea aplicaţiei Pentru a lansa mediul de programare Eclipse se face dublu clic pe fişierul

eclipse.exe existent în directorul în care a fost instalată aplicaţia sau pe icoana corespunzătoare 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 stabileşte ca director de lucru directorul c:\Temp. Faceţi clic pe OK pentru a confirma alegerea directorului de lucru.

Page 8: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

8

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 reafişată din Help->Welcome.

Figura 2. Fereastra Welcome a mediului Eclipse

Închiderea ferestrei Welcome are ca efect apariţia ferestrei mediului de dezvoltare (Figura 3).

Page 9: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

9

Figura 3. Fereastra mediului de dezvoltare

3. Crearea unui proiect Pentru fiecare problemă pe care trebuie să o rezolvăm trebuie să creăm un proiect.

Pentru a crea un proiect nou alegem File -> New -> C Project (Figura 4)

Figura 4. Deschiderea unui proiect C nou

Page 10: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

10

Selectarea opţiunii C Project are ca efect afişarea ferestrei C New Project wizard, după cum este prezentat în Figura 5.

În câmpul Project Name se introduce numele proiectului (în Figura 5 este MyFirstProgram). Pe măsură ce se tastează numele programului, câmpul 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ă defineşte setarea iniţială 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 stângă. De aici se pot crea sau deschide fişierele proiectului. Iniţial proiectul conţine (în mod implicit) fişierele header de bibliotecă disponibile (Figura 6).

Page 11: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

11

Figura 6. Fereastra iniţială a proiectului

Putem stabili un stil de scriere pentru programele sursa din Window->Preferences

Figura 6a. Alegerea opţiunilor mediului

Pentru lucrările de laborator din acest semestru vom utiliza stilul BSD/Allman (built-in) (Figura 6b).

Page 12: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

12

Figura 6b. Alegerea stilului de scriere a codului.

3.1. Adăugarea de fişiere la proiect

Pentru a putea scrie cel mai simplu program C în Eclipse, trebuie să adăugăm fişiere sursă / header. Pentru început vom adăuga directorul src, iar în acest director vom adăuga fişierele proiectului. Pentru crearea directorului src vom executa următorii paşi

• Selectare folder MyFirstProgram în Project Explorer • File / New / Folder • Selectare Folder name: src

Acum vom adăuga următoarele fişiere în directorul src: • FirstProgramMain.c fişierul care va conţine funcţia main • MyFunction.h fişierul care va conţine definiţia funcţiilor • MyFunction.c . fişierul care va conţine implementarea funcţiilor

Page 13: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

13

Figura 7: Creare director src.

Pentru adăugarea celor trei fişiere vom executa următorii paşi:

1. Adăugare fişier header (Figura 8): • Selectare folder src în Project Explorer • File / New / HeaderFile • Scrieţi numele fişierului header Header File: MyFunction.h - figura 8.

Figura 8: Adaugare fişier header.

2. Adăugare fişiere sursă (Figura 9)

• Selectare folder src în Project Explorer • File / New / SourceFile • Scrieţi numele fişierului sursă Source File: MyFunction.c - figura 7 • File / New / SourceFile • Scrieţi numele fişierului sursă Source File: FirstProgramMain.c

Page 14: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

14

Figura 9. Adăugare fişier sursă.

Atenţie: când adăugaţi fişiere header sau fişiere sursă este obligatoriu să precizaţi şi extensia acestora. 3.2 Scrierea primului program

Să se scrie un program care citeşte de la tastatură trei numere întregi şi afişează maximul lor.

Selectaţi din Project Explorer fişierul care vreţi să-l editaţi (clic pe el), apoi scrieţi

codul C dorit:

Figura 10. Eclipse IDE după adăugarea fişierelor proiectului

Page 15: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

15

Mai jos este listat codul sursă din cele trei fişiere ale aplicaţiei. Observaţie: Fiecare student va completa cu numele său 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; } /*

Page 16: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

16

* 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 selectăm din meniul principal Project → Build Project. Atenţie: ceea ce se compilează este codul de la ultima salvare. De aceea salvaţi

întotdeauna înainte de compilare: CTRL + S. Dacă sunt detectate erori de compilare, în partea de jos a ecranului va apărea

fereastra Problems. Să introducem intenţionat o eroare, de exemplu, putem înlocui linia “scanf(“%d”, &nr);” cu “scanf(“%d”, &nr)” scoţînd “;”. La compilare, compilatorul îşi dă seama că lipseşte “;” şi afişează în fereastra Problems următorul mesaj:

Figura 11. Compilare cu erori

Page 17: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

17

Atenţie: se observă “X” - ul roşu cu care este marcat atât fişierul, cât şi linia unde a apărut eroarea.

Dacă dăm dublu-clic pe mesajul de eroare, cursorul se va deplasa la linia de cod conţinând eroarea. În general s-a observat următoarea regulă – eroarea trebuie căutată ori pe linia afişată î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 execuţie 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 aplicaţiei cmd, folosind comanda MS-DOS cd (change

directory), setăm directorul în care se găseşte programul executabil (fişierul de tip exe). Alte comenzi MS-DOS utile:

type <nume_fisier> - listează pe monitor conţinutul fişierului <nume_fisier> dir – listează toate fişierele din directorul curent

• lansăm în execuţie fişierul exe rezultat în urma link-editării tastând numele dat proiectului: MyFirstProgram

Observaţie: pentru fişierele de tip exe (executabile) nu este necesară indicarea extensiei atunci când sunt lansate în execuţie. B. Folosind Total Commander

• lansăm în execuţie Total Commander şi ne poziţionăm pe subdirectorul Debug al directorului în care se găseşte programul sursă (Figura 13).

Figura 13. Fereastră Total Commander

Page 18: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

18

• Selectăm din meniul Command Run Dos (Figura 14).

Figura 14. Lansarea în execuţie a MS-DOS

• Apare fereastra MS-DOS din Figura 15.

Figura 15. Fereastera MS-DOS

• Se lansează în execuţie programul prin tastarea numelui său (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 afişează mesajul Primul program în C)

Figura 16. Lansarea în execuţie şi rularea programului p1

Page 19: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

19

4. Deschiderea unui proiect existent Pentru a încărca un proiect existent se vor executa următorii paşi: Selectaţi File / Import Selectaţi General / Existing Projects ca în figura de mai jos. Apăsaţi butonul Next.

Figura 17. Deschiderea unui proiect existent

• Apăsaţi butonul Browse şi selectaţi directorul în care se află aplicaţia:

C:\Temp\MyFirstProgram • Bifaţi proiectele dorite din lista Projects. În cazul nostru avem doar un proiect în

directorul specificat – Figura 18.

Figura 18. Selectare proiecte.

• Faceţi clic pe Finish pentru a încărca proiectul.

5. Utilizarea debuger-ului Debuger-ul din acest mediu integrat este puternic şi uşor de folosit. Pentru a starta

aplicaţia în modul debug:

Page 20: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

20

• Clic Run / Debug (F11). • În acest moment veţi fi întrebaţi dacă doriţi să deschideţi perspectiva debug. O

perspectivă defineşte setarea iniţială a modului de vizualizare în fereastră. Perspectiva Debug conţine moduri de vizualizare ce sunt folosite pentru depanare de programe (clic pe yes). În acest moment aplicaţia se va deschide în modul debug după cum este prezentat în Figura 19.:

Figura 19. Perspectiva Debug.

• Acum putem trasa aplicaţia pas cu pas. Există câteva butoane pe care le vom utiliza

pentru a depana proiectul nostru (meniul Run): o Butonul "Resume" - F8 este folosit pentru a relua executarea până când se

termină sau întâlneşte 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 fără a intra în metode.

• Apăsaţi F5 şi observaţi linia la care a ajuns programul, linia selectată este linia care se execută când apăsaţi F5. Când aţi ajuns pe instrucţiunea scanf (citeşte un număr de la tastatură) apăsaţi încă o dată F5, apoi introduceţi valoarea primului număr în consolă ca în figura de mai jos:

Page 21: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

21

Figura 20. Debug pas cu pas.

• Variabile: uitaţi-vă în cadrul dreapta sus la fereastra Variables aici vor apărea

valorile variabilelor. Parcurgeţi liniile de cod pas cu pas apăsând butonul Step over (F5 ca o comandă rapidă), uitaţi-vă în fereastra Variables. O dată ce o nouă variabilă este iniţializată va apărea acolo şi atunci când ea îşi schimbă valoarea, se va actualiza automat.

• Se vor introduce valorile nr1= 3, nr2 = 76, nr3 = 43. Observaţi că, apăsând F5 când linia selectată este: printf("Cel mai mare numar este %d", maxim(nr1, nr2, nr3)); se va trasa codul funcţiei maxim, urmăriţi ramurile de execuţie ale algoritmului în cadrul acestei funcţii.

• Puteţi pune un breakpoint pe o anumită linie: o selectând linia respectivă - de exemplu: printf("Citeste al doilea numar: "); o apăsând CTRL + SHIFT + B sau meniul Run – Toggle Breakpoint acum

aplicaţia se va opri la fiecare execuţie în mod debug la linia ce conţine breakpointul.

PROBLEME DE REZOLVAT Fiecare problemă se va rezolva folosind un proiect care va conţine:

- un fişier header cu prototipurile funcţiilor folosite - un fişier cu funcţia main - un fişier cu funcţiile din program

(După modelul de la curs). De asemenea, pentru fiecare problemă se va face o analiză pentru identificarea

datelor de intrare şi de ieşire din program şi din fiecare funcţie, a algoritmilor folosiţi, cât ş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.

( )( )( )cpbpappA −−−=

Page 22: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

22

unde p este semiperimetrul triunghiului. (Rezolvarea va cuprinde o funcţie pentru calculul ariei). Problema nr. 1.2.

Să se scrie un program care citeşte de la tastatură trei numere întregi şi afişează maximul lor. (Rezolvarea va cuprinde o funcţie pentru determinarea maximului). Problema nr. 1.3.

Să se scrie un program care citeşte de la tastatură cinci numere întregi (nu se vor folosi vectori), după care determină şi afişează media lor aritmetică (pentru împărţire se foloseşte operatorul '/'; pentru a lucra cu numere reale - necesar probabil pentru medie – se foloseşte tipul de data float / double pentru reprezentarea în simplă /dublă precizie, cu specificatorii de conversie '%f' şi respectiv '%lf'). (Rezolvarea va cuprinde o funcţie pentru calculul mediei aritmetice). Problema nr. 1.4 Fie următoarea funcţie:

( )( ]( )[ )⎪

⎪⎨

∞∈+∈

∞−∈++=

,8,28,2,3

2,,532

xexxxxx

xfx

Să se calculeze valoarea funcţiei pentru un f x citit de pe dispozitivul de intrare. Se va scrie o funcţie care primeşte ca parametru valoarea lui x şi returnează valoarea funcţiei. Problema nr. 1.5.

Să se scrie un program care citeşte 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 funcţii pentru determinarea calităţii 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 numărul mai mare la cel mai mic atât timp cât împărţitorul este nenul; la fiecare pas, până când restul este zero, se înlocuieşte deîmpărţitul cu împărţitorul şi împărţitorul cu restul; ultimul împărţitor nenul este c.m.m.d.c. Pentru rest se foloseşte operatorul modulo: % (exemplu: a%b înseamnă restul împărţirii lui a la b) – se va scrie o funcţie pentru calculul cmmdc. Problema nr. 1.7.

Să se scrie un program care determină şi afişează vârsta utilizatorului (măsurată în ani şi în luni). Luna şi anul naşterii, luna şi anul curent se citesc de la tastatură. Atenţie NU se transformă vârsta în luni ca să se calculeze vârsta.

TEMA 2 Problema nr. 2.1.

Se citesc de pe dispozitivul de intrare 3 numere reale care reprezintă coeficienţii unei ecuaţii de gradul 2. Să se determine rădăcinile acestei ecuaţii. În cazul în care ecuaţia nu poate fi rezolvată se vor afişa mesaje corespunzătoare. Problema nr. 2.2.

Page 23: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

23

Un punct din plan este dat prin coordonatele sale (x, y). Să se stabilească poziţia 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 2-3). Problema nr. 2.3.

Să se calculeze durata unei conexiuni Internet cunoscându-se momentul conectării (dat prin oră, minut şi secundă) şi momentul deconectării (de asemenea dat prin oră, minut şi secundă). Trebuie să se ia în consideraţie cazul în care o conexiune începe într-o zi şi se încheie în ziua următoare. Atenţie: rezultatul trebuie afişat 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 cunoaşte momentul de conectare (dat prin oră, minut şi secundă) şi durata totală a conexiunii (dată prin ore, minute şi secunde). Se ia în consideraţie şi cazul în care o conexiune începută într-o anumită i se poate încheia în ziua următoare. Atenţie: rezultatul trebuie afişat 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 celălalt număr (ş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 numărului 220 şi suma lor este 284 1, 2, 4, 71, 142 sunt divizori ai numărului 284 şi suma lor este 220. Să se scrie un program care găseşte 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. Indicaţii: În afara funcţiei main se vor mai scrie două funcţii ale căror prototipuri se vor indica într-un fişier header:

1. o funcţie care primeşte ca parametru un număr natural şi returnează suma divizorilor numărului.

2. o funcţie având 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 decât valoarea numărului. 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.

Scrieţi un program care citeşte două valori naturale x şi y şi, în funcţie de opţiunea utilizatorului, afişează toate numerele perfecte, abundente sau deficiente din intervalul [x, y]. Programul trebuie să conţină o secvenţă de validare a datelor. Nu se vor folosi tablouri. Indicaţii: În afara funcţiei main se vor mai scrie două funcţii ale căror prototipuri se vor indica într-un fişier header:

Page 24: Laborator 2-Prezentareamediuluideprogramare

PROGRAMAREA CALCULATOARELOR LUCRAREA NR. 2

24

1. o funcţie care primeşte ca parametru un număr natural şi returnează suma divizorilor numărului.

2. o funcţie având ca parametru un număr natural, funcţie care returnează -1, 1 sau 0 după cum numărul transmis ca parametru este deficient, perfect sau abundent.

Problema nr. 2.7.

Se citesc de la tastatură un număr necunoscut de numere întregi nenule terminate cu caracterul CTRL/Z. Să se stabilească dacă acestea:

- formează un şir strict crescător (tip şir = 6) - formează un şir crescător (tip şir = 5) - formează un şir strict descrescător (tip şir = 2) - formează un şir descrescător (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). Observaţii:

1. Numerele citite nu se vor memora într-un vector (tablou). 2. Caracterul CTRL/Z se obţine prin apăsarea simultană a tastelor Ctrl şi Z şi are

semnificaţie de sfârşit de fişier asociat tastaturii. Se va consulta Help-ul pentru a vedea cum se comportă funcţia scanf în cazul întâlnirii sfârşitului de fişier.

Indicaţii: Intre doua elemente ale şirului se pot stabili următoarele relaţii de ordine:

- mai mic - egal - mai mare

Se determina numărul de relaţii de ordine de fiecare tip şi în funcţie de acest număr se stabileşte tipul şirului astfel:

a. numai relaţii mai mic - sir strict crescător b. relaţii mai si relaţii egal – sir crescător c. numai relaţii egal – sir constant d. relaţii egal si relaţii mai mare – sir descrescător e. numai relaţii mai mare – sir strict descrescător f. toate tipurile de relaţii – sir oarecare

În afara funcţiei main se vor mai scrie două funcţii ale căror prototipuri se vor indica într-un fişier header:

1. o funcţie care nu are nici un parametru şi returnează o valoare în funcţie de tipul şirului analizat. Această funcţie citeşte şi analizează şirul.

2. o funcţie care primeşte ca parametru un număr natural reprezentând tipul şirului şi afişează mesajul corespunzător.