Documente Academic
Documente Profesional
Documente Cultură
Lab 5
Lab 5
Laboratorul 5
Instrucţiuni I
1. Noţiuni teoretice
Instrucţiunile din C/C++ sunt grupate în următoarele categorii:
■ Selecţie: if şi switch;
■ Iteraţie: while, for şi do-while;
■ Salt: break, continue, goto şi return;
■ Etichetă: case, default şi label;
■ Expresie – instrucţiuni compuse dintr-o expresie validă în C/C++;
■ Bloc – blocuri de cod.
b) Instrucţiunea switch
C/C++ conţine o declaraţie de selecţie cu ramuri multiple, denumită switch, care confruntă succesiv
valoarea unei expresii cu o listă de constante de tip caracter sau întreg. Când a fost descoperită o
coincidenţă, vor fi executate instrucţiunile asociate acelei constante. Aspectul general al instrucţiunii switch
este:
switch (expresie) {
case constanta1:
secventa de instructiuni
break;
case constanta2:
secventa de instructiuni
break;
case constanta3:
secventa de instructiuni
break;
…
default
secventa de instructiuni
}
Valoarea expresiei expresie este comparată, pe rând, cu fiecare din valorile constantelor exprimate
în instrucţiunile case. La descoperirea unei egalităţi, secvenţa de instrucţiuni asociată acelei instrucţiuni
1
PCLP Laboratorul 5
Asist.drd.ing. Ana-Maria SUDUC
case este executată până la instrucţiunea break sau până se ajunge la finele declaraţiei switch. Instrucţiunea
default (implicit) este executată dacă nu este găsită nici o egalitate. Această instrucţiune este facultativă şi,
dacă nu se află în program şi nu este găsită nicio egalitate, nu are loc nicio acţiune.
O instrucţiune de tip switch admite mai mult de 257 de instrucţiuni case (majoritatea
compilatoarelor permit mult mai multe.) În practică, numărul de instrucţiuni case poate fi limitat, din
considerente de eficienţă. Deşi case este o instrucţiune de tip etichetă, nu poate exista de sine stătător, în
afara unei instrucţiuni switch.
Instrucţiunea break este una din instrucţiunile de salt ale limbajului de programare C/C++ şi se
poate folosi la cicluri, precum şi în instrucţiuni switch. La întâlnirea instrucţiunii break în interiorul unei
instrucţiuni switch, programul execută un salt la linia de program imediat următoare instrucţiunii switch.
Executarea unei secvenţe de instrucţiuni poate continua şi în cadrul următoarei instrucţiuni case
dacă nu există nici o instrucţiune de tip break.
Instrucţiunea switch este adesea folosită pentru a prelucra comenzi provenite de la tastatură, cum ar
fi selecţia meniurilor.
a) Ciclul for
Aspectul general al unui ciclu for se regăseşte într-o formă sau alta în toate limbajele de programare
procedurale. În C/C++ acestea asigură o putere şi o flexibilitate neaşteptate.
Expresia generală a instrucţiunii este
for(iniţiaIizare; condiţie; increment) instrucţiune;
Ciclul for permite multe variaţii. Iniţializarea este în general o instrucţiune de atribuire folosită
pentru a stabili valoarea variabilei de control a ciclului. Condiţia este o expresie relaţională care determină
când se încheie ciclul. Incrementul defineşte modul de modificare a variabilei de control a ciclului pe
măsură ce acesta se repetă. Cele trei elemente majore enumerate mai sus trebuie separate prin punct şi
virgulă. Ciclul for continuă să se repete atâta vreme cât condiţia este adevărată. De îndată ce aceasta devine
falsă, programul îţi continuă execuţia cu instrucţiunea imediat următoare lui for.
Utilizarea operatorului virgulă permite existenţa a două sau a mai multor variabile de control a
ciclului.
Exemplu:
for (x=0, y=0; x+y<10; ++x) ...
Cicluri infinite
Deşi pentru crearea unui ciclu infinit poate fi folosită orice instrucţiune de ciclu, în mod tradiţional
se foloseşte instrucţiunea for. Deoarece nici una dintre cele trei expresii care formează ciclul for nu este
necesară, un ciclu infinit poate fi creat lăsând liberă zona rezervată expresiei condiţionale. Exemplu:
for ( ; ; ) cout<<"Acest ciclu va rula la infinit”;
Structura for(;;) nu asigură un ciclu infinit când se foloseşte instrucţiunea break în interiorul ciclului
care determină încheierea imediată a acestuia. Programul va continua cu linia imediat următoare ciclului.
Cicluri fără conţinut
În C/C++ o instrucţiune poate fi fără conţinut. Conţinutul ciclului for poate fi de asemenea vid.
Acest fapt poate fi folosit pentru a îmbunătăţi eficienţa anumitor algoritmi şi pentru a crea cicluri pentru
întârziere.
Linia de program următoare indică modul de folosire a unui ciclu de întârziere folosind instrucţiunea
for:
2
PCLP Laboratorul 5
Asist.drd.ing. Ana-Maria SUDUC
b) Ciclul while
Al doilea ciclu din C/C++ este ciclul while. Aspectul său general este:
while (conditie) instructiune;
unde instructiune este o instrucţiune fără conţinut, o singură instrucţiune sau un bloc de instrucţiuni.
Conditia poate fi orice expresie, iar “adevărat” poate fi orice valoare diferită de zero. Ciclul se reia atâta
vreme cât condiţia este adevărată. Atunci când condiţia devine falsă, execuţia programului continuă cu linia
program imediat următoare ciclului.
Exemplul următor prezintă o rutina de introducere a datelor de la tastatură care se execută până când
utilizatorul tastează A:
asteapta_caracterul(void)
{
char ch;
ch = ‘\0’; /* initializare a lui ch */
while (ch != ‘A’) ch = getchar();
return ch;
}
Asemănător cu ciclurile for, ciclurile while testează condiţia la începutul ciclului, ceea ce însemnă
că ciclul nu se va executa dacă condiţia de început este falsă. Această facilitate poate elimina necesitatea
efectuării unui test condiţional separat de ciclu.
c) Ciclul do-while
Spre deosebire de ciclurile for şi while, care testează condiţia executării ciclului la începutul
acestuia, ciclul do-while îşi verifică condiţia la sfârşit. Aceasta înseamnă că întotdeauna un ciclu do-while
este executat cel puţin o dată. Forma generală a unui ciclu do-while este:
do{
instructiune;
}while (conditie);
Deşi acoladele nu sunt necesare în cazul unei singure instrucţiuni, sunt folosite de obicei pentru a
evita confuzia cu instrucţiunea while. Ciclul do-while se reia până conditie devine falsă.
Următorul ciclu do-while va citi numere de la tastatură până când se introduce un număr mai mic
sau egal cu 100.
do {
cin>>nr;
} while (nr>100);
2. Aplicaţii
2.1.Lansaţi în execuţie aplicaţia Visual C++ 2010 Express Edition:
Din meniul Start-> All Programs-> Microsoft Visual Studio 2010 Express, executaţi clic pe
opţiunea Microsoft Visual C++ 2010 Express.
2.2. Creaţi un nou proiect, Proiect1 şi un nou fişier File1.cpp:
a) Din meniul File->New, alegeţi opţiunea Project;
b) În fereastra New Project selectaţi opţiunea Win32 şi verificaţi să fie selectat Win32 Console
Application;
c) În câmpul Name introduceţi Proiect1 şi apăsaţi OK;
d) În fereastra deschisă apăsaţi Next şi apoi selectaţi opţiunea Empty Project şi apăsaţi Finish;
e) În secţiunea Solution Explorer executaţi clic dreapta pe directorul Source File şi alegeţi opţiunea
New-> Item;
3
PCLP Laboratorul 5
Asist.drd.ing. Ana-Maria SUDUC
f) În fereastra Add New Item selectaţi categoria Code şi verificaţi să fie selectată opţiunea C++
File (.cpp);
g) În câmpul Name tastaţi numele File1 şi apăsaţi Add.
void main()
{
int magic;
int ghiceste;
srand ( time(NULL) );
magic = (rand()%10+1); // genereaza un numar pseudoaleator
cout<<"Ghiceste numarul ascuns: ";
cin>>ghiceste;
if (ghiceste == magic) {
cout<<"**Corect** ";
cout<<magic<<" este numarul magic \n";
}
else {
cout<<"Gresit,";
if (ghiceste > magic) cout<<"prea mare \n";
else cout<<"prea mic \n";
}
}
void main()
{
int magic;
int ghiceste;
srand(time(NULL));
magic = (rand()%100+1); // genereaza un numar pseudoaleator
cout<<"Ghiceste numarul ascuns: ";
cin>>ghiceste;
while (ghiceste!=magic)
{
cout<<"Gresit,";
if (ghiceste > magic) cout<<"prea mare \n";
4
PCLP Laboratorul 5
Asist.drd.ing. Ana-Maria SUDUC
Obs. Acest program reprezintă o versiune îmbunătăţită a programului de la punctul anterior. Programul
conţine o instrucţiune while care permite testarea de către utilizator a mai multor valori pentru a găsi
numărul magic, ghidându-l cu ajutorul indicaţiilor “prea mare” şi “prea mic”. Programul se opreşte după
ghicirea numărului.
2.5. Modificaţi programul de la punctul 2.3. pentru a obţine un program similar celui de la 2.4 dar care
să folosească instrucţiunea repetitivă do{}while în locul celei while.
a) Tastaţi programul de la punctul 2.3;
b) Plasaţi setul de instrucţiuni de la instrucţiunea care afişează mesajul „Ghiceste numarul ascuns”
şi până la sfârşitul funcţiei main() în instrucţiunea do {} while, instrucţiunile repetându-se cât
timp ghiceste este diferit de magic.
c) Compilaţi şi rulaţi programul.
2.6. Testaţi următorul program:
#include <iostream>
using namespace std;
void main()
{
int varsta;
cout<<"Introduceti varsta: ";
cin>>varsta;
if (varsta <100) {
cout<<"Esti destul de tanar! \n";
}
else
if (varsta == 100)
{
cout<<"Esti batran! \n";
}
else
{
cout<<"Esti foarte batran! \n";
}
}
2.7. Testaţi următorul program:
#include <iostream>
using namespace std;
void main()
{
int alegere;
cout<<"Pentru ce curs optati? \n";
cout<<"Tastati 1 pentru Fizica \n";
cout<<"Tastati 2 pentru Matematica \n";
cout<<"Tastati 3 pentru Informatica \n";
cout<<"Tastati 4 pentru Desen tehnic \n";
cout<<"Introduceti optiunea dumneavostra: ";
cin>>alegere;
switch (alegere)
{
case 1:
5
PCLP Laboratorul 5
Asist.drd.ing. Ana-Maria SUDUC
void main()
{
int nr;
cout<<"Introduceti un numar de programe: ";
cin>>nr;
switch(nr)
{
case 0:
cout<<"Niciunul\n";
break;
case 1:
cout<<"Unul\n";
break;
case 2:
cout<<"Doua\n";
break;
case 3:
case 4:
case 5:
cout<<"Cateva\n";
break;
default:
cout<<"Multe\n";
break;
}
}
Obs. Acest program estimează un număr cu: niciunul, unul, două, câteva, multe.
2.10. Testaţi următorul exemplu de utilizare a instrucţiunii for
#include <iostream>
using namespace std;
void main()
{
int i;
for (i=1; i<=100; i++)
cout<<i<<" ";
}
6
PCLP Laboratorul 5
Asist.drd.ing. Ana-Maria SUDUC
}
Obs. Acest program ridică la puterea a treia numerele introduse de la tastatură cât timp numărul introdus
este mai mare decât zero.
2.12. Testaţi următorul program:
#include <iostream>
using namespace std;
void main()
{
int i, n, s;
cout<<"n=";
cin>>n;
s=0;
for(i=1; i<=n; i++)
{
s=s+i;
}
cout<<"Suma="<<s<<endl;
}
Obs. Acest program calculează şi afişează suma primelor n numere, pentru n citit de la tastatură.
2.13. Modificaţi programul anterior pentru a calcula şi afişa pe lângă suma primelor n numere şi
produsul acestora:
a) Se declară variabila p şi se iniţializează cu valoarea 1;
b) În instrucţiunea for se introduce instrucţiunea de calcul a produsului: p=p*I;
c) Se afişează valoarea produsului cu o instrucţiune similară celei de afişare a sumei;
d) Compilaţi şi rulaţi programul obţinut.
2.14. Realizaţi un program care să utilizeze instrucţiunea for pentru a afişa sumele a două numere,
i şi j, care iniţial au valorile 2, respectiv 4 şi care se incrementează astfel încât suma lor să nu
depăşească 25.
a) Se declară variabilele i, j;
b) În instrucţiunea for vor exista două variabile de test i şi j. Acestea vor fi iniţializate cu 2, respectiv 4.
Cele două iniţializări vor fi separate prin virgulă. Condiţia oprire a instrucţiunii for este ca suma
celor două să fie mai mică sau egal cu 25. Ambele variabile sunt incrementate.
c) În instrucţiunea for va exista o singură instrucţiune: cea de afişare a sumei valorilor curente ale
variabilelor i şi j.
Un exemplu de cum va fi afişată una dintre sume este:
2+4=6
2.15. Realizaţi un program care calculează şi afişează suma şi produsul a n numere, citite de la
tastatură, care sunt divizibile cu 5 şi cu 7.
7
PCLP Laboratorul 5
Asist.drd.ing. Ana-Maria SUDUC