Professional Documents
Culture Documents
Date de iesire
(Ce se d)
Program C++
(Ce se cere)
Definiie 3: Descrierea unui algoritm de rezolvare a unei probleme sau a unei situaii date ntr-un
limbaj de programare se numeste program sau cod surs.
Cele mai importante proprieti ale unui algoritm sunt urmtoarele:
Corectitudinea - este proprietatea algoritmului de a furniza o soluie corect a problemei
date. n acest sens este de dorit ca algoritmii s se bazeze pe fapte i relaii matematice
demonstrabile.
Caracterul univoc sau deterministic - plecnd de la un set de date iniial anume,
rezultatul este unic, sau altfel spus, repetarea execuiei algoritmului duce ntotdeauna la
aceleai rezultate.
Generalitatea - este proprietatea unui algoritm de a rezolva o clas sau categorie de
probleme, i nu doar o singur problem particular. Spre exemplu, un algoritm care
rezolv doar ecuaia x2 + 5x 6 = 0 este mai puin general dect unul care rezolv ecuaia
de gradul II care are urmtoare form general ax2 + bx + c = 0, oricare ar fi valorile lui
a,b,c.
Un compilator este un program (sau set de programe) care traduce textul scris ntr-un limbaj de programare (limbajul surs low level) ntr-un alt limbaj de calculator (numit limbaj inthight level). Sursa original se numete de obicei cod surs iar rezultatul cod obiect. n general codul surs este compilat pentru a crea un program executabil.
START
STOP
Pentru ntocmirea unei scheme logice corecte sunt necesare respectarea unor anumite
reguli dup cum urmeaz:
Orice schem logic se ntocmete de sus n jos;
Legtura intre blocurile schemei se face numai prin sgei, pentru a stabili sensul de
parcurgere;
n cazul ntlnirii unui bloc de decizie se precizeaz deasupra liniilor de legtur cnd
expresia
Structurile fundamentale din programarea structurat sunt structura liniara, structura alternativa i structurile repetitive.
Aplicaii practice
1. Un algoritm este un limbaj de programare?
a. Adevrat
b. Fals
2. Cu ajutorul unui calculator se pot prelucra urmtoarele tipuri de informaii:
a. Imagini
b. Documente
c. Numere
d. Cri
3. Descrierea unui algoritm se poate face prin:
a. Limbaj natural
b. Limbaj de programare
c. Limbaj pseudocod
d. Nici un rspuns nu e corect
4. Limbajul pseudocod este un limbaj de programare?
a. Fals
b. Adevrat
5. Datele de intrare sunt si date de ieire?
a. Adevrat
b. Fals
6. Complexitatea unui cod sursa a unui program este masurat prin numrul de linii de cod
scrise?
a. Adevrat
b. Fals
7. Corectarea erorilor de compilare implic automat si corectarea erorilor de gndire?
a. Adevrat
b. Fals
8. Datele de ieire reprezint acele valori obinute la terminarea unui algoritm?
a. Adevrat
b. Fals
9. Limbajul pseudocod este:
a. Un cod fals
b. Un limbaj intermediar de scriere a algoritmilor i care face trecerea de la limbajul
natural la cel de programare
c. Un limbaj nefolositor
d. Nici un rspuns nu e corect
10. Pentru a verifica corectitudinea funcionrii unui program acesta trebuie testat cu:
a. Valorile pentru care a fost gndit n etapa de analiz
b. Cu orice fel de valori
c. Cu valori speciale identificate pentru cazurile limit
d. Nici un rspuns nu e corect.
11. Enumerai proprietile unui algoritm:
1............................. 2................................ 3................................... 4................................
5............................. 6................................ 7...................................
12. Precizai care este diferena ntre scrierea algoritmului n limbaj pseudocod fa de
limbajul de programare. (Precizai avantajele i dezavantajele)
13. Care sunt deosebirile dintre erorile de compilare si erorile de gndire?
14. Definiti urmtorii termeni:
a. Complexitatea unui algoritm
b. Operaia de compilare
c. Limbaj de programare
d. Limbaj natural
ASCII este acronimul pentru American Standard Code for Information Interchange, ceea ce nseamn "Codul Standard
American pentru Schimbul de Informaii". ASCII reprezint un sistem de codificare a caracterelor bazat pe alfabetul englez.
Codurile ASCII reprezint caractere text pentru calculatoare, echipamente de comunicaie i echipamente care lucreaz cu text.
Setul de caractere ASCII conine 128 de caractere: litere mari i mici, numere, elemente de punctuaie i coduri de control.
K1 1
K1 0
a. comutatorul K1 nchis,
echivalentul valorii 1
trece curent electric
de la punctul A la B
b. comutatorul K1 deschis
echivalentul valorii 0
nu trece curent electric
de la punctul A la B
Definiie 3: Un octet(byte) este alctuit dintr-un grup de 8 bii i orice informaie poate fi
memorat utiliznd ntotdeauna un numr ntreg de octei, msurndu-se n multipli de
octei(1024 octei= 1Kb, 1024 Kb=1Mb, etc).
rotunjire datorat calculelor aritmetice inexacte efectuate de calculator. Eroarea de rotunjire face
parte din categoria erorilor inevitabile dar consecinele sale difer de la o problema la alta, de la
o strategie de rezolvare la alta. O singura operaie aritmetic efectuat de calculator cu numere
reale va da de cele mai multe ori un rspuns cu un grad relativ mare de precizie.
Pentru reprezentarea numerelor n calculator se folosesc dou formate de reprezentare:
formatul cu virgul fix:
partea ntreag. partea zecimal
de exemplu:12.351 sau -54.789
formatul cu virgul mobil: s-a impus datorit necesitii de a reprezenta n sistemele de
calcul numere foarte mari sau foarte mici cu un grad de precizie ridicat. La baza acestui
mod de reprezentare se situeaz reprezentarea numerelor reale cu ajutorul mantisei(indic
ordinul de mrime al numrului printr-o putere a bazei) i exponentului exponentul
(mrimea numrului n cadrul ordinului respective):
mantisEexponent.
Mantisa n reprezentarea normalizat este un numr subunitar, E reprezint valoarea
bazei 10, iar exponentul este un numr ntreg care stabilete valoarea numrului real. De
exemplu: numrul real -102.224 scris n virgul fix va fi egal cu 0.102224E3 n virgul
mobil.
Reprezentarea caracterelor (valorilor alfanumerice)
n cazul reprezentrii caracterelor, exist un standard internaional care definete
numerele, reprezentabile pe un octet, corespunztoare fiecrui caracter n parte, numit standardul
ASCII1. n acest mod sunt grupate un numr de 256 de caractere, fiecrui caracter fiindu-i asociat
cte un numr natural din intervalul [0,255], numr care poart denumirea de cod ASCII.
Astfel:
Caracter
Codul ASCII
literele mari A...Z
au coduri ntre 65...90
literele mici a...z
au coduli ntre 97...122
cifrele 0...9
au coduri ntre 48...57
Aplicaii practice
1. Datele de intrare reprezint:
a. Rezultatele ateptate i obinute prin prelucrarea unor valori cu ajutorul unui
algoritm de calcul
b. Valori constante pe toat durata de execuie a algoritmului
c. Un set de valori iniiale , cunoscute i care reprezint punctul de plecare n
rezolvarea unei probleme
d. Nici un rspuns nu este corect
2. O variabil se caracterizeaz prin:
a. .....................................
b. .....................................
c. .....................................
d. .....................................
3. Valoarea unei variabile este:
a. Format din unul sau mai multe caractere cu condiia ca primul caracter s nu fie
cifr
b. O mulimea de valori posibile
c. O locaie din memoria calculatorului
d. Valoarea efectiv pe care o are la un moment dan interiorul codului surs.
4. Un bit este alctuit din 8 octei?
a. Adevarat;
1
ASCII este acronimul pentru American Standard Code for Information Interchange, ceea ce nseamn "Codul Standard
American pentru Schimbul de Informaii". ASCII reprezint un sistem de codificare a caracterelor bazat pe alfabetul englez.
b. Fals
5. Determinati urmtoarele valori echivalente:
a. 1024 byte reprezint ......................Mb;
b. 1024 Mb reprezint...............Gb;
c. 1Gb este egal cu ...................octei;
d. 1 octet este format din..............biti.
6. Reprezentai pe un octet urmtoarele numere naturale:
a. 85
b. 200
c. 15
d. 255
7. Care sunt valorile naturale reprezentate n urmtorii octei:
a. 10011100
b. 11000011
c. 10010000
d. 11110000
8. Reprezentai urmtoarele numere ntregi pe un octet:
a. -15
b. 24
c. -12
d. 30
9. Pentru reprezentarea numerelor ntregi n memoria calculatorului se utilizeaz primul bit
din reprezentare(cel mai din stnga) ca bit de semn. Astfel, daca acesta are valoarea 1
atunci numrul respectiv va fi negativ?
a. Adevarat;
b. Fals.
10. Transformai urmtoarele numere reale din formatul n virgul fix, n formatul n virgul
mobil:
a. 12.21
b. -56.98
c. 0.34
d. 3456.089
11. Transformai urmtoarele numere reale scrise n virgul mobil n formatul virgul fix:
a. 0.76E-2
b. 0.543265644E5
c. 0.8700077E2
d. -0.347611E-6
12. Care este codul ASCII pentru urmtoarele caractere:
a. A are codul ................., D are codul..................,V are codul......................;
b. 0 are codul..................., 7 are codul..................,9 are codul .......................;
c. b are codul.................., f are codul..................., x are codul........................
13. Numrul de caractere din codul ASCII extins este de 256?
a. Adevarat
b. Fals
14. Un caracter ocup n memorie
a. 2 octei;
b. 1 octet;
c. 4 octeti;
d. 256 de octei.
15. Pentru orice informaie se aloc n memoria calculatorului un numr ntreg de octei?
a. Adevarat;
b. Fals.
Setul de caractere
n limbajul C++ setul de caractere utilizat pentru scrierea programelor este setul de
caractere al codului ASCII:
litere mari i mici ale alfabetului englez
cifrele sistemului zecimal
semnele matematice i de punctuaie i separatori: +,-,*,/,%,<,>,=,#,!,&,|,?,^,(,),[,],{,},;
Separatori i comentarii
Separatorii au rolul de a delimita unitile lexicale dintr-un program. Iat lista separatorilor
admii n limbajul C++:
(,) parantezele rotunde ncadreaz lista de parametrii a unei funcii, sau precizeaz
ordinea de efectuare a operaiilor pentru evaluarea unei expresii.
{ } acoladele ncadreaz instruciunile compuse, care se mai numesc i blocuri.
[ ] parantezele drepte ncadreaz dimensiunile tablourilor
" " ghilimelele ncadreaz irurile de caractere
' ' apostrofii ncadreaz un singur caracter
; fiecare instruciune se ncheie cu caracterul ;
/* */ comentariile sunt ncadrate de caracterele /* i */ sau dac dorim ca un singur rnd
din codul surs sa fie comentat, sau n dreptul unei instruciuni s apara un comentariu
folosim caracterele //.Comentariile sunt texte care vor fi ignorate n momentul execuiei
programelor, dar au rolul de a clarifica si a face un cod surs mai clar pentru cel care
citete acel cod.
Identificatori
Definiie1: Identificatorii sunt acele constructii care au rolul de a denumi elemente ale
programului si reprezint nume de: constante, variabile, funcii, etc.
Din punct de vedere sintactic un identificator este constituit dintr-o succesiune de litere
mari sau mici ale alfabetului englez, cifrele sistemului zecimal si caracterul _, cu condiia ca
primul caracter s nu fie o cifr.
Spre exemplu:
Identificatori corect scrii
Identificatori greit scrii
max_1
nume prenume
citire_vector
1max
_unu
a+b
Observaii:
1. un identificator poate avea orice lungime, dar sunt luate n considerare doar primele 31 de
caractere
2. n limbajul C++ se face diferenta dintre literele mari i literele mici, din acest punct de
vedere spunem c limbajul este case-sensitive (identificatorii max_1 i Max_1 sunt
diferii).
3. este recomandat ca identificatorii folosii s fie sugestivi, pentru a nu apela la comentarii
pentru a ntelege scopul n care este folosit un identificator. Este util s construim
identificatori prin compunerea mai multor cuvinte, i recomandat este ca iniiala fiecrui
cuvnt s fie majuscul (Citire_Vector, Afisare_Matrice)
conio.h - este un vechi fiier antet, folosit de vechile compilatoare C pentru a realiza
interfata utilizatorului(cele mai folosite funcii definite n biblioteca conio.h sunt
clrscr()-sterge ecranul cu toate datele afiate n urma execuiei unui program,
getch() citeste de la tastaur un caracter, dar caracterul citit nu este afisat pe ecran,
se utilizeaz n situaia n care dorim sa oprim n anumite puncte un program n
execuie pentru a putea vedea i analiza informaiile afisate; dup apasarea oricrei
taste programul i continu execuia cu urmtoarea instruciune)
math.h este un fiier care face din biblioteca standard a limbajului C, unde sunt
definite funciile matematice (cum ar fi radical din x sqrt(x), ridicare la putere
pow(a,b), modulul unui numr abs(a),funciile trigonometrice, etc.
fstream.h-este un fiier n care sunt definite funciile de baz pentru lucru cu fiiere
text. Stream-urile implicite tastaura i monitorul se vor schimba n fiiere text de
intrare sau de iesire.
Dup includerea n program a fiierelor header urmeaz o seciune rezervat definirii de
tipuri de date i variabile globale.
Definiie 2: Definirile globale de variabile se fac la nceputul programului si acestea vor fi
cunoscute n toate funciile din program.
Definiie 3: Definirile locale de variabile se fac n cadrul unei fucii i ele sunt cunoscute doar n
funcia n care au fost definite.
n cazul programelor simple, care conin doar funcia main() nu este necesar definirea
globala a variabilelor.
Funciile utilizator :
definirea oricrei funcii este constuit din antetul funciei si corpul funciei
antetul funciei conine numele funciei, tipul rezultatului pe care funcia l calculeaz i o
list de parametri prin care funcia comunic cu exteriorul ei, ncadrat ntre paranteze
rotunde:
tip_rezultat nume_functie(lista de parametri)
nu fac obiectul materiei de clasa a IX-a, ele vor fi nvate pe larg n clasa a X-a
Funcia main() este o fucie special, mai este numit i funcia principal sau programul
principal, prezena ei este obligatorie n orice program C++ deoarece execuia oricrui program
ncepe cu aceasta. Pentru nceput vom scrie doar programe constituite doar din funcia main().
Cel mai simplu program C++, care desigur nu are nici un efect este:
void main()
{ }
Unde:
1. bara de titlu n care este trecut mediul de programare Borland C++ for DOS
2. butoane pentru minimzare/ maximizare i inchidere aplicaie
3. bara de meniu a mediului de programare care conine opiunile: File, Edit, Search,
Compile, Debug, Project, Options, Windows, Help
4. zona de lucru n care veti scrie programele C++
5. meniul Help care conine semnificaia principalelor taste funcionale pentru operaiile de
baz:
F1- lanseaz help-ul limbajului C++ pentru a ne ajuta n cazul semnificaiei, modului
de execuie al unei comenzi, sintax, definire
F2- tast utilizat pentru a memora pe hard fiierul curent deschis i care conine
codul surs al programului scris in C++
F3-deschide o nou fereastr in care se va scrie un cod surs. Dup apasarea tastei F3
trebuie precizat numele noului fisier in forma nume.cpp
ALT+F9 realizeaz operaia de compilare a programului, adic o verificare din punct
de vedere sintactic a programului scris, si care va afia toate erorile din program.
F10 permite cursorul sa ajung n partea de meniu principal al limbajului C++
6. 1:1 precizeaz poziia curent a cursorului n zona de lucru, n cazul nostru linia 1,
coloana 1.
Pentru a afia aceast fereast pe intreg ecranul monitorului apasai ALT+ENTER.
Meniul File conine urmtoarele obiuni:
New - Deschide un nou fisier surs cu numele implicit
Noname00.cpp, sau ....001.cpp
Open... - deschide un fisier cpp existent pe disk
Save salveaz fisierul curent
Save as - realizeaz un lat fiier cu continut identic cu cel
curent, dar cu nume schimbat
Save all - salveaya continutul tuturor fisierelor deschise
Change dir...-permite schimbarea directorului curent in care
va fi memorat fisierul curent
Print tipareste la imprimanta continutul sursei programului
curent
Quit - inchide aplicaia Borland C++.
Etape n scrierea si execuia unui program C++:
1. se deschide aplicaia Borland C++
2. se stabileste directorul curent n care vom salva sursa programului folosind File
Change dir... selecie director dorit si la final se apasa butonul OK
3. Se deschide un fisier nou : File New sau direct apasnd tasta F3, caz n care trebuie sa
stabilim un nume pentru noul fiier
4. se scrie n zona de lucru codul surs al programului
5. se salveaz pe parcursul editrii programului si la terminarea acestei operaii continutul
programului utiliznd File Save sau tasta F2
6. Se verifica respectarea regulilor sintactice compilnd programul folosind combinaiile de
taste ALT+F9 sau din meniul superior alegnd Compile Compile
7. dup ce au fost corectate toate erorile de compilare, se mai salveaz o dat programul
scris dup care se lanseaz n execuie prin combinaia CTRL+F9 sau din meniul
superior RunRun
8. n aceast etap se verific corectitudinea funcionrii programului scris verificnd i
analiznd rezultatele afiate.
Tipul
Nr. octei
ocupai
ntreg
char
unsigned char
int
unsigned int
long
unsigned long
1 octet cu semn
1 octet fara semn
2 octeti cu semn
2 octeti far semn
4 octei cu semn
4 octei fara semn
float
double
real
long double
void
Domeniu de valori
Mod de reprezentare n
memorie
-128...127
codul ASCII al
0...255
caracterului.
-32768...23767
complement fa de 2
0...65535
n baza 2
-231..231-1
complement fa de 2
0.. 232-1
n baza 2
-38
38
[3.410 ...3.410 ] u
virgul mobil simpl
4 octei cu semn
[-3.410-38...-3.41038]
precizie
[1.710-308...1.710308] u
8 octei cu semn
virgul mobil dubl precizie
[-1.710-308...-1.710308]
-4932
4932
[3.410 ...3.410 ]
u
virgul mobil dubla
10 octei cu semn
[-3.410-4932...precizie
3.4104932]
Tip de dat special pentru care mulimea valorilor este vid
Observaii:
n cazul tipului de dat char, dei a fost introdus pentru stocarea datelor de tip
alfanumeric, el poate fi folosit n calcule numerice i logice n intervalul de valori pe care
le poate stoca.
n cazul datelor de tip char, int se pot folosi modificatorii de tip:
o unsigned pentru a obine doar numere naturale,
o long pentru a modifica dimensiunea reprezentrii
n limbajul C++ nu exist un tip de date special pentru valorile logice. Valoarea 0 este
asociat valorii de adevr fals, orice valoare diferit de 0 fiind asociat valorii de
adevr adevrat.
Pentru a declara o variabil n limbajul de programare C++ se folosete urmtoarea costrucie
sintactic:
denumire_tip_standard variabil;
Dac dorim s declarm mai multe variabile de acelai tip este suficient s le separm cu
aracterul virgula. Exemplu:
Declarare variabile
Efect
int a,b,c;
am definit trei variabile numite a,b, c de tip intreg
float x;
x variabil reala simpl precizie
char ch;
ch variabil de tip caracter
unsigned n;
variabila n este de tip int fr semn
unsigned long m; variabila m este de tip long fr semn
unsigned char p; variabila p este de tip char fara semn
double d;
variabila d este un numar real dubl precizie
operatori unari: se aplic asupra unui singur operand.Singurul operator aritmetic unar
definit n C++ este caracterul - scris n fata unui numr ntreg sau real si care determin
semnul valorii respective.
operatori binari: se aplic asupra a doi operanzi. Operatorii binari definii n limbajul
C++ sunt:
Operator
+
*
/
Semnificaie
adunare
scadere
nmulire
a/b
daca a i b sunt dou valori ntregi
determin ctul mpartirii
dac a i b sunt doua valori reale
determina rezultatul mpririi
determin restul mparirii a dou numere
nu se aplica valorilor float sau double
(a==b+1)||(b==a+1)
6
0
5
0
4
1
3
1
2
0
1
0
0
1
Valoare
25
b=2 0 0 0 0 0 0 1 0
2
Atunci rezultatul urmatoarelor operatii va fi:
1 1 1 0 0 1 1 0
~a
-26
a&b
0 0 0 0 0 0 0 0
0
a|b
0 0 0 1 1 0 1 1
27
a^b
0 0 0 1 1 0 1 1
27
A<<b
0 1 1 0 0 1 0 0 25*22=100
a>>b
0 0 0 0 0 1 1 0
25/22=6
Operatori de atribuire
Operatorii de atribuire sunt operatori binari care permit modificarea valorii unei variabile.
Limbajul C++ are un singur operator de atribuire simplu (=) i 10 operatori de atribuire compui
cu ajutorul operatorului de atribuire simplu.
Operaia de atribuire simpl are urmtoarea sintax:
variabil = expresie;
Efect:
se calculeaz valoarea expresiei i se obine un rezultat;
rezultatul se memoreaz la adresa variabilei.
Efect
a are valoarea 32
a are valoarea 28
a are valoarea 60
a are valoarea 15
a are valoarea 4
a i b au valoarea 60
Evaluarea expresiilor
Evaluarea unei expresii presupune determinarea valorii acelei expresii, prin nlocuirea n
expresie a fiecrei variabile cu valoarea ei i a fiecrei funcii cu valoarea returnat de funcia
respectiv i efectuarea operaiilor precizate de operatori. n evaluarea unei expresii se ine cont
de :
Existena parantezelor
Asociativitate
Prioritatea operatorilor
Etape n evaluarea unei expresii:
Se vor calcula n primul rnd expresiile din interiorul parantezelor, ncepnd cu cele mai
interioare
n situaia n care avem o expresie fr paranteze atunci ordinea de evaluare este dat de
prioritatea operatorilor folosii
n cazul n care avem mai multi operatori de aceiai prioritate , se va ine cont de
asociativitatea operatorilor.
n limbajul C++ operatorii se vor asocia de la stnga la dreapta, excepie fcnd operatorul de
atribuire, operatorii unari i condiionali care se asociaz de la dreapta la stnga. n situaia n
care operanii nu au acelai tip, atunci pe parcursul evalurii expresiei se vor realiza n mod
automat o serie de conversii implicite de tip dup urmatoarea regul: operandul care are un
domeniu de valori mai mic va trece n urma conversiei implicite la tipul operandului care are cel
mai mare domeniu de valori.
*=
/=
^=
%=
+=
- =
|= <<= >>=
&=
Asociativitate
Dreapta stanga
Prioritate
Prioritate maxima
stanga dreapta
Dreapta stanga
Dreapta stanga
Prioritate minima
Aplicaii practice
1. Completai spaiul punctat pentru x =129:
a. Numrul x are .......... cifre. Notm numrul de cifre cu nr.
b. Numerele formate din nr cifre aparin intervalului nchis ........................................
c. Suma cifrelor numrului x este .................................................................................
d. Media aritmetic a cifrelor numrului x este ............................................................
e. Ctul mpririi numrului x la 4 este .......................................................................
f. Restul mpririi numrului x la 4 este ......................................................................
g. Ctul mpririi numrului x la 130 este....................................................................
h. Restul mpririi numrului x la 130 este..................................................................
2. Completai spaiul punctat cu expresiile matematice corespunztoare.
a. Numrul real x aparine intervalului nchis [10, 20] dac i numai dac
...................................................................................................................................
b. Numrul real x aparine intervalului nchis [a,b] U [c,d] dac i numai dac
...................................................................................................................................
c. Numerele naturale x i y sunt numere consecutive dac i numai dac
...................................................................................................................................
d. Un numr natural x este impar dac i numai dac restul mpririi numrului la 2
este.............................................................................................................................
e. Dou numere naturale x i y sunt ambele nenule dac i numai dac
...................................................................................................................................
f. Un numr x este strict pozitiv dac i numai dac
...................................................................................................................................
g. Trei numere a, b, c sunt n ordine strict cresctoare dac i numai dac
...................................................................................................................................
h. Trei numere naturale a, b, c sunt pitagorice dac
...................................................................................................................................
i. Trei numere reale a, b, c pot fi laturile unui triunghi dac
...................................................................................................................................
3. Calculai rezultatul urmtoarelor expresii:
a. 15340:20+3215-139
c. 5075-(125-(75-(7+18)))
b. (((7x+34)%17+18)/5-12)*8
d. (((512/518)-25%2)3)2
4. Care este rezultatul urmtoarelor expresii?
a. (77+5)/3*2
c. 7+(7+(7+7%2))/3
b. (49+63)/7/4
d. 72/9+9%4
5. Fie urmatoare declaraie: int a;Care va fi rezultatul functiei sizeof(a)?
a. 1
b. 2
c. 4
d. 0
6. Fie urmtoarea declaratie de variabile: int a=2,b=3; Care va fi rezultatul expresiei
(a+b)/2?
a. 2.5
b. 3
c. 2
d. 5
7. Fie urmtoarea declaratie de variabile: int a=10,b=100; Care va fi rezultatul
expresiei (a+b+abs(a-b))/2?(observaie: abs(x) este o functie care calculeaz
valoarea absolut a parametrului dat x )
a. 10
b. 100
c. 1000
d. 50
8. Care este rezultatul urmtoarei expresii condiionale x%2==0 ? y=1: y=0 ?
a. 0
c. Expresie
b. 1
scris gresit
9. Daca avem urmtoarea declaraie de variabile int a=7, b=5, c=3; Care este
rezultatul urmtoarei expresii (float)(a+b+c)/2?
d. Eroare
a. 7.5
b. 7
c. 9
10. Fie urmtoarea declaraie de variabile long a=40, b=10; Calculai valorile expresiilor:
a. a+=b;
c. a*=b;
b. a-=b;
d. a=b*2;
11. Expresia a<<b este echivalent cu:
a. a/2b;
c. a+2b;
b. a*2b;
d. a-2b ;
12. Fie dou variabile a i b de tip int. Scriei in limbajul C++ expresii logice care sunt
adevrate dac i numai dac:
a. a este numr par i b este numr
c. a i b sunt numere consecutive
impar
d.a este numar par si divizibil cu 3
b. a este egal cu b
13. Variabila x este de tip real. Care dintre urmtoarele C++ are valoarea 1 dac i numai
dac numrul real memorat n variabila x aparine intervalului (5,8]?
a. (x<8) && (x>=5)
c. (x>8) || (x<=5)
b. (x<=8) || (x>5)
d. (x<=8) && (x>5)
(Examen de Bacalaureat, Matematic Informatic, 2009)
14. Care dintre urmtoarele expresii C++ are valoarea 1 dac i numai dac numrul natural
nenul memorat n variabila x, de tip int, este divizibil cu 100?
a. x%10+x/10%10==0
c. x%10+x/10==0
b. x/100==0
d. x%10+x%10/10==0
(Examen de Bacalaureat, Matematic Informatic, 2009)
15. Care dintre urmtoarele expresii C++ are valoarea 1 dac i numai dac numrul natural
memorat de variabila x de tip int are exact dou cifre?
a. x/100==0
c. x/10!=0
b. x/100==0 && x%10==0
d. x/100==0 && x/10!=0
(Examen de Bacalaureat, Matematic Informatic, 2009)
16. Se consider variabila a care memoreaz un numr cu exact 6 cifre. Care dintre expresiile
C++ de mai jos are ca valoare numrul format din cele dou cifre din mijloc ale valorii
memorate n a?
a. (a%100)/100
b. a/100%100
c. a/1000+a%1000
d. a/100%10+a/1000%10
(Examen de Bacalaureat, Matematic Informatic, 2009)
17. Care dintre urmtoarele expresii C++ are ca valoare cel mai mare dintre numerele
naturale nenule, cu cel mult 4 cifre fiecare, memorate n variabilele ntregi a i b?
a. (a+b+abs(a-b))/2
c. (a+b-abs(a-b))/2
b. a+b+abs(a-b)/2
d. (a+b-abs(a+b))/2
(Examen de Bacalaureat, Matematic Informatic intensiv, 2009)
18. Variabilele a, b i c, de tip int, pot fi iniializate cu oricare numere naturale impare
distincte. tiind c c este divizor al lui a, iar b nu este multiplu al lui c, care dintre
urmtoarele expresii scrise n C++ are valoare 1?
a. !((a%c!=0)||!(b%c!=0))
b. (a%c!=0)&&!(b % c!=0)
c. (a%c!=0)||!(b%c!=0)
d. !(c%a!=0)&&(c%b!=0)
(Examen de Bacalaureat, Matematic Informatic intensiv, 2009)
19. Care este instruciunea prin care variabilei x i se atribuie valoarea sumei cifrelor
numrului natural format din exact trei cifre, memorat de variabila ntreag y?
a. x=y/100+y/10%10+y%10;
c. x=y%10+y%10/10+y/100;
b. x=y+y/10+y/100;
d. x=y%10+y%100+y%1000;
(Examen de Bacalaureat, Matematic Informatic intensiv, 2009)
20. Variabila ntreag n memoreaz un numr natural impar. Care dintre urmtoarele expresii
C++ are valoarea 1?
a. !(n%2)
c. n%2!=0
b. n%2==0
d. !((n+1)%2==0)
(Examen de Bacalaureat, Matematic Informatic intensiv, 2009)
Operaia de citire
Definiie 1: Citirea datelor reprezint operaia prin care una sau mai multe variabile
primesc valori prin introducerea lor de la tastatur sau prin extragerea lor de pe un suport
extern(adic dintr-un fiier text, acest lucru ns va fi studiat mai trziu n lecia despre fiiere).
Stream (flux) de intrare
datele de intrare curg din exterior(tastatura) n
interior (memoria calculatorului)
Memoria
calculatorului
Observaii:
datele de intrare din orice program se vor citi fie de la tastatur fie din fisier text
la citire valorile numerice care se citesc trebuie introduse de la tastatura, separate
de caractere albe(spaiu, Tab, Enter).
Operaia de afiare
Definiie 2: Prin afiarea sau scrierea datelor vom ntelege operaia prin care
rezultatele obinute prin prelucrarea datelor de intrare vor fi afiate pe ecranul monitorului, fie
vor fi memorate ntr-un fiier text pe un suport extern de memorare.
Stream (flux) de ieire
Memoria
calculatorului
n fiierul antet iostream.h este definit acest stream de ieire a datelor de la tastatur,
denumit cout (console output). Atunci cnd dorim s afim datelele le vom extrage din
fluxul de ieire, folosind operatorul de ieire <<. Din acest punct de vedere forma general a
operaiei de afiare este:
cout<<expresie;
Ca efect, se evaluez expresia, iar valoarea ei este convertit ntr-o succesiune de
caractere care vor fi afiate fie pe ecran fie in fisier. i operatorul de ieire poate fi utilizat
nlnuit atunci cand dorim sa afim mai multe date pe ecran:
cout<<expresie_1<<expresie_2<<expresie_3<<<<expresie_n;
Pentru ca afiarea unor date s se realizeze de la inceputul randului urmtor se va folosi
manipulatorul numit endl(end line).
De exemplu:
1.Se citesc de la tastatur dou numere ntregi a i b.
Scriei un program care calculeaz i afieaz pe ecran suma
lor.
Algoritm
Program C++
Rezultat afiat
citeste a,b
(numere ntregi)
scrie a+b
#include<iostream.h>
void main()
{ int a,b;
cout<<"a=";
cin>>a;
cout<<"b=";
cin>>b;
cout<<"Suma ";
cout<<<<a<<"+"<<b<<"="<<a+b;
}
citeste a
scrie abs(a)
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{ clrscr();
int a;
cout<<"a=";
cin>>a;
cout<<"Valoarea absoluta a numarului "<<a<<" este"<<abs(a);
}
Rezultat afiat
3. Scriei un program care s afiseze pe ecran:
*
**
***
****
*****
Algoritm
scrie
scrie
scrie
scrie
scrie
*
**
***
****
*****
Program C++
Rezultat afiat
#include<iostream.h>
#include<conio.h>
void main()
{ clrscr();
cout<<"*"<<endl;
cout<<"**"<<endl;
cout<<"***"<<endl;
cout<<"****"<<endl;
cout<<"*****"<<endl;
getch();
}
citeste a
separa ultima cifra
separa cifra zecilor
separa cifra sutelor
scrie ultima cifra
scrie cifra zecilor
scrie cifra sutelor
#include<iostream.h>
#include<conio.h>
void main()
{ clrscr();
unsigneg a, unitati,zeci,sute;
cout<<"a=";cin>>a;
unitati=a%10;
zeci=a/10%10;
sute=a/100;
cout<<"cifra unitatilor este "<<unitati<<endl;
cout<<"cifra zecilor este "<<zeci<<endl;
cout<<"cifra sutelor este "<<sute;
getch();
}
Rezultat afiat
5. Se citesc dou numere naturale care reprezint laturile
unui dreptunghi. Sa se calculeze i sa se afieze
perimetrul i aria dreptunghiului dat.
Algoritm
Program C++
citeste L
citeste l
calculeaza perimetrul
calculeaza aria
scrie perimetrul
scrie aria
#include<iostream.h>
#include<conio.h>
void main()
{ clrscr();
unsigned l, L, p, a;
cout<<"lungimea:";cin>>L;
cout<<"latimea:";cin>>l;
p=2*(l+L);
a=l*L;
cout<<"perimetrul este "<<p<<endl;
cout<<"aria este "<<a<<endl;
getch();
}
Rezultat afiat
c=a;
a=b;
b=c;
A
b. Starea final
Algoritm
citeste A
citeste B
scrie A,B (initial)
C=A
A=B
B=C
scrie A,B(final)
Program C++
#include<iostream.h>
#include<conio.h>
void main()
{ clrscr();
int A,B,C;
cout<<"A=";cin>>A;
cout<<"B=";cin>>B;
cout<<"Initial: A="<<A<<" si B="<<B<<endl;
C=A;
A=B;
B=C;
cout<<"Final:
A="<<A<<" si B="<<B<<endl;
getch();
}
Rezultat afiat
citeste A
citeste B
scrie A,B (initial)
A=A+B;
B=A-B;
A=A-B;
scrie A,B(final)
Program C++
#include<iostream.h>
#include<conio.h>
void main()
{ clrscr();
int A,B;
cout<<"A=";cin>>A;
cout<<"B=";cin>>B;
cout<<"Initial: A="<<A<<" si B="<<B<<endl;
A=A+B;
B=A-B;
A=A-B;
cout<<"Final:
A="<<A<<" si B="<<B<<endl;
getch();
}
Rezultat afiat
adunare si scadere putem realiza acelai lucru dac executm n ordine urmtoarele operatii de
atribuire:
Valoarea lui A
Valoarea lui B
Operatie
10
35
Valori iniiale
A=A*B
350
35
B=A/B
350
10
A=A/B
35
10
35
10
Valori finale
Algoritm
citeste A
citeste B
scrie A,B (initial)
A=A+B;
B=A-B;
A=A-B;
scrie A,B(final)
Program C++
#include<iostream.h>
#include<conio.h>
void main()
{ clrscr();
int A,B;
cout<<"A=";cin>>A;
cout<<"B=";cin>>B;
cout<<"Initial: A="<<A<<" si B="<<B<<endl;
A=A*B;
B=A/B;
A=A/B;
cout<<"Final:
A="<<A<<" si B="<<B<<endl;
getch();
}
Rezultat afiat
Probleme rezolvate
1. Se citesc de la tastatur dou numere ntregi. Scriei un
program care s determine care este cel mai mare numr.
Relaiile matematice care determin maximul i minimul dintre cele dou numere sunt:
(a b a b )
(a b a b )
max( a, b)
min( a, b)
2
2
Tinnd cont de aceste informaii putem scrie urmtorul program:
Algoritm
Program C++
citeste a
citeste b
scrie max(a,b)
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{ clrscr();
int a,b;
cout<<"a=";cin>>a;
cout<<"=";cin>>b;
cout<<"Valoarea maxima este:"<<(a+b+abs(a-b))/2;
getch();
}
Rezultat afiat
sau
citeste a
citeste b
scrie ma
a b
2
#include<iostream.h>
#include<conio.h>
void main()
{ clrscr();
int a,b;
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
cout<<"ma"<<(float)(a+b)/2<<endl;
getch();
}
Rezultat afiat
citeste a
scrie
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{ clrscr();
int a,b;
cout<<"a=";cin>>a;
cout<<"radical din "<<a<<" este"<<sqrt(a);
getch();
}
Rezultat afiat
4. Se citete de la tastatur baza b i nlimii h a unui
triunghi. Se cere s se calculeze aria triunghiului.
De la matematic tim ca aria unui triunghi atunci cand sunt cunoscute inaltimea si baza se
b h
face cu ajutorul relaiei: aria
, iar rezultatul acestei expresii este de tip real. Atunci:
2
Algoritm
Program C++
Citeste b
citeste h
scrie
b h
2
#include<iostream.h>
#include<conio.h>
void main()
{ clrscr();
int b,h;
cout<<"baza triunghiului :";cin>>b;
cout<<"inaltimea triunghiului :";cin>>h;
cout<<"Aria triunghiului este "<<(float)(b*h)/2;
getch();
}
Rezultat afiat
AB
xa
xb
ya
yb
xa
x
xb
ya
(-1, -1.5)
Algoritm
Program C++
citeste xa,xb
citeste ya,yb
scrie
xa
xb
ya
yb
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{clrscr();
float xa,ya,xb,yb;
cout<<"dati coordonatele punctului A:"<<endl;
cout<<"xa=";cin>>xa;
cout<<"ya=";cin>>ya;
cout<<endl;
cout<<"Dati coordonatele punctului B:"<<endl;
cout<<"xb=";cin>>xb;
cout<<"yb=";cin>>yb;
cout<<endl;
cout<<"Lunginmea segmentului AB este "<<endl;
cout<<sqrt(pow(xa-xb,2)+pow(ya-yb,2));
getch();
}
Rezultat afiat
Aplicaii practice
1. Se citesc de la tastatur dou numere ntregi. Scriei un program care s determine care
este cel mai mic numar numr citit.
Exemplu: dac a=40 i b=12 se va afia 12
2. Sa se determine ultima cifra a sumei a+b, unde a i b sunt dou numere de trei cifre
fiecare, date de la tastatur.
Exemplu: dac a=143 i b=125 suma lor este 268 i se va afia 8
3. Se citeste de la tastaur un numar a format din trei cifre. Scriei un program care
calculeaz i afieaz pe ecran suma cifrelor numrului dat.
Exemplu: daca a=468 suma cifrelor este 8+6+4=18 i se va afia 18
4. Se citeste de la tastaur un numar a format din trei cifre. Scriei un program care
calculeaz i afieaz pe ecran cea mai mare cifr din numrului dat.
Exemplu: daca a=731 se va calcula cu formulele matematice de mai sus
max(a,b,c)=max(7,3,1)=7 i se va afia pe ecran 7
5. Se citeste de la tastaur un numar a format din trei cifre. Scriei un program care
calculeaz i afieaz pe ecran numrul obinut prin inversarea cifrelor numarului dat.
Exemplu: daca a=592 se va afia 295
6. Se citeste de la tastaur un numar a format din trei cifre. Scriei un program care
calculeaz i afieaz pe ecran numrul obinut prin eliminarea cifrei din mijlocul
numarului dat.
Exemplu: daca a=371 se va afia 37
7. Fie a un numr format din cinci cifre a1a2a 3a4a5. S se afieze pe ecran un triunghi
format din cifrele numrului dat astfel:
a3
a2a3 a4
a1a2a3a4a5
8. Fie a un numr format din cinci cifre a1a2a 3a4a5. S se afieze pe ecran un triunghi
format din cifrele numrului dat astfel:
a1a2a3a4a5
a2a3 a4
a3
9. S se calculeze aria unui triunghi cunoscnd laturile a,b,c ale triunghiului. Indicaie:
pentru calculul ariei triunghiului se va utiliza formula lui Heron pentru calculul ariei:
aria=p(p-a)(p-b)(p+c), unde p este semiperimetrul triunghiului.
Exemplu: dac a=3, b=4 si c=5 atunci se va afia 6.
10. Perimetrul unui ptrat ete egal cu latura altui ptrat. tiind c suma perimetrelor este x s
se calculeze ariile celor dou ptrate
Exemplu: Pentru x=20 se va afia aria1=1 aria2 = 16
11. Se dau dou numere maturale a i b cu trei cifre fiecare. S se afieze numrul care are
suma cifrelor mai mare.
Exemplu: daca a=487 i b=912, atunci suma cifrelor numarului a este 19, iar suma cifrelor
numarului b este 12, deci pe ecran se va afisa 487.
12. Se citesc de la tastatur cinci numere naturale a1, a2, a3, a 4, a 5.Scriei un program
care s foloseasc o singur variabil auxiliar pentru a permuta circular valorile celor 5
variabile astfel:
a1 a2 a 3 a4 a5
a2 a3 a 4 a5 a1
a3 a4 a 5 a1 a2
a4 a5 a1 a2 a 3
a5 a1 a 2 a3 a4
a1 a2 a 3 a4 a5
Exemplu: dac a1=5, a2=6, a 3=7, a4=8, a5=9 atunci pe ecran se va afia:
56789
67895
78956
89567
85678
56789
13. Se dau de la tastatur dou numere naturale a i b, de cte patru cifre fiecare. Se cere s
se afieze numrul care are suma cifrelor mai mic.
Exemplu:dac a=5213 i b=3748, atunci suma cifrelor numrului a este
2+1+5+3=11, iar suma cifrelor numrului b este 8+7+4+3=22, atunci se va afia pe
ecran 5213.
14. Folosind caracterul * i spaierea deseneaz pe ecran urmtoarele figuri geometrice:
*
*
***
*
*****
*********
*******
*******
**********
*****
*
***
*
*
15. Care este efectul urmtorului program?
**************
*
*
*
*
*
C++
*
*
*
*
*
**************
#include<iostream.h>
#include<conio.h>
void main()
{clrscr();
int a,b;
cout<<"a=";cin>>a;
b=(a>=0) ? 1:-1;
cout<<b;
getch();
}
Structura alternativ
Structura alternativ este implementat n limbajul C++ de instruciunea IF. n continuare
vom prezenta modul de reprezentare a acestei structuri n limbaj pseudocod, n schem logic i
n limbajul de programare C++. Modul de execuie este identic pentru oricare din cele trei
reprezentri.
Auzim n viata de zi cu zi afirmaii de genul:
DAC am promovat la toate materiile, ATUNCI
ma voi duce in tabara,
ALTFEL
stau sa invat.
Se remarc aici trei cuvinte ce au un rol deosebit: DACA, ATUNCI, ALTFEL. Propozitia
are trei componente i anume:
o conditie, transcris prin am promovat la toate materiile, conditie pe
care o vom nota cu C;
o aciune transcris prin mesajul m voi duce n tabr, notata cu B1,
aciune asociata cu cuvntul ATUNCI, adic se execut dac i numai dac am
promovat la toate materiile;
o aciune transcris prin mesajul stau s nv, notat cu B2, aciune asociat
cu cuvntul ALTFEL, adic se execut dac i numai dac NU am promovat
la toate materiile
Sintetiznd cu notaiile de mai sus structura alternativ se poate reprezenta astfel:
Schema logic
Pseudocod
Instructiune C++
Nu
B2
Da
B1
dac c atunci
B1
altfel
B2
if(expresie logica)
instructiune1;
else
instructiune2;
Pot exista i cazuri particulare de utilizare a acestei structuri, atunci cand unul dintre cele
doua blocuri de instruciuni lipseste.
Cazul 1. Daca lipseste B2 atunci structura se reprezinta astfel:
Schema logic
Pseudocod
Instructiune C++
Nu
Da
B1
dac c atunci
B1
if(expresie logica)
instructiune1;
!C
Da
Instructiune C++
if(!expresie logica)
instructiune2;
B2
De exemplu dac valoarea variabilei x este 100 putem utiliza instructiunea if astfel:
1
2
if( x= =100)
cout<< valoare a lui x este 100;
Dac dorim s executm mai mult de o instruciune acestea trebuie grupate intre { , } astfel:
1
2
3
4
if( x= =100)
{ cout<< valoare a lui x;
cout<<x;
};
Daca apar si intruciuni care trebuie executate atunci cnd conditia este fals putem scrie asa:
1
2
3
4
5
6
if( x= =100)
{ cout<< valoare a lui x;
cout<<x;
};
else
cout<<valoarea lui x nu este 100
Pot exista i situaii n care structurile alternative sunt incluse unele in altele. In acest caz spunem
ca instruciunilie if sunt imbricate. Exista o regula de asociere a cuvntului else de if:
n situatia instructiunilor if imbricate, si atunci cand pentru
gruparea instruciunilor nu se folosesc acolade cuvantul else se
asociaz primului cuvant if aflat la stanga lui.(asemanator cu
asocierea inchiderii corecte a grupurilor de paranteze din
matematica).
n exemplul urmator este sugerat cum sunt imbricate 3 instructiuni if. Pentru a le putea identifica
usor ele sunt scrise cu aceiasi culoare (negru, albastru si portocaliu).
if(c1)
if(c2)
se executa cand c2 adevarata
if(c3)
instructiunea1;
else
instructiunea2;
se executa cand c1 adevarata
else
instructiunea 3
else
instructiunea 4;
Daca n aceasta schem grupm instruciunile cu acolade se poate schimba fundamental structura
programului:
if(c1)
if(c2)
se executa cand c2 adevarata
{ if(c3)
instructiunea1; }
else
instructiunea2;
se executa cand c1 adevarata
else
instructiunea 3
Se observ ca primul cuvant else este asociat cu cel de-al doilea if, acest lucru fiind
determinat de gruparea intre acolade a instructiunii if (c3), reprezentate pe desen cu portocaliu.
Aplicaii rezolvate
1. Se citesc dou numere ntregi a i b. S se determine valoarea
maxim dintre ele.
Se citesc valorile celor doua numere si valoare cea mai mare dintre ele va fi memorata n
variabila max. La sfarsit valoarea variabilei max va fi afisata pe ecran
Algoritm
Program C++
intregi a,b
citeste a
citeste b
daca a>b atunci
| max=a
|altfel
| max=b
|_
scrie max
#include<iostream.h>
#include<conio.h>
void main()
{clrscr();
int a,b,max;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b>>b;
if(a>b)
max=a;
else
max=b;
cout<<"Valoarea maxima este "<<max;
getch();
}
Rezultat afiat
cnd valoarea variabilei c este mai mare dect valoarea variabilei a, deci rezult c valoarea
maxim dintre cele trei numere este valoarea lui c;
Cazul 2: reprezentat n urmtorul desen:
cnd valoarea variabilei c este mai mic dect valoarea variabilei a (nu conteaz n acest
moment raportul dintre variabilele b i c), deci rezult c valoarea maxim dintre cele trei
numere este valoarea lui a.
Un raionament asemntor se realizeaz plecnd de la presupunerea c valoarea
variabilei a este mai mica decat valoarea variabilei b. Acest algoritm complet este sris mai jos:
Algoritm
intregi a,b
citeste a
citeste b
Citeste c
daca a>b atunci
| daca c>a atunci
| | max=c
| |altfel
| | max=a
| |_
|altfel
| daca c>b atunci
| | max=b
| |altfel
| | max=a
| |_
|_
scrie max
Program C++
#include<iostream.h>
#include<conio.h>
void main()
{clrscr();
int a,b,c,max;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
cout<<"c="; cin>>c;
if(a>b)
if(c>a)
max=c;
else
max=a;
else
if(c>b)
max=c;
else
max=b;
cout<<"Valoarea maxima este "<<max;
getch();
}
Rezultat afiat
Dar, acest mod de determinare a valorii maxime este greu de aplicat atunci cnd numrul
variabilelor crete la mai mult de trei. Pentru a obine un algoritm simplu de aplicat pentru
determinarea valorii maxime dintre oricate variabile se va proceda astfel:
Pas 1 : Compar prima dat valoarea variabilei a cu valoarea variabilei b, i dac
valoarea lui a este mai mare dect valoarea lui b interschimb valorile celor dou
variabile, obinnd n acest fel valoarea maxim dintre primele dou variabile n
variabila b.
Pas 2: Compar de aceasta data valoarea variabilei b cu valoarea variabilei c, i dac
valoarea variabilei b este mai mare decat valoare lui c interschimb valorile celor
dou variabile, obinnd astfel valoarea maxim dintre cele trei variabile n variabila
c.
Pas 3: afiez valoarea variabilei c ca fiind valoarea maxima dintre a,b si c.
Algoritm
Program C++
intregi a,b
citeste a
citeste b
citeste c
daca a>b atunci
| aux=a
| a=b
| b=aux
|_
daca b>c atunci
| aux=b
| b=c
| c=aux
|_
scrie max
#include<iostream.h>
#include<conio.h>
void main()
{clrscr();
int a,b,c,aux;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
cout<<"c="; cin>>c;
if(a>b)
{ aux=a;
a=b;
b=aux;
};
if(b>c)
{aux=b;
b=c;
c=aux;}
cout<<"Valoarea maxima este "<<c;
getch();
}
Rezultat afiat
reale a,b
citeste a
citeste b
daca a=0 atunci
| daca b=0 atunci
| | scrie Infinitate sol
| |altfel
| | scrie Imposibil
| |_
|altfel
| x=-b/a
| scrie x
|_
#include<iostream.h>
#include<conio.h>
void main()
{ float a,b,x;
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
if(a==0)
if(b==0)
cout<<"Exista o infinitate de solutii!";
else
cout<<"Ecuatie imposibila!";
else
{ x=-b/a;
cout<<"Solutia ecuatiei este "<<x;
}
getch();
}
Rezultat afiat
reale a,b
citeste a
citeste b
daca a=0 atunci
| daca b=0 atunci
| | daca c=0 atunci
| | scrie Infinitate sol
| |altfel
| | scrie Imposibil
| |_
| altfel
Program C++
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{ float a,b,c,x, delta,x1,x2;
clrscr();
cout<<"a="; cin>>a;
cout<<"b="; cin>>b;
cout<<"c="; cin>>c;
if(a==0)
if(b==0)
if(c==0)
cout<<"Exista o infinitate de
solutii!";
|
|_
else
cout<<"Ecuatie imposibila!";
else
{ cout<<"Ecuatie de gr I cu solutia ";
x=-c/b;
cout<<x;
}
else
{ delta=pow(b,2)-4*a*c;
if(delta<0)
cout<<"Ecuatia nu are solutii reale!";
else
if(delta==0)
{ cout<<"Ecuatia are solutii egale!;
cout<<x1=x2="<< -b/(2*a);}
else
{ x1=(-b+sqrt(delta))/2*a;
x2=(-b-sqrt(delta))/2*a;
cout<<"Ecuatia are solutii
reale!"<<endl;
cout<<"x1="<<x1<<endl;
cout<<"x2="<<x2 <<endl;
}
}
getch();
}
Rezultat afiat
Aplicaii practice
1. Care este efectul urmatorului program:
#include<iostream.h>
#include<conio.h>
void main()
{clrscr();
int a=3,b;
b=++a;
if(a==b)
cout<<"sunt egale !";
else
cout<<"sunt diferite!";
getch();
2. Fie algoritmul:
a. Care este rezultatul urmatorului algoritm daca real f,x
citeste x
x are valoarea 0 si 3?
b. Scrieti programul
algoritmului dat.
C++
corespunzator
real f,x
citeste x
daca x<-1 atunci
|
f x*x
|altfel
|
f 1/x
|_
scrie f
4. Care dintre urmtoarele instruciuni C++ sunt corecte sintactic dac x i y sunt dou
variabile de tip ntreg?
a. if (x < 2) && (x > - 5)
{x=x+1; y=y-1;}
c. if x < 2 && x >-5
{ x=x+1; y=y-1;}
b. if -5 < x < 2
{ x=x+1; y=y-1;}
d. if (x < 2 && x > -5)
{x=x+1; y=y-1;}
(Examen de Bacalaureat, Matematic Informatic intensiv, 2008)
5. Care dintre urmtoarele instruciuni C++ atribuie variabilei ntregi t valoarea -1 dac i
numai dac variabilele ntregi a i b sunt nenule i au semne diferite?
a. if ((a>0)||(b<0)) t=-1;
c. if (a*b<0) t=-1;
b. if ((a>0)&&(b<0)) t=-1;
d. if (a*b>0) t=-1;
(Examen de Bacalaureat, Matematic Informatic intensiv, 2008)
6.
n secvena alturat de instruciuni, variabilele i,j,k i y sunt y=1;
de tip ntreg. Pentru care dintre urmtoarele seturi de valori ale if (k>0)
if (i!=j)
variabilelor i,j i k variabila y va avea valoarea 1 n urma
y=0;
executrii secvenei?
else y=2;
a. k=0; i=5; j=5
c. k=10; i=5; j=5
7.
n secvena alturat de instruciuni, variabilele i, j, k, x if (k>0)
if (i!=j) x=0;
i y sunt de tip ntreg. Pentru care dintre urmtoarele
else x=1;
seturi de valori ale variabilelor i, j i k variabilele x i y else x=2;
vor primi valori diferite ntre ele n urma executrii acestei if (i!=j)
secvene?
if (k>0) y=0;
else y=2;
else y=1;
a. x i y primesc aceeai valoare indifferent
de valorile variabilelor i,j i k
c. k=10; i=5; j=5
b.
intreg x,y
x=122 y=0
daca x%10=x/10%10 atunci
|
y=y+1
|altfel
| y=y-1
|_
scrie y
d.
intreg x,y
x=10 y=100
daca x<y atunci
| x=x-y
| y=x+y
| x-y-x
|_
scrie x,y
Realizai apoi schema logic i programul C++ pentru fiecare din cele patru secvene de
algoritm.
9. tiind c variabila ntreac nr memoreaz valoarea 5, stabilii ce va afia urmtoarea
seven de instruciuni:
if(nr<6)
if(nr>3)
cout<<Bine;
else
cout<<Foarte bine;
else
cout<<Rau;
12. Scrieti un program care sa afiseze valoarea absoluta a unui numar intreg x citit de la
tastatura.
13. Se dau dou numere maturale a i b cu trei cifre fiecare. S se afieze numrul care are
suma cifrelor mai mare. Exemplu: daca a=487 i b=912, atunci suma cifrelor
numarului a este 19, iar suma cifrelor numarului b este 12, deci pe ecran se va afisa 487.
14. Se d un numr x, natural de trei cifre. S se verifice dac conine cifra 0.
15. Se dau doua numere intregi a si b. Afisati doar numarul mai mare.
16. Se dau trei numere intregi a, b, si c. Afisati doar numarul mai mic.
17. Se dau trei numere naturale a,b si c. Afisati in ordine crescatoare cele 3 numere.(ca tema
acasa reluati algoritmul pentru 4 numere)
18. Vom considera zilele saptamanii numerotate cu cifre de la 1 la 7.(Luni 1, Marti 2,...,
Duminica 7). Sa se scrie un algoritm care citeste de la tastatura un numar natural si
afisaza denumirea zilei din saptamana. In cazul in care numarul citit nu apartine
intervalului [1,7] se va afisa mesajul Date de intrare gresite!
19. Se da un numar a de trei cifre. Folosind criteriile de divizibilitate sa se precizeze daca
numarul este divizibil la 2, 3 sau 5.
20. Se citeste un numar natural de 3 cifre. Scrieti un program care afiseaza toate numerele
care pot obtine cu cifrele numarului dat.
21. Se citeste un numar natural de 3 cifre. Scrie un program care calculeaza suma si produsul
cifrelor sale.
22. Scriei un program care citete n variabila n nota unui elev obinut la examenul de
bacalaureat i afieaz situaia acestuia astfel:
a. PROMOVAT dac n 6, 10
b. RESPINS, dac n 1, 5
c. NEPREZENTAT, dac n=0
d. DATE ERONATE, altfel
23. Date dou numere, afiai-l pe cel mai mic. Exemplu : Date de intrare : 44 32 Date de
ieire : 32.
24. Se introduc vstele a doi copii. Afiai care copil este mai mare i diferena de vst
dintre cei doi. Exemplu: Date de intrare : 6 13 date de ieire : al doilea copil este mai
mare cu 7 ani.
25. Se introduc punctajele a doi sportivi. Afiai-le n ordine descresctoare. Exemplu: Date
de intrare 100 134 Date de ieire: 134 puncte 100 puncte.
26. Dintr-o cutie cu trei numere se extrag dou numere. Cunoscd suma celor dou numere
extrase, s se afieze numrul rmas n cutie. Exemplu : date de intrare : numere existente
in cutie 5 12 8 suma numerelor extrase 13 date de ieire : 12.
27. Se dau dou numere. S se nmuleasc cel mai mare cu doi i cel mai mic cu trei i s se
afieze rezultatele. Exemplu : date de intrare : 3 7 date de ieire : 9 14
28. Se introduc dou numere ntregi. S se testeze dac primul numr este predecesorul
(succesorul) celui de-al doilea i s se afieze un mesaj corespunztor. Exemple : date de
intrare : 2 4 date de ieire : Nu ; date de intrare : 5 6 date de ieire : Da.
BI
sau:
Da
BI
Mod de execuie:
Pas 1 :Se determin valoarea de adevr a condiiei notat C;
Pas 2: Dac este adevrat atunci se execut blocul de instruciuni notat BI i se revine la
pas1
Pas 3: Dac este fals atunci se prsete structura repetitiv.
Observaii:
Dac la prima evaluare a condiiei C valaorea de adevar este Fals, atunci blocul de
instruciuni BI nu va fi executat nici macar o singur dat ci se va prsi structura
repetitiv cu test iniial;
Evaluarea condiiei C se face la fiecare reluare a structurii si este recomandat ca forma ei
s fie ct mai simpl;
Utilizarea acestei structuri este recomandat atunci cnd nu se cunoate numrul de
repetri ale buclei i atunci cnd condiia poate avea valoarea fals nc de la intrarea n
structur;
Blocul de instruciuni notat BI poate conine orice fel de structur de control, deci i o
alt structur repetitiv cu test iniial(while-uri imbricate);
Buclele infinite nu vor fi sesizate ca erori de compilare;
Utilizatorul este obligat s fie atent n evitarea formrii de bucle infinite, i s verifice ca
dup un anumit numr de repetri s existe premizele transformrii n Fals a valorii
condiiei C.
Pseudocod
execut
BI
ct timp C(adev)
BI
Nu
C
Da
Instructiune C++
do
instruciune;
while (expresie logic);
sau:
do
{ instruciune1;
instruciune2;
......................
instruciunen;
}
while (expresie logic);
Mod de execuie:
Pas 1 :Se execut blocul de instruciuni notat BI;
Pas 2: Se calculeaz valoarea de adevr a condiiei notate C;
Pas 3: Daca este adevrat atunci se revine la pas1
Pas 3: Dac este fals atunci se prsete structura repetitiv.
Observaii:
BI va fi executat cel puin o singur dat, atunci cnd la prima evaluare a condiiei C
rezultatul este Fals;
spre deosebire de structura repetitiv cu test iniial, n acest caz blocul de instruciuni BI
se execut cel puin o singur dat;
este recomandat utilizarea ei n situaiile n care nu se cunoate numrul de repetri ale
buclei i exist certitudinea executrii cel puin o singur dat a blocului de instruciuni;
utilizatorul este obligat s fie atent n evitarea formrii de bucle infinite i s verifice ca
dup un anumit numr de repetri s existe premizele transformrii n fals a valorii
condiiei C i deci se prseasc structura repetitiv;
Schema logic
Pseudocod
pentru contor=expr1; expr2; pas
BI
Limbajul C++
for(iniializare; condiie oprire; pas)
instruciune;
sau:
for(iniializare; condiie oprire; pas)
{
instruciune1;
instruciune2;
.............
instruciunen;
};
unde:
expr1- reprezint valoarea iniial a variabilei de tip contor
C
- condiia de oprire, sau valoarea final la care trebuie s ajung valoarea variabilei
contor
Pas - reprezint o valoare constant care are scopul de a modifica n progresie aritmetic
cresctoare/descresctoare valoarea variabilei contor
Mod de execuie
pas1 - se iniializez variabila contor cu valoarea expresiei expr1. Aceast operaie se
execut o singur dat;
pas 2 - se verific indeplinirea condiiei de oprire;
pas 3 - dac nu este ndeplinit condiia de oprire atunci se execut blocul de instruciuni
notat BI;
pas 4 - se adaug valoarea pasului la valoarea variabilei contor i se revine la pasul 2;
pas 5 dac condiia de oprire este ndeplinit atunci se ncheie execuia acestei structuri.
Observaii
dac pasul este pozitiv, n momentul n care valoarea variabilei contor devine mai
mare dect valoarea final atunci se va ncheia execuia structurii repetitive cu numr
fix de pai;
numrul de repetri ale blocului de instruciuni BI se calculeaz cu relaia:
valoare finala valoare initiala
numr de repetri=
1;
pas
dac valoarea iniial este egal cu valoarea final atunci Bi se va executa o singur
dat, indiferent de valoarea i semnul pasului;
dac valoarea iniial este mai mare dect valoarea final i pasul este pozitiv atunci
BI nu se va executa nici mcar o singur dat.
Linia contor=contorpas nu apare nici n limbajul pseudocod i nici n forma
instruciunii for, ea se subntelege i execut automat la fiecare nou repetare a
structurii.
Blocul de instruciuni poate fi alctuit din orice fel de instruciune a limbajului C++,
iar n condiia n care se dorete executarea mai multor instruciuni n cadrul
instruciunii for, atunci acestea trebuie grupate ntre acolade.
DO-WHILE
(structur repetitiv
cu test iniial)
(structur repetitiv
cu test final)
Instruciunea for poate fi nlocuit ntotdeauna de una dintre structurile repetitive while
sau do-while, dar nu ntotdeauna o structur while sau do-while poate fi nlocuit cu o
instruciune for. Atunci cnd realizai o conversie din instruciunea while n do-while trebuie sa
avei grij ca secvena de cod obinut dup conversie sa fie echivalent cu secvena iniial (s
se obin acelai rezultat).
De exemplu:
Fie urmtoarea secven de algoritm:
s=0;
pentru i=1, 10, +1
|
s=s+i
|_
scrie s
Dac nlocuim structura repetitiv cu numr fix de pai cu o structur repetitiv cu test iniial
atunci obinem urmtorul algoritm:
s=0
i=1
ct timp i<=10 execut
|
s=s+i
|
i=i+1
|_
scrie s
Aplicaii rezolvate:
1. Care este valoarea variabilei i la sfritul execuiei urmtorului program:
Surs C++
#include<iostream.h>
int i;
void main()
{ while (i<=5)
i++;
cout<<i;
}
Explicaii
variabila i definita global => i=0
valoarea lui va creste cu 1 pn
cnd condiia i<=5 va deveni fals
va fi afisata valoarea 6
Explicaii
variabila i definit global => i=0
valoarea lui va creste cu 1 pn
cnd condiia i<=5 va deveni fals
vor fi afiate urmtoarele valori:
1 2 3 4 5
Transformarea
citeste n
daca n<=10 atunci
|
executa
|
| afiseza n
|
| n=n+2;
|
|cat timp n<=10;
|
|
|
Explicaii:
Dac valoarea citit de la tastatur n cazul algoritmului dat este mai mare
dect 10 atunci programul nu afiseaz nimic
Dac valoarea citit de la tastatur este mai mica sau egal cu 10 atunci
programul afiseaz numerele de la n pn la 10 din doi n doi.
Daca n transformarea structurii ct timp n execut ct timp nu ineam cont
de modul de execuie diferit al acestora i nu foloseam structura dac,
pentru valori mai mari dect 10 algoritmii nu erau echivaleni
4. S se realizeze schema logic pentru urmtorul
algoritm:
B1
dac C1 atunci
| B2
|_
ct timp C2 execut
|
dac C3 atunci
|
|
B3
|
|altfel
|
|
B4
|
|_
|
B5
|_
B6
while
citete n
s=0
pentru i=1,n,+1
|
s=s+i;
|_
scrie s
citete n
s=0
i=1;
ct timp i<=n execut
|
s=s+i;
|
i=i+1;
|_
scrie s
do-while
citete n
s=0
dac n>=1 atunci
| i=1;
| execut
| |
s=s+i;
| |
i=i+1;
| |ct timp i<=n;
| |_
|_
scrie s
6. Dac valoarea citit pentru n este 8291, care va fi valoarea variabilei r, dup execuia
urmtoarei secvene de algoritm:
1.
2.
3.
4.
5.
6.
7.
8.
citete n
r=0
execut
|
r = (r*10+n%10)*10
|
n=n/100
|ct timp n>=10
scrie r
Pentru a determina valoarea variabilei r trebuie s executm programul pas cu pas, iar cel
mai simplu mod este de a urmri valorile variabilelor ntr-un tabel cu urmtoarea structur:
Linia
executata
1
2
4
5
4
5
8
n
8291
8291
8291
82
82
0
condiia n>=0
0
(0*10+1)*10=10
10
Adevarata
(10*10+2)*10=1020
1020
Falsa
Afieaz valoarea 1020
B1
execut
|
B2
|
dac C1 atunci
|
| B2
|
|altfel
|
| B3
|
|ct timp C2
B4
unde:
Rosu
scrie i
i=0
execut
|
i=i+1
|
scrie i
|ct timp i<=3
scrie i
pentru i=0,3,+1
| scrie i
scrie i
Se cere:
s se determine ce afieaz urmtoarele secvene de algoritmi
s se precizeze de cte ori se execut blocul de instruciuni ataat structurii repetitive
Scriei cte un program C++ pentru fiecare din cele trei secvene date.
Afieaz: 1 2 3 4 4
4 ori
Afieaz:1 2 3 4 4
4 ori
Afieaz: 0 1 2 3 4
4 ori
#include<iostream.h>
#include<conio.h>
int i;
void main()
{clrscr();
while(i<=3)
{i++;
cout<<i<<" ";
}
cout<<i;
getch();
}
#include<iostream.h>
#include<conio.h>
int i;
void main()
{clrscr();
do
{i++;
cout<<i<<" ";
}while(i<=3);
cout<<i;
getch();
}
#include<iostream.h>
#include<conio.h>
int i;
void main()
{clrscr();
for(i=0;i<=3;i++)
cout<<i<<" ";
cout<<i;
getch();
}
Aplicaii practice
21. Scriei algoritmul n pseudocod pentru urmtoarele scheme logice i identificai structurile de
control care le alctuiesc:
dac C1 atunci
|
dac C2 atunci
|
|
B1
|
|altfel
|
|
B2
|
|
ct timp C3 execut
|
|
B3
|
|
dac C4 atunci
|
|
|
B4
|
|
a.
ct timp C1 execut
|
daca C2 atunci
|
|
executa
|
|
|
B1
|
|
|cat timp C3;
|
|
|
|altfel
|
|
cat timp C4 executa
|
|
|
B2
|
|
|
B3
|
pentru i=vi,vf,+1
|
|
B4
|
execut
| B1
| pentru i=v1,vf,+1
| |
B2
|
| dac C1 atunci
| | ct timp C2 execut
| | |
B3
| |
| |altfel
| | B4
|
|ct timp C3
|
i=i+1
|
salt la rnd nou
4. Scriei programul C++ si precizai care este efectul urmtorului algoritm scris n limbaj
pseudocod, dac valoarea citit pentru variabila n este 7:
citete n
s=0
i=1
ct timp i<=n execut
| s=s+i
| i=i+1
scrie s
#include<iostream.h>
#include<conio.h>
int i,n;
void main()
{clrscr();
n=10;
for(i=1;i<=n;i++)
{ cout<<i<<" ";
n--;
}
getch();
}
a. 1 2 3 4 5 6 7 8 9 10
c. 10 9 8 7 6 5 4 3 2 1
b. 1 2 3 4 5
d. 5 4 3 2 1
Pe ecran se va afia:
a. A B C D E F
c. a f a f a f
b. i i i i i i
d. a b c d e f
a. 10 10
c. 9 10
b. 11
d. 10
11
9
a. 32
c. 16
b.34
d. nici un rspuns nu este corect
10. De cte ori se execut instruciunile cuprinse ntre cuvintele execut-ct timp din
umtorul algoritm:
m=1
x=1
execut
|
m=m*x
|
x=x+8
|ct timp m>=x;
a. de dou ori
c. o singur dat
b. niciodat
d. de opt ori
11. Precizai care este valoarea variabilei a, dup execuia urmtoarei secvene de algoritm:
m=5
a=20
execut
|
a=a-m
|
m=m+1
|ct timp m<=a;
a. 15
c. 0
b. 2
d. 9
12. Rescriei urmtoarele secvene de program C++, astfel nct buclele repetitive s fie nlocuite
cu instruciunea care implementez structura repetitiv cu test iniial:
S=0;n=9;
for(int i=1;i<=n;i++)
s=s+i;
cout<<s=<<s;
for(int i=1;i<=n;i++)
{ for(int j=1;j<=n;j++)
cout<<*;
cout<<endl;
}
13. Rescriei urmtoarele secvene de program C++, astfel nct buclele repetitive s fie nlocuite
cu instruciunea care implementez structura repetitiv cu test final:
int i=2;
int ok=1;
while(i<n/2 && ok)
if(n%i==0)
ok=0;
else
i++;
int s=0;
while(n!=0)
{ s=s+n%10;
n=n/10;
};
for(int i=100;i>=1;i--)
if(i%2==0)
cout<<i<< ;
for(char i='a';i<='f';i++)
cout<<i<<" ";
14. Rescriei urmtoarele secvene de program C++, astfel nct buclele repetitive s fie nlocuite
cu instruciunea care implementez structura repetitiv cu numr fix de pai:
int p=1, i=1;
while(i<n)
{ p=p*i;
i++;
};
char ch=a;
while (ch<=z)
{cout<<ch<< ;
ch++;
};
int i=1;
do{
int j=1;
do{
cout<<*;
j++;
}while(j<=n);
cout<<endl;
i++;
}while(i<=n);
int i=1;
while(i<=n)
{ int j=1;
do{
cout<<*;
j++;
}while(j<=n);
cout<<endl;
i++;
}
15. Specificai de cte ori se vor repeta instruciunile din bucla repetitiv i care va fi valoarea
variabilei i la sfritul urmtoarei secvene de algoritm. Scriei programul C++
corespunztor algoritmului dat.
i=1,
ct
|
|
s=0(numere ntregi)
timp (i<=5) execut
s=s+i
i=i+1
b. de 5 ori i i=6
d. de 5 ori si i=5
16. Specificai de cte ori se vor repeta instruciunile din bucla repetitiv i care va fi valoarea
variabilei i la sfritul urmtoarei secvene de algoritm. Scriei programul C++
corespunztor algoritmului dat.
i=0 (numar intreg)
ct timp i<1 execut
|
i=i+1
17. Specificai de cte ori se vor repeta instruciunile din bucla repetitiv i care vor fi valoarile
variabilelor s i c la sfritul urmtoarei secvene de algoritm. Scriei programul C++
corespunztor algoritmului dat.
c=100, s=0 (numere ntregi)
execut
|
s=s+c
|
c=s-10
|ct timp s<=c
b.4
d.1
nr=0
ct timp c>b execut
a=a-b
nr=nr+1
scrie nr, ,a
scrie n
Se cere:
a. Scriei valoarea ce se va afia dac se citesc, n aceast ordine, numerele 12, 7,
354, 9, 1630, 0.
b. Scriei programul C/C++ corespunztor algoritmului dat;
c. Desenai schema logic corespunztoare algoritmului scris n pseudocod.
22. Fie urmtoarea secven de algoritm:
citete a,b,c (numere naturale nenule)
dac a>b atunci
t=a; a=b; b=t
ct timp ab execut
dac c%a=0 atunci
scrie a
a=a+1
Se cere:
a. Scriei care sunt valorile ce se vor afia pentru a=10, b=20 i c=6;
b. Scriei programul C/C++ corespunztor algoritmului dat;
c. Desenai schema logic corespunztoare algoritmului scris n pseudocod.
23. Fie urmtoarea secven de algoritm:
citeste n,m (numere naturale)
ct timp nm execut
n=n+1
m=m-1
scrie n
Se cere:
a. Scriei valoarea care se afieaz dac se citesc numerele n=6 i m=12;
b. Scriei programul C/C++ corespunztor algoritmului dat;
c. Desenai schema logic corespunztoare algoritmului scris n pseudocod;
scrie m
Se cere:
a. Scriei valoarea care se afieaz dac se citesc numerele n=5172;
b. Scriei programul C/C++ corespunztor algoritmului dat;
c. Desenai schema logic corespunztoare algoritmului scris n pseudocod;
25. Fie urmtoarea secven de algoritm:
citete x (numr natural)
s=0
f=2
ct timp x>1 execut
p=0
ct timp x%f=0 execut
x=x/f
p=p+1
dac p0 atunci
s=s+p
f=f+1
Se cere:
a. Scriei valoarea care se afieaz dac se citesc numerele x=140;
b. Scriei programul C/C++ corespunztor algoritmului dat;
c. Desenai schema logic corespunztoare algoritmului scris n pseudocod;
26. Fie urmtoarea secven de algoritm:
s=0
citete v (valoare natural)
ct timp v 0 execut
a = v%10
b = [v/10]%10
s = s + a*10 + b
citete v
scrie s
Se cere:
a. Scriei valoarea care se afieaz dac se citesc, n ordine, numerele 114, 123, 517,
3312, 14, 412, 22, 0;
b. Scriei programul C/C++ corespunztor algoritmului dat;
c. Desenai schema logic corespunztoare algoritmului scris n pseudocod;
27. Fie urmtoarea secven de algoritm:
citete n,k (numere naturale, k9)
i = k
ct timp i > 0 execut
n = n/10
i = i-1
z = n%10
scrie z
Se cere:
a. Scriei valoarea care se afieaz dac se citesc numerele n=32506 i k=3;
b. Scriei programul C/C++ corespunztor algoritmului dat;
c. Desenai schema logic corespunztoare algoritmului scris n pseudocod;
28. Fie urmtoarea secven de algoritm:
citete x (numr natural nenul)
ct timp x>0 execut
citete y (numr natural)
dac x>y atunci
scrie x%10
altfel
scrie y%10
x = y
Se cere:
a. Scriei valoarea care se afieaz dac se citesc, n ordine, numerele 17 22 13 101
2 7 5 0;
b. Scriei programul C/C++ corespunztor algoritmului dat;
c. Desenai schema logic corespunztoare algoritmului scris n pseudocod;
29. Fie urmtoarea secven de algoritm:
citeste n,k
(numere naturale nenule)
t=0
ct timp n1 execut
dac n>k atunci
t=t+1
n=n-t
scrie t
Se cere:
a. Scriei valoarea care se afieaz dac se citesc n=7 si k=2
b. Scriei programul C/C++ corespunztor algoritmului dat;
c. Desenai schema logic corespunztoare algoritmului scris n pseudocod;
afieaz rezultatul
Aplicaii rezolvate
1. Se d un numr natural n. Se cere s se scrie un algoritm care
calculeaz suma cifrelor numrului dat.
Rezolvarea acestei probleme va urmri ablonul de rezolvare prezentat mai sus, tinnd
cont de faptul c atunci cnd avem de calculat o sum de termeni, variabila care va conine
rezultatul se va iniializa cu valoarea zero.
Algoritmul este:
citete n numr natural i reprezint numrul de prelucrat
s=0
va conine, la final, suma cifrelor numrului n, iniial va avea
valoarea zero
ct timp n>0 execut
c = n%10
extrag ultima cifr din numarul n
s = s+c
adun cifra separat la suma cifrelor numrului n
n = n/10
elimin din numrul n ultima lui cifr
Program C++
#include<iostream.h>
#include<conio.h>
int n,s,c;
void main()
{clrscr();
cout<<"n="; cin>>n;
while(n>0)
{ c=n%10;
s=s+c;
n=n/10;
}
cout<<"suma cifrelor este "<<s;
getch();
}
nr = nr+1
numr c am separat o cifr din numrului n
n = n/10
elimin din numarul n ultima lui cifra
Program C++
#include<iostream.h>
#include<conio.h>
int n,nr;
void main()
{clrscr();
cout<<"n="; cin>>n;
while(n>0)
{ nr++;
n=n/10;
}
cout<<"numrul cifrelor este "<<nr;
getch();
}
3. Se d un numr natural n. Se
cifrelor pare din numarul dat.
cere
se
calculeze
suma
Algoritmul este:
citete n numr natural i reprezint numrul de prelucrat
s=0
va conine, la final, suma cifrelor pare din numrului n, iniial
va avea valoarea zero
ct timp n>0 execut
c = n%10
// extrag ultima cifr din numrul n
s = s+c
// adun cifra separat la sum
n = n/10
//elimin din numarul n ultima lui cifr
Program C++
#include<iostream.h>
#include<conio.h>
int n,s,c;
void main()
{clrscr(); cout<<"n="; cin>>n;
while(n>0)
{ c=n%10;
if (c%2==0)
s=s+c;
n=n/10;}
cout<<"suma cifrelor pare este "<<s;
getch();
}
c = n%10
// extrag ultima cifr din numrul n
dac c >= cif_max atunci // dac ultima cifr este mai mare dect
cif_max = c
// cifra maxim, atunci pstrez valoarea ei
n = n/10
//elimin din numarul n ultima lui cifr
Program C++
#include<iostream.h>
#include<conio.h>
int n,c,cif_max;
void main()
{clrscr();
cout<<"n=";cin>>n;
while (n>0)
{c = n%10;
if( c>cif_max)
cif_max = c;
n = n/10;
}
cout<<"cifra maxima este ";
cout<<cif_max;
getch();
}
c = n%10
// extrag ultima cifr din numarul n
m = m*10+c
// adun cifra separat la numrului m modificnd i
n = n/10
// elimin din numrul n ultima lui cifr
Program C++
#include<iostream.h>
#include<conio.h>
int n,c,m;
void main()
{clrscr();
cout<<"n=";cin>>n;
while (n>0)
{ c=n%10;
m=m*10+c;
n=n/10;
}
cout<<"numarul cu cifrele inversate
este "<<m;
getch();
}
c = n%10
// extrag ultima cifr din numrul n
ok = 0
// presupunerea fcut nu este adevarat!
n = n/10
// elimin din numrul n ultima lui cifr
daca ok = 1 atunci
Program C++
#include<iostream.h>
#include<conio.h>
int n,c,0ok;
void main()
{clrscr();
cout<<"n=";cin>>n;
ok=1;
while (n>0 && ok)
{ c=n%10;
if (c%2==1)
ok=0;
n=n/10;
}
sau:
if (ok==1)
cout<<"Toate cifrele numarului dat
sunt pare ";
else
cout<<"NU toate cifrele numarului
dat sunt pare ";
getch();
}
c = n%10
// extrag ultima cifr din numrul n
ok = 1
// presupunerea fcut nu este adevarat!
n = n/10
// elimin din numrul n ultima lui cifr
dac ok = 1 atunci
Program C++
#include<iostream.h>
#include<conio.h>
int n,c,ok;
void main()
{clrscr();
cout<<"n=";cin>>n;
while (n>0 && !ok)
{ c=n%10;
if (c%2==0)
ok=1;
n=n/10;}
if (ok==1)
cout<<"Exista cel putin o cifra para!";
else
cout<<"NU exista cifre pare, toate
cifrele sunt impare ";
getch();
}
sau:
Aplicaii practice
1. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se calculeze suma
cifrelor impare.
Exemplu: dac n=2345 atunci suma cifrelor impare este s=5+3=8
2. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se determine cte
cifre impare conine numrul dat.
Exemplu: numrul n=3445 are dou cifre impare (3 i 5)
5. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se determine cifra
minim.
Exemplu: dac n=6143 atunci
6. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se verifice dac
numrul de cifre pare este egal cu numrul de cifre impare.
Exemplu: dac n=61432, atunci el are 3 cifre pare(2, 4, 6) i 2 cifre impare
(3, 1), de unde rezult c numrul de cifre pare nu este egal cu numrul de
cifre impare.
7. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se verifice dac
numrul conine cel puin o cifr de zero.
Exemplu: dac n=61432, atunci el nu conine nici o cifr egal cu zero, dar
dac valoarea iniial a numrului n este n=12003 atunci se va afia numrul
conine cifre de zero.
8. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se verifice dac
cifrele numrului sunt n ordine cresctoare.
Exemplu: dac n= 344567 atunci el are cifrele n ordine cresctoare, iar dac
n=12432 atunci el nu are cifrele n ordine cresctoare.
9. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se verifice dac
cifrele numrului sunt n ordine descresctoare.
Exemplu: dac n= 988754 atunci el are cifrele n ordine descresctoare, iar
dac n=55243 atunci el nu are cifrele n ordine descresctoare.
10. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se verifice dac
numrul este palindrom (numrul iniial este egal cu numrul cu cifre inversate).
Exemplu: dac n=98789 este palindrom, iar numrul 123 nu este palindrom,
123321
11. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se determine dac
toate cifrele sale sunt egale.
Exemplu: dac n=22222 are toate cifrele egale, iar numrul n=11121 nu are
toate cifrele egale.
12. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se determine dac
numrul n are toate cifrele egale cu x, citit de la tastatur.
Exemplu: dac n=22222 i x=2 atunci n are toate cifrele egale cu x, iar
numrul n=22222 i x=5 atunci nu are toate cifrele egale cu x.
13. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se afieze pe
ecran histograma cifrelor. (pentru fiecare cifr care apare n numr se va afia un numr de *
egal cu frecvena de apariie a cifrei respective n numrul iniial)
Exemplu: dac n=223158555 atunci se va afia pe ecran urmtoarea histogram :
0:
1:*
2:**
3:*
4:
5:****
6:
7:
8:*
9:
14. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se determine care
este cea mai mic baz n care poate fi scris numrul dat.
Exemplu: dac n=22315555, atunci cifra maxim este 5 i rezult c cea mai
mic baz n care este scris numrul este 6. De la matematic cunoatem c un
numr scris n baza b poate s conin cifre din intervalul [0,b-1].
15. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se s se determine
cel mai mare numr care se poate obine prin eliminarea unei cifre din numr(nu se va
modifica poziia cifrelor n numr).
Exemplu: dac n=67324, prin eleiminarea unei cifre din acest numa se vor
obine numerele: 6732, 6734, 6724, 6324 i 7324, iar pe ecran se va afia
7324.
16. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se afieze cifra de
rang k, dat de la tastatur(rangul unei cifre este numrul su de ordine, numerotnd cifrele de
la dreapta la stnga ncepnd cu zero.
Exemplu: dac n=67324 i k=2 atunci pe ecran se va afia cifra 3, ea este
cifra de rang doi din numrul n, dat iniial.
17. S se scrie un program care calculeaz cifra de control a unui numr ntreg efectund
repetat suma cifrelor sale, pn se obine un numr format dintr-o singur cifr.
Exemplu: dac n=67324 cifra lui de control este 4 (67324 are suma cifrelor
4+2+3+7+6=22, numarul 22 are suma cifrelor 2+2=4)
18. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se determine toate
numerele care se pot obine adugnd prima cifr la sfritul numrului.
Exemplu: dac n=67324 se obine urmtorul ir de numere: 73246, 32467, 24673,
46732, i 67324.
19. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se afieze o
piramid format din cifrele numrului dat.
Exemplu 1: dac n=67324 se va afia
3
732
67324
20. Se citete de la tastatur un numr natural n de cel mult 9 cifre. Se cere s se determine dac
numrul are aspect de deal sau de vale,
Exemplu 1: dac n=12321 se va afia
Exemplu 2: dac n=32123 se va afia:
DEAL!, cifrele urc pn la 3, dup
care coboar
scrie d l divide pe n
altfel
scrie d nu l divide pe n
Dac vom nota cu D n mulimea divizorilor numrului n atunci dac n=12 putem scrie:
D12={1, 2, 3, 4, 6, 12}, unde 1 i 12 se numesc divizori improprii ai lui 12, iar 2, 3, 4, 6 sunt
divizorii proprii ai lui 12.
Algoritmul pentru determinarea divizorilor unui numr n dat de la tastatur este:
citete n (numr natural)
scrie Divizorii numrului , n, sunt:
pentru d=1, n, +1
dac n%d=0 atunci
scrie d,
Un numr natural care are exact doi divizori se numete numr prim, iar numerele
naturale care nu sunt numere prime se numesc numere compuse. Plecnd de la aceast definiie,
algoritmul care verific dac numrul natural n, dat de la tastatur este prim are urmtoarea
form :
citete n (numr natural)
nr=0
pentru d=1,n,+1
dac n%d=0 atunci
nr=nr+1
Matematic s-a demonstrat c, dac numrul n nu are nici un divizor propriu mai mic sau
egal cu n , atunci numrul este prim. Folosind aceast operaie se micoreaz numrul de pai
n a verifica dac n este prim sau nu. Algoritmul n acest caz se poate scrie i aa:
citete n (numr natural)
ok=1
// presupun numrul dat ca fiind un numr prim
d=2
ct timp d<= n i ok = 1 execut
dac n%d=0 atunci
// am gsit un divizor propriu n [2, n ]
ok=0
// atunci n nu este prim
altfel
d=d+1
dac ok = 1 atunci
Observaie:
a. numrul 1 nu este numr prim, dar nu este nici numr compus;
b. numrul 2 este singurul numr prim i par.
Orice numr natural nenul, care nu este numr prim poate fi scris ca un produs de numere
naturale prime. Scrierea unui numr natural ca un produs de numere naturale prime se numete
descompunere n factori primi a numrului natural respectiv. Exemple:
2420022*52
2422
12111
1111
11
Deci 24200= 23*52*112
s=0
//numr de cte ori factorul d l divide pe n
s=s+1
n=n/d
dac s 0 atunci
scrie d, la puterea , s
d=d+1
Din punct de vedere matematic, cel mai mare divizor comun a dou numere naturale
a i b este un numr natural d, care:
divide i pe a i pe b:
este divizibil cu orice divizor a lui a i b.
Pentru a afla cel mai mare divizor comun al dou sau mai multor numere naturale mai
mari dect 1 se procedeaz astfel:
se descompun numerele n factori primi
se iau toi factorii primi comuni, o singur dat, la puterea cea mai mic i se
nmulesc ntre ei.
Exemplu:
Dac a = 420 atunci descompunerea n factori primi este 420=22*3*5*7 i dac b = 504
atunci descompunerea n factori primi este 504=2 3*32 *7, de unde rezult c cel mai mare
divizor comun dintre cele dou numere, notat cmmdc(420, 504)= 22*3*7=84
Pentru a scrie un algoritm care determin valoarea celui mai mare divizor comun dintre
dou numere dup modelul matematic de determinare este destul de complicat. Exist algoritmi
mai simpli pentru realizrea acestui lucru:
Algoritmul lui Euclid 1:
Varianta 1: Folosind operaia de mprire
Se citesc cele dou numere naturale a i b, iar n situaia n care a nu este mai mare dect
b se interschimb valorile celor dou variabile. Se mparte a la b pn la obinerea unui rest egal
cu zero. Dac restul obinut n urma mpririi lui a la b nu este zero atunci valoarea lui b va fi
transferat n variabila a, valoarea restului va fi transferat n b si se va relua algoritmul prin
calcularea restului mpririi lui a la b, dar cu noile valori ale variabilelor a i b. Valoarea celui
mai mare divizor comun dintre a i b, notat cmmdc(a,b), va fi egal cu ultimul rest diferit de
zero(care va fi pstrat n variabila b).
aux=a
a=b
b=aux
r=a%b
// determin restul impartirii lui a la b
ct timp r 0 execut
a=b
b=r
r=a%b
Algoritmul lui Euclid este strbunicul tuturor algoritmilor, deoarece este cel mai vechi algoritm netrivial care a
supravieuit pn n ziua de azi. Donald Knuth, The Art of Computer Programming, Vol. 2: Seminumerical
Algorithms, 2nd edition (1981), p. 318.
//egale din cel mai mare numar il scad pe cel mai mic
a = a-b
altfel
b = b-a
Dou sau mai multe numere naturale care au cel mai mare divizor comun al lor egal cu 1
se numesc numere prime ntre ele.
Matematic, cel mai mic multiplu comun a dou numere naturale a i b este un numr
natural m, care:
este multiplu al lui a i al lui b;
se divide cu orice multiplu al numerelor a i b.
Cel mai mic multiplu comun dintre dou numere naturale a i b, notat cmmmc(a,b) se
calculeaz cu relaia:
cmmdc (a, b)
a *b
cmmdc (a, b)
a = a-b
altfel
b = b-a
scrie c/a
//a=b dup incheierea algoritmului de determinare a cmmdc si
//reprezinta chiar valoarea determinat
Aplicaii rezolvate
1. Se citete de la tastatur un numr natural n. Se cere s se
calculeze suma divizorilor si.
Exemplu: dac n=8 divizorii si sunt {1, 2, 4, 8} deci va trebui s afim valoarea 15= 1+2+4+8
Algoritmul n pseudocod este:
citete n
//numr natural
s=0
// iniializez suma divizorilor lui n cu zero
pentru d=1,n,+1 // caut posibilii divizori a lui n n intervalul [1,n]
dac n%d = 0 atunci //dac d este divizor a lui n atunci
s=s+d
//il adaug la suma
Program C++
#include<iostream.h>
#include<conio.h>
int n,s;
void main()
{ clrscr();
cout<<"n="; cin>>n;
for(int d=1;d<=n;d++)
if(n%d==0)
s=s+d;
cout<<"Suma divizorilor lui"<<n;
cout<<" este "<<s;
getch();
}
Program C++
#include<iostream.h>
#include<conio.h>
int n,nr;
void main()
{ clrscr();
cout<<"n="; cin>>n;
for(int d=1;d<=n;d++)
if(n%d==0)
nr++
cout<<"Numarul divizorilor lui"<<n;
cout<<" este "<<nr;
getch();
}
Program C++
#include<iostream.h>
#include<conio.h>
#include<math.h>
int n,s;
void main()
{ clrscr(); cout<<"n="; cin>>n;
if (n<=1)cout<<"Nu exista numere prime mai mici sau egale cu 1!";
else
{cout<<"Numere prime mai mici sau egale cu "<<n<<" sunt :"<<endl;
for(int x=2;x<=n;x++)
{ int d=2,ok=1;
while (d<=sqrt(x) && ok)
if (x%d==0)
ok=0;
else
d++;
if(ok)cout<<x<<" ";
}
}
getch();
}
sau
Exemplu: dac n=24200, atunci descompunerea n factrori primi a lui este 24200=2 3*52 *112, se
observ c factorul 2 apare la cea mai mare putere n descompunere, deci pe ecran trebuie afiat
valoarea 2.
Algoritmul n pseudocod este:
citete n // numr natural
f_max=0
// factorul maxim initial este 0
p_max=0
// puterea acestui factor este initial tot 0
d=2
// primul posibil factor din descompunere este 2
ct timp n>=1 execut
s=0
//numr de cte ori factorul d l divide pe n
s=s+1
n=n/d
dac s 0 atunci//daca d a fost factor vad daca are cea mai mare putere
p_max=s;
//actualizez puterea maxima
f_max=d;
//pastrez factorul la putrea maxima
d=d+1
Program C++
#include<iostream.h>
#include<conio.h>
int n,s,d,p_max,f_max;
void main()
{ clrscr();
cout<<"n="; cin>>n;
d=2;
while(n>1)
{ s=0;
while(n%d==0)
{s++;
n=n/d;
}
if(s>p_max)
{ p_max=s;
f_max=d;
}
d++;
}
cout<<"factorul la puterea maxima este ;
cout<<f_max;
getch();
}
//egale din cel mai mare numar il scad pe cel mai mic
a = a-b
altfel
b = b-a
pentru i=3,n,+1
citeste b
//citeste urmtorul numr
ct timp a b execut
dac a > b atunci
a = a-b
altfel
b = b-a
Program C++
#include<iostream.h>
#include<conio.h>
int n,a,b;
void main()
{clrscr();
cout<<"n="; cin>>n;
cout<<"dati un numar:"; cin>>a;
cout<<"dati un numar:"; cin>>b;
while(a!=b)
if(a>b)
a=a-b;
else
b=b-a;
for(int i=3;i<=n;i++)
{
cout<<"dati un numar:"; cin>>b;
while(a!=b)
if(a>b)
a=a-b;
else
b=b-a;
}
cout<<"cmmdc dintre numerele date este ",a;
getch();
}
Aplicaii practice
1. Se dau dou numere naturale a i b. Dac cele dou numere sunt
prime ntre ele, atunci s se calculeze suma cifrelor celor
dou numere, altfel s se descompun n factori primi numrul
mai mare.
Exemplu: Dac a= 84 i b=180, nu sunt numere prime ntre ele, cmmdc(84,180)=12 i pe ecran
se va afia descompunerea n factori primi al numrului mai mare 2 2 *32 *5.
Dac a=85 i b=87, sunt prime ntre ele i pe ecran va fi afiat 28=8+5+8+7
se
afieze
toi
Se
citesc
dou
numere
naturale
i b, care reprezint
a
numrtorul i numitorul unei fracii
. Scriei un program
b
care are drept scop aducerea la forma ireductibil a fraciei
date.
1
Exemplu: dac a=10 i b=100. cmmdc(10,100)= 10 rezult fracia
.
10
15. Se citesc n numere naturale de la tastatur. S se
determine cu cte zerouri se sfrete produsul acestora, fr
a efectua produsul lor.
Exemplu: dac n=5 i numerele citite sunt n ordine 23, 48, 15, 25, 34 atunci produsul lor se
termin n 3 zerouri.
16. Dou numere ntregi x i y sunt prietene, dac i numai
dac suma divizorilor numrului x este egal cu suma
divizorilor numrului y. Scriei un program care afieaz
toate numerele prietene din intervalul [a,b].
Exemplu: dac a=10 i b=25 numerele prietene sunt (10, 17), (14, 15), (14,23), (15, 23), (16,25).
17.
Orice numr par mai mare dect 4 se poate scrie ca sum de
numere prime. Scriei un program care citete de la tastatur
un numr natural, par n i l descompune ca sum de numere
prime.
Exemplu: dac n=292 atunci el se formeaz din 283+7+2.
18. Se citesc de la tastatur dou numere naturale notate n i
k. Se cere s se afieze toate numerele mai mic sau egale cu n
care au exact k divizori.
Exemplu: dac n=10 i k=2 se vor afisa 2, 3, 5, 7.
19. Se citesc de la tastatur n numere naturale. Se cere s se
determine cte dintre numere citite sunt numere prime i s se
calculeze suma numerlor care nu sunt prime.
Exemplu: dac n=7 i se vor citi numerele 2, 4, 5, 6, 11, 15 atunci se va afia pe ecran mesajul
sunt 3 numere prime, iar suma numerelor care nu sunt prime este 25.
20. Se consider trei numere naturale n,a i b (a b n). S se
creeze un program care permite afiarea factorilor primi ce
aparin intervalului [a, b] i a puterilor la care acetia
apar n descompunerea lui n.
Exemplu: dac n=36 a=1 i b=10 se vor afisa: 2 2 i 32
x n-1x n-2 ...x1x 0, x -1x -2...x -m= x*b n-1+x*b n-2+ ...x*b 1+x*b 0+x*b -1+x*b -2+...x*b -m =
xi b i ,
i
unde x i [0,b-1].
Exemplu: dac b=10 atunci numrul 123,45=1*10 2+2*101+3*100+4*10-1+5*10-2 .
Conversia din baza 10 n baza b
Trecerea unui numr de la o baz la alta presupune aflarea unei secvene unice de resturi
conform algoritmului urmtor:
numrul se mparte la baz i se reine restul obinut. Acesta constituie ultima
cifr din reprezentarea n acea baz;
ctul obinut n urma acestei prime mpriri este din nou mprit la baz i se
reine iarai restul. Acest rest constituie a doua cifr, n ordinea de la dreapta la
stnga, a reprezentrii n baza aleas.
algoritmul continu pn cnd ctul obinut este zero. Ultimul rest al mpririi la
baz va reprezenta cea mai semnificativ cifr a numrului n baza n care s-a
facut conversia.
Tabelul urmtor prezinta paii acestui algoritm pentru trecerea numarului 25 n baza 2:
Nr. baz
25:2= 25
2
(25)10=(11001)2
rest 1
12
2
Observaie:
0
6
2
0
3
2
pe fond galben sunt notate
cturile obinute la fiecare
1
1
2
mprire la baz
1
0
Pentru ascrie un algoritm care s realizeze aceast conversie vom proceda astfel:
o citim numrul de transformat
o citim baza n care dorim s facem conversia
o ncepem s mprim numrul dat la baz, iar cu resturile obinute formm un nou
numr(care de fapt va fi scris dup regula sistemului zecimal)
Algoritm n pseudocod:
//conversia din baza 10 n baza b din [2,10]
citete n,b
// numere naturale, n-numrul de transformat, b-baza
m=0
// va conine rezultatul conversiei
p=1
// puterile lui 10 iniial 10 0=1
ct timp n0 execut
r=n%b
// calculez restul mpririi numrului la baz
m=m+r*p
// formez valoarea noului numr
p=p*10
// cresc puterea lui 10
n=n/b
// calculez ctul mpririi numrului la baz
scrie m
// valoarea numrului n baza b
c=n%10
// extrag cate o cifra din numarul dat
m=m+c*p
// formez numarul adunnd cifrele extrase din n cu puteri ale
// bazei
p=p*b
// cresc puterea bazei
n=n/10
// elimin ultima cifra din n
scrie m
// valoarea numrului n baza 10
Pentru a realiza conversia unui numr din baza b1 n baza b2 vom proceda astfel:
o transformm numrul din baza b1 n baza 10;
o transformam numrul obinut anterior din baza 10 n baza b2.
Aplicaii rezolvate
1. Se d un numr natural n, scris n baza 10. Sa se verifice
dac numrul de cifre de zero este egal cu numrul de cifre de
1 n reprezentarea numrului n baza doi.
Exemplu: dac n=(49)10 =(110001)2 are trei cifre de 1 i trei cifre de zero, deci pe ecran trebuie
afiat Da, numar egal de cifre de 0 i 1;
dac n=(54)10 =(110110)2 are patru cifre de 1 i dou cifre de zero, deci pe ecran trebuie afiat
Nu, numar diferit de cifre de 0 i 1.
Algoritmul n pseudocod este:
citete n
//numr natural care trebuie transformat n baza 2
m=0
//conine rezultatul conversiei numrului n n baza 2
nr0=0, nr1=0 //nr0-numr de cifre de 0 i nr1-numr de cifre de 1 din m
p=1
//100=1
ct timp n0 execut
r = n%2
// determin restul mparirii lui n la 2, poate fi 0 sau 1
dac r = 0 atunci
nr0=nr0+1
//numr ca am gasit o cifra de 0
altfel
nr1=nr1+1
//numr ca am gasit o cifr de 1
m=m+r*p
// formez numrul n baza 2
p=p*10
// cresc puterea lui 10
n=n/2
// mpart n la baza 2
scrie m
// afiez valoarea lui n n baza 2
// afiez rezultatul
dac nr0 = nr1 atunci
Program C++
#include< iostream.h>
#include<conio.h>
long n,m,nr0,nr1,r,p;
void main()
{ clrscr();
cout<<"n="; cin>>n;
p=1;
while(n!=0)
{r=r%2;
if(r==0)
nr0++;
else
nr1++;
m=m+r*p;
p=p*10;
n=n/2;
}
cout<<"numarul in baza 2 este "<<m;
cout<<endl;
if(nr0==nr1)
cout<<"Da are un numar egal de
cifre de 0 si 1";
else
cout<<"Nu, are numar diferit
de cifre de 0 si 1";
getch();
}
sau:
Program C++
#include<iostream.h>
#include<conio.h>
long n,m,r,p,b1,b2;
void main()
{ clrscr();
cout<<"Numarul de transformat n=";
cin>>n;
cout<<"Baza in care este scris numarul b1=";
cin>>b1;
cout<<"Baza in care fac conversia b2=";
cin>>b2;
//conversia lui n din b1 in baza 10
p=1;
while(n!=0)
{r=n%10;
m=m+r*p;
p=p*b1;
n=n/10;
}
cout<<"numarul in baza 10 este "<<m<<endl;
//conversia lui m din baza 10 in b2
p=1;
while(n!=0)
{r=m%b2;
n=n+r*p;
p=p*10;
m=m/b2;
}
cout<<"numarul in baza "<<b2<<" este "<<n;
getch();
}
Aplicaii propuse
1. Se d un numr natural n. S se determine dac este palindrom
n baza doi. n caz negativ s se precizeze cte cifre are
numrul iniial n baza opt.
Exemplu: Un numr natural este palindrom dac i numai dac el este egal cu numrul obinut
prin inversarea cifrelor sale. Atunci dac n=(51)10=(110011)2 atunci el este palindrom n baza 2,
iar dac numrul iniial este n=(54)10=(110110)2=(66)8 se observ c el nu este palindrom n baza
doi i conine dou cifre n baza 8.
2. Se citete de la tastatur un numr natural scris n baza 2.
S se verifice dac n baza 10 reprezint un numr prim.
Exemplu: dac numrul iniial este n=(10011)2=(19)10 atunci n baza 10 el este un numr prim,
iar dac iniial citim numrul n=(1001110) 2=(78)10 atunci observm uor c el nu este numr
prim n baza 10.
3. Se d un numr natural n (n125) citit de la tastatur. S se
afieze toate numerele mai mici dect n, care n baza doi
conin patru cifre de unu. S se precizeze la sfrit cte
numere au ndeplinit condiia cerut.
Exemplu: dac n=35 se vor afia numerele: 15, 23, 27, 29, 30 sunt 5 numere care ndeplinesc
condiia cerut
4. Se citesc dou numere naturale n 1 scris n baza b 1 i n2 scris
n baza b2,unde b1,b2<10. S se determine care numr este mai
mare.
Exemplu: (245)6<(131)9
5. Se citete un numr natural n i o baz b. S se verifice dac
numrul poate fi scris n baza b.
Exemplu: dac n=216 i b=9 atunci rezultatul este Da, iar dac n=216 i b=5 atunci rezultatul
este Nu
6. Se citete un numr natural scris n baza 2, deci format numai
din cifre de 0 i 1 (n11111). S se afieze valoarea lui n
toate bazele b [3,10].
Exemplu: (1111)2=(120)3=(33)4=(30)5=(23)6=(21)7=(17)8=(16)9=(15)10
7. Se citete de la tastaur un numr natural n i o baz b. S
se verifice dac numrul n poate fi scris n baza b, iar n
caz afirmativ realizai conversia numrului n din baza b n
baza 10.
Exemplu: dac n=5411 i b=8 atunci se observ c cea mai mare cifr din n este 5, ndeplineste
condiia 5b, deci poate fi scris n baza b. prin calcul se obine apoi valoarea (2825)10. Dac
n=5411 i b=3 atunci numrul n nu poate fi scris n baza b.
8. Se citete un numr natural n, scris n baza 10. S se
precizeze n ce baze b (b10) numrul n nu conine cifra 0.
Exemplu: dac n=15 atunci bazele n care n nu conine cifra 0 sunt [2,10]-{3}. Vezi exemplu de
la problema 6.
9. Se citesc dou numere naturale n scris n baza b1 i m scris
n baza b2 (b1,b2 [2,9] ). Scriei un program care determin
dac cele dou numere au aceiai valoare n baza 10.
Exemplu: dac n=30, b1=5, m=120, b2=3 n baza 10 ele reprezint aceiai valoare i anume 15.