Sunteți pe pagina 1din 18

PROGRAMARE 1 LUCRAREA NR.

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 nouă
si interesantă aplicaţie 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#. În cadrul laboratorului
vom scrie programe C de tip consolă.

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 18
jre-6u18-windows-i586-s.exe
http://www.java.com/en/download/manual.jsp

b) Mediul de dezvoltare Eclipse


Galileo 3.5.1. (SR!) Packages
1) eclipse-cpp-galileo-SR1-win32.zip
http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/rel
ease/galileo/SR1/eclipse-cpp-galileo-SR1-win32.zip
2) cdt-master-6.0.1.zip
http://www.eclipse.org/downloads/download.php?file=/tools/cdt/releases/galileo/dist/c
dt-master-6.0.1.zip

c) Compilatorul MinGW (MinGW 5.1.6)


http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/MinG
W%205.1.6/MinGW-5.1.6.exe/download

d) Debugger gdb 7.0.1


gdb-7.0.1.tar.gz
http://www.gnu.org/software/gdb/download/

e) MSYS
http://heanet.dl.sourceforge.net/sourceforge/mingw/MSYS-1.0.10.exe

1
PROGRAMARE 1 LUCRAREA NR. 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-galileo-SR1-win32.zip în directorul corespunzător.
3. Se dezarhivează cdt-master-6.0.1.zip în acelaşi director cu Eclipse (de la pct. 2).
4. Se lansează în execuţie MinGW-5.1.6.exe (trebuie să existe legătură la Internet
pentru ca să aducă fişierele necesare). Se alege directorul de lucru c:\MinGW.
5. Se dezarhivează gdb-7.0.1.tar.gz în acelaşi director cu MinGW (c:\MinGW).
6. Se lansează în execuţie Eclipse şi se stabileşte ca director de lucru C:\Temp. Se
bifează Default workspace.
7. Se instalează MSYS-1.0.11.exe în directorul c:\msys\1.0.
Pentru informaţii suplimentare referitoare la instalarea Eclipse cu MinGW se accesează
pagina Welcome a mediului (Help->Welcome) se alege secţiunea Tutorials, apoi C/C++
Development şi din panoul din stânga C/C++ development User Guide -> Before you
begin.

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.

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.

2
PROGRAMARE 1 LUCRAREA NR. 2

Figura 2. Fereastra Welcome a mediului Eclipse

Închiderea ferestrei Welcome are ca efect apariţia ferestrei mediului de dezvoltare


(Figura 3).

Figura 3. Fereastra mediului de dezvoltare

3
PROGRAMARE 1 LUCRAREA NR. 2

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

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
c: \ 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).

4
PROGRAMARE 1 LUCRAREA NR. 2

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

Figura 6. Fereastra iniţială a proiectului

5
PROGRAMARE 1 LUCRAREA NR. 2

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

Figura 6b. Alegerea stilului de scriere a codului.

6
PROGRAMARE 1 LUCRAREA NR. 2

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

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.

7
PROGRAMARE 1 LUCRAREA NR. 2

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

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:

8
PROGRAMARE 1 LUCRAREA NR. 2

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

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
*/

9
PROGRAMARE 1 LUCRAREA NR. 2

#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;
}

/*
* 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;
}

10
PROGRAMARE 1 LUCRAREA NR. 2

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

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>

11
PROGRAMARE 1 LUCRAREA NR. 2

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

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

12
PROGRAMARE 1 LUCRAREA NR. 2

Figura 15. Fereastera MS-DOS

• Se lansează în execuţie prin tastarea numelui programului (aici p1). Numele


programului coincide întotdeauna cu numele proiectului. În Figura 16 este
fereastra MS-DOS în care s-a executat programul p1 (care cere numele
utilizatorului şi afişează mesajul Primul program in C)

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

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.

13
PROGRAMARE 1 LUCRAREA NR. 2

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

14
PROGRAMARE 1 LUCRAREA NR. 2

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:

15
PROGRAMARE 1 LUCRAREA NR. 2

Figura 20. Debug pas cu pas.

• Variabile: uitaţi-vă la 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.

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.
A = p(p − a)(p − b )(p − c )
unde p este semiperimetrul triunghiului. (Rezolvarea va cuprinde o funcţie pentru calculul
ariei).

16
PROGRAMARE 1 LUCRAREA NR. 2

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:
⎧ x 2 + 3 x + 5, x ∈ (− ∞,2]

f ( x ) = ⎨3 x, x ∈ (2,8)
⎪e x + 2,
⎩ x ∈ [8, ∞ )

Să se calculeze valoarea funcţiei f pentru un x citit de pe dispozitivul de intrare.

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ă ş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.


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.

17
PROGRAMARE 1 LUCRAREA NR. 2

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.

18

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