Sunteți pe pagina 1din 94

INFORMATICA

Informatica este stiinta care se ocupa cu studiul reprezentarii si


organizarii informatiei precum si cu studiul algotitmilor de prelucrare a
informatiei cu ajutorul unui calculator.

ALGORITM

Un algoritm reprezinta o metoda de rezolvare a problemelor de un anumit


tip.A rezolva o problema inseamna a obtine ,pentru anumite date de
intrare ,rezultatul problemei (date de iesire ).Algoritmul este constiuit
dintr-o succesiune de operatii care descriu ,pas cu pas ,modul de obtinere a
datelor de iesire ,plecand de la datele de intrare .

Exemplu :
Presupunand ca dispunem de un aragaz ,o tigaie ,2 oua ,sare si 200 ml ulei ,sa
pregatim ochiuri .
“Date,, de intrare :oua ,ulei ,sare .
“Date ,,de iesire :ochiuri .
Pas 1: Se pune tigaia pe foc .
Pas 2: Se toarna uleiul in tigaie .
Pas 3: Asteptam pana cand se incinge uleiul.
Pas 4: Spargem cu indemanare ouale se rumenesc.
Pas 5: Asteptam pana cand ouale se rumenesc .
Pas 6: Daca nu tinem regim ,adaugam sare .

Proprietati caracteristice ale algoritmilor

1.Claritatea –la fiecare moment ,operatia care urmeaza a fi executata este


unic determinata ,definita si realizabila .

2.Generalitatea (universalitatea )-o secventa de pasi reprezinta un algoritm


de rezolvare a unei probleme daca obtine date iesire (rezultate ) pentru
orice date de intraren specifice problemei .

3.Finititudinea –rezultatele problemei se obtin dupa o secventa de pasi .

1
Un algoritm este constituit dintr-o succesiune clara de operatii realizabile,
care au ca scop obtinerea intr-un timp finit a rezultatelor unei probleme,
pentru orice set de date de intrare .

DATE

Orice algoritm lucreaza cu date :date de intrare (datele pe care trebuie


sa le primeasca un algoritm din exterior ),date de iesire (datele pe care
trebuie sa le furnizeze aloritmul in exterior ),precum si date de manevra
(date temporale ,necesare algoritmului pentru a obtine datele de iesire pe
baza datelor de intrare ).

Datele cu care lucreaza algoritmii pot fi clasificate din mai multe puncte
de vedere.O prima clasificare a datelor ,in functie de posibilitatea de a-si
modifica valoarea ,este:

1.Constante –date care nu isi modifica valoarea .


2.Variabile –date care isi modifica valoarea .

In functie de valoarea lor,datele pot fi clasificate astfel:


a.Date numerice –au ca valori numere (naturale ,intregi sau reale );
b.Date alfabetice –au ca valori caractere sau siruri de caractere ;
c.Date logice –au ca valori adevarat sau fals.

Expresii

O expresie este constituita dintr-o succesiune de operanzi ,conectati prin


operatori.Un operand poate fi o constanta ,o variabila ,sau o expresie
incadrata intre paranteze rotunde .Operatorii desemneaza operatiile care se
executa asupra operanzilor.Operatorii care pot fi utilizati intr-o expresie
depind de tipul operanzilor .

Vom prezenta trei categorii de operatori.

Operatori aritmetici definesc o operatie aritmetica si pot fi


clasificati astfel:

2
1.operatori aritmetici multiplicative :*(inmultire ), /(impartire),%(restul
impartirii intregi).

2.operatori aritmetici aditivi :+(adunare)si –(scadere ).

Operatori relationali
Opertorii relationali descriu relatia de ordine sau de egalitate dintre
cei doi operanzi:<(mai mic),>(mai mare),<=(mai mic sau egal).>=”(mai mare sau
egal),=(egal),!=(diferit ).

Operatori logici
Operatori logici definesc o operatie logica :negatia logica - !;conjunctie
logica – si ;disjunctie logica - sau .Efectul acestor operatori este cel usual
,invatat la logica ,matematica .Il reamintim in tabelul urmator:

X Y !X X sau Y X si Y
Fals Fals Adevarat Fals Fals
Fals Adevarat Adevarat Adevarat Fals
Adevarat Fals Fals Adevarat Fals
Adevarat Adevarat Fals Adevarat Adevarat

Operatori logici se pot aplica operanzilor logici .Valoarea unui expresii


logice este de tip logic .

Reprezentarea algoritmilor

I.Principiile programarii structurate

Programarea structurata a aparut in anii 70 datorita cresterii


complexitatii aplicatiilor , aducand o serie de principii si tehnici inovative .
Modularizarea este una dintre ele , permitand impartirea problemei in
subprobleme de dimensiuni mai mici si complexitate mai redusa.Problemele
erau rezolvate de echipe de programatori si rezultatele erau combinate in
scopul rezolvarii problemei initiale.

3
O alta tehnica importanta a fost cea a structurarii datelor si
prelucrarilor.Structurarea datelor permitea gruparea datelor in anumite
zone de program , dar si descrierea si utilizarea unor structuri de date
proprii.Structurarea prelucrarilor se poate realiza prin utilizarea modulelor
si a subprogramelor .Un principiu important presupunea ca orice program se
poate scrie prin secvente liniare , alternative si repetitive.

II. Descrierea algoritmilor

Un algoritm de rezolvare presupune stabilirea pasilor necesari. Pasii


necesari pot fi descrisi intr-un limbaj de programare , insa nu toata lumea
cunoaste acel program si niciun program nu s-a impus ca fiind singurul utilizat
de programatori . Din acest motiv s-au impus niste metode generale de
descriere a algoritmilor independente de limbajul de programare .
Programele se scriu pe baza acestor descrieri . Metodele cele mai importante
sunt :
∙ pseudocodul
∙ schema logica
PSEUDOCODUL reprezinta un set restrans de cuvinte in romana sau
engleza asociate unor operanti.Astfel , cuvintele utilizate sunt : intreg , real ,
citeste , scrie , daca , atunci , altfel , sfarsit daca , pentru , cat timp ,
sfarsit cat timp , executa cat timp .
Exemplu : Cititi doua variabile intregi . Calculati suma lor si afisati
rezultatul.

intreg a , b , c
citeste a , b
c= a + b
scrie c

SCHEMA LOGICA este reprezentarea grafica a unor prelucrari.


Aceasta reprezinta un set de simboluri grafice :
START : punctul de pornire al algoritmului
STOP : punctul de oprire al algoritmilor
Citeste variabila : operatia de citire a variabilei
Scrie variabila : operatia de scriere a variabilei.

4
START

Citeste variabila

Citeste variabila

STOP

Exemplul se scrie in schema logica :

START

Intreg a, b, c

Citeste a, b

C=a+b

Citeste
Citestea, cb

STOP

STRUCTURA SECVENTIALA

Presupune executarea unei prelucrari in ordinea precizata . ( ele


nu se executa conditional sau repetitiv ). Exista cateva tipuri , printre care :
1.) Declararea variabilelor se face cu sintaxa ,, tip data variabila ’’.
Definirea variabilei pune in legatura numele variabilei cu tipul sau .

5
2.)Citirea variabilei reprezinta operatia prin care continutul unei
variabile e incarcat de la tastatura.

3.)Atribuirea este operatia prin care o valoare e asociata unei variabile.

4.)Afisarea se realizeaza cu sintaxa scrie exp 1 , ... , exp n

5.)Instructiunea compusa reprezinta un set de prelucrari cuprinse intre


acolade .

{ p1
.
.
} pn

cnd=
t

STRUCTURA ALTERNATIVA

SCOP : permite efectuarea unei prelucrari in functie de valoarea unei


conditii.

DECIZIA
SCOP : permite executarea unei prelucrari daca o conditie este
indeplinita.
Se reprezinta in pseudocod si schema logica :

6
daca_conditie / expresie
P
sfarsit_daca

MECANISM DE FUNCTIONARE : se evalueaza conditia sau expresia


la o valoare logica.Daca e adevarata se realizeaza prelucrarea P , daca nu , nu
se executa nimic.

SELECTIA
SCOP : permite executarea unei prelucrari din doua posibile la un moment
dat in functie de valoarea unei conditii.
Se reprezinta in schema logica si pseuocod.
daca_cond atunci
P1
altfel
P2
sfarsit_daca

Schema logica:

cnd=
t

P1
P2

Mecanism de functionare : se evalueaza conditia la o valoare logica.Daca este


adevarat se executa P1 , daca nu , se executa P2.

7
Obs : Atat pentru decizie , cat si pentru selectie se executa in mod
conditionat o singura prelucrare.
Daca trebuie executate conditionat , pe oricare din ramuri
mai multe prelucrari , acestea trebuie cuprinse intre acolade intr-o
instructiune bloc.

SELECTIA MULTIPLA

Este o structura derivata. Ea poate fi inlocuita prin struturi decizionale ,


deoarece este implementata de instructiuni in limbaje de programare. Ea
poate fi prezentata in schema logica si pseudocod :

case_exp
v1 , p1
...........
vn , pn
end_case

V1 P1

V P2
2

Pn
Vn

Mecnism de functionare : se evalueaza expresia . Daca valoarea


obtinuta = V1 , atunci se executa P1 si se iese din instructiune . Daca nu , se
compara valoarea cu V2.Daca sunt egale se executa P2 . Daca nu , valoarea se
compara cu Vn , daca e egala se executa Pn si se iese din instructiune.

8
STRUCTURI IMBRICATE

O structura alternativa poate fi inclusa in alta structura alternativa ,


numindu-se structuri imbricate.
O regula utila este aceea ca IF-ul=daca se asociaza cu cel mai apropiat
else.
Exemplu : Se citeste media unui elev.Afisati daca este promovat ,
nepromovat sau bursier , in situatia in care are media mai mare decat 8.
real med
citeste_med START
daca_med≥5 atunci
scrie ,, promovat
’’ Citeste med
daca_med >8
atunci
Med>=5
scrie ,, bursier ’’
altfel_nepromovat
sfarsit_daca
promovat

nepromovat
Med>=8

bursier

STOP

9
STRUCTURA “PENTRU”

