Sunteți pe pagina 1din 6

Laboratorul 5

1. Din punct de vedere al compilatorului, instruciunile C++ nu trebuie formatate.


Este, ns, extrem de important ca programele voastre s poat fi citite uor att de
voi ct i de alte persoane care ar dori s le foloseasc. Atunci cnd scriei un text n
limba romn, folosii cteva reguli simple de aliniere pentru a l face uor de citit.
Studiai programul urmtor care calculeaz costul pe metru ptrat al unei locuine. El
va fi compilat i rulat corect, dar nu este conform niciunui standard de formatare.
//Program CostLocuinta.cpp
//Acest program calculeaza costul pe metru patrat al spatiului
locuibil
//dintr-o casa, date fiind dimensiunile casei, numarul de
etaje
//si suprafata nelocuibila
#include <iostream>
#include<iomanip>// Pentru setw() si setprecision()
using namespace std;
const double LATIME=15.0; //Latimea casei
const double LUNGIME =12.0;//Lungimea casei
const double ETAJE = 2;//Numarul de etaje, inclusiv parterul
const double SPATIU_NELOCUIBIL = 31.0;//Garaj, WC, etc.
const double PRET = 128000.0;//Pretul de vanzare
int main() {double suprafataTotala; //Suprafata totala
double suprafataLocuibila; //Suprafata locuibila
double costPerMP; //Costul pe metru patrat al suprafetei
locuibile
cout.setf(ios::fixed,
ios::floatfield);
//
Stabilirea
formatului de iesire
cout.setf(ios::showpoint); //pt. float
suprafataTotala = LUNGIME*LATIME*ETAJE; suprafataLocuibila =
suprafataTotala - SPATIU_NELOCUIBIL; costPerMP = PRET /
suprafataLocuibila;
cout << "Costul pe metru patrat este " << setw(6) <<
setprecision(2)
<< costPerMP << " lei." << endl; return 0;}
Acelai program formatat:
//Program CostLocuinta.cpp
//Acest program calculeaza costul pe metru patrat al spatiului
locuibil
//dintr-o casa, date fiind dimensiunile casei, numarul de
etaje
//si suprafata nelocuibila
#include <iostream>
#include<iomanip>// Pentru setw() si setprecision()
using namespace std;
const double LATIME=15.0; //Latimea casei
1

Programarea calculatoarelor i limbaje de programare I

const
const
const
const

double
double
double
double

LUNGIME =12.0;//Lungimea casei


ETAJE = 2;//Numarul de etaje, inclusiv parterul
SPATIU_NELOCUIBIL = 31.0;//Garaj, WC, etc.
PRET = 128000.0;//Pretul de vanzare

int main()
{
double suprafataTotala; //Suprafata totala
double suprafataLocuibila; //Suprafata locuibila
double costPerMP; //Costul pe metru patrat al suprafetei
locuibile
cout.setf(ios::fixed,
ios::floatfield);
formatului de iesire
cout.setf(ios::showpoint); //pt. float

//

Stabilirea

suprafataTotala = LUNGIME*LATIME*ETAJE;
suprafataLocuibila = suprafataTotala - SPATIU_NELOCUIBIL;
costPerMP = PRET / suprafataLocuibila;
cout << "Costul pe metru patrat este " << setw(6) <<
setprecision(2)
<< costPerMP << " lei." << endl;
return 0;
}
2. Exemplu de programare.

Problema
Avei de petrecut o zi ntr-un ora i v planificai s vizitai Muzeul de Istorie
Natural, un magazin de discuri, o galerie de art, o librrie i apoi vei merge la un
concert. Avei o hart care v arat unde se gsesc aceste puncte. Scara hrii este
de patru centimetri pentru un sfert de kilometru. Dorii s stabilii distanele dintre ele
i distana total pe care o avei de parcurs de-a lungul ntregii zile.

Ieiri
Programul va afia distanele dintre punctele vizitate i distana total rotunjit
la zecime de kilometru. Se vor tipri i valorile pe care se bazeaz calculele, pentru
verificare.

