Sunteți pe pagina 1din 10

PROGRAMARE 1 __________________________________________ Laborator Nr.

3
1

LABORATOR NR. 3
Instruc!iuni pentru implementarea structurilor de
control

Se reiau o parte din no!iunile prezentate n laboratorul nr. 1 indicnd "i
instruc!iunile C corespunz#tore celor mai utilizate structuri de control.

1. Selec!ia (decizia) instruc"iunea if
Este o structur# care permite ramificarea programului "i continuarea prelucr#rii
datelor pe una sau alta din ramuri n func!ie de rezultatul unui test logic. Testul logic
este o expresie a crei evaluare conduce la un rezultat logic (din punctul de vedere al
logicii matematice), adic# rezultatul poate fi adev#rat sau fals.
Reprezentare prin schem# logic# a selec!iei cu dou# alternative este dat# n
Figura 1.

Figura 1. Selec!ia cu dou# alternative

Instruc!iunea corespunz#toare este instruc!iunea if.
Forma instruc!iunii if este:
if(test)
{
Secventa A
}
else
{
Secventa B
}


PROGRAMARE 1 __________________________________________ Laborator Nr. 3
2
2. Repeti!ia (itera!ia)
Exist# situa!ii n care pentru a rezolva problema dat# trebuie s# parcurgem
aceea"i pa"i de mai multe ori. De exemplu n cazul n care trebuie s# calcul#m suma
unui "ir de numere proced#m n felul urm#tor: adun#m primele dou# numere, la suma
ob!inut# adun#m cel de-al treilea num#r, la noua sum# adun#m cel de-al patrulea
num#r s.a.m.d.
Un alt exemplu: trebuie s# citim de la tastatur# un "ir de numere. Citirea se face
att timp ct nu am citit un num#r negativ. La primul num#r negativ citit, opera!ia de
citire se termin# "i trecem mai departe s# prelucr#m datele citite.
Pentru astfel de situa!ii avem la dispozi!ie structuri repetitive sau iterative. Pa"ii
care se repet# constituie partea iterat# (repetat#).
ntotdeauna, pe lng# partea iterat# trebuie s# existe "i un test (ca n structurile
de selec!ie) func!ie de rezultatul c#ruia se reia execu!ia p#r!ii iterate sau nu.
Partea iterat# mpreun# cu testul (care "i el se repet#) formeaz# bucla structurii
repetitive.
Repeti!ia (itera!ia) este o structur# compus# care con!ine o parte iterat# care
se execut# de zero sau mai multe ori n func!ie de rezultatul unui test logic. Partea
iterat# poate fi o instruc!iune simpl#, o secven!#, o selec!ie sau o alt# itera!ie.
Acest tip de structur# compus# poate fi ntlnit# n una din formele

2.1. 2.1. Repeti!ie (itera!ie) cu test ini!ial Repeti!ie (itera!ie) cu test ini!ial instruc" instruc"iunea iunea while while
Schema logic# este dat# n Figura nr. 2:
conditie
Secventa
Adevarat
Fals

Figura nr. 2. Itera!ia cu test ini!ial

Instruc!iunea C corespunz#toare este instruc!iunea while. Forma general# a
instruc!iunii este:
while (conditie)
{
Secventa
}

PROGRAMARE 1 __________________________________________ Laborator Nr. 3
3
2.2. 2.2. Repeti!ie (itera!ie) cu test final Repeti!ie (itera!ie) cu test final instruc" instruc"iunea iunea do ... while do ... while
Schema logic# este dat# n Figura nr. 3.
Secventa
conditie
Adevarat Fals

Figura nr. 3. Itera!ia cu test final

Instruc!iunea corespunz#toare este do ... while a c#rei form# este:
do {
Secventa
} while(conditie);

2.3. 2.3. Repeti!ie (itera!ie) cu contor Repeti!ie (itera!ie) cu contor instruc" instruc"iunea iunea for for
Reprezentarea prin schema logic# este dat# n Figura nr. 4, forma general# fiind
dat# n Figura nr. 5.
Secventa
Fals
vi ! va r
vf
SI
vi
"
#
var
var
Adevarat
pas + ! var var

Figura nr. 4. Itera!ia cu contor
PROGRAMARE 1 __________________________________________ Laborator Nr. 3
4
Ei
Et
Secventa
Em
Adevarat Fals