SCOP : permite executarea unei prelucrari de un numar cunoscut de


ori . Este o structura cu text initial si numar cunoscut de iteratii.
Prin text initial se intelege faptul ca se efectueaza intai testarea
conditiei si apoi se efectueaza prelucrarea.

pentru_K=Vc , Vf executa
P
sfarsit_pentru

K=Vc

DA
K<=Vf
K=K+1

P
NU

MECANISM DE FUNCTIONARE : se initializeaza K ( contorul ) cu o


valoare initiala . Se evalueaza contorul K<_Vf . Daca e adevarat , se
realizeaza prelucrarea si creste contorul initial cu o unitate , daca nu , se
iese din structura.

Obs: Se efectueaza in mod repetat o singura prelucrare , mai multe


prelucrari fiind incluse-ntr-o structura bloc.

10
Aplicatii:

1) Calculati suma primelor n numere naturale .


Rezolvare :
intreg n, i , S
citeste n
S=0
Pentru i=1 , n executa
S= s + i
Sfarsit pentru
Scrie S.

START

Citeste n

S=0

i=1

DA
i<=n
i=i+1

NU S=s+i

Scrie s

STOP

11
Simulare numerica:
n=3 , S=0
P1 i=1 , 1≤3 (a) , S=0+1=1 , i=1+1=2
P2 i=2 , 2≤3 (a) , S=1+2=3 , i=2+1=3
P3 i=3 , 3≤3 (a) , S=3+3=6 , i=3+1=4
P4 i=4 , 4≤3 (f) , scrie 6 .

2.)Se citesc n valori . Calculati produsul valorilor pozitive si suma valorilor


negative .
Rezolvare : START
intreg n , i , x , S , P
citeste n
S=0
Citeste n
P=1
Pentru i=1 , n executa
Citeste x S=0, p=1
daca_x≥0 , atunci P=P*x
altfel S=S+x
sfarsit daca i=1
sfarsit pentru
scrie S , P
i<=n

Citeste x
NU
NU DA
x>0
K=K+1

S=s+x P=p*x
Scrie s, p

STOP

12
Simulare numerica :
n=3 , P=1 , x=2 , -1 , 3
P1 i=1 , 1<_3 (a) , x=2 , 2>0 (a) , P=1*2=2 , i=1+1=2
P2 i=2 , 2<_3 (a) , x=-1 , -1>0 (f) , S=-1 , i=1+2=3
P3 i=3 , 3<_3 (a) , x=3 , 3>0 (a) , P=2*3=6 , i=3+1=4
P4 i=4 , 4<3(f) scrie -1 , 6

STRUCTURA “CAT TIMP”

SCOP : permite executarea unei prelucrari cat timp o conditie e


indeplinita . Este o structura cu test initial si numar necunoscut de iteratii.
( test initial=se efectueaza mai intai testul conditiei si apoi prelucrarea ,
numar necunoscut de iteratii= programatorul nu cunoaste la momentul scrierii
programului de cate ori se repeta prelucrarea respectiva )

Cat_timp cond executa


P
Sfarsit cat_timp

DA
i<=n

NU P

MECANISM DE FUNCTIONARE : se evalueaza conditia la o valoare


logica. Daca e adevarata , se executa prelucrarea P si se revine la testul
conditiei , daca nu , se iese din structura.
OBS :
1-Programatorul trebuie sa asigure initializarea corecta a datelor inaintea
intrarii in structura. ( de regula , repetitivele sunt coordonate de o variabila
contor )

13
2-Programatorul trebuie sa asigure transformarea conditiei din adevarat in
fals dupa un numar finit de iteratii.In caz contrar , bucla e infinita
( modificarea conditiei se face de regula prin cresterea sau descresterea
contorului cu o unitate. Se poate realiza si prin citirea unor valori noi de la
tastatura sau dintr-un fisier )

Alpicatii :

1.)Calculati suma primelor n numere naturale folosind structura cat timp.


Rezolvare :
intreg n , i , S
citeste n
S=0
i=1 START
cat_timp i≤n executa
S=S + i
Citeste n
i=i+1
sfarsit_cat_timp
scrie S S=0

i=1

i<=n
i=i+1

S=s+i

Scrie s

STOP

Simulare numerica:
Po n=3 , S=0 , i=1
P1 i=1 , 1<_3 (a) , S=0+1=1 , i=1+1=2
P2 i=2 , 2<_3 (a) , S=1+2=3 , i=1+2=3

14
P3 i=3 , 3<_3 (a) , S=3+3=6 , i=3+1=4
P4 i=4 , 4<_3 (f) , scrie 6.

2.)Calculati produsul a n valori citite de la tastatura.


Rezolvare :
intreg n , i , P , x
citeste n START
P=1
i=1
Citeste n
cat_timp i<_n
executa
p=1
citeste x
P=P*x
i=i+1 i=1
sfarsit cat
timp DA
i<=n
i=i+1
Citeste x
NU

P=p*x
Scrie p

STOP

Simulare numerica:
Po n=3 , x=2,4,6 , P=1
P1 i=1 , 1<_3 (a) , x=2 , P=1*2=2 , i=1+1=2
P2 i=2 , 2<_3 (a) , x=4 , P=2*4=8 , i=1+2=3
P3 i=3 , 3<_3 (a) , x=6 , P=6*8=48 , i=1+3=4
P4 i=4 , 4<_3 (f) , scrie 48.

RETINETI!

15
∙ Pentru a calcula inversul unui numar trebuie sa folosim formula :

NINV=NINV*10+c
unde c=n%10 , iar n=n/10

∙ Pentru a demonstra daca un numar e palindrom trebuie ca acesta sa fie egal


cu inversul sau.
Ex : 123 nu e palindrom
121 e palindrom.
3.) Calculati suma cifrelor unui numar .
Ex : n=123
Suma cifrelor=1+2+3=6

Pseudocod:

Intreg n,s,c
Citeste n
S=0
Cat timp n>0 executa
C=n%10
S=s+c
N=n/10
Sfarsit cat timp
Scrie s

Simulare numerica:
P0:n=123,s=0
P1:123>0 A, c=123?%10=3,s=0+3,n=123/10=12
P2:n=12>0 A,c=12%10=2,s=3+2=5,n=1/10=1
P3:n=1>0 A,c=1%10=1,s=5+1=6,n=1/10=0
P4:n=0>0 F,scrie s=6

16
Schema logica

START

Citeste n

s=0

DA
n>0
n=n/10
C=n%10

NU
S=s+c

Scrie s

STOP

4.)Calculati produsul cifrelor unui numar.

Pseudocod:
Intreg n,p ,c
Citeste n
P=1
Cat timp n>o executa
C=n%10
P=p*c

17
N=n/10
Sfarsit cat timp
scrie p

Schema logica:

START

Citeste n

p=1

DA
n>0
n=n/10
C=n%10

NU
p=p*c

Scrie p

STOP

Simulare numerica:

P0:n=123,p=1
P1:n=123>0 A,c=123%10=3, p=1*3=3,n=123/10=12
P2:n=12>0A, c=12%10=2,p=3*2=6,n=12/10=1
P3: n=1>0 A,c=1%10=1, p=6*1=6,n=1/10=0
P4:n=0>0 F,scrie p=6

18
Instructiunea “if”

Implementeaza structurile logice decizie si selectie.


Decizia:
Are ca scop executarea unei prelucrari daca o conditie este
indeplinita.
Se implementeaza in pseudocod cu:
daca conditie atunci
P
Sfarsit_daca
Schema logica :

Nu Cond=T Da

C++ :
if (conditie)P.

Mecanism de functionare:
-Se evalueaza conditia.
-Daca este adevarata, se executa prelubrarea P
-Daca nu, iese din instructiune

Selectia:
Permite executarea unei prelucrari din doua posibile la un moment dat,
in functie de valoarea unei conditii.
Se implementeaza in pseudocod cu:

daca conditie atunci


P1

19
altfel
P2
Sfarsit_daca

Schema logica :
Nu Cond=T Da

P2 P1

C++
If(conditie) P1 ;
Else
P2;

Mecanism de functionare:
-Se evalueaza conditia la o valoare logica.
-Daca este adevarata, se executa prelucrarea P1
-Daca este falsa, se executa P2.
Observatii :
 Conditia se cuprinde intre paranteze rotunde
 Conditia cuprinde operatorii : "<" ;">" ;"≤" ;"=" etc.
 Egalitatea a doua valori se testeaza folosind operatorul "= =".
Exemplu : (a= =b)
 Expresia "a=b" in "if" este gresita pentru ca realizeaza o atribuire
sin u o comparatie.
 Conditia din "if" poate fi compusa. Fiecare termen va fi cuprins
intre paranteze rotunde si acestea vor fi incluse in parabteza
prevazuta de sintaxa instructiunii "if".
 Se pune ";" dupa fiecare prelucrare, chiar si inainte de else.
 Nu se pune ";" dupa parantezele rotunde;

20
 Se executa conditionato singura prelucrare. Daca trebuie
executate mai multe prelucrari, acestea se cuprind intr-o
instructiune bloc.

Instructiunea "for"

"For" permite executarea unei prelucrari de un numar cunoscut de ori.


Este o instructiune cu test initial si numar cunoscut de iteratii.
Implementeaza structura logica "pentru/sfarsit_pentru".
Blocul “initializare” realizeaza initializarea contorului cu o valoare
initiala. Sunt posibile si alte initializari necesare in program.
Blocul “conditie” testeaza conditia. De regula, conditia este “contor <
valoare finala”.
Observatie: Repetitiva poate lucra si descrescator, caz in care conditia
se schimba.
Blocul “incrementare” realizeaza cresterea contorului cu o unitate in
mod automat.

Se implementeaza in pseudocod astfel:


Pentru k=v1, vf executa
P
Sfarsit_pentru

Schema logica :

K=vi
Da

K<vf
K=k+1

Nu P

21
Mecanism de functionare:
- Se initializeaza contorul cu o valoare initiala;
- Se evalueaza conditia “contor < valoare finala”;
- Daca este adevarat, se executa prelucrarea P si contorul creste
automat cu o unitate;
- Daca nu, iese din instrucrtiune.