Discuie
Putei msura distanele de pe hart folosind o rigl. Programul trebuie s
afieze distanele n kilometri, deci aceste distane trebuie multiplicate cu 0,25.
Afim apoi rezultatul rotunjit la prima zecimal pentru fiecare distan. Calculm, n
final distana total i o afim.
Singura problem este rotunjirea la prima zecimal. Pentru rotunjirea la primul
ntreg folosim urmtoarea formul:
int( unReal * 0.5 );
Deci pentru rotunjirea la prima zecimal folosim formula:

Programarea calculatoarelor i limbaje de programare I

double( int( unReal * 10.0 + 0.5 ) ) / 10.0;

Programul
//**********************************************************
//Programul Excursie.cpp
//Acest program calculeaza distanta totala parcursa
//intr-o excursie, date fiind masuratorile facute pe o harta
//**********************************************************
#include <iostream>
#include <iomanip>
using namespace std;
const double
const double
distante
const double
distante
const double
distante
const double

DISTANTA1 = 1.5; //Masuratoarea primei distante


DISTANTA2 = 2.5; //Masuratoarea celei de-a doua
DISTANTA3 = 5.0; //Masuratoarea

celei

de-a

treia

DISTANTA4 = 4.0; //Masuratoarea

celei

de-a

patra

SCARA = 0.25;

//Scara hartii

int main()
{
double distantaTotala;
double km;
cout.setf(ios::fixed, ios::floatfield);
cout.setf(ios::showpoint);
distantaTotala = 0.0;
//Calculeaza
harta

distanta

reala

pentru

fiecare

citire

de

km = double(int( DISTANTA1 * SCARA * 10.0 +0.5)) / 10.0;


cout << "Pentru masuratoarea " << setprecision(1)
<< DISTANTA1
<< " prima distanta este de " << km << " km."
<< endl;
distantaTotala = distantaTotala + km;
km = double(int( DISTANTA2 * SCARA * 10.0 +0.5)) / 10.0;
cout << "Pentru masuratoarea " << setprecision(1)
<< DISTANTA2
<< " a doua distanta este de " << km << " km."
<< endl;
distantaTotala = distantaTotala + km;
km = double(int( DISTANTA3 * SCARA * 10.0 +0.5)) / 10.0;
cout << "Pentru masuratoarea " << setprecision(1)
<< DISTANTA3
3

pe

Programarea calculatoarelor i limbaje de programare I

<< " a treia distanta este de " << km << " km."
<< endl;
distantaTotala = distantaTotala + km;
km = double(int( DISTANTA4 * SCARA * 10.0 +0.5)) / 10.0;
cout << "Pentru masuratoarea " << setprecision(1)
<< DISTANTA4
<< " a patra distanta este de " << km << " km."
<< endl;
distantaTotala = distantaTotala + km;
//Afisarea distantei totale
cout << endl;
cout << "Distanta totala care trebuie parcursa este "
<< distantaTotala << " km."
<< endl;
return 0;
}

Sugestii pentru debugging


-

Verificai ntotdeauna expresiile pentru a fi siguri c operaiile sunt executate in