Figura nr. 5. Itera!ia cu contor (forma general#)

Instruc!iunea corespunz#toare acestei structuri de control este for.
Forma general# corespunz#toare schemei logice din Figura 5 este:

for(ei; et; em)
{
Secventa
}

n cazul (cel mai ntlnit n aplica!iile care urmeaz#) n care avem o variabil# i
care are ca valoare ini!ial# valoarea 0 (zero), variaz# prin cre"terea valorii sale cu o
unitate "i cu aceast# variabil# i trebuie s# num#r#m n (n num#r natural) pa"i forma
instruc!iunii for este urm#toarea:

for(i=0; i<n; i=i+1)
{
secventa;
}

PROGRAMARE 1 __________________________________________ Laborator Nr. 3
5
3. TEMA 1
n toate problemele din laboratorul 2 s-a folosit structura de control numit#
decizie.
n acest laborator ne vom concentra asupra repeti!iei (sau itera!iei).

Problema nr. 1.1
S# se scrie un program care cite$te n numere ntregi, calculeaz# suma lor $i o
afi$eaz# pe monitor nu se vor folosi vectori.

Problema nr. 1.2
S# se scrie un program care cite$te un $ir de numere ntregi pn# cnd se
introduce valoarea 0, calculeaz# produsul lor $i afi$eaz# valoarea produsului pe
monitor nu se vor folosi vectori.

Problema nr. 1.3
S# se scrie un program care cite$te un $ir de numere reale pn# cnd se
introduce valoarea 0, calculeaz# produsul lor $i afi$eaz# valoarea produsului pe
monitor, cu dou# zecimale nu se vor folosi vectori.

Problema nr. 1.4
a) S# se scrie un program care afi"eaz# un tabel care pe prima coloan# are
temperaturi Fahrenheit "i pe cea de-a doua coloan# echivalen!ele lor n grade Celsius,
folosind formula
( ) 32
9
5
! = F C
unde C reprezint# valoarea temperaturii dat# n grade Celsius, iar F reprezint#
valoarea temperaturii n grade Fahrenheit. Tabelul este generat pentru temperaturi
Fahrenheit cuprinse ntre 0 "i 300, cu un pas egal cu 10
o
F nu se vor folosi vectori.
b) S# se scrie un program care afi"eaz# tabelul corespunz#tor de tranformare din
grade Celsius n grade Fahrenheit. De aceast# dat# pasul va fi citit de pe dispozitivul
de intrare, iar valorile gradelor Celsius variaz# ntre 0 "i 400
0
C nu se vor folosi
vectori.

Problema nr. 1.5
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 att timp ct mp#r!itorul este nenul; la fiecare pas, pn# cnd restul
este zero, se nlocuie"te demp#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.