Observatii :
- Se executa in mod repetat o singura prelucrare. Daca trebuie
executate mai multe prelucrari, acestea se cuprind intre acolade, intr-
o instructiune bloc.
- Nu se pune ";" dupa paranteza inchisa ")" a instructiunii "for",
deoarece se executa de n ori o instructiune vida.
- Se pune " ;" dupa o prelucrare.
- Pot fi folosite si contoare de tip real.

Instructiunea este implemetata in limbajul de programare C++ astfel :


for(initializare, conditie, incrementare)P ;

Aplicatii :

1) Calculati suma primelor n numere naturale .


Pseudocod:
intreg n, i , S
citeste n
S=0
Pentru i=1 , n executa
S= s + i
Sfarsit pentru
Scrie S.

C++ :
#include <conio.h>
#include<iostream.h>
#include<stdio.h>
void main ( )
{
int n, i , s ;

22
clrscr ( );
cout<< ’’n= ”;
cin>>n ;
s=0 ;
for ( i=1 , i<n , i++ )
s=s+i ;
cout<<s ;
getch ( );
}

START

Citeste n

S=0

i=1

DA
i<=n
i=i+1

NU S=s+i

Scrie s

STOP

Simulare numerica:
n=3 , S=0
P1 i=1 , 1≤3 (a) , S=0+1=1 , i=1+1=2
P2 i=2 , 2≤3 (a) , S=1+2=3 , i=2+1=3
P3 i=3 , 3≤3 (a) , S=3+3=6 , i=3+1=4

23
P4 i=4 , 4≤3 (f) , scrie 6 .

2.)Se citesc n valori . Calculati produsul valorilor pozitive si suma valorilor


negative .

Pseudocod: Schema logica:


intreg n , i , x , S , P
citeste n START
S=0
P=1
Pentru i=1 , n executa Citeste n
Citeste x
daca_x≥0 , atunci P=P*x
altfel S=S+x S=0, p=1
sfarsit_daca
sfarsit pentru
i=1
scrie S , P

DA
C++: i<=n
#include <conio.h>
Citeste x i=i+1
#include<iostream.h>
NU
#include<stdio.h>
void main ( ) i<=n
{
int n, i , p ,s ,x ; S=s+x P=p*x
clrscr ( ); Scrie s, p
cout<< ’’n= ”;
cin>>n ;
s=0 ;
p=1 ; STOP
for ( i=1 , i<n , i++ )
{
cout<<”x=”;

24
cin>>x ;
if ( x>0 )
p=p*x ;
else
s=s+x
}
cout<<”p=” <<p<<” ’’ ;
cout<<”s=” <<s<<” ’’
getch ( );
}

Simulare numerica :
n=3 , P=1 , x=2 , -1 , 3
P1 i=1 , 1<_3 (a) , x=2 , 2>0 (a) , P=1*2=2 , i=1+1=2
P2 i=2 , 2<_3 (a) , x=-1 , -1>0 (f) , S=-1 , i=1+2=3
P3 i=3 , 3<_3 (a) , x=3 , 3>0 (a) , P=2*3=6 , i=3+1=4
P4 i=4 , 4<3(f) scrie -1 , 6

3.) Calculati produsul primelor n numere naturale .


Pseudocod :
intreg n ,i,p
citeste n
P=1
Pentru i=1 , n executa
S=S+i;
Sfarsit pentru
SCRIE S.

C++
#include <conio.h>
#include<iostream.h>
#include<stdio.h>
void main ( )
{
int n, i , p ;

25
clrscr ( );
cout<< ’’n= ”;
cin>>n ;
p=1 ;
for ( i=1 , i<n , i++ )
p=p*i ;
cout<<p ;
getch ( );
}

Schema logica

START

Citeste n

p=1

i=1

DA
i<=n
i=i+1
P=p*i
NU

Scrie p

STOP

Simulare numerica :

26
P0 n=3 , p=1
P1 i=1 ; 1<=3 (T) ; p=1*1=1 ; i=1+1=2 ;
P2 i=2 ; 2<=3 (T) ; p=1*2=2 ; i=2+1=3;
P3 i=3 ; 3<=3 (T) ; p=2*3=6 ; i=3+1=4;
P4 i=4 ; 4<=3 (F) SCRIE 6.

4.) Calculati produsul a n valori citite de la tastatura.


Pseudocod :
intreg n ,i,p,x ;
citeste n
P=1
Pentru i=1 , n executa
Citeste x;
p=p*x
Sfarsit pentru
SCRIE p.

C++:
#include <conio.h>
#include<iostream.h>
#include<stdio.h>
void main ( )
{
int n, i , p ,x ;
clrscr ( );
cout<< ’’n= ”;
cin>>n ;
p=1 ;
for ( i=1 , i<n , i++ )
{
cout<<”x=” ;
cin>>x ;
p=p*x ;
}
cout<<p ;
getch ( );
}

27
Simulare numerica :
P0 n=3 , p=1 , x=2 ; 4 ; 6 ;
P1 i=1 ; 1<=3 (T) ; x=2 ; p=1*2=2 ; i=1+1=2 ;
P2 i=2 ; 2<=3 (T) ; x=4 ; p=4*2=8 ; i=2+1=3;
P3 i=3 ; 3<=3 (T) ; x=6 ; p=8*6=48 ; i=3+1=4;
P4 i=4 ; 4<=3 (F) SCRIE 48.

Schema logica :

START

Citeste n

p=1

i=1

DA
i<=n
i=i+1
Citeste x
NU

P=p*x
Scrie p

STOP

5.)Calculati suma a n valori citite de la tastatura.

Pseudocod:
intreg n ,i,s,x ;
citeste n

28
s=0
Pentru i=1 , n executa
Citeste x;
s=s+x
Sfarsit pentru
SCRIE s.

C++:
#include <conio.h>
#include<iostream.h>
#include<stdio.h>
void main ( )
{
int n, i , s ,x ;
clrscr ( );
cout<< ’’n= ”;
cin>>n ;
s=0 ;
for ( i=1 , i<n , i++ )
{
cout<<”x=” ;
cin>>x ;
s=s+x ;
}
cout<<s ;
getch ( );
}

Simulare numerica :
P0 n=3 , p=1 , x=2 ; 4 ; 6 ;
P1 i=1 ; 1<=3 (T) ; x=2 ; p=0+2=2 ; i=1+1=2 ;
P2 i=2 ; 2<=3 (T) ; x=4 ; p=4+2=6 ; i=2+1=3;
P3 i=3 ; 3<=3 (T) ; x=6 ; p=6+6=12 ; i=3+1=4;
P4 i=4 ; 4<=3 (F) SCRIE 12.

29
Schema logica :

START

Citeste n

s=0

i=1

DA
i<=n
i=i+1
Citeste x
NU

s=s+x
Scrie s

STOP

6.) Aflati media aritmetica a primelor n numere naturale.

Pseudocod:
intreg n ,i,s ,med ;
Citeste n ;
S=0;
pentru i=1 ; n executa
s=s+i ;

30
med=s/i ;
sfarsit pentru
scrie med.

C++:
#include <conio.h>
#include<iostream.h>
#include<stdio.h>
void main ( )
{
int n , i , s ;
float med ;
clrscr ( );
cout<< ’’n= ”;
cin>>n ;
s=0 ;
for ( i=1 , i<=n , i++)
s=s+i;
med=s/i
cout << “med=”<<med<<” “;
getch( );
}

Simulare numerica :
P0 n=3 , i=1 , s=0 , med=0;
P1 i=1 , 1<=3 (T) , s=0+1=1 , med=1/1=1; i=1+1=2 ;
P2 i=2 , 2<=3 (T), s=2+1=3 , med=3/2 ; i=2+1=3 ;
P3 i=3, 3<=3 (T), s=3+3=6 , med=6/3 ; i=2+1=4 ;
P4 i=4, 4<=3 (F), med=6/3=2.

31
Schema logica :

START

Citeste n

s=0

Med=0

DA
i<=n
i=i+1
S=s+i
NU

Med=s/i
Scrie med

STOP

7.) Se citesc n valori . Calculati media valorilor pozitive si media valorilor


negative.

Pseudocod:

32
intreg n,i,x,sumn,sump,medn ,medp,countp,countn ;
Citeste n;
Sumn=0
Sump=0
countp=1
countn=1
pentru i=1 ; n executa
citeste x;
daca x<0
sumn=sumn+x
medn=sumn/countn
countn=countn+1
altfel
sump=sump+x
medp=sump/countp
countp=countp+1
sfarsit daca i=i+1
sfarsit pentru
scrie medn,medp.

C++
#include <conio.h>
#include<iostream.h>
#include<stdio.h>
void main ( )
{
int n , i , x ,sumn , sump ,countp , countn ;
float medn, medp;
clrscr ( );
cout<< ’’n= ”;
cin>>n ;
sump=0 ;
sumn=0;
countp=1;
countn=1;
for ( i=1 , i<=n , i++)
{

33
cout<<”x=”;
cin>>x ;
if ( x<0)
sumn=sumn+x;
medn=sumn/countn;
else
sump=sump+x;
medp=sump/countp;
}
cout << “medp=”<<medp<<” “;
getch( );
}

Schema logica :

34
START

Citeste n

Sn;Sp=0

Med n, med p =0

Count n, count p=1

DA
i<=n

Citeste x i=i+1
NU

x>0

Sn=Sn+x Sp=Sp*x

Medn=Sn/countn Medp=Sp/countp

Countn=countn+1 Countp=countp-1

Scrie medn, medp

STOP

Simulare numerica :
P0 n=4 , x=2;-3;4;-1 , countn, countp=1;
P1 1<=4 (T) , x=2 , 2>0(T) , Sp=0+2=2 , medp=2/1 , countp=1+1=2 , i=1+1=2 ;
P2 2<=4 (T) , x=-3 , -3>0 (F) , Sn=0-3=-3 , medn=-3/1 , countn=1+1=2 , i=2+1=3;
P3 3<=4 (T) , x=4, 4>0T) , Sp=4+2=6 , medp=6/2=3 , countp=2+1=3 ,
i=3+1=4;