ordinea pe care o dorii;
Evitai combinarea n aceeai expresie a valorilor ntregi i reale. Dac este
nevoie de aa ceva, folosii conversiile explicite pentru a evita greelile;
Pentru fiecare asignare, verificai c rezultatul expresiei are acelai tip de dat ca
i variabila din stnga operatorului =. Daca nu, folosii conversii explicite pentru
claritate i siguran;
Pentru fiecare funcie de bibliotec folosit, asigurai-v c ai inclus (#include)
fiierul header potrivit;
Examinai fiecare apel de funcie pentru a vedea dac ai folosit numrul corect
de parametri i c tipurile lor de date sunt corecte.

3. Adugai conversiile de tip urmtoarelor instruciuni pentru a le face clare i


explicite. Rspunsurile voastre trebuie s conduc la aceleai rezultate ca i
instruciunile originale:
unReal = 5 + unIntreg;
unIntreg = 2.5 * unIntreg / unReal;
4. Cum scriei urmtoarea formul ca o expresie C++ care produce un rezultat de
tip double?
9c/5 + 32
5. Reformatai urmtorul program pentru a l face clar i uor de citit:
//***************************************
//Programul SumProd.cpp
//Acest program calculeaza
//suma si produsul a doua numere intregi
//***************************************

Programarea calculatoarelor i limbaje de programare I

#include <iostream>
using namespace
std;
const int INT1 = 20; const int INT2=8;int main() { cout <<
"Suma lui " << INT1 << " si "
<< INT2 << " este " << INT1+INT2 << endl;cout
<< "Produsul lor este " << INT1*INT2 << endl;return 0;}
6. Ce valoare se pstreaz n variabila rezultat de tip int n fiecare dintre
urmtoarele instruciuni:
rezultat = 15 % 4;
rezultat = 7 / 3 + 2;
rezultat = 2 + 7 * 5;
rezultat = 45 / 8 * 4 + 2;
rezultat = 17 + (21 % 6) * 2;
rezultat = int(4.5 + 2.6 * 0.5);
7. Transformai urmtoarea instruciune n notaie algebric:
y = -b + sqrt(b * b 4.0 * a * c);
8. Formatarea incorect a unui program provoac erori? (adevrat/fals)
9. Scriei o instruciune de asignare care calculeaz suma primelor n numere
naturale folosind formula lui Gauss:
sum = n(n+1)/2.
Pstrai rezultatul n variabila sum de tip int.
10. Completai urmtorul program C++. Programul trebuie s gseasc i s
afieze perimetrul i aria unui dreptunghi, date fiind lungimea i limea. Folosii
mesaje sugestive care s nsoeasc afiarea rezultatelor. Nu uitai s folosii
comentarii.
//********************************************
//Programul Dreptunghi.cpp
//Acest program calculeaza perimetrul si aria
//unui dreptunghi cand se cunosc lungimea si latimea sa.
//********************************************
#include <iostream>
using namespace std;
int main()
{
double lungime;
//Lungimea dreptunghiului
double latime;
//Latimea dreptunghiului
double perimetrul;
//Perimetrul dreptunghiului
double aria;
//Aria dreptunghiului
lungime = 10.7;
latime = 5.2;

Programarea calculatoarelor i limbaje de programare I

11. Scriei un program C++ care convertete temperaturile n grade Celsius n


echivalentele lor n grade Fahrenheit. Formula este:
Fahrenheit = 9 * Celsius / 5 + 32
Folosii o constant simbolic pentru temperatura n grade Celsius. Programul
trebuie s tipreasc ambele valori, cu mesaje explicite. Folosii comentarii n
program, alegei nume semnificative pentru identificatori i aliniai instruciunile ca n
programele exemplu.
12. Scriei un program care calculeaz diametrul, lungimea i aria unui cerc avnd
raza 6,75. Asignai raza unei variabile double i apoi afiai raza mpreun cu un
mesaj de identificare. Declarai constanta simbolic PI cu valoarea 3,14159.
Programul trebuie s afieze diametrul, lungimea i aria cercului, fiecare pe linii
separate, cu etichete de identificare. Tiprii fiecare valoare cu 5 zecimale ntr-un
cmp de lungime 10. Folosii comentarii, identificatori cu nume semnificative i
aliniai instruciunile.
13. Limbajul de programare C++ stadard introduce patru noi operatori de cast.
Acetia
sunt
static_cast,
const_cast,
reinterpret_cast
i
dynamic_cast. Aceti operatori de conversie sunt dedicai cte unei situaii precise,
n timp ce filosofia metodei tradiionale este one cast fits all. Cast-ul este o operaie
care este adeseori o surs de erori, de aceea noii operatori introdui n standardul
C++ dau programatorului un mai mare control asupra codului. Sintaxa operaiei de
conversie prin static_cast este:
static_cast< tipData >(parametru)
unde tipData este tipul de dat ctre se face conversia, iar parametru este obiectul
care urmeaz s fie convertit. Sintaxa celorlali trei operatori este asemntoare cu
aceasta. Operatorul static_cast se folosete pentru implementarea conversiilor
ntre diverse tipuri de dat. Verificarea tipurilor de dat se face n momentul
compilrii.
Putem s afim codul ASCII al unui caracter prin instruciunea
cout << Caracterul ( << a << ) are codul ASCII
<< static_cast< int >(a) << endl;
Scriei un program care afieaz sub forma unui tabel caracterele
corespunztoare codurilor ASCII 35, 64, 65, 96, 97, 122, 150. Rezultatele ar trebui
s apar pe ecran n formatul urmtor:
caracter
codAscii
Indicaie. Folosii conversia unei valori numerice codul ASCII ctre char.
14. Scriei un program care separ cifrele numerelor intregi de cinci cifre i le
afieaz cu ctre trei spaii ntre ele. Putei declara n programul vostru o constant
care stocheaz un astfel de numr. De exemplu, dac numrul este 42339,
programul ar trebui s afieze:
4
2
3
3
9
Indicaie. Folosii mprirea ntreag i operatorul modulo.

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

  • XII Subiect Si Barem OJG 2015
    XII Subiect Si Barem OJG 2015
    Document12 pagini
    XII Subiect Si Barem OJG 2015
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Geografia Romaniei - Subiect - Sesiunea I Proba F Varianta 3
    Geografia Romaniei - Subiect - Sesiunea I Proba F Varianta 3
    Document2 pagini
    Geografia Romaniei - Subiect - Sesiunea I Proba F Varianta 3
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Info Aa
    Info Aa
    Document1 pagină
    Info Aa
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Tic A77a
    Tic A77a
    Document5 pagini
    Tic A77a
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Tic 189
    Tic 189
    Document1 pagină
    Tic 189
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • 2003 - Geografie - Nationala - Subiecte - Clasa A XII-a - 1 PDF
    2003 - Geografie - Nationala - Subiecte - Clasa A XII-a - 1 PDF
    Document2 pagini
    2003 - Geografie - Nationala - Subiecte - Clasa A XII-a - 1 PDF
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • 2015 Geografie Nationala Clasa A Xiia Proba Teoretica Subiectebarem
    2015 Geografie Nationala Clasa A Xiia Proba Teoretica Subiectebarem
    Document6 pagini
    2015 Geografie Nationala Clasa A Xiia Proba Teoretica Subiectebarem
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Aaaainfo
    Aaaainfo
    Document3 pagini
    Aaaainfo
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Mate 1258
    Mate 1258
    Document2 pagini
    Mate 1258
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Mate 1258
    Mate 1258
    Document1 pagină
    Mate 1258
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Info A 22
    Info A 22
    Document2 pagini
    Info A 22
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Mate 1258
    Mate 1258
    Document1 pagină
    Mate 1258
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Matematica Mate-Info 2015
    Matematica Mate-Info 2015
    Document1 pagină
    Matematica Mate-Info 2015
    iIoana4n
    Încă nu există evaluări
  • TImate
    TImate
    Document3 pagini
    TImate
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Pro 1
    Pro 1
    Document1 pagină
    Pro 1
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Mat 89555
    Mat 89555
    Document1 pagină
    Mat 89555
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Pro 5
    Pro 5
    Document1 pagină
    Pro 5
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Pro 4
    Pro 4
    Document1 pagină
    Pro 4
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • 8 Sas 5
    8 Sas 5
    Document1 pagină
    8 Sas 5
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Prob
    Prob
    Document1 pagină
    Prob
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Pro 3
    Pro 3
    Document1 pagină
    Pro 3
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Yyyys
    Yyyys
    Document1 pagină
    Yyyys
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Pro 2
    Pro 2
    Document1 pagină
    Pro 2
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • 8 Sas 5
    8 Sas 5
    Document1 pagină
    8 Sas 5
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Asm 4
    Asm 4
    Document1 pagină
    Asm 4
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Asm 5
    Asm 5
    Document1 pagină
    Asm 5
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Instruire Asistată de Calculator (Iac) : Burican G. Bogdan Alexandru
    Instruire Asistată de Calculator (Iac) : Burican G. Bogdan Alexandru
    Document4 pagini
    Instruire Asistată de Calculator (Iac) : Burican G. Bogdan Alexandru
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • CCD 4
    CCD 4
    Document1 pagină
    CCD 4
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • Teorie Lab1
    Teorie Lab1
    Document1 pagină
    Teorie Lab1
    Burican Bogdan Alexandru
    Încă nu există evaluări
  • TL1
    TL1
    Document1 pagină
    TL1
    Burican Bogdan Alexandru
    Încă nu există evaluări