PROGRAMARE 1 __________________________________________ Laborator Nr. 3
6
4. TEMA 2
Problema nr. 2.1
De pe dispozitivul de intrare se cite"te un num#r real b "i un "ir de valori reale
pozitive terminate printr-o valoare negativ# (care nu face parte din "ir). S# se
stabileasc# elementul din "ir cel mai apropiat de b . Se va preciza "i pozi!ia acestuia
(al ctelea element din "ir este). Termenii "irului vor fi p#stra!i n aceea"i variabil# a .

Problema nr. 2.2
De pe dispozitivul de intrare se cite"te un "ir de numere ntregi pozitive, "ir
terminat cu valoarea 0 care nu face parte din "ir. Pentru fiecare element citit s# se
indice cel mai mare p#trat perfect mai mic sau egal cu el.

Problema nr. 2.3
S# se determine valoarea n pentru care
!
= "
=
n
k
n
k n
S
1
2
4
2
satisface condi!ia
!
"
< #
3
n
S , n care ! este dat. Se "tie c#
3
lim
!
=
" #
n
n
S (asigurndu-na astfel existen!a
unei valori pentru n).

Problema nr. 2.4
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 avnd ca parametri dou# numere naturale "i care returneaz# 1 sau
0 dup# cum cele numere sunt sau nu prietene.

Problema nr. 2.5
Numerele naturale pot fi clasificate n: deficiente, perfecte sau abundente dup#
cum suma divizorilor este mai mic#, egal# sau mai mare dect 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.
PROGRAMARE 1 __________________________________________ Laborator Nr. 3
7
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:
1. o func!ie care prime"te ca parametru un num#r natural "i returneaz# suma
divizorilor num#rului.
2. o func!ie avnd 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.
PROGRAMARE 1 __________________________________________ Laborator Nr. 3
8
5. TEMA 3
Problema nr. 3.1
Se citesc de la tastatur# un num#r n de numere naturale nenule. 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!ie:
Numerele citite nu se vor memora ntr-un vector (tablou).

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 reprezentnd tipul
"irului "i afi"eaz# mesajul corespunz#tor.

Problema nr. 3.2
%irul { }
n
x generat cu rela!ia de recuren!# ( )
( )
!
"
#
$
%
&
+ ' =
'
'
' 1
1
1
1
1
p
n
n n
x
a
x p
p
x , cu R a ! "i
N p ! , "i
p
a
x =
0
este convergent "i are ca limit#
p
a (n cazul n care p este par
trebuie ca a s# fie un num#r pozitiv). Pentru un a oarecare dat s# construiasc#
schema logic# a unui program care calculeaz#
p
a ca limit# a acestui "ir cu precizia !
de asemenea dat#.
Precizia este dat# de rela!ia
1 !
! =
n n
x x " .
PROGRAMARE 1 __________________________________________ Laborator Nr. 3
9
S# se completeze schema logic# astfel nct s# se poat# calcula rezultatul pentru
mai multe valori ale lui p . Continuarea programului se va stabili n urma unui dialog
cu utilizatorul (dup# exemplul dat la curs).

Problema nr. 3.3
S# se calculeze func!ia ( ) x J
n
"tiind c# exist# rela!ia de recuren!#:
( ) ( ) ( ) ( ) x J x J x n x J
n n n 2 1
/ 2 2
! !
! " ! =
cu ( ) ( )
( )
!
"
=
#
$
%
&
'
(
) =
0
2
2
0
!
2
1
k
k
k
k
x
x J "i ( ) ( )
( )
!
"
=
+
+
#
$
%
&
'
(
) =
0
1 2
1
! 1 !
2
1
k
k
k
k k
x
x J .
Calculele se fac cu precizia ! . De pe dispozitivul de intrare se citesc n x, "i ! .

Problema nr. 3.4
Fie x un num#r real "i n un num#r ntreg. S# se calculeze
n
x folosind un num#r
ct mai mic de nmul!iri de numere reale.
Indica!ie. Se observ# c#
n
x poate fi descompus ntr-un produs de factori n care
pot apare
8 4 2
, , , x x x x Un factor apare n produs dac# n reprezentarea binar# a lui n
cifra corespunz#toare este 1.
Vom forma deci pe rnd cifrele din reprezentarea binar# a lui n , ncepnd cu cea
mai pu!in semnificativ# "i puterile lui x :
8 4 2
, , , x x x x O putere a lui x apare n produs
dac# cifra corespunz#toare din reprezentarea binar# este 1. De exemplu: x x x x
4 8 13
=
pentru c# reprezentarea n baza 2 a lui 13 este 1101.
Cifrele reprezent#rii binare a lui n se ob!in ca resturi ale mp#r!irii succesive a lui
n la 2.

Problema nr. 3.5
Se consider# ecua!ia 0
3
= + + c bx ax . Notnd cu
3 2 1
, , x x x r#d#cinile ecua!iei, s# se
calculeze
n n n
x x x
3 2 1
+ + , f#r# a rezolva ecua!ia. Se dau c b a , , "i n .
Indica!ie. nmul!im ecua!ia cu
3 ! n
x : 0
3 2
= + +
! ! n n n
cx bx ax "i !innd cont de faptul
c# fiecare r#d#cin# satisface ecua!ia dat#, rezult#:
0
3
1
2
1 1
= + +
! ! n n n
cx bx ax
0
3
2
2
2 2
= + +
! ! n n n
cx bx ax
0
3
3
2
3 3
= + +
! ! n n n
cx bx ax
Adun#m cele trei rela!ii "i ob!inem:
( ) ( ) ( ) 0
3
3
3
2
3
1
2
3
2
2
2
1 3 2 1
= + + + + + + + +
! ! ! ! ! ! n n n n n n n n n
x x x c x x x b x x x a
Notnd
n n n
n
x x x s
3 2 1
+ + = , ob!inem rela!ia de recuren!#:
0
3 2
= ! + ! + !
" " n n n
s c s b s a
cu urm#toarele valori ini!iale:
3
0
3
0
2
0
1 0
= + + = x x x s
0
3 2 1 1
= + + = x x x s (rela!iile Viete)
PROGRAMARE 1 __________________________________________ Laborator Nr. 3
10
a b x x x s / 2
2
3
2
2
2
1 2
! = + + = (rela!iile Viete)