35
P4 4<=4 (T) x=-1, -1>0 (F) , Sn=-3-1=-4 , medn=-4/2=-2 , countn=2+1=3 ,
i=4+1=5;
P5 5<=4 (F) scrie -2 , 3.

8.)Cititi un numar n . Afisati divizorii lui .

Pseudocod :
intreg n , i .
Citeste n ;
i=2
pentru i<n ,
daca n%i=0
scrie i .
sfarsit daca i=i+1
sfarsit pentru.

C++:
#include <conio.h>
#include<iostream.h>
#include<stdio.h>
void main ( )
{
int n , i ;
clrscr ( );
cout<<”n=” ;
cin>>n ;
for( i=2 , i<n , i++ )
if ( n%i= =0 ) cout<<i;
getch ( );
}

Schema logica :

36
START

Citeste n

i=2

DA
i<=n
i=i+1
n%i=0

NU
Scrie i

Scrie med

STOP

Simulare numerica :
P0 n=6 , i=2
P1 2<=6 (A) 6%2=0 (A) scrie 2 , i=2+1=3
P2 3<=6 (A) 6%3=0 (A) scrie 3 , i=3+1=4
P3 4<=6 (A) 6%4=0 (F) , i=4+1=5
P4 5<=6 (A) 6%5=0 (F) , i=5+1=6
P5 6<=6 (A) 6%6=0 (A)scrie 6 , i=6+1=7
P6 7<=6 (F) scrie 2 , 3 , 6

Instructiunea "while"

Permite executarea unei instructiuni cat timp o conditie este


indeplinita.
Este o instructiune cu test initial(se testeaza intai conditia, si apoi se
executa prelucrarea) si numar necunoscut de itratii(programatorul nu

37
cunoaste in momentul scrierii programului de cate ori se executa
prelucrarea).
Instructiunea "while" implementeaza structura logica
"cat_timp/sfarsit_cat_timp", care se reprezinta astfel:
Pseudocod:
Cat_timp conditie executa
P
Sfarsit_cat_timp

Schema logica:

Da
Cond=T

Nu P

Mecanism de functionare:
- Se evalueaza conditia la o valoare logica;
- Daca este adevarata, se executa prelucrarea P si se revine la testul
conditiei ;
- Daca nu, prelucrarea nu se executa niciodata.

Observatii :
- Daca conditia nu este indeplinita de la inceput, preucrarea nu se
executa niciodata.
- Programatorul are obligatia de a initializa corect variabilele necesare
instructiunii respective(initializarea se face prin atribuire sau prin
citire de la tastatura sau din fisier).
- Programatorul are obligatia de a transforma conditia din adevarata in
falsa dupa un numar finit de iteratii(in caz contrar, rezulta o bucla
infinita).Modoficarea se realizeaza prin incrementari, decrementari
sau citiri da la tastatura si fisier.
- Nu se pune ";" dupa paranteza inchisa.

Instructiunea este implemetata in limbajul de programare C++ astfel :


while(conditie)P ;

38
Aplicatii :

1.)Calculati suma primelor n numere naturale folosind instructiunea “while”.


Pseudocod:
intreg n , i , S
citeste n
S=0
i=1
cat_timp i≤n executa
S=S + i
i=i+1
sfarsit_cat_timp
scrie S

Schema logica:

START

Citeste n

S=0

i=1

DA
i<=n
i=i+1

NU S=s+i

Scrie s

STOP

39
Simulare numerica:
Po n=3 , S=0 , i=1
P1 i=1 , 1<_3 (a) , S=0+1=1 , i=1+1=2
P2 i=2 , 2<_3 (a) , S=1+2=3 , i=1+2=3
P3 i=3 , 3<_3 (a) , S=3+3=6 , i=3+1=4
P4 i=4 , 4<_3 (f) , scrie 6.

C++:
#include <conio.h>
#include<iostream.h>
#include<stdio.h>
void main ( )
{
int n , s ,i ;
cout<<”\n”;
cout<<”n=”;
cin>>n;
s=0;
i=1;
while (i<n)
{
s=s+i
i=i+1
}
cout<<”s=”<<s<<’’ ’’;
getch ( );
}

2.)Calculati produsul a n valori citite de la tastatura.

Pseudocod :
intreg n , i , P , x
citeste n
P=1
i=1

40
cat_timp i<_n executa
citeste x
P=P*x
i=i+1
sfarsit cat timp

Schema logica:

START

Citeste n

p=1

i=1

DA
i<=n
i=i+1
Citeste x
NU

P=p*x
Scrie p

STOP

Simulare numerica:
Po n=3 , x=2,4,6 , P=1
P1 i=1 , 1<_3 (a) , x=2 , P=1*2=2 , i=1+1=2
P2 i=2 , 2<_3 (a) , x=4 , P=2*4=8 , i=1+2=3
P3 i=3 , 3<_3 (a) , x=6 , P=6*8=48 , i=1+3=4
P4 i=4 , 4<_3 (f) , scrie 48.

41
C++:
#include <conio.h>
#include<iostream.h>
#include<stdio.h>
void main ( )
{
int n , p ,i , x;
clrscr ( );
cout<<”\n”;
cout<<”n=”;
cin>>n ;
p=1 ;
i=1 ;
while (i<n)
{
cout<<”x=”;
cin>>x;
p=p*x;
i=i+1 ;
}
cout<< ’’p= ’’<<p<< ’’ ’’ ;
getch ( ) ;
}

3.) Calculati suma cifrelor unui numar .


Ex : n=123
Suma cifrelor=1+2+3=6
Pseudocod:
Intreg n,s,c
Citeste n
S=0
Cat timp n>0 executa
C=n%10
S=s+c
N=n/10
Sfarsit cat timp
Scrie s

42
C++:
#include <conio.h>
#include<iostream.h>
#include<stdio.h>
void main ( )
{
int n , s ,c ;
cout<<”\n”;
cout<<”n=”;
cin>>n;
s=0
while (n>0)
{
c=n%10;
s=s+c
n=n/10;
}
cout<<”s=”<<s<<’’ ’’;
getch ( );
}

Simulare numerica:

P0:n=123,s=0

P1:123>0 A, c=123?%10=3,s=0+3,n=123/10=12

P2:n=12>0 A,c=12%10=2,s=3+2=5,n=1/10=1

P3:n=1>0 A,c=1%10=1,s=5+1=6,n=1/10=0

P4:n=0>0 F,scrie s=6

43
Schema logica

START

Citeste n

s=0

DA
n>0
n=n/10
C=n%10

NU
S=s+c

Scrie s

STOP

4.)Calculati produsul cifrelor unui numar.

Pseudocod:
Intreg n,p ,c
Citeste n
P=1
Cat timp n>o executa
C=n%10
P=p*c
N=n/10
Sfarsit cat timp
scrie p

44
C++: Schema logica:

#include <conio.h> START


#include<iostream.h>
#include<stdio.h>
void main ( ) Citeste n
{
int n , p ,c ;
p=1
cout<<”\n”;
cout<<”n=”;
cin>>n; DA
p=1 ; n>0
while (n>0) n=n/10
{ C=n%10
c=n%10;
NU
p=p*c
n=n/10; p=p*c
}
cout<<”p=”<<p<<’’ ’’; Scrie p
getch ( );
}
STOP

Simulare numerica:

P0:n=123,p=1
P1:n=123>0 A,c=123%10=3, p=1*3=3,n=123/10=12
P2:n=12>0A, c=12%10=2,p=3*2=6,n=12/10=1
P3: n=1>0 A,c=1%10=1, p=6*1=6,n=1/10=0
P4:n=0>0 F,scrie p=6

45
5. Afisati cifrele unui numar.
Pseudocod:
intreg n , c
citeste n
cat timp n>0 executa
c=n%10
scrie c
n=n/10
sfarsit cat timp.

C++:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main( )
{int n, c;
clrscr( );
cout<<”n=”;
cin>>n ;
while(n>0)
{
c=n%10 ;
cout<<c<<” “;
n=n/10;
}
getch( );
}

Simulare numerica:
P0: n=123;
P1: 123>0 (T); c=123%10=3; n=123/10=12;
P3: 12>0 (T); c=12%10=2; n=12/10=1;
P4: 1>0 (T); c=1%10=1; n=1/10=0;
P5: 0>1 (F); scrie 1.

46
Schema logica :

START

Citeste n

n>0
DA i=i+1
c=n
NU %10
Scrie med Scrie c

STOP

6.Aflati produsul cifrelor nenule ale unui numar.


Pseudocod:
intreg p , c , n
citeste n;
p=0
cat timp n>0
c=n%10
daca c>0
p=p*c
n=n/10
sfarsit_daca
sfarsit_cat_timp

C++:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main( )

47
{int n, c, p;
clrscr( );
cout<<”n=”;
cin>>n ;
p=0 ;
while(n>0)
{
c=n%10 ;
if(c!=0)
p=p*c;
n=n/10;
}
cout<<”p=”<<p;
getch( );
}

Simulare numerica:
P0:n=1230 ,p=1
P1:n=1230>0 A,c=1230%10=1, 0>0(F) ,n=1230/10=123
P2:n=123>0A, c=123%10=3,p=1*3=3,n=123/10=12
P3: n=12>0 A,c=12%10=2, p=2*3=6,n=12/10=1
P4:n=1>0 (A) c=1%10=1 , p=6*1=6 n=1/10=0,
P5:n=0>o(F) scrie 6

Schema logica :

48
7. Se citeste un numar n. Aflati inversul lui.
Pseudocod:
intreg n , ninv , c
citeste n
ninv=0
cat timp n>0 executa
c=n%10
ninv=ninv*10+c
n=n/10
sfarsit cat timp

C++:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main( )
{int n, c, ninv;
clrscr( );
cout<< "\n " ;
cout<<”n=”;
cin>>n ;
ninv=0;
while(n>0)
{
c=n%10 ;
ninv=ninv*10+c;
n=n/10;
}
cout<<”ninv=”<<ninv;
getch( );
}

49
Schema logica :

START

Citeste n

Ninv=0

DA
n>0
i=i+1
c=n
NU %10
Scrie med Ninv=ninv*10+C

STOP

Simulare numerica:
P0: n=123; ninv=0;
P1: 123>0 (T); c=123%10=3;ninv=0*10+3=3; n=123/10=12;
P3: 12>0 (T); c=12%10=2; ninv=3*10+2=32; n=12/10=1;
P4: 1>0 (T); c=1%10=1; ninv=32*10+1=321; n=1/10=0;
P5: 0>0 (F); Scrie 321.

8.Se citeste un numar. Aflati daca e palindrom.

Pseudocod :
intreg n ,naux ,c , ninv,
citeste n
ninv=0
n=naux

50
cat timp n>0 executa
c=n%10
ninv=ninv*10+c
n=n/10
sfarsit cat timp
daca ninv=naux
scrie ,, palindrom’’
altfel ,, nu e palindrom”
sfarsit daca

C++:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main( )
{int n, c, ninv, naux;
clrscr( );
cout<< "\n " ;
cout<<”n=”;
cin>>n ;
naux=ninv;
ninv=0;
while(n>0)
{
c=n%10 ;
ninv=ninv*10+c;
n=n/10;
}
if(naux= =ninv)
cout<<”palindrom”;
else
cout<< "nu e palindrom " ;
getch( ) ;
}

Schema logica :

51
START

Citeste n

S=0

P=1

DA
i<=n

C=n%10 i=i+1

NU C%2=0

P=p*c S=s+c
Scrie s, p

STOP

Simulare numerica :
P0: n=123; ninv=0;
P1: 123>0 (T); c=123%10=3;ninv=0*10+3=3 ; n=123/10=12;
P3: 12>0 (T); c=12%10=2; ninv=3*10+2=32; n=12/10=1;
P4: 1>0 (T); c=1%10=1; ninv=32*10+1=321; n=1/10=0;
P5: 0>0 (F); 321=123 nu e palindrom

52
Instructiunea " do while"

Permite executarea unei instructiuni cat timp o conditie este


indeplinita.
Este o instructiune cu test final(se executa mai intai prelucrarea , si
apoi are loc testarea conditiei) si numar necunoscut de
itratii(programatorul nu cunoaste in momentul scrierii programului de cate
ori se executa prelucrarea).
Instructiunea "do while" implementeaza structura logica "executa /
cat_timp", care se reprezinta astfel:
Pseudocod:
Executa
P
Cat timp conditie.

Mecanism de functionare:
- Se realizeaza prelucrarea P;
- Se evalueaza conditia “contor < valoare finala”;
- Daca este adevarat, se reexecuta prelucrarea , daca nu, iese din
instrucrtiune.

Observatii :
- Se executa in mod repetat o singura prelucrare. Daca trebuie
executate mai multe prelucrari, acestea se cuprind intre acolade, intr-
o instructiune bloc.
- Nu se pune ";" dupa paranteza inchisa ")" a instructiunii "for",
deoarece se executa de n ori o instructiune vida.
- Se pune " ;" dupa o prelucrare.
- Pot fi folosite si contoare de tip real.

Instructiunea este implemetata in limbajul de programare C++ astfel :


Do
{
P
}
while cond.

53
Aplicatii :

1.)Calculati suma primelor n numere naturale.


Pseudocod:
intreg n, i,s
citeste n
s=0
i=1
executa
s=s+i
i=i+1
cat timp i<=n
scrie s.

C++:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main( )
{
int n , s ,i
cout<<”n=”;
cin>>n;
s=0;
i=1;
do
{
s=s+i;
i=i+1;
}while (i<=n)
cout<<s;
}

54
Schema logica:

START

Citeste n

S=0

i=1

S=s+i

i=i+1

DA
i<=n

NU

Scrie s

STOP

Simulare numerica

P0: n=5 S=0 i=1


P1: S=0+1=1 i=1+1=2 2<=5 A
P2: S=1+2=3 i=2+1=3 3<=5 A
P3: S=3+3=6 i=3+1=4 4<=5 A
P4: S=6+4=10 i=4+1=5 5<=5 A
P5: S=10+5=15 i=5+1=6 6<=5 F
scrie 10

2.)Calculati produsul primelor n numere naturale.


Pseudocod:
intreg n, i,p
citeste n
p=1
i=1

55
executa
p=p*i
i=i+1
cat timp i<=n
scrie p.

C++:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main( )
{
int n , p,i
cout<<”n=”;
cin>>n;
p=1;
i=1;
do
{
p=p*i;
i=i+1;
}while (i<=n)
cout<<p;
}

56
Schema logica :

START

Citeste n

P=1

i=1

P=p*i

i=i+1

DA
i<=n

NU

Scrie p

STOP

Simulare numerica :
Po n=2 , p=1 , i=1,
P1 p=1*1=1 , i=1+1=2 , 2<=2 (A)
P2 p=2*1=2 , i=2+1=3 , 3<=2 (F)
Scrie 2

3.) Se citeste un numar n.Afisti cifrele acestui numar.


Pseudocod :
intreg n , c ;
citeste n ;
executa
c=n%10;
scrie c ;
n=n/10;
cat timp n>0;

57
C++:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main( )
{int n, c;
clrscr( );
cout<<”n=”;
cin>>n ;
do
{
c=n%10 ;
n=n/10;
}
while(n>0)
cout<<c<<” “;
getch( );
}

Simulare numerica

P0: n=1768
P1: c=1768%10=8 scrie 8 n=1768/10=176 176>0 A
P2: c=176%10=6 scrie 6 n=176/10=17 17>0 A
P3: c=17%10=7 scrie 7 n=17/10=1 1>0 A
P4: c=1%10=1 scrie 1 n=1/10=0 0>0 F

58
Schema logica :

START

Citeste n

C=n%10

N=n/10

DA
n>0

NU
Scrie c

STOP

4.)Se citeste un numar n . Aflati suma cifrelor lui.


Pseudocod:
intreg n, s , c ;
citeste n ;
s =0
executa
c=n%10;
s=s+c
n=n/10
cat timp n>0,
scrie s.

C++:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main( )
{int n, c, s;

59
clrscr( );
cout< "\n" ;
s=0
cout<<”n=”;
cin>>n ;
do
{
c=n%10 ;
s=s+c;
n=n/10;
}
while(n>0)
cout<<”s=”<<s<<” “;
getch( );
}

Schema logica :

START

Citeste n

S=0

C=n%10

S=s+c

N=n/10

DA
n>0

NU
Scrie c

STOP

60
Simulare numerica

P0: S=0 n=246


P1: c=246%10=6 S=0+6=6 n=246/10=24 24>0 A
P2: c=24%10=4 S=6+4=10 n=24/10=2 2>0 A
P3: c=2%10=2 S=10+2=12 n=2/10=0 0>0 F
scrie 10

5.) Se citeste un numar n. Aflati produsul cifrelor nenule.


Pseudocod :
intreg n, p ,c ;
citeste n ,
p=1;
executa
c=n%10
daca c>0
p=p*c
sfarsit daca n=n/10
cat timp n>0
scrie p.

C++:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main( )
{int n, c, p;
clrscr( );
cout<<”n=”;
cin>>n ;
p=0 ;
do
{
c=n%10 ;
if(c!=0)

61
p=p*c;
n=n/10;
}
while(n>0)
cout<<”p=”<<p;
getch( );
}

Schema logica :

START

Citeste n

P=1

C=n%10

DA
C!=0

P=p*c

N=n/10

DA
n>0

NU

Scrie p

STOP

Simulare numerica:

P0:n=1230 ,p=1
P1:,c=1230%10=1, 0>0(F) ,n=1230/10=123 , n=1230>0 A
P2:, c=123%10=3,p=1*3=3,n=123/10=12, n=123>0A

62
P3:,c=12%10=2, p=2*3=6,n=12/10=1, n=12>0 A
P4: c=1%10=1 , p=6*1=6 n=1/10=0, n=1>0 (A)
P5:n=0>0(F) scrie 6

6.) Se citeste un numar n . Afisati inversul lui.


Pseudocod :
intreg n , ninv , c.
citeste n
ninv=0
executa
c=n%10
ninv=ninv*0+c
n=n/10
cat timp n>0
scrie ninv.

C++:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main( )
{int n, c, ninv;
clrscr( );
cout<< "\n " ;
cout<<”n=”;
cin>>n ;
ninv=0;
do
{
c=n%10 ;
ninv=ninv*10+c;
n=n/10;
}
while(n>0)
cout<<”ninv=”<<ninv;
getch( );
}

63
Schema logica :

START

Citeste n

Ninv=0

C=n%10

Ninv=ninv*10+C

N=n%10

DA
n>0

NU
Scrie p

STOP

Simulare numerica:
P0: n=123; ninv=0;
P1: c=123%10=3;ninv=0*10+3=3; n=123/10=12; 123>0 (T);
P3: c=12%10=2; ninv=3*10+2=32; n=12/10=1; 12>0 (T)
P4: c=1%10=1; ninv=32*10+1=321; n=1/10=0; 1>0 (T);
P5: 0>0 (F); Scrie 321.

7.) Se citeste un numar n . Afisati daca e palindrom.

Pseudocod :
intreg n , naux , c , ninv
citeste n
ninv=0

64
naux=n
executa
c=n%10
ninv=ninv*0+c
n=n/10
cat timp n>0
daca ninv=naux
scrie “ palindrom”
altfel
scrie “ nu e palindrom”
sfarsit_daca

Simulare numerica :
P0: n=123; ninv=0;
P1: c=123%10=3;ninv=0*10+3=3 ; n=123/10=12; 123>0 (T);
P3: c=12%10=2; ninv=3*10+2=32; n=12/10=1; 12>0 (T);
P4: c=1%10=1; ninv=32*10+1=321; n=1/10=0; 1>0 (T);
P5: 0>0 (F); 321=123 nu e palindrom

C++:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main( )
{int n, c, ninv, naux;
clrscr( );
cout<< "\n " ;
cout<<”n=”;
cin>>n ;
naux=n;
ninv=0;
do
{
c=n%10 ;
ninv=ninv*10+c;
n=n/10;
}

65
if(naux= =ninv)
while(n>0)
cout<<”palindrom”;
else
cout<< "nu e palindrom " ;
getch( ) ;
}

Schema logica :

START

Citeste n

Ninv=0

N=naux

C=n%10

Ninv=ninv*10+C

N=n%10

DA
n>0

NU
Scrie ninv

Ninv=naux

Nu e palindrom palindrom

STOP

66
8.) Se citeste un numar n. Calculati produsul cifrelor impare si suma cifrelor
pare.
Pseudocod:
intreg n, p ,s , c
citeste n
s=0
p=1
executa
c=n%10
daca c%2=0
s=s+c
altfel
p=p*c
sfarsit daca n=n/10
cat timp n>0
scrie s si p.

C++:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main( )
{int n, c, p, s;
clrscr( );
cout<<”n=”;
cin>>n ;
p=1;
s=0;
do
{
c=n%10 ;
if(c%2= =0)
s=s+c;
else
p=p*c;
n=n/10;
}
while(n>0)

67
cout<<”p=”<<p<<” “;
cout<< "s="<<s<< " ";
getch( ) ;
}

Schema logica :

START

Citeste n

S=0

P=1

C=n%10

NU DA
C%2=0

P=p*c S=s+c

N=n/10

DA
n>0

NU
Scrie s,p

STOP

Simulare numerica
P0 n=123 s=0 p=1
P1 c=123%10=3 3%2=0(F) p=1*3=3 , n=123/10=12 ,123>0 (A)
P2 c=12%10=2 2%2=0(A) s=2+0=2, n=12/10=1, 12>0 (A)

68
P3 c=1%10=3 1%2=0(F) p=1*3=3 , n=1/10=0, 1>0 (A)
P4 0>0(F) scrie 2 , 3

CLASA A X-A

NOTIUNI INTRODUCTIVE

Evolutia limbajelor de programare

Limbajul de programare reprezinta un mijloc de comunicare intre


utilizatorul uman, care este programatorul, si sistemul de calcul.
Descrierea algoritmului in limbaj de programare se face cu ajutorul
unui program.
Un program este o succesiune de comenzi-instrustiuni ce vor fi
executate de sistemul de calcul.
Un calculator poate sa ″inteleaga″ mai ulte limbaje de programare
intrucat fiecare limbaj are un ”traduactor”-compilator propriu.
Evolutia limbajelor de programare a avut loc paralel cu evolutia
sistemelor de calcul.
Generatiile cele mai importante ale limbajelor de programare:
1. Limbaje cod-masina :
Denumite si limbaje de baza sau de nivel zero, limbajele cod-masina
descriu instructiunile in sistemul de numeratie binar (secvente de 1 si
0). Programele sunt executate numai pentru calculatorul pentru care
au fost scrise.
Primul program a fost realizat pantru masina mecanica a lui
Charles Bubbage (1834) de catre contesa Ada Lovelace, fiica poetului
Lord Byron.
2. Limbaje de asamblare :
Limbajele de asamblare au la baza un set de coduri (mneomonice) care
sunt reprezentari simbolice ale instructiunilor masina.
3. Limbaje de nivel inalt :

69
Folosesc cuvinte din vocabularul limbii engleze, sunt accesibile si au o
arie larga de aplicatie : calcule stiintifice sau economice, reprezentari
grafice, probleme de optimizare, jocuri.
Cele mai reprezentative limbaje de nivel inalt sunt :
 FORTRAN(FORmula TRANslation) – calcule tehno-
stiintifice(1955)
 COBOL(Common Business Oriented Language) – 1960 –probleme
economice
 BASIC(Begginer’s Allpurpose Symbolic Instructions Code) –
1964 – aplicatii complexe
 PASCAL – 1971; Versiuni noi: Turbo Pascal, Borland Pascal,
Delphi, OOT
 C/C++ - 1972
 JAVA – aparatura electronica inteligenta conectata in retea
 LISPC(List Processing Language) – 1965
 PROLOG(PROgramming LOGic) - 1973

Stiluri de programare :
Stilul de programare reflecta atat modul de gandire al
programatorului, cat si felul in care acesta descrie algoritmul la nivel de
program.
1. Programarea nestructurata – stil ”liber” de programare, fara reguli.
2. Porgramarea structurata – respecta principiul : ″orice program poate fi
implementat dora prn structuri de control secventiale, alternativa sau
repetitive. Pot fi realizate doar in limbaje de programare care au
instructiuni echivalente structurilor de control. Pascal si C/C++ sunt
astfel de limbaje.
3. Programarea orientata spre obiecte (OOP). Limbajele de programare
Pascal si C/C++ au si versiuni OOP.

70
Structura programelor

Indiferent de limbajul in care este scris, un program descrie datele


prelucrative unui algoritm. Strctura generala a unui program realizat in
limbajul C/C++ este redata in tabelul uramtor :

LIMBAJUL C/C++
Directive procesare
Includere fisiere biblioteca header (antet)
#include<math.h>
definitii de constante; const n=15;
definitii de tipuri de date; typdef float sir[5]
declaratii de variabile ; int x, y ;
declaratii de subprograme(functii)
void mai( )
{instructiuni ;apeluri de subprograme ;
}

Precizari :
1. Un program C/C++ este un ansamblu de instructiuni grupate in functii.
2. Orice program C/C++ are cel putin o functie-functia principala care se
declara prin void main ( ).
3. Orice program C/C++ poate avea un sau mai ,multe functii declarate de
programator.
4. Un bloc de instructiuni este delimitat printr-o pereche de acolade { }.
5. Fiecare instructiune se termina cu ”; ” .

Exemplu :
Se citesc doua numere intregi a si b ; se afiseaza suma lor.

#include<iostream.h>
int a, b ;
void main ( ) //functia principala
{cout<<”a=”; cin>>a;
cout<<”b=”; cin>>b;
cout<<”Suma a+b=”<< a+b<<endl;
}

71
Vocabularul limbajului de programare

Vocabularul oricarui limbaj de programare este format din: setul de


caractere, identificatori, separatori si comentarii.
Setul de caractere :
Orice program este scris cu ajutorul uramtoarelor caractere :
- litere mari si mici ale alfabetului englez (A-Z, a-z), numite caractere
alfabetice ;
- cifrele sistemului de numerotatie zecimal, numite si caractere
numerice (0-9) ;
- caractere speciale : +, -, *, /, =, &, [ , ], {, }, |, « spatiu », _, ~, @.

Identificatori :
Un identificator reprezinta o succesiune de litere, cifre sau
caracterul special ”_”; primul caracter nu trebuie sa fie cifra.
Identificatorii pot avea orice lungime.
Exemple :
1. identificatori : a, b¹, cod_0, produs.
2. Succesiuni de caractere ce nu pot fi indentificatori : 3y(primul
caracter este o cifra), ur+m(contine un caracter special).
Obs : Orice identificator trebuie definit sau declarat intr-o linie
anterioara referirii sale.
Cuvintele cheie in limbajul de programare C/C++ : while, void, for, do,
struct, char, float, sweitch, NULL, include, const, floor, if, define.

Separatori
Unitatile sintactice(ansambluri de caractere) sunt separate intre ele
fie prin unul sau mai multe spatii libere(blank), fie prin sfarsitul de
linie (caracterul CR), fie prin caracterul ”; ” care se utilizeaza pentru
separarea instructiunilor si a declaratiilor.

Comentarii
In textul unui program, sunt necesare note explicative(comentarii)
atasate unor secvente deoperatii, declarari de tipuri de date/
variabile, care nu au un rol activ in derularea programului. Acestea
sunt delimitate in limbajul Pascal prin {...}, iar in limbajul C/C++ sunt
precedate de ”//.”

72
Constante si variabile

Asa cum se cunoaste, un algoritm ofera date de iesire pe baza datelor


de intrare. In consecinta, un program care implementeaza un algoritm
foloseste date care se pot clasifica astfel :

variabile
dupa stabilitate
constante

Datele problemei naturale


(clasificare) numerice intregi
reale

dupa natura litere


caracter cifre
semne speciale

sir de caractere

logice
Tip de data
Prin tip de data se intelege o conventie cu privire la :
- multimea valorilor
- operatii caracteristici
- lungimea si organizarea zonei de memorie

Exista limbaje bogate de data.


Limbajul C utilizeaza tipuri de date numerice. In locul tipului de date din
alte limbaje, limbajul C foloseste vector de caractere sau pointer.
C/C++ ofera tiplu ponter spre o zina de memorie care reprezinta un tip de
date ... C el contine adresa de inceput a zonei de meorie, si nu continutul ei.
In locul tipului logic, limbajul C/C++ foloseste o conventie : 0-Fals, iar
valorile diferite de 0 sunt adevarate.

73
Limbajul C/C++ ofera tipuri structurale, cum ar fi vectorii, structurile si chiar
clasele. Tipurile de date din limbajul C/C++ sunt :
Date Numar de octeti
Intregi Int 2
shortint 2
unsigned 2
long 4
Unsigned long 4
Reale Flat 4
Dluble 8
Long double 10
Caracter Char 1

Constante

Constantele reprezinta zone de meorie care au continultul fix. Ele sunt


utile in programe cand se utilizeaza des anumite valori, cand se folosesc
valori de dimensiuni mari si numar mare de zecimale.
Constantele se definesc o singura data in program si se
Definirea unei cinstante pune in legatura cuvinte cheie ″const″,
eventual tipul constantei si numele asociat.
Definirea constatelor
Const[tip]id_constanta=valoare
Exemplu :
Const pi=3,14 ; const unu= ‘1’ ;
Exista mai multe tipuri de constante astfel :
 intregi – numere intregi pozitive cu valori intre 0 si 4.294.964.295 si
care sunt de treii tipuri :
1. zecimale(baza 10) (ex : 43 ; 152 ;7567)

2. octale(baza 8) – sisunt precedate de un ″0″ nesemnificativ


(ex : 0345->354(8)
3. hexazecimale(baza 16) – sunt precedate de 0x sau 0X
(ex : 0X2F4->2F4(16)
 reale – orice valoare reala (ex : 32, 45, 0,5)
 caracter – orice caracter scris intre apostrofuri(ex : ‘A’)

74
 siruri de caractere – o succesiune de caractere, delimitate tot prin
ghilimele
 constate definite prin cuvinte-cheie (ex : NULL)

Variabile
Scop : permit includerea datelor de programe
Definitie: reprezinta ansamblul adresa fixa, continut variavil din
memoria caruia ii este pus in corespondenta numere din program.
Memoria poate fi asimilata unor casute postale. O variabila reprezinta
o zona de memorie cu adresa de inceput fixa, dar continut variabil.
Continutul variabilei - se suprascrie o noua valoare peste valoarea
veche.
O celula de variabila este egal cu size of(tip).
Size of este o functie care returneaza lungimea unei variabile sau a
unui tip de data.
Pentru a fi folosita in program, o variabila se defineste o singura data.
Obs : Numele variabilei este pus in corespodenta cu adresa de-nceput
a variabilei in memorie. Orice regasire, inscriere, citire, se face de la adresa
respectiva pe o zona de memorie.
Operatii tipice :
Variabilele de memorie suporta un set de operatii tipice. Cunoasterea
lor este necesara pentru utilizarea corecta a variabilelor. Operatii tipice
sunt: atribuirea, citirea de la tastatura, afisarea si utilizarea in axpresii.
Mediul limbajului de programare C/C++:
Mediul de programare este o aplicatie cu un meniu interactiv care
ofera o interfata accesibila si prietenoasa.
Lansarea in executie – se lanseaza C, Corland C, Bin, BC.exe.
Accesul la fisiere: file->new->existent
Salvare: F2 sau File->Save as
Esitare: de la tastatura
Compilare : compile->compile sau Alt+F1
Depanare : Run->trage into
Inchidere: Alt+X

75
Vectori
(Tablouri unidimensionale)

Scop: Permit implementarea datelor de acelasi tip.


Definitie: Reprezinta o colectie de date de acelasi tip, situate intr-o
zona continua de memorie.
Definirea in program :
O variaile vector trebuie definita o singura data si poate fi folosita de
cate ori e nevoie.
Definirea se face cu sintaxa : tip_data nume_vector[exp] ;
Ex: int vec[3];

Aspectul in memorie:
Dupa definirea in progra, in memorie se aloca o zonacare are uramtorul
aspect(tipul ”int” ocupa 2 octeti).

Element 1 Element2
(vec[0]) (vec[1])

l = size of(tip)
n

L=∑
i=1
sing of(tip)

Accesarea unui element de vector in memorie:


Un element de vector are ca adresa de inceput AØ.
Aelement1=Avec[0]= AØ

76
Aelement2=Avec[1]= AØ+l
Aelement i=Avec[i-1]= AØ+(i-1)l
Pentru accesarea unui element de vector se foloseste relatia:
″Aelement i=Avec[i-1]= AØ+(i-1)l″
Obs:pentru un vector se retine o singura adresa , indiferent de
numarul de elemente.
Pentru accesarea unui element de vector in program se foloseste
sintaxa :nume_vector[indice]
Ex : vec[0]
Operatii tipice -> un element de vector se comporta ca o variabila de
tipul respectiv. Difera doar accesarea. La variabila se foloseste numele
variabilei, iar la vector nume_vector(indice).
In consecinta, elementele suporta urmatoarele operatii tipice :
1. Atribuirea -> reprezinta operatia prin care unei variabile i se asociaza
un continut la momentul scrierii programului:
Sintaxa: nume_vector[indice]=val;
Exemplu: vec[0]=0
2. Citirea de la tastatura -> reprezinta operatia prin care unei variabile i
se asociaza valoarea tastata la rularea programului
Sintaxa :cin>> nume_vector[indice];
Exemplu :cin>>vec[1] ;
3. Afisarea -> reprezinta operatia prin care continutul unei variabile este
afisat pe monitor
Sintaxa :cout<<nume_vector[indice] ;
Exemplu :cout<<vec[0] ;
4. Utilizarea in axpresii->un element de vector are rol de operant in
expresie
Exemplu:vec[0]=vec[1]+vec[2];

Exemplu:
Urmatorul program contine exemple pentru operatiile tipice si
aspectul in memorie:
#include<iostream.h>
#include<conio.h>
void main( );
{
//declarare vector
int vec[3];

77
float v [7];
//atribuire
vec[0]=100;
//citire
cout<<”vec[1]=; ”
cin>>vec[1] ;
//afisare
cout<<vec[0] ;
cout<<vec[1] ;
//expresie
cout<<2*vec[1]
//lungime element de vectori
cout<<size of(int) ; 2
cout<<size of(vec[0] ; 2
cout<<size of(vec[2]); 2
cout<<size of(vec); 6
//afisare adrese
cout<<&vec[0]
cout<<&vec[1]
cout<<&vec[2]

Matrici
(Vectori bidimensionali)

Scop: Memoreaza date de tip matricial. Datele de tip matricial au


aspectul a11, a12, a13
a21, a22, a23
a31, a32, a33
Un element este identificat prin indici.
Definire in program :
O matrice se defineste o singura data cu sintaxa t”ip_data
nume_variabila [exp_1][exp_2]”.
Exemplu: int mat[3],[2]
Exp1 ->numar de linii
Exp2 ->numar de coloane
Identificarea unui element de matrice cu sintaxa :
nume_matrice[indice1][indice2]

78
Ex :mat[1][2] ;

Operatii tipice :
Un element de matrice se comporta ca o variabile de tipul respectiv si
suporta urmatoarele operatii tipice :
1. Atribuire
Sintaxa : nume matrice[indtice1][indice2]=val1
Exemplu : mat[1][1]=3
2. Citirea de la tastatura
Sinatxa : cin>>nume matrice[indice1][indice2]
Exemplu : cin>>mat[1][0]
3. Afisarea
Sintaxa : cout<<nume_matrice[indice1][indice2]

Exemplu :
#include<iostream.h>
#include<conio.h>
void main( )
{
//definire matrice
int mat[2][2]
float in[5][3]
//atribuirea elementelor de matrice
mat[0][0]=11 ;
mat[1][0]=12 ;
mat[1][1]=13 ;
//citirea elementelor de matrice de la tastatura
cout<<”mat[0][1]=”; cin>>mat[0][1] ;
cout<<”mat[1][1]= ” ; cin>>mat[1][1];
cout<< ”mat[1][0]= ”; cin>>mat[1][0] ;
//utilizarea in expresii
mat[0][0]=mat[1][1]*mat[1][0] ;
//tipul si elementele au aceeasi lungime
cout<<size of(mat[0][0])<<”/n”;
cout<<size of(mat[0][1])<<”/n”;
cout<<size of(mat[1][0])<<”/n”;
cout<<size of(mat[1][1])<<”/n”;
cout<<size of(int)<<”/n”;

79
cout<<size of(mat)<<”/n”;
//adresele elementului de vector sunt
//succesiv mai mari cu lungimea tipului
cout« &,mat[0][0] « “/n”;
cout« &mat[0][1]<<”/n” ;
cout<<&mat[1][0]<<”/n” ;
cout<<&mat[1][1]<<”/n”;
getch( ) ;
}

Tipul ″struct″

Scop : permit implementarea datelor de tipuri diferite.


Definitie : reprezinta o colectie de date de tipuri diferite situate intr-
o zona continua de memorie.
Exemplu : O adresa foloseste date sir de caractere si numerice.
Aspectul in memorie :

C1 C2 C3

l l l
L

ln=size of(Cn)
n

L=∑
i=1 size of(Ci)

Definirea variabilei se realizeaza in doua etape:


Se declara un tip structura, si-apoi, pe baza lui, se defineste o
variabila de tip structura.
Declararea se realizeaza cu sintaxa :
Struct{
Tip_1:comp1;
Tip2:comp2;

80
...
Tipn:comp n;}
Exemplu:
Struct telev
{char nume;
int;
}

Definirea se realizeza cu sintaxa:


struct{
tip1:camp1;
...
tip n:camp n;
}nume_var

Exemplu:
Struct telev
{char*nume;
int_varsta;
} elev

A doua metoda de definire este cea clasica:


Ex: telev ev1, ev2l

Accesarea unui element de vector se realizeaza in memorie si in


program:
In memorie, adresele campurilor sunt:
AC1=AØ
AC2=AØ+ l1
... j
ACi=∑size
i=1 of(Ci)

Accesarea in program se realizeaza cu sintaxa:


Nume_var.nume_camp
Ex: elev.varsta
Un camp dintr-o variabila se comporta ca o variabila de tipul respectiv
(difera modul de accesare la variabila ″nume_variabila″, iar pentru camp
″nume_var.nume_camp″).

81
Operatii tipice :
1. Atribuirea :
Sintaxa : nume_var.nume_camp=val;
Ex: elev.varsta=17;
2. Citirea de la tastatura
Sintaxa : cin>> nume_var.nume_camp ;
Ex : cin>>elev.nume ;
3. Afisare
Sintaxa : cout<<nume_var.nume_camp ;
Ex : cout<<elev.nume ;
4. Expresii : se comporta ca operand
Ex : elev.varsta=elev.varsta+1 ;

Combiarea structurilor de date :


Structurile de dat se pot combina conform cerintelor problemei. Pot
exista structuri cu un camp vector. Se pot realiza vectori de structuri
(ex :numele si varsta tuturor elevilor din clasa), se pot combina si tipuri
vectori. Daca pentru un elev se retin notele pentru semestrul 1, se
prelucreaza intreaga clasa intr-o structura.
Exemplu 1 :
#include<iostream.h>
#include<conio.h>
//definire tip structura
struct tselev
{int cod;
char*nume*prenume;
float med;
}vel;
tselev vel1;
void main( )
{//1. Atribuire
vel.cod=1;
vel.nume=”ion”;
vel.prenume=”ionel”;
vel.med=6i;
//2. Citirea de la tastatura

82
cout<<”vel cod=”;
cin>>vel cod ;
cout<<”vel nume=”;
cin>>vel nume
cout<<”vel prenume=”;
cin>>vel prenume;
cout<<”vel med=”;
cin>>vel med;
//3. Afisarea
cout<<vel.cod<<endl;
cout<<vel.nume<<endl;
cout<<vel.prenume<<endl ;
cout<<vel.med<<endl ;
getch( ) ;
}

Exemplu 2 :
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
//definire tip structura
struct tselev
{int cod;
char*nume*prenume;
float vmed[10];
//definire variabila tip structura
}vel;
//definire variabila tip structura
tselev vel1;
void main( );
}int i,n=3
//1. Atribuirea
vel.con=1;
vel.nume=”ion”;
vel.prenume=”ionel”;
for(i=0; i<n; i++)
vel.vmed[1]=i;
//2. Citirea de la tastatura

83
cout<<”vel.cod=” velmed ;
cout<<”vel/nume=”;cin>>vel.prenume ;
for(i=0 ; i< n ; i++)
{
cout<<”vel.vmed[“<<i<”]=”;
cin>>vel.vmed[1];
}
//Afisarea
cout<<vel.cod<<endl;
cout<<vel.nume<<endl ;
cout<<vel.prenume<<endl ;
for(i=0 ; i< n ; i++)
cout<<vel.vmed[i]<<” “;
getch( );
}

Exemplu 3:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
//definire tip structura
struct tselev
{
int cod;
float med;
};
//definire variabile tip vector structura
tselev vel[3];
void main( );
{
int i, n=3;
clrscr( );
//1. Atribuirea
for(i=0; i<n; i++)
{
vel[i] cod=1;
vel[i] med=2*i;
}

84
//2. Citirea de la tastatura
for(i=0; i<n; i++)
{
cout<<”vel[“<<i<<”].cod=”;cin>>vel[i].cod;
cout<<”vel[“<<i<<”].med=”;cin>>vel[i].med;
}
//3.Afisarea
for(i=0; i<n; i++)
{
cout<<vel[i].cod<<endl;
cout<<vel[i].med<<endl;
}
getch( );
}

STRUCTURI LOGICE.INSTRUCTIUNI ASOCIATE

Un algoritm se rezolva utilizand structura bloc, instructiuni


decizionale si repetitive. Limbajele de programare au instructiuni care
implementeaza acezte structuri.

STRUCTURA SECVENTIALA

Presupune executarea unei prelucrari in ordinea precizata . ( ele


nu se executa conditional sau repetitiv ). Exista cateva tipuri , printre care :
1.) Declararea variabilelor se face cu sintaxa ,, tip data variabila ’’.
Definirea variabilei pune in legatura numele variabilei cu tipul sau .

2.)Citirea variabilei reprezinta operatia prin care continutul unei


variabile e incarcat de la tastatura.

3.)Atribuirea este operatia prin care o valoare e asociata unei variabile.

4.)Afisarea se realizeaza cu sintaxa scrie exp 1 , ... , exp n

85
5.)Instructiunea compusa reprezinta un set de prelucrari cuprinse intre
acolade .

{ p1
.
.
} pn

cnd=
t

STRUCTURA ALTERNATIVA

SCOP : permite efectuarea unei prelucrari in functie de valoarea unei


conditii.

DECIZIA
SCOP : permite executarea unei prelucrari daca o conditie este
indeplinita.
Se reprezinta in pseudocod si schema logica :

daca_conditie / expresie
P
sfarsit_daca

86
MECANISM DE FUNCTIONARE : se evalueaza conditia sau expresia
la o valoare logica.Daca e adevarata se realizeaza prelucrarea P , daca nu , nu
se executa nimic.

SELECTIA
SCOP : permite executarea unei prelucrari din doua posibile la un moment
dat in functie de valoarea unei conditii.
Se reprezinta in schema logica si pseuocod.
daca_cond atunci
P1
altfel
P2
sfarsit_daca

Schema logica:

cnd=
t

P1
P2

Mecanism de functionare : se evalueaza conditia la o valoare logica.Daca este


adevarat se executa P1 , daca nu , se executa P2.

Obs : Atat pentru decizie , cat si pentru selectie se executa in mod


conditionat o singura prelucrare.
Daca trebuie executate conditionat , pe oricare din ramuri
mai multe prelucrari , acestea trebuie cuprinse intre acolade intr-o
instructiune bloc.

SELECTIA MULTIPLA

87
Este o structura derivata. Ea poate fi inlocuita prin struturi decizionale ,
deoarece este implementata de instructiuni in limbaje de programare. Ea
poate fi prezentata in schema logica si pseudocod :

case_exp
v1 , p1
...........
vn , pn
end_case

V1 P1

V P2
2

Pn
Vn

Mecnism de functionare : se evalueaza expresia . Daca valoarea


obtinuta = V1 , atunci se executa P1 si se iese din instructiune . Daca nu , se
compara valoarea cu V2.Daca sunt egale se executa P2 . Daca nu , valoarea se
compara cu Vn , daca e egala se executa Pn si se iese din instructiune.

STRUCTURI REPETITIVE

88
Structurile repetitive permit executarea repetata a unei instructiuni.
Au asociate instructiuni in limbaj:

Instructiunea "while"

Permite executarea unei instructiuni cat timp o conditie este


indeplinita.
Este o instructiune cu test initial(se testeaza intai conditia, si apoi se
executa prelucrarea) si numar necunoscut de itratii(programatorul nu
cunoaste in momentul scrierii programului de cate ori se executa
prelucrarea).
Instructiunea "while" implementeaza structura logica
"cat_timp/sfarsit_cat_timp", care se reprezinta astfel:
Pseudocod:
Cat_timp conditie executa
P
Sfarsit_cat_timp

Schema logica:

Da
Cond=T

N P
u

Mecanism de functionare:
- Se evalueaza conditia la o valoare logica;
- Daca este adevarata, se executa prelucrarea P si se revine la testul
conditiei ;
- Daca nu, prelucrarea nu se executa niciodata.

Observatii :

89
- Daca conditia nu este indeplinita de la inceput, preucrarea nu se
executa niciodata.
- Programatorul are obligatia de a initializa corect variabilele necesare
instructiunii respective(initializarea se face prin atribuire sau prin
citire de la tastatura sau din fisier).
- Programatorul are obligatia de a transforma conditia din adevarata in
falsa dupa un numar finit de iteratii(in caz contrar, rezulta o bucla
infinita).Modoficarea se realizeaza prin incrementari, decrementari
sau citiri da la tastatura si fisier.
- Nu se pune ";" dupa paranteza inchisa.

Instructiunea este implemetata in limbajul de programare C++ astfel :


while(conditie)P ;
1.)Calculati suma primelor n numere naturale folosind instructiunea “while”.
C++:
#include <conio.h>
#include<iostream.h>
#include<stdio.h>
void main ( )
{
int n , s ,i ;
cout<<”\n”;
cout<<”n=”;
cin>>n;
s=0;
i=1;
while (i<n)
{
s=s+i
i=i+1
}
cout<<”s=”<<s<<’’ ’’;
getch ( );
}

90
Instructiunea "for"

"For" permite executarea unei prelucrari de un numar cunoscut de ori.


Este o instructiune cu test initial si numar cunoscut de iteratii.
Implementeaza structura logica "pentru/sfarsit_pentru".
Blocul “initializare” realizeaza initializarea contorului cu o valoare
initiala. Sunt posibile si alte initializari necesare in program.
Blocul “conditie” testeaza conditia. De regula, conditia este “contor <
valoare finala”.
Observatie: Repetitiva poate lucra si descrescator, caz in care conditia
se schimba.
Blocul “incrementare” realizeaza cresterea contorului cu o unitate in
mod automat.

Se implementeaza in pseudocod astfel:


Pentru k=v1, vf executa
P
Sfarsit_pentru

Schema logica :

K=vi
Da

K<vf
K=k+1

Nu P

Mecanism de functionare:
- Se initializeaza contorul cu o valoare initiala;
- Se evalueaza conditia “contor < valoare finala”;
- Daca este adevarat, se executa prelucrarea P si contorul creste
automat cu o unitate;
- Daca nu, iese din instrucrtiune.

91
Observatii :
- Se executa in mod repetat o singura prelucrare. Daca trebuie
executate mai multe prelucrari, acestea se cuprind intre acolade, intr-
o instructiune bloc.
- Nu se pune ";" dupa paranteza inchisa ")" a instructiunii "for",
deoarece se executa de n ori o instructiune vida.
- Se pune " ;" dupa o prelucrare.
- Pot fi folosite si contoare de tip real.

Instructiunea este implemetata in limbajul de programare C++ astfel :


for(initializare, conditie, incrementare)P ;

Exemplu:
Calculati suma primelor n numere naturale .
C++ :
#include <conio.h>
#include<iostream.h>
#include<stdio.h>
void main ( )
{
int n, i , s ;
clrscr ( );
cout<< ’’n= ”;
cin>>n ;
s=0 ;
for ( i=1 , i<n , i++ )
s=s+i ;
cout<<s ;
getch ( );
}

92
Instructiunea " do while"

Permite executarea unei instructiuni cat timp o conditie este


indeplinita.
Este o instructiune cu test final(se executa mai intai prelucrarea , si
apoi are loc testarea conditiei) si numar necunoscut de
itratii(programatorul nu cunoaste in momentul scrierii programului de cate
ori se executa prelucrarea).
Instructiunea "do while" implementeaza structura logica "executa /
cat_timp", care se reprezinta astfel:
Pseudocod: Schema logica:
Executa
P
P
Cat timp conditie.

Cond=T

Mecanism de functionare:
- Se realizeaza prelucrarea P;
- Se evalueaza conditia “contor < valoare finala”;
- Daca este adevarat, se reexecuta prelucrarea , daca nu, iese din
instrucrtiune.

Observatii :
- Se executa in mod repetat o singura prelucrare. Daca trebuie
executate mai multe prelucrari, acestea se cuprind intre acolade, intr-
o instructiune bloc.
- Nu se pune ";" dupa paranteza inchisa ")" a instructiunii "for",
deoarece se executa de n ori o instructiune vida.
- Se pune " ;" dupa o prelucrare.
- Pot fi folosite si contoare de tip real.

Instructiunea este implemetata in limbajul de programare C++ astfel :


Do
{

93
P
}
while cond.

1.)Calculati suma primelor n numere naturale.


C++:
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main( )
{
int n , s ,i
cout<<”n=”;
cin>>n;
s=0;
i=1;
do
{
s=s+i;
i=i+1;
}while (i<=n)
cout<<s;
}

94

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