Info
Info
1. interschimbare
Fie a, b două variabile reale. Să se interschimbe valorile celor două variabile
Varianta 1. folosind o variabilă auxiliară.
Varianta 2. folosind o functie standard
Varianta 3. prin scaderi repetate
#include<iostream>
using namespace std;
int main()
{
///declararea variabilelor
float a,b,aux;
///citirea datelor de intrare
cout<<"a= "; cin>>a;
cout<<"b= "; cin>>b;
///Varianta 1 algoritm de rezolvare interschimbare folosind o variabila auxiliara
aux=a;
a=b;
b=aux;
///Varianta 2 interschimbare folosind functia swap
swap(a,b);
///afisarea datelor de iesire
cout<<"a= "<<a<<endl;
cout<<"b= "<<b;
return 0;
}
///Varianta 3
#include<iostream>
using namespace std;
int main()
{
///declararea variabilelor
float a,b,aux;
///citirea datelor de intrare
cout<<"a= "; cin>>a;
cout<<"b= "; cin>>b;
///Varianta 3 cu sacderi repetate
a=a+b;
b=a-b;
a=a-b;
///afisarea datelor de iesire
cout<<"a= "<<a<<endl;
cout<<"b= "<<b;
return 0;
}
2. suma_cifre
Scrieți programul care citește de la tastatură un numar natural de patru cifre și calculează suma
cifrelor lui.
nr=4751
se va afisa suma= 4+7+5+1=17
#include <iostream>
using namespace std;
int main()
{
///declararea variabilelor
unsigned int nr;
///citirea datelor de intrare
cin>>nr;
///rezolvarea cerintei si afisarea datelor de iesire
cout<<"Suma cifrelor este: "<<nr%10+nr/10%10+nr/100%10+nr/1000;
return 0;
}
3. cifra_mijloc
Se citeste de la tastatura un numar natural de cinci cifre. Sa se afiseze cifra din mijloc.
#include<iostream>
using namespace std;
int main()
{
unsigned int x;
cout<<"x= "; cin>>x;
cout<<"cifra din mijloc este: "<<x/100%10;
return 0;
}
4. media_aritmetica
Se citeste de la tastatura un numar natural de trei cifre. Sa se afiseze media aritmetica a
cifrelor.
5. numar_faraciframijloc
Se citeste de la tastatura un numar natural format din cinci cifre. Sa se afiseze numarul dupa
eliminarea cifrei din mijloc.
nr=12345 nr=1245
6. succesor_predecesor
Se citeste de la tastatura un numar intreg. Sa se afiseze predecesorul numarului citit, numarul
citit si succesorul numarului citit.
7. inversul
Se citeste un numar natural format din trei cifre. Sa se afiseze inversul numarului.
Pbinfo 1273, 2764, 2199, 3328, 2263, 2201
1. ALGORITMI
Noțiuni introductive
Pentru a înțelege noțiunea de algoritm pornim de la un exemplu din viața de toate zilele.
Pasul 4-Salutul
Pasul 8- STOP
Exemplu: Se citește un număr întreg. Să se verifice dacă un numărul dat este nul sau nu.
Pasul 0- START
Pasul 2- Comparăm numărul este egal cu zero sau nu, stabilind valoarea de adevăr
Pasul 4- STOP
Prin algoritm vom înţelege o metodă de rezolvare a unei probleme de un anumit tip .
Algoritmul este o succesiune finită de operaţii cunoscute, care se execută într-o ordine
Caracteristicile algoritmului:
2. Finitudine- Orice algoritm trebuie să ofere rezultatul într-un timp finit. El trebuie să
fie și efficient, adică să conțină varianta cea mai simplă de rezolvare a unei probleme,
ieșire
1. Enunțarea problemei
erorilor)
Exemplu:
1. Enunțarea problemei x
-2 , x<0
x+2, x>0
-2
Daca x=0 afisam f(x)=3
6. Analiza complexității
Q&A
1. Ce este un algoritm?
Răspuns: Un algoritm este o secvență finită de operații bine definite executate într-un
Răspuns: Pașii în rezolvarea unei probleme folosind algoritmi include: enunțarea problemei,
complexității.
2. Limbajul C++
acceptate de limbaj.
care calculatorul le execută pentru a indeplini o anumită sarcină. Atunci cand se concepe un
program, este necesar să se acorde atenție atât sintacticii, cât și semanticii.
Fisierul care conține programul C++ se numește program sursa și are extensia “.cpp”.
Folosind un program special numit compilator (CodeBloks 13.12) cu ajutorul căruia vom
,,traduce” programul C++ în limbajul înteles de calculator (limbajul cod-masina format din
executarea programului.
Dacă un program nu mai conține erori de sintaxa, deci este corect din punct de vedere
sintactic, nu înseamnă că este corect si d.p.d.v. semantic (al realizării sarcinii pentru care a
fost conceput).
Instalare CodeBlocks
https://www.pbinfo.ro/ajutor/26/instalare-code-blocks
-2
6. Analiza complexității
Q&A
1. Ce este un algoritm?
Răspuns: Un algoritm este o secvență finită de operații bine definite executate într-un
Răspuns: Pașii în rezolvarea unei probleme folosind algoritmi include: enunțarea problemei,
complexității.
Un limbaj de programare este un set de reguli, simboluri şi cuvinte speciale folosite pentru
a scrie un program.
acceptate de limbaj.
care calculatorul le execută pentru a îndeplini o anumită sarcină. Atunci când se concepe un
Fișierul care conține programul C++ se numește program sursa (este un fișier text) și
programul C++ în limbajul înteles de calculator (limbajul cod-masina format din cifre de 0
executarea programului.
Dacă un program nu mai conține erori de sintaxa, deci este corect din punct de vedere
sintactic, nu înseamnă că este corect si d.p.d.v. semantic (al realizării sarcinii pentru care a
fost conceput).
https://www.pbinfo.ro/ajutor/26/instalare-code-blocks
61S5vJGsQsEr6zqapXAMqPjgHm
identificatori
separatori
comentarii
Setul de caractere folosește setul de caractere al codului ASCII și este format din
cifre 0-9
funcțiilor, programelor, etc. Sunt succesiuni de litere, cifre sau underscore (maxim 32
caractere).
space(blank), TAB,
Un comentariu pe mai multe rânduri este cuprins între /*comentariu pe mai multe rânduri*/,
//comentariu pe un rând
Prelucrările dintr-un program C++ sunt grupate în funcţii. Rezolvarea unei probleme se face
prin utilizarea unor funcţii definite în limbaj şi/sau a unor funcţii scrise de programator,
Funcţiile pe care limbajul le pune la dispoziţia utilizatorului sunt grupate, după tipul de
prelucrare oferit, în mai multe fişiere numite "biblioteci" (fişiere header). Pentru a putea
int main() //antetul funcției principale, orice program trebuie să conțină o funcție main,
{|
return 0; |
Obs:
3. Instrucțiunile se încheie cu ;
https://drive.google.com/drive/u/0/folders/1TWwk0-61S5vJGsQsEr6zqapXAMqPjgHm
Formatarea citirii și afișării se face prin intermediul unor funcții speciale, numite
manipulatori. O parte dintre ele se află în fișierele header fstream și iostream (probabil deja
Pentru a realiza scrieri pe ecran folosim cout<< (<< operatorul de inserare în stream -
introducere în flux)
cout<<a1<<a2<<....<<an;
Principiul de execuție:
▪ se scrie a1
▪ se scrie a2
...........
▪ se scrie an
In mod normal datele se scriu una după alta, fără a lăsa spațiu între ele, daca se dorește
programe- cout.pdf
setw(valoare)
setprecision(valoare)
Aplicații:
cout << "|" << setw(10) << 2019 << "|" << endl;
cout << "|" << setw(10) << 2019 << "|" << endl;
cout << "|" << setw(10) << left << 2019 << "|" << endl;
cout << "|" << setw(10) << right << 2019 << "|" << endl;
int n = 97;
Pentru a realiza citirile folosim cin>> (>> operatorul de extragere din stream - extracție din
flux).
cin>> a1>>a2>>....>an;
Principiul de executie:
▪ se citeste a1
▪ se citeste a2
...........
▪ se citeste an
Dacă se citesc mai multe variabile, se apasă enter între valorile introduce
char x,y,z;
Orice dată (constantă sau variabilă) este de un numit tip. Tipul datei precizează ce valori
cadrul programului
o Tipul int
o Tipul char
o Tipul pointer
o Tipul bool
o Tipul void
Gama de valori poate fi extinsa prin modificatorii de tip desemnati prin cuvintele cheie:
o Tipul tablou
o Tipul structură/clasa
o Tipul enumerare
http://msdn.microsoft.com/en-us/library/296az74e.aspx
pot fi găsite constante precum INT_MAX (valoarea maximă a unui tip int) și INT_MIN
(valoarea minimă a unui tip int). Aceste constante sunt utile atunci când doriți să lucrați cu
///https://learn.microsoft.com/ro-ro/cpp/c-language/cpp-integer-limits?view=msvc-170
#include<climits>
#include<iostream>
cout<<ULONG_MAX;///4294967295
return 0;
int de regulă pe 4
octeți
[−231
,2
31−1], adică
[−2.147.483.648, 2.147.483.647]
În probleme, dacă datele întregi nu depășesc (aproximativ) 2.000.000.000 folosim tipul int.
Pentru datele care depășesc această valoare vom folosi tipul long long.
signed int 4 octeți cu semn La fel ca int. Valori întregi din [−231
,2
31−1],
adică [−2147483648, 2147483647]
semn
32−1], adică
[0, 4294967295].
semn
short 2 octeți cu semn Valori întregi mici din [−215,215−1], adică [−32768,
semn
long long 8 octeți cu semn Valori întregi foarte mari din [−263,263−1]. Echivalent
cu long long int
unsigned long
long
8 octeți fără
semn
64−1]. Echivalent
float double
float pe 4 octeți
double pe 8
octeți
3.4 1038]
char 1 octet
ASCII)
bool de regulă pe 1
octet
signed char 1 octet cu semn Caractere. Valorile numerice sunt din [−27
,27−1],
[0, 255].
long double
la fel ca double
Variabile
depăşirea domeniului nu este semnalizată în nici un fel şi conduce sigur la rezultate eronate.
Orice program prelucrează date. Acestea se află în memoria RAM a calculatorului și pot fi
variabile (valoarea datei se poate modifica) sau constante (valoarea nu se poate modifica).
• adresa variabilei
• identificatorul variabilei
• tipul
[tip] nume;
Exemple:
63−1
int x=12; //declararea unei variabile x de tip întreg, care are valoarea inițială 12
Constante
Valoarea unei constante nu poate fi schimbată în timpul execuţiei programului în care a fost
utilizată. O constantă are un tip şi o valoare. Atât tipul, cât şi valoarea, sunt determinate de
Tipuri de constante:
▪ Constante întregi
▪ Constante caracter
▪ Constante reale
▪ Constante hexazecimale (în baza 16). Acestea sunt precedate de 0X sau 0x.
Sistemul numeric standard se numește zecimal (baza 10) și folosește zece simboluri:
0,1,2,3,4,5,6,7,8,9.
Sistemul numeric hexazecimal, adesea scurtat la „hex”, este un sistem numeric format din
suplimentare. Nu există simboluri numerice care să reprezinte valori mai mari de nouă, așa
97(10)= 141(8)=61(16)
Scriem numărul în baza 8 fără să-l mai trecem prin baza 10 astfel: separăm cifrele de la
dreapta la stânga în grupe de 3. În cazul în care numărul de cifre nu este multiplu de 3, putem
Inlocuim fiecare grup de 3 cifre binare cu cifra corespunzătoare care reprezinta numărul în
baza 10.
Obs:
10
- O constantă în baza 16 este precedată de 0x sau 0X. Cifrele hexazecimale se obțin
A sau a 10
B sau b 11
C sau c 12
D sau d 13
E sau e 14
F sau f 15
- codul ASCII al caracterului respectiv (ex. ‘a’ se mem. 97, ‘A’ se mem. 65)
- secvenţele escape – constanta se introduce prin codul său în baza 8 sau 16;
o blank (‘ ‘)
o tab orizontal (‘\ t’) // tab-ul orizontal determină saltul cursorului cu 8 poziţii
o newline (‘\n’)
o cr (‘\r’)
97(10)= 141(8)=61(16)
● const numar = 10
Operatorii
Limbajul C++ este dotat cu un set puternic de operatori: aritmetici, relaţionali, de egalitate, de
explicită.
Operatorii aritmetici
- pot fi unari: +, -
binari: +, -, *, /, %
*inmultire
/ impartire
punct de vedere matamatic dacă operanzii au valori pozitive. Dacă cel putin unul din operanzi este real
rezultatul va fi real.
- “ %” acţionează numai asupra operanzilor de tip întreg. Rezultatul este corect din punct de vedere
Operatorii relaţionali
Rezultatul unei operaţii logice este 1, în cazul în care inegalitatea este respectată şi 0 în caz contrar.
Operatorii de egalitate
== (egalitate)
!= (inegalitate, diferit)
Rezultatul este 0 sau 1, iar operanzii pot fi: constante, variabile, funcţii.
2!=2 => 0
Operatorii de incrementare/decrementare
++ (incrementare)
-- (decrementare)
Aceşti operatori sunt unari şi au rolul de a incrementa (adună 1) sau decrementa (scad 1) conţinutul
unei variabile. Operatorii pot fi prefixaţi (aplicaţi în faţa/după operandului) sau postfixaţi (aplicaţi după
operand).
Obs: - dacă operatorul este prefixat variabila este incrementată/decrementată înainte ca valoarea
reţinută de
ea să intre în calcul
- dacă operatorul este postfixat variabila este incrementată/decrementată după ce valoarea reţinută
de ea intra în calcul
Ex 1) int a=6;
...............
5+a++; //se calculează 5+6, apoi se incrementează valoarea lui a deci a=7
Ex 2) int a=1,b=3;
................
Operatorii logici:
a !a a b a&&b a||b
010000
100101
1001
1111
Ex: int a=1,b=3,c=0;
Obs:
la operatorul &&: dacǎ operandul din stânga este 0 nu se mai evalueazǎ şi operandul din dreapta,
la operatorul ||: dacǎ operandul din stânga este 1 nu se mai evalueazǎ şi operandul din dreapta,
Operatorii de atribuire
Operatorul de atribuire, în forma cea mai simplă, se notează prin caracterul “=”. El se utilizează în
expresii de forma:
v=expresie
Principiul de execuţie:
- se evaluează expresie
Principiul de execuţie:
- se evaluează expresie
- variabilei v i se atribuie valoarea obţinută (dacă este cazul se efectuează conversia respectivă)
- conţinutul variabilei v i se atribuie variabilei v1 (dacă este cazul se efectuează conversia respectivă)
................................................
- conţinutul variabilei vn-1 i se atribuie variabilei vn (dacă este cazul se efectuează conversia respectivă)
op=
unde op poate fi unul din operatorii: *, /, %, +, -
O atribuire de forma:
Operatorul virgulă
al unui program este necesar să se realizeze un calcul complex exprimat prin mai multe expresii. In
general,
o construcţie de forma:
(unde exp1, exp2,....., expn sunt expresii) este o expresie a carei valoare şi tip coincide cu valoarea şi tipul
lui expn.
float c;
- c+2=8, a=8
- b+1=6, b=6
Operatorul condiţional
Principiul de execuţie:
- Se evaluează exp1
- Dacă aceasta produce o valoare diferită de zero, se evaluează exp2 şi expresia condiţională va avea
- altfel se evaluează exp3, şi expresia condiţională va avea tipul şi valoarea lui exp3.
expresiei condiţionale.
(a>b) ? a : b
Operatorul dimensiune
sizeof – returnează numărul de octeţi utilizaţi pentru memorarea unei valori (este un operator unar).
Ex: int a;
sizeof(a)=4
Ex: char c;
sizeof(c)=1
Ex: int x; double y;// int pe 4 octeti, double pe 8 octeti, va returna nr maxim de octeti
sizeof(x+y)=8
- intre paranteze inaintea operandului se trece tipul spre care dorim sa facem conversia
Ex:
a) float x=-1.9;
(int) x=-1
b) int a=3,b=6;
(float)a/b=0.5
Expresii
Se numeste expresie o succesiune de operatori si operanzi legati intre ei, dupa reguli
la stanga (←)
Instrucţiunea compusă se utilizează unde este necesară prezenţa unei instrucţiuni, dar in
procesul de calcul sunt necesare mai multe instrucţiuni. În acest caz instrucţiunile respective se
1.2. Instrucţiunea if
if(expresie) instrucţiune1;
execută instrucţiune1
instrucţiunea if.
Instrucțiuni repetitive
Forma generală:
expr_2: expresie test contor (compara valoarea contorului cu valoarea finală pe care o poate
avea)
Principiul de execuţie:
P2. Se evaluează expr_2. Daca rezultatul este 1(adev.) se execută instrucţiune, altfel se
de paşi
Forma generală:
Principiul de execuție:
P3. Daca are valoarea 0 (fals) se trece la urmatoarea instructiune dupa while (se termina
expr_1;
while(expr_2)
instrucţiune;
expr_3;
necunoscut de pasi.
Forma generală:
Principiul de execuție:
P3. Dacă are valoarea 0 (fals) se trece la următoarea instrucțiune (se termină execuția
Obs: Spre deosebire de instrucțiunea while, instrucțiunea do... while se execută cel puțin o dată
while(expresie) instrucţiune
if(expresie)
do
instrucţiune
while (expresie);
Dacă o selecţie multiplă este controlată de valoarea unei singure expresii, programarea se poate
Forma generală:
switch(expresie)
{ unde:
,n̅,
[default: secventa instructiunin+1; break;] - default este facultativ, de aceea este pusa
Principiul de execuție:
P2. daca are valoarea egala cu valoarea expi , se executa in ordine secventa de instructiunii altfel
daca nu exista
Obs: Prezenta lui break la sfarsitul fiecarei secvente de instructiuni, este necesara atunci când se
doreşte numai execuţia instrucţiunilor aferente acelui case. Daca break lipseşte si „expresie” a
egalat o constanta, se vor executa nu numai instrucţiunile aferente acelui case, ci toate
Forma generală
break;
Principiul de execuție:
Instrucțiunea break face programul să iasă imediat din structura repetitivă curentă,
MODEL OFICIU 1p
2. Se consideră variabila a care memorează un număr cu exact 6 cifre. Care dintre expresiile C/C++
de mai jos are ca valoare numărul format din cele două cifre din mijloc ale valorii memorate în a?
R: ____
a. (a%100)/100
b. a/100%100
c. a/1000+a%1000
d. a/100%10+a/1000%10
3. Care este instrucţiunea prin care variabilei x i se atribuie valoarea sumei cifrelor numărului
natural format din exact trei cifre, memorat de variabila întreagă y? R:_____
a. x=y/100+y/10%10+y%10;
b. x=y+y/10+y/100;
c. x=y%10+y%10/10+y/100;
d. x=y%10+y%100+y%1000;
4. Cărui interval îi aparţine valoarea memorată de variabila reală x astfel încât expresia următoare,
b. (-∞,-2) ∪ (-1,50)
7. Ce valori vor avea la final variabilele x si y in urma rularii urmatoarei secvente de instructiuni?
x+=y;
y=sqrt(x);
x+=y;
y=y*2+8;
8. Care este valoarea variabilei x rezultata in urma evaluarii expresiei, stiind ca y are valoarea 5:
Aplicatii instructiunea if
1. Se citeşte de la tastatură un număr natural. Să se afişeze dacă numărul este par sau
impar.
#include <iostream>
using namespace std;
int main()
{
//declararea variabilelor
unsigned int a;
//citirea datelor de intrare
cout<<"a= "; cin>>a;
//testarea conditiei de paritate si afisarea rezultatului
if(a%2==0) cout<<a<<" este numar par";
else cout<<a<<" este numa impar";
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a;
cout<<"a= "; cin>>a;
if(a>=0) cout<<a<<" este un numar pozitiv";
else cout<<a<<" este un numar negativ";
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a;
cout<<"a= "; cin>>a;
if(a>0) cout<<a<<" este un numar pozitiv";
else if(a<0) cout<<a<<" este un numar negativ";
else cout<<a<<" este un numar nul";
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a;
cout<<"a="; cin>>a;
if(a>=0) cout<<"modul lui a este "<<a;
else cout<<"modul lui a este "<<-a;
return 0;
}
5. Se citesc de la tastatură trei numere întregi. Să se afişeze dacă una din valori este
egală cu suma celorlalte două.
Pbinfo- if_echilibru Intr-un parc se joaca 3 copii care au greutatile a,b,c (numere intregi). Sa se
stabileasca daca se pot aseza pe un balansoar astfel incat acesta sa stea in echilibru.)
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
cout<<"a= "; cin>>a;
cout<<"b= "; cin>>b;
cout<<"c= "; cin>>c;
if (a==b+c || b==a+c || c==a+b)
cout<<"Un numar este egal cu suma celorlalte.";
return 0;
}
Nr este patrat perfect dacă este pătratul unui alt număr. Rădăcina pătrată a unui pătrat perfect este un
număr întreg, sau daca partea fractionara a lui nr este zero.
int main()
{
int nr;
cout<<"nr= "; cin>>nr;Se citesc de la tastatură trei numere naturale a,b,c . Se se verifice
daca sunt pitagoreice, adică îndeplinesc una din condiţiile: a2=b2+c2, b2=a2+c2 sau
c2=a2+b2.
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
unsigned int a, b, c;
cout<<"a= ";cin>>a;
cout<<"b= "; cin>>b;
cout<<"c= "; cin>>c;
if(pow(a,2)==pow(b,2)+pow(c,2)||pow(b,2)==pow(a,2)+ pow(c,2)||pow(c,2)==pow(b,2)+
pow(a,2)) cout<<"numerele sunt pitagorice";
else cout<<"numerele nu sunt pitagorice";
return 0;
}
8. if_bisect
Se citește un număr natural a, care reprezinta un an calendaristic. Să se verifice și să se
afișeze dacă anul este bisect sau nu.
Ex: 2020, 2024, 2028,... - ani bisecti-an de 366 de zile (feb. 29 de zile), aproape o data la
fiecare patru ani, mai exact 97 ani bisecti la fiecare ciclu de 400 de ani.
2200, 2019 – ani nebisecti
Algoritmul anului bisect:
1) un an bisect se divide cu 4
2) insa daca se divide cu 100, atunci nu e an bisect
3) insa daca se divide cu 400, atunci e an bisect
#include<iostream>
using namespace std;
int main()
{
unsigned int a;
cout<<"a= "; cin>>a;
return 0;
}
Tema: pbinfo: Concurs1 #3185,n minim3 #106, Varste copii #833, Nota #832 , Interval2 #469
a≠0, situatie in care calculam x=-b/a si afisez x (vom folosi instructiunea compusa)
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
float a,b,x;
cout<<"a= "; cin>>a;
cout<<"b= "; cin>>b;
if(a==0)
if(b==0) cout<<"x orice nr";
else cout<<"ecuatie imposibila";
else
{
x=-b/a;
cout<<setprecision(3)<<x;
}
return 0;
}
10. Se citesc de la tastatura 3 numere reale. Sa se verifice daca cele 3 valori pot reprezenta
masurile a 3 unghiuri dintr-un triunghi. In caz afirmativ se va preciza tipul triunghiului:
dreptunghic, optuzunghic, ascutitunghic, altfel se va afisa mesajul: valorile nu pot
reprezenta masurile unghiurilor dintr-un triunghi".
Indicatii:
3 valori pot reprezenta masurile a 3 unghiuri dintr-un triunghi daca: a+b+c=180 și
a,b,c>0
• triunghi dreptunghic: un unghi are valoarea = 90
• triunghi optuzunghic: un unghi are valoarea > 90
• triunghi ascutitunghic: toate unghiurile au valoarea < 90
#include <iostream>
using namespace std;
int main()
{
float a,b,c;
cout<<"a= "; cin>>a;
cout<<"b= "; cin>>b;
cout<<"c= "; cin>>c;
if(a+b+c==180)
if(a>90 || b>90 || c>90)
cout<<"triunghiul este obtuzunghic";
else if(a==90 || b==90 || c==90)
cout<<"Triunghiul este dreptunghic";
else
cout<<"triunghiul este ascutitunghic";
else cout<<"Unghiurile nu pot forma un triunghi";
return 0;
}
11. Se citesc de la tastatura 3 numere reale. Sa se verifice daca cele 3 valori pot
reprezenta masurile laturilor unui triunghi. In caz afirmativ se va preciza tipul
triunghiului: echilateral, isoscel, dreptunghic, oarecare, altfel se va afisa mesajul:
valorile nu por reprezenta masurile a 3 laturi dintr-un dreptunghi.
13. consecutive Se citesc de la tastatura doua numere intregi. Sa se afiseze daca cele
doua numere citite sunt numere consecutive
a=4 b=5 numere consecutive
a=5 b=4 numere consecutive
a=7 b=9 numerele nu sunt consecutive
#include <iostream>
using namespace std;
int main()
{
//declararea variabilelor
int a,b;
//citirea datelor de intrare
cout<<"a=";cin>>a;
cout<<"b=";cin>>b;
//rezolvarea cerintei si afisarea datelor de iesire
if(a==b+1 || b==a+1)cout<<" nr consecutive";
else cout<<"nr nu sunt consecutive";
return 0;
}
14. vocala Se citeste un caracter de la tastatura. Sa se afiseze daca este vocala sau nu.
#include<iostream>
using namespace std;
int main()
{
char c;
cin>>c;
if(c=='a'|| c=='e' || c=='i'|| c=='o'|| c=='u')
cout<<"este vocala";
else cout<<"nu este vocala";
return 0;
}
APLICATII INSTRUCTIUNEA FOR
for1. Se citește de la tastatură n număr natural nenul. Să se afișeze numerele naturale cuprinse între
1 și n, iar pe linia doi valorile de la n la 1.
ex: n=5 => linia 1: 1 2 3 4 5
linia 2: 5 4 3 2 1
i=variabila contor
valoarea initiala a contorului: i=1 (expr_1)
valoarea finala a contorului: i=n => expresia instr. while: i<=n (expr_2)
modificare contor: i++ (expr_3)
int main()
{
int n,i;
cout<<"n= "; cin>>n;
///afisare elem de la 1 la n
for(i=1;i<=n;i++)
cout<<i<<" ";
cout<<endl;
///afisare elem de la n la 1
for(i=n; i>=1;i--)
cout<<i<<" ";
return 0;
}
n=12 => 1 2 3 4 5 6 7 8 9 10 11 12
n=1 => 1
n=7 => 1 234567
n=6 => 123456
divizori improprii: 1, n
divizorii proprii, daca exista, sunt 2 si n/2 (o sa parcurgem intervalul [2,n/2] folosind variabila
contor i )
valoarea initiala a contorului: i =2
valoarea finala a contorului: i=n/2
modificare contor: i++;
#include<iostream>
using namespace std;
int main()
{
unsigned int n,i;
cout<<"n= "; cin>>n;
///afisez 1
cout<<"Divizorii numarului sunt:1 ";
///caut divizorii proprii din intervalul [2,n/2]
for(i=2;i<=n/2;i++)
if(n%i==0) cout<<i<<" ";
///daca n>1 atunci afiseaza n (daca n=1 s-ar afisa de 2 ori 1)
if(n>1) cout<<n;
return 0;
}
int main()
{
unsigned int n,i,S;
cout<<"n= "; cin>>n;
S=0;///initializam suma cu elementul neutru la adunare
cout<<"Suma numerelor este: ";
for(i=1;i<=n;i++)
S=S+i;
cout<<S;
return 0;
}
Varianta 2 de rezolvare
#include <iostream>
using namespace std;
int main ()
{
unsigned int n;
cout<<"n= "; cin>>n;
cout<<"Suma este "<<n*(n+1)/2;
return 0;
}
for4. Se citesc de la tastatura n numere intregi, n numar natural dat. Sa se calculeze produsul celor n
numere citite.
Ex: n=4
-4 2 7 3 => p=(-4)*2*7*3= -168
Produsul va fi initializat cu elementul neutru la inmultire, adica cu valoarea 1
#include<iostream>
using namespace std;
int main()
{
unsigned int n,i;
int nr, P=1;
///n reprezinta numarul de numere
cout<<"n= ";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"nr= ";cin>>nr;///citesc pe rand numerele
P=P*nr;
}
cout<<"Produsul numerelor este: "<<P;
return 0;
}
for5. Se citesc de la tastatura n numere intregi, n numar natural dat. Sa se calculeze suma numerelor
pare si produsul numerelor impare.
Ex: n=5
4 6 3 2 5 => s=4+6+2=12
p=3*5=15
#include <iostream>
using namespace std;
int main()
{
unsigned int n, i;
int nr, P, S;
cout<<"numarul de numere= ";
cin>>n;
S=0;
P=1;
for(i=1;i<=n;i++)
{
cout<<"numerele sunt= ";
cin>>nr;
if(nr%2==0)
S=S+nr;
else
P=P*nr;
}
cout<<"Suma este= "<<S<<endl;
cout<<"Produsul este= "<<P;
return 0;
}
for6. Se citesc de la tastatura n numere intregi, n numar natural dat. Sa se calculeze media aritmetica
a valorilor pozitive.
ex: n=5
3 -4 5 0 2 => s=3+5+2 => ma=(float)s/np
np=3
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
unsigned int n,np=0,s=0,i;///np=nr de numere pozitive
int nr;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"nr=";cin>>nr;
if(nr>0)
{
s=s+nr;
np++;
}
}
if(np!=0)
cout<<"media aritmetica a nr pozitive="<<setprecision(3)<<(float)s/np;
else
cout<<"nu putem calcula ma deoarece nu avem nr poz";
return 0;
}
for7. Se citesc de la tastatura n numere intregi, n numar natural dat. Sa se numere cate
sunt pozitive, negative si zero.
ex: n=5
3 -4 5 0 2 => numere pozitive=3
numere negative=1
numere zero=1
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
unsigned int n,np=0,nn=0, nz=0,i;
///np=nr de numere pozitive,nn= nr nr negative, nz=nr de 0
int nr;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"nr=";cin>>nr;
if(nr>0)np++;
else if (nr<0)nn++;
else nz++;
}
cout<<"numere pozitive="<<np<<endl;
cout<<"numere negative="<<nn<<endl;
cout<<"numere zero="<<nz<<endl;
return 0;
}
Algoritmi elementari.
for8. Se citește de la tastatură un număr natural. Sa se afișeze dacă este număr prim sau
nu.
nr=121 , nu este nr prim
nr=11, este prim
#include <iostream>
#include <cmath>
int main()
{
int n, prim;
cin >> n;
prim = 1; // presupunem ca n este prim
if(n==0 || n==1) prim = 0; // 0 si 1 nu sunt prime
for(int i =2 ; i * i <= n ; i ++)// for(int i =2 ; i <= sqrt(n) ; i ++)//for(int i=2;i<=n/2;i++)
if(n % i == 0) prim = 0;
if(prim==1) cout << n << " este prim";
else cout << n << " nu este prim";
return 0;
}
for9. Se citesc de la tastatura n numere intregi, n numar natural dat. Sa se afiseze
valoarea minima.
ex: n=5
3 -4 5 0 2 => min=-4
#include<iostream>
#include<climits>
using namespace std;
int main()
{
unsigned int n;
int nr, i, min;
///cout<<INT_MIN<<" "<<INT_MAX<<endl;//determinarea limitelor domeniului int
cout<<"n = "; cin>>n; ///numarul de numere
///se citeste prima valoare din sir
cout<<"nr = "; cin>>nr;
min=nr;///se atribuie aceasta valoare minimului
for(i=2; i<=n; i++)
{
cin>>nr;
if(nr<min) min=nr;
}
cout<<" Valoarea minima din sir"<<min;
return 0;
}
for99. Se citesc din fisierul date.in, n numere intregi, n numar natural dat.
Sa se afiseze in fisierul rezultat.out, valoarea minima din sir.
ex: n=5
3 -4 5 0 2 => min=-4
#include<fstream>
using namespace std;
int main()
{
///declararea fisierelor text
ifstream f("date.in");
ofstream g("rezultat.out");
///declararea variabilelor
unsigned int n;
int nr, i, min;
///citirea datelor din fisier
f>>n; ///numarul de numere
///se citeste prima valoare din sir
f>>nr;
min=nr;
for(i=2; i<=n; i++)
{
f>>nr;
if(nr<min) min=nr;
}
///afisarea datelor de iesire in fisier
g<<" Valoarea minima din sir este "<<min;
///inchiderea fiserelor
f.close();
g.close();
return 0;
}
E=11+12+...+1n
#include <iostream>
#include <fstream>
#include<iomanip>
using namespace std;
int main()
{
ifstream f("for10.txt");
unsigned int n, i;
float E=0;
f>>n;
for(i=1;i<=n;i++)
E=E+(float)1/i;///E=E+1.0/i;
cout<<"Suma este egala cu: "<<setprecision(3)<<E;
return 0;
}
#include <iostream>
#include <fstream>
int main()
{
ifstream f("for11.txt");
ofstream g("for11.out");
unsigned int n, i, E=0;
f>>n;
/*for(i=1; i<=n; i++)
{
E=E+i*(2*i+1);
}
*/
i=1;
while(i<=n)
{
E=E+i*(2*i+1);
i++;
}
g<<E;
f.close();
g.close();
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int i, p=1, e=0, n;
cout<<"n= ";
cin>>n;
for(i=1; i<=n; i++)
{
p=p*i;
e=e+p;
}
cout<<"e= "<<e;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int k,i;
cout<<"k= "; cin>>k;
for(i=1;i<=10;i++)
{
cout<<k<<" x "<<i<<" = "<<k*i;
cout<<endl;
}
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int i,j;
for(i=1;i<=10;i++)
{
for(j=1;j<=10;j++)
cout<<i<<" x "<<j<<" = "<<i*j<<endl;
cout<<endl;
}
return 0;
http://www.ududec.com/wp-content/uploads/2013/09/Fisa-7-Instructiunea-for.pdf
for15 (pb30 ududec) Sa se afiseze pe ecran toate perechile de litere distincte ale alfabetului
englez.
int main()
{
char i,j;
for(i='a';i<='y';i++)
{
for(j=i+1;j<='z';j++)
cout<<"("<<i<<","<<j<<") ";
cout<<endl;
}
return 0;
}
int main()
{
unsigned int n,i;
cout<<"n= "; cin>>n;
i=1;
while(i<=n)
{
cout<<i<<" ";
i++;
}
return 0;
}
int main()
{
unsigned int n,i,S=0;
cout<<"n= "; cin>>n;
i=1;
while(i<=n)
{
S=S+i;
i++;
}
cout<<"Suma primelor "<<n<<" numere este: "<<S;
return 0;
}
Algoritmi elementari.
Prelucrarea cifrelor unui număr natural
while3. Se citește un număr natural de maxim 9 cifre. Să se calculeze și să se afișeze suma cifrelor
numărului citit.
#include <iostream>
using namespace std;
int main()
{
unsigned int nr, S=0,c;
cout<<"nr= ";cin>>nr;
while(nr!=0)
{
c=nr%10;
S=S+c;
nr=nr/10;
}
cout<<"Suma este : "<<S;
return 0;
}
//sau
#include <iostream>
using namespace std;
int main()
{
unsigned int nr, S=0;
cout<<"nr= ";cin>>nr;
while(nr!=0)
{
S=S+nr%10;///adaug la suma ultima cifra a numarului
nr=nr/10;///elimin ultima cifra
}
cout<<"Suma este : "<<S;
return 0;
}
int main()
{
unsigned int nr,c;
cout<<"nr= ";cin>>nr;
while(nr!=0)
{
c=nr%10;
nr=nr/10;
}
cout<<"prima cifra a nr="<<c;
return 0;
}
int main()
{
unsigned int nr,c;
cout<<"nr= ";cin>>nr;
while(nr>9)///cat timp nr are cel putin 2 cifre, elimin cifra unitatilor din nr
nr=nr/10;
cout<<"prima cifra a nr="<<nr;
return 0;
}
int main()
{
unsigned int nr,c,inv=0;
cout<<"nr= ";cin>>nr;
while(nr!=0)
{
c=nr%10;
inv=inv*10+c;
nr=nr/10;
}
cout<<"inv="<<inv;
return 0;
}
while6. Se citeste din fisier un numar natural. Sa se afiseze in fisier daca numarul este de tip
palindrom
ex: 22, 32123, 454
#include <iostream>
using namespace std;
int main()
{
unsigned int nr,c,inv=0,x;
cout<<"nr= ";cin>>nr;
x=nr;///retin valoarea initiala a lui nr
///determin inv lui nr
while(nr!=0)
{
c=nr%10;
inv=inv*10+c;
nr=nr/10;
}
///cout<<"inv="<<inv<<endl;
///verific daca nr initial =inv
if(x==inv)cout<<"palindrom";
else cout<<"nu este palindrom";
return 0;
}
Acest algoritm poate depasi valoarea maxima reprezentabila pe tipul long long ( pentru numere
mari). O solutie ar fi sa rasturnam numarul pana la jumatate
#include <iostream>
using namespace std;
int main()
{
long long n,r;
cin>>n;
r=0;
while(n>r)
{
r=r*10+n%10;
n=n/10;
}
// cand numarul este par testam daca n==r
// cand numarul este impar testam daca n== r/10
if (n==r || n==(r/10))
cout<<"Numarul este palindrom";
else cout<<"Numarul nu este palindrom";
return 0;
}
while7. Se citeste de la tastatura un numar natural n , apoi se citesc n valori naturale. Sa se verifice
daca printre valorile citite exista un palindrom prim, afisand pe ecran un mesaj corespunzator.
#include <iostream>
using namespace std;
int main()
{
int n,ok=0;
cin>>n;
for(int i=1;i<=n;i++)
{
int nr;
cout<<"nr="; cin>>nr;
int nr1=nr;
int inv=0, prim=1;
while(nr1!=0)
{
inv=inv*10+nr1%10; // determinam inversul numarului
nr1=nr1/10;
}
// verificam daca numarul este palindrom
if (inv==nr)
{
prim=1;
// determinam daca numarul care este palindrom este si numar prim
if(nr<2) prim=0;
else if (nr==2) prim=1;
else for(int d=3;d*d<=nr;d=d+2) // mergem numai pe numere impare
if (nr%d==0) prim=0;
if (prim==1) ok=1;
}
}
if (ok==1) cout<<"Exista numere palindrom prime"<<endl;
else cout<<"Nu exista numere palindrom prime";
return 0;
}
while8. Se dă un număr natural. Să se modifice acest număr, mărind cu o unitate fiecare cifră pară.
pt n= 275 se afiseaza nn= 375.
Vom determina cifrele numărului dat și vom construi rezultatul, inserând cifrele la început.
Cifrele pare se inserează ca atare, cifrele impare se inserează micșorate.
· Fie n numărul dat și nn rezultatul. Vom utiliza o variabilă suplimentară, p, pentru a calcula
puterile lui 10.
· Inițial nn = 0, p = 1
· Vom determina prin trunchieri succesive cifrele lui n în variabila c, c = n % 10.
o Dacă c este par, nn = nn + p * (c+1), apoi p = p * 10.
o Dacă c este impar, nn = nn + p * c , apoi p = p * 10.
#include<iostream>
using namespace std;
int main()
{
int n, nn=0,c,p=1;
cout<<"n= "; cin>>n;
while(n>0)
{
c=n%10;
if(c%2==0) nn=nn+p*(c+1);
else nn=nn+p*c;
p=p*10;
n=n/10;
}
cout<<endl<<"Noul numar format este "<<nn;
return 0;
}
TEMA while9. Aflarea cifrei maxime dintr-un număr n
///Algoritmul prin care atribuim maximului, cea mai mica valoare posibila din multimea cifrelor
#include<iostream>
using namespace std;
int main()
{
unsigned int i, cmax=0, c;
int n;
cout<<"n= "; cin>>n;
while(n!=0)
{
c=n%10;
if(c>cmax) cmax=c;
n=n/10;
}
cout<<"cifra maxima este "<<cmax;
return 0;
}
///Algoritmul prin care atribuim maximului, prima valoare la care avem acces
#include<iostream>
using namespace std;
int main()
{
unsigned int i, cmax, c;
int n;
cout<<"n= "; cin>>n;
cmax = n%10;
n=n/10;
while(n!=0)
{
c=n%10;
if(c>cmax) cmax=c;
n=n/10;
}
cout<<"cifra maxima este "<<cmax;
return 0;
}
while10.(ududec pb 37)
http://www.ududec.com/wp-content/uploads/2013/09/Fisa-5-Instructiunea-while.pdf
ex: 1810 obtinem 95
#include<iostream>
using namespace std;
int main()
{
unsigned int x,y,x1,y1;
cout<<"x="; cin>>x;
cout<<"y="; cin>>y;
x1=x;///retinem in x1 valoarea lui x pt ca ea se pierde
y1=y;///retinem in y1 valoarea lui y
while(x!=y)
{
if(x>y) x=x-y;
else y=y-x;
}
cout<<"cmmdc= "<<x<<endl;
cout<<x1/x<<" "<<y1/x;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int n, nn=0, c, p=1;
cout<<"n="; cin>>n;
while(n!=0)
{
c=n%10;
if(c%2!=0)
{
nn=nn+c*p;
p=p*10;
}
n=n/10;
}
cout<<"numarul nou="<<nn;
return 0;
}
int main()
{
int n,c,nn=0,p=1;
cout<<"n= "; cin>>n;
while(n!=0)
{
c=n%10;
if(c%2!=0)
{
nn=nn+p*(c*11);
p=p*10;
}
else nn=nn+p*c;
p=p*10;
n=n/10;
}
cout<<endl<<"noul numar este "<<nn;
return 0;
}
int main()
{
unsigned int d=2,p;
int n;
cin>>n;
while(n>1)
{
p=0;
while(n%d==0)
{
n=n/d;
p++;
}
if(p!=0) cout<<d<<"^"<<p<<" ";
d++;
}
return 0;
}
Șirul lui Fibonacci
Să se afișeze primii n termeni ai șirului lui Fibonacci. Șirul are primii doi termeni egali cu 1 și fiecare din
următorii termeni este egal cu suma dintre termenul precedent și termenul anteprecedent.
#include <iostream>
using namespace std;
int main ()
{
int prec=1,anteprec=1,fib,n;
cout<<"n= ";cin>>n;
cout<<anteprec<<" "<<prec<<" ";
for(int i=3;i<=n;i++)
{
fib=anteprec+prec;
cout<<fib<<" ";
anteprec=prec;
prec=fib;
}
return 0;
}
switch1. Se citeste de la tastatura un numar natural cuprins intre 1 si 4 reprezentand varianta
extrasa la un concurs. Sa se afiseze varianta extrasa.
switch2. Se citeste de la tastatura un numar natural cuprins intre 1 si 7. Sa se afiseze ziua din
saptamana corespunzatoare numarului citit. (luni=1, marti=2,...)
#include <iostream>
using namespace std;
int main()
{
unsigned int op;
cout<<"sa se introduca o variabilla intre 1 si 7: ";
cout<<"op= ";
cin>>op;
switch(op)
{
case 1:cout<<"Luni"; break;
case 2:cout<<"Marti"; break;
case 3:cout<<"Miercuri"; break;
case 4:cout<<"Joi"; break;
case 5:cout<<"Vineri"; break;
case 6:cout<<"Sambata"; break;
case 7:cout<<"Duminica"; break;
default: cout<<"Variabila nu este intre 1 si 7";
}
return 0;
}
switch 3. Se citeste de la tastatura un numar natural cuprins intre 1 si 12. Sa se afiseze luna
din an corespunzatoare numarului citit(1- ianuarie, 2- februarie,.....)
#include <iostream>
using namespace std;
int main()
{
unsigned int v;
cout<<"Introduceti un nr de la 1 la 12"<<endl;
cin>>v;
switch(v)
{
case 1: cout<<"Ianuarie"; break;
case 2: cout<<"Februarie"; break;
case 3: cout<<"Martie"; break;
case 4: cout<<"Aprilie"; break;
case 5: cout<<"Mai"; break;
case 6: cout<<"Iunie"; break;
case 7: cout<<"Iulie"; break;
case 8: cout<<"August"; break;
case 9: cout<<"Septembrie"; break;
case 10: cout<<"Octombrie"; break;
case 11: cout<<"Noiembrie"; break;
case 12: cout<<"Decembrie"; break;
default: cout<<"Nu ati introdus o valoare intre 1 si 12.";
}
return 0;
}
switch 4. Se citesc de la tastatura doua valori intregi a si b reprezentand operanzii unui expresii
si un caracter op reprezentand un operator aritmetic (+, -, *, /).
Sa se evalueze expresia a op b.
Ex: a=5,b=2, op=’*’ 5*2=10
(valorile variabilelor de tip caracter se trec intre doua caractere apostrof.)
#include <iostream>
using namespace std;
int main()
{
char v;
int a,b;
cout<<"a= ";cin>>a;
cout<<"b= ";cin>>b;
cout<<"Introduceti un operand ariitmetic ";cin>>v;
switch(v)
{
case '+': cout<<a+b; break;
case '-': cout<<a-b; break;
case '*': cout<<a*b; break;
case '/': cout<<a/b; break;
default: "Nu ati introdus un operand aritmetic.";
}
return 0;
}
1. Se citesc numere întregi până la intalnirea lui 0. Sa se numere cate sunt pozitive si cate sunt
negative.
poz=3 neg=2
#include <iostream>
int main()
//declararea variabilelor
//rezolvarea cerintei
do
return 0;
#include<iostream>
using namespace std;
int main()
{
int n;
float S=0, poz=0;
do{
cout<<"n="; cin>>n;
if(n>0)
{
S=S+n;
poz++;
}
} while(n!=0);
cout<<"Media aritmetica="<<S/poz;
return 0;
3. Se citesc caractere pana la intalnirea caracterului punct. Sa se numere cate litere si cate cifre au
fost citite.
#include<iostream>
using namespace std;
int main()
{
char c;
int cif=0, lit=0;
do
{
cout<<"caracterul= ";
cin>>c;
if((c>='a'&& a<='z') || (c>='A'&& a<='Z'))
lit++;
// verific daca c este litera mica sau litera mare
if(c>='0'&& c<='9')
// verific daca c este cifra
cif++;
}
while(c!='.');
// cat timp caracterul este diferit de punct
cout<<"Numarul de cifre este= "<<cif<<endl;
cout<<"Numarul de litere este= "<<lit;
return 0;
}
4. Se citesc nr pana la intalnirea a 2 valori consecutive egale. Sa se numere cate valori citite sunt
patrate perfecte. (daca ultimele 2 nr citite sunt pp se numara o singura data)
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int nr,nr1,pp=0;
cout<<"nr=";cin>>nr; //citim primul numar
do{
nr1=nr;
if (sqrt(nr)-int(sqrt(nr))==0) pp++;
cout<<"nr=";cin>>nr;
}
while(nr!=nr1);
cout<<"Numarul de patrate perfecte este : ";cout<<pp;
return 0;
}
5. Se citesc numerele intregi a,b,x. Sa se afiseze daca x apartine [a,b]. Se va face test la citirea lui b,
b>=a pentru a se asigura existenta intervalului [a,b].
#include <iostream>
using namespace std;
int main()
{
int a,b,x;
cout<<"a= ";cin>>a;
do
{
cout<<"b= ";cin>>b;
}while(b<a);
cout<<"x= ";cin>>x;
if(x>=a && x<=b) cout<<x<<" apartine intervalului ["<<a<<","<<b<<"]";
else cout<<x<<" nu apartine intervalului ["<<a<<","<<b<<"]";
return 0;
}
Exercitiul #1053
În secvența de mai jos toate variabilele sunt de tip întreg și memorează numere naturale.
y=1;
x=2;
while(n>0)
if(..........) { y=y*x;
n=n-1;
}
else { x=x*x;
n=n/2;
}
Indicați expresia care poate înlocui punctele de suspensie astfel încât, în urma executării
secvenței obținute, variabila y să memoreze valoarea 2n.
Varianta 1 n%2==0
Varianta 2 n/2==0
Varianta 3 n%2==1
Varianta 4 n/2!=0
Exercitiul #920
Se consideră secvenţa de cod de mai jos. În n se citește întotdeauna un număr natural care
conține cel puțin o cifră pară și cel puțin o cifră impară.
int n,cmi=100,cma=-100;
cin>>n;
while(n!=0)
{
if(......)
{
if(n%10>cma)
cma=n%10;
}
else
{
if(n%10<cmi)
cmi=n%10;
}
n/=10;
}
cout<<cma*cmi;
Ce expresie poate înlocui punctele de suspensie pentru ca secvența de cod de mai sus să
afișeze produsul dintre cifra pară maximă din n și cifra impară minimă din n.
Varianta 1 n%2==1
Varianta 2 n%10%2==0
Varianta 3 n%10==0
Varianta 4 n/2==0
Exercitiul #1053
În secvența de mai jos toate variabilele sunt de tip întreg și memorează numere naturale.
y=1;
x=2;
while(n>0)
if(..........) {
y=y*x;
n=n-1;
}
else {
x=x*x;
n=n/2;
}
Indicați expresia care poate înlocui punctele de suspensie astfel încât, în urma executării
secvenței obținute, variabila y să memoreze valoarea 2n.
Varianta 1 n%2==0
Varianta 2 n/2==0
Varianta 3 n%2==1
Varianta 4 n/2!=0
Clasa a IX-a-> Categoria-Elemente de baza ale limbajului-> Subcategoria-Structuri
repetitive
Exercitiul #40
În următoarea secvenţă de program, instrucţiunea de afişare se va executa de un număr de ori
egal cu:
for (i=1;i<=3;i++)
for (j=10;j>=i+1;j--)
cout<<j; | printf(”%d”,j);
Varianta 1 24
Varianta 2 21
Varianta 3 3
Varianta 4 30
Exercitiul #42
În secvenţa de instrucţiuni de mai jos, variabilele x şi y sunt de tip int. Care este valoarea pe
care trebuie să o aibă iniţial variabila x dacă la finalul executării secvenţei s-a afişat un singur
caracter asterisc (*)?
y=x;
while(x<=3)
{
cout<<"*";
y=y+1; x=x+y;}
}
Varianta 1 0
Varianta 2 2
Varianta 3 1
Varianta 4 4
Exercitiul #27
Care dintre următoarele expresii C/C++ are valoarea 1 după executarea secvenţei de
instrucţiuni de mai jos, în care toate variabilele sunt întregi?
v1=0; v2=0;
for(i=1;i<=3;i++)
{
for (j=1;j<=i;j++)
v1=v1+1;
for (k=i;k<=3;k++)
v2=v2+1;
}
Varianta 1 v1>v2
Varianta 2 v1<v2
Varianta 3 v1==v2
Varianta 4 v1+v2==9
Exercitiul #25
Câte atribuiri se execută, în total, în secvenţa de mai jos, dacă n şi p sunt variabile de tip întreg?
p=1; n=279;
while (n>=100)
{ p=p*10;
n=n-100;
}
Varianta 1 4
Varianta 2 6
Varianta 3 2
Varianta 4 8
Exercitiul #22
Care este valoarea pe care poate să o aibă iniţial variabila întreagă x dacă, la sfârşitul executării
secvenţei de mai jos, variabila întreagă y are valoarea 2?
y=0;
do{
x=x/10;
y=y+1;
} while(x%100==0);
Varianta 1 300
Varianta 2 5000
Varianta 3 120
Varianta 4 0
Exercitiul #43
Care este valoarea pe care trebuie să o aibă iniţial variabila întreagă x pentru ca, în urma
executării secvenţei de mai jos, să se afişeze HHHHHH?
while (x!=3)
{
x=x-1;
cout<<"HH"; | printf(”HH”);
}
Varianta 1 0
Varianta 2 4
Varianta 3 6
Varianta 4 5
Exercițiul #45
Care este numărul total de atribuiri efectuate la executarea secvenţei de instrucţiuni de mai jos?
x=4; y=6;
while (y==6)
y=y+1;
if (x==y) x=x+1;
Varianta 1 4
Varianta 2 3
Varianta 3 2
Varianta 4 5
V062I1
Toate variabilele din secvenţa de instrucţiuni C/C++ alăturată sunt întregi. Care dintre
următoarele afirmaţii este adevarată?
if (a>b)
{
aux=a;
a=b;
b=aux;
}
for(i=a;i<=b;i++)
cout<<i;
V063I1
c. j=5; d. j=5;
for(i=5;i<=5;i++) for(i=1;i<2;i++)
cout<<i; cout<<j;
V075I1
Care dintre următoarele instrucţiuni C/C++ sunt corecte sintactic dacă x şi y sunt două variabile
de tip întreg?
a. if (x < 2) && (x > - 5) b. if -5 < x < 2
{ {
x=x+1; x=x+1;
y=y-1; y=y-1;
} }
c. if x < 2 && x >-5 d. if (x < 2 && x > -5)
{ {
x=x+1; x=x+1;
y=y-1; y=y-1;
} }
V081I1
Care dintre expresiile de mai jos are valoarea 1 după executarea secvenţei de instrucţiuni C/C+
+, scrise
alăturat, în care toate variabilele sunt întregi?
a=11;b=1;
for(i=1;i<=5;i++)
{ b=b+1;
a=a-1;
}
a. a<b
b. a==b
c. a>b
d. a+b==6
V094I1
În secvenţa alăturată de instrucţiuni, variabilele i,j,k şi y sunt de tip întreg. Pentru care dintre
următoarele seturi de valori ale variabilelor i,j şi k variabila y va avea valoarea 1 în urma
executării secvenţei?
y=1;
if (k>0)
if (i!=j)
y=0;
else y=2;
V095I1
În secvenţa alăturată de instrucţiuni, variabilele i, j, k, x şi y sunt de tip întreg. Pentru care dintre
următoarele seturi de valori ale variabilelor i, j şi k variabilele x şi y vor primi valori diferite între
ele în urma executării acestei secvenţe?
if (k>0)
if (i!=j) x=0;
else x=1;
else x=2;
if (i!=j)
if (k>0) y=0;
else y=2;
else y=1;
V096I1
În secvenţa alăturată de instrucţiuni, variabilele i, j, k şi y sunt de tip întreg. Pentru care dintre
următoarele seturi de valori ale variabilelor i, j şi k variabila y va avea valoarea 1 în urma
executării secvenţei?
if (k>0)
if (i!=j) y=0;
else y=1;
else y=2;
Fisiere
in limbajul C++
1. NOTIUNI INTRODUCTIVE
Functia membru eof() - testeaza daca pointerul de fisier a ajuns la sfarsitul fisierului.
Returneaza o valoare diferita de 0 daca am ajuns la sfarsit, respectiv 0 daca nu am ajuns la sf. de
fisier.
7. Inchiderea unui fisier
Tipurile structurate sunt tipuri definite de utilizator prin combinarea altor tipuri.
1. Tipul tablou
Tipul tablou
Tipul tablou este o structura care cuprinde un numar fixat de componente de acelaş tip.
Declararea tablourilor:
tip nume[dim1][dim2]....[dimn];
unde:
Valoarea
Declarare vectori:
tip nume[dim];
ex: int a[30]; // vectorul a contine maxim 30 elemente de tipul intreg
care este impartita in locatii de aceeasi dimensiune. Fiecare locatie memoreaza un element al
tabloului.
-8 9 5 7 ..... -2
a0 a1 a2 a3 an-1
Cu elementele unui tablou se pot efectua operatiile premise de tipul de baza al tabloului.
..................
............................
cout<<”a[“<<i<<”]=”;
cin>>a[i];
cout<<a[i]<<” “;
cout<<endl;
b[i]=a[i];
1. Sortarea prin selectie (Selection Sort) a elementelor unui vector – metoda cu cele 2
for https://www.pbinfo.ro/articole/5605/sortarea-prin-selectie
http://www.youtube.com/watch?v=Ns4TPTC8whw
Sortarea prin selecție se bazează pe următoarea idee:
Fie un vector a[] cu n elemente;
- plasăm în a[0] cea mai mică valoare din vector;
- plasăm în a[1] cea mai mică valoare rămasă;
- etc.
O descriere a algoritmului este:
- parcurgem vectorul cu indicele i
- parcurgem cu indicele j elementele din dreapta lui a[i]
- dacă elementele a[i] și a[j] nu sunt în ordinea dorită, le interschimbăm
Observații
În algoritmul de mai sus, pentru fiecare valoare a lui i, în a[i] se obține cea mai mică/mare
valoare dintre elementele cu indici i, i+1, ..., n;
altfel spus, pentru fiecare i, în a[i] se selectează minimul/maximul dintre elementele i, i+1, ..., n.
Metoda se mai numește sortare prin selecție directă, sortare prin selecție implicită sau sortare
prin interschimbare.
#include <iostream>
using namespace std;
int main()
{
//declararea variabilelor
int a[20],i,n,j,aux; //aux- variabila folosita pentru interschimbare
//citirea datelor de intrare
cout<<"n=";cin>>n;
//citim elem vectorului
for (i=0;i<n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
Calculul complexitatii:
Indiferent de aranjarea initiala a elementelor, numarul de comparatii efectuate este:
��−2
��−1
��−2
��(�� − 1)
��=0
��=��+1
��=0
2
In cazul cel mai favorabil ( sir ordonat crescator) numarul de interschimbari este 0. In cazul
cel mai defavorabil (sir ordonat decrescator) pentru fiecare i se efectueaza o interschimbare
(trei atribuiri), deci costul corespunzator modificarii elementelor tabloului este 3, rezulta ca
numarul atribuirilor este:
��−2
3∑1 ��=0
= 3(�� − 1)
Luand in considerare atat comparatiile cat si atribuirile se obtine ca algoritmul sortarii prin
selectie apartine clasei O(��2). Deci pentru acest algoritm de sortare nu putem spune ca exista
caz favorabil, nefavorabil sau mediu, deoarece numarul de pasi efectuati este n(n-1)/2 indiferent
de structura datelor de intrare.
Avantajul acestei metode consta in faptul ca numarul de interschimbari de elemente din vector
este O(n) chiar daca timpul de executie este O(��2). Aceasta caracteristica devine foarte
importanta cand elementele din vector contin valori foarte mari. In acest caz, la fiecare
interschimbare trebuie mutata o cantitate mare de date, iar sortarea prin selectie minimizeaza
tocmai acest numar de interschimbari.
2. Metoda bulelor (Bubble Sort)- interschimbarea elementelor vecine(do-
while) https://www.pbinfo.ro/articole/5589/metoda-bulelor
http://www.youtube.com/watch?v=lyZQPjUT5B4
Cunoscută și sub numele BubbleSort, metoda bulelor se bazează pe următoare idee: •
fie un vector a[ ] cu n elemente
• parcurgem vectorul și pentru oricare două elemente învecinate care nu sunt în ordinea
dorită, le interschimbăm valorile
• după o singură parcurgere, vectorul nu se va sorta, dar putem repeta parcurgerea •
dacă la o parcurgere nu se face nicio interschimbare, vectorul este sortat
int main()
{
//declararea variabilelor
int a[20],i,n,j,aux; //aux- variabila folosita pentru interschimbare
//citirea datelor de intrare
cout<<"n=";cin>>n;
https://www.pbinfo.ro/articole/5588/interclasarea-tablourilor
Se dorește construirea unui alt tablou, care să conțină valorile din cele două tablouri, în
ordine.
Algoritmul pe scurt:
- toate elementele din celălalt tablou, neparcurse încă, sunt adăugate în tabloul
destinație
- tabloul destinație are nc = na + nb elemente
Algoritmul de interclasare este foarte eficient. El are complexitate O(na+nb), adica O(n).
#include <iostream>
int main()
cout<<"na: ";cin>>na;
//vom face test la citirea elem vect (sa fie in ordine crescatoare)
cout<<"a[0]=";cin>>a[0];//citim a[0]
for(int i=1;i<na;i++)
do
cout<<"a["<<i<<"]=";
cin>>a[i];
while(a[i]<a[i-1]);
cout<<"nb: ";cin>>nb;
cout<<"b[0]=";cin>>b[0];//citim b[0]
for(int i=1;i<nb;i++)
do
cout<<"b["<<i<<"]=";
cin>>b[i];
}
while(b[i]<b[i-1]);
cout<<"vect a: ";
cout<<endl;
cout<<"vect b: ";
cout<<endl;
i=0;
j=0;
//Cat timp nu am pus in c toate elementele din ambii vectori a si b (i < na si j < nb):
else c[nc++]=b[j++];
//se iese din while cand vectorul a sau b are toate elem adaugate in c
cout<<"Vect c:";
return 0;
2. Cat timp nu am pus in c toate elementele din ambii vectori a si b (i < na si j < nb):
c. Incrementam nc
incrementam j)
a. Daca i < na atunci inseamna ca mai avem elemente in vectorul a, pe care le luam
crescator.
int main ()
{
///declararea vectorului a
int a[255],n,i;
///citirea datelor de intrare
cout<<"n= "; cin>>n;
///citirea elementelor din vector
for(i=0;i<n;i++)
{
cout<<"a["<<i<<"]= ";
cin>>a[i];
}
///afisarea elementelor vectorului
for(i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;
///afisarea in ordineinversa a elementelor vectorului
for(i=n-1;i>=0;i--)
cout<<a[i]<<" ";
return 0;
}
int main()
{
int a[30], n, i,min,imin;
ifstream f("date2.txt");
f>>n;
///citesc elementele vectorului
for(i=1; i<=n;i++)
f>>a[i];
///algoritmul de determinare a valorii minime
min=a[1];
imin=1;///indicele valorii minime
for(i=2;i<=n;i++)
if(a[i]<min) {
min=a[i];
imin=i;
}
cout<<"Valoarea minima este: "<<min<<" si se afla pe pozitia"<<imin;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a[20], n, x, i, gasit=0;
cout<<"n="; cin>>n;
for(i=1; i<=n; i++) ///citirea vectorului
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
for(i=1; i<=n; i++)///afisarea vectorului
cout<<a[i]<<" "<<endl;
cout<<"dati valoarea cautata: "; cin>>x;
for(i=1; i<=n; i++)
if(a[i]==x) gasit=1;
if(gasit==1) cout<<"valoarea cautata este in vector ";
else cout<<"numarul nu are valoare in vector ";
return 0;
}
int main()
{
ifstream f ("vectori6.txt");
ofstream g("rezultat6.out");
int main()
{
ifstream f("vectori8.txt");
int n, d, i, a[20], prim, np=0;
f>>n;
for(i=1; i<=n; i++)
f>>a[i];
for(i=1; i<=n; i++)
{
prim=1;
if(a[i]==0 || a[i]==1)prim=0;
else
for(d=2; d<=a[i]/2; d++)
if(a[i]%d==0) prim=0;
if(prim==1)
{
cout<<a[i]<<" nr. prim"<<endl;
np++;
}
}
cout<<np<<" numere prime";
return 0;
}
9. Scrieți un program care realizeaza inversarea elementelor în același vector
fără a utiliza un vector suplimentar.
int main()
{
int aux, n, i, a[20];
cout<<"n= "; cin>>n;
for(i=0; i<n; i++)
cin>>a[i];
for(i=0; i<n/2; i++)
{
aux=a[i];
a[i]=a[n-i-1];
a[n-i-1]=aux;
}
for(i=0; i<n; i++)
cout<<a[i]<<" ";
return 0;
}
pt n=6 și vectorul 12 2 9 7 8 3
se va afișa 2 și 8
#include<iostream>
using namespace std;
int main()
{
int i,n,a[20],min,max;
cout<<"n= ";cin>>n;
for(i=0;i<=n-1;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
min=a[0];
max=a[n/2];
for(i=0;i<n;i++)
{
if(i<n/2){
if(a[i]<min) min=a[i];
}
else if(a[i]>max) max=a[i];
}
cout<<"Minimul din prima jumatate este:"<<min<<endl;
cout<<"Maximul din a doua jumatate este:"<<max;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a[20], aux, i,j, n,k;
cout<<"n= "; cin>>n;
cout<<"k= "; cin>>k;
for(i=1; i<=n; i++)
{
cout<<"a["<<i<<"]= ";
cin>>a[i];
}
for(i=1; i<=n; i++)
cout<<a[i]<<" ";
for(i=1; i<k-2; i++)
for(j=i+1; j<k-1; j++)
if(a[i]>a[j])
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
for(i=k+1; i<=n-1; i++)
for(j=i+1; j<=n; j++)
if(a[i]<a[j])
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
cout<<endl;
for(i=1; i<=n; i++)
cout<<a[i]<<" ";
return 0;
}
//12.Scrieti un program care determină si afisează, cel mai mare număr care
se poate forma, având exact aceleasi cifre ca număr natural citit inițial.
nr=24913 se afișează numărul maxim obținut nrmax=94321
citim numarul
extrag cifrele si le adaug in vector pe rand, incepand de la ultima
ordonez descrescator aceste cifre fol met. Bubble Sort
afisez cifrele dupa ordonare
formez numarul cu cifrele ordonate descrescator
#include<iostream>
using namespace std;
int main()
{
int i,j,n,a[20],aux,nr,nrmax=0;
cout<<"nr= ";cin>>nr;//citim numarul
i=0;
while(nr!=0)
{
a[i]=nr%10;//extrag cifrele si le adaug in vector pe rand, incepand de la ultima
nr=nr/10;
i++;//numar cifrele
}
n=i;//numarul de cifre din numar
for(i=0;i<n;i++)//afisez cifrele extrase
cout<<a[i]<<" ";
cout<<endl;
//ordonez descrescator aceste cifre fol met. Bubble Sort
for(i=0;i<=n-2;i++)//compar fiecare elem cu toate elem care-l urmeaza
for(j=i+1;j<=n-1;j++)
if(a[i]<a[j])
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
//afisez cifrele dupa ordonare
for(i=0;i<n;i++)//afisez cifrele extrase
cout<<a[i]<<" ";
cout<<endl;
//formez numarul cu cifrele ordonate descrescator
for(i=0;i<=n-1;i++)
nrmax=nrmax*10+a[i];
cout<<"Cel mai mare numar este: "<<nrmax;
return 0;
}
/*
using namespace std;
int main()
{
int n,i,j,a[20],ok=0;
cout<<"n= "; cin>>n;
for(i=1;i<=n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
//for(i=1;i<=n-1;i++)
// for(j=i+1;j<=n;j++)
//metoda imbunatatita se opreste cand ok devine 1
for(i=1;i<=n-1&&ok==0;i++)
for(j=i+1;j<=n&&ok==0;j++)
if(a[i]==a[j]) ok=1;
if(ok==1) cout<<"elementele nu sunt distincte";
else cout<<"elementele sunt distincte";
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int n,i,j,a[20],aux;
cout<<"n= "; cin>>n;
for(i=1;i<=n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
cout<<"Sirul initial este:";
cout<<endl;
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n-1;j++)
if(a[i]>a[j]&&a[i]%2==0&&a[j]%2==0);
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
}
cout<<"Sirul ordonat este:";
cout<<endl;
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
Exemplu: n=7, A={33, 13, 77, 19, 5, 34, 100} => 5 13 19 100 77 34 33
#include<iostream>
using namespace std;
int main()
{
int n,i,j,a[20],b[20],aux,ok;
cout<<"n= "; cin>>n;
for(i=1;i<=n;i++)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
ok=1;
if(a[i]==0 || a[i]==1) ok=0;
else
for(j=2;j<=a[i]/2;j++)
if(a[i]%j==0) ok=0;
b[i]=ok;
}
for(i=1;i<n;i++)
for(j=i+1;j<=n;j++)
if(b[i]==1 && b[j]==1 && a[i]>a[j] ||
b[i]==0 && b[j]==0 && a[i]<a[j] ||
b[i]==0 && b[j]==1)
{
aux=a[i];
a[i]=a[j];
a[j]=aux;
aux=b[i];
b[i]=b[j];
b[j]=aux;
}
for(i=1;i<=n;i++)
cout<<a[i]<<" ";
return 0;
}
17. Se considera un vector cu n elemente numere naturale. Sa se afiseze
elementele din vector care au k divizori, unde k este un numar natural dat. In
situatia in care nu exista elemente care sa corespunda cerintei se afiseaza
mesajul nu exista.
Pt n=6, k=3 si
elementele 25 6 9 12 11 22
se va afisa 25 9
#include <iostream>
using namespace std;
int main()
{
int n,a[20],k,i,d,nrd=2,ok=0;
cout<<"n= ";cin>>n;
for(i=1;i<=n;++i)
{
cout<<"a["<<i<<"]=";
cin>>a[i];
}
cout<<"k= ";cin>>k;
for(i=1;i<=n;++i)
{
for(d=2;d<=a[i]/2;++d)
{
if(a[i]%d==0) nrd++;
}
if(nrd==k) {cout<<a[i]<<" ";
ok=1;}
nrd=2;
}
if(ok==0) cout<<"NU EXISTA";
}
https://www.pbinfo.ro/articole/5617/vectori-caracteristici-si-de-frecventa
int main()
{
unsigned int n,m,ca,cb, c[10]={0},ch[10]={0},i;//initializam cu 0 valorile vectorilor
//caracteristici
cout<<"n=";cin>>n;///n cifre in primul sir
for(i=1;i<=n;i++)
{
cin>>ca;
c[ca]=1;
}
cout<<"m=";cin>>m;///m cifre in al doilea sir
for(i=1;i<=m;i++)
{
cin>>cb;
ch[cb]=1;
}
for(i=0;i<9;i++) ///daca in ambii vectori caracteristici corespunzatori cifrei i avem
//valoarea 1, atunci inseamna ca acea cifra apare in ambii vectori
if(c[i]==1 && ch[i]==1) cout<<i<<" ";
return 0;
}
20. În fişierul text numere.in sunt cel mult 998 de numere naturale nenule,
distincte. Scrieţi un program C/C++ eficient din punct de vedere al timpului
de execuţie, care să scrie în fişierul numere.out, pe o linie, în ordine
descrescătoare, separate prin câte un spaţiu, numerele naturale nenule, de ,
care nu apar în fişierul numere.in.
numere.in numere.out
#include <iostream>
#include<fstream>
using namespace std;
int main()
{
ifstream f("numere.in");///fisier care contine datele de intrare
ofstream g("numere.out");///fisier care contine datele de iesire
unsigned int nr,i,fr[999]={0};///declararea cu initializare a vectorului
caracteristic
///citirea datelor din fisier si crearea vectorului caracteristic
while(f>>nr)///cat timp avem numere de citit din fisier (folosim atunci cand nu
stim cate numere avem de citit)
fr[nr]=1;
///parcurgerea vectorului caracteristic si afisarea valorilor care nu apar in fisierul
numere.in
for(i=999;i>=1;i--)
if(fr[i]==0) g<<i<<" ";
///inchiderea fiserelor
f.close();
g.close();
return 0;
}
21. In fisierul text date.in se gasesc maxim 2000 de numere naturale de maxim 2 cifre. Sa
se afiseze numărul care apare de număr minim de ori si numărul care apare de număr
maxim de ori in fișier. Daca exista mai multe astfel de numere, se va afisa primul număr in
ordine crescatoare care indeplineste conditia.
date.in : 2 4 6 5 2 5 5 12 87 99 1
fr[100]={0}; //initializarea vectorului cu 0
i 0 1 2 3 4 5 6 7 … 12 … 87 … 99
fr[i 0 1 2 0 1 3 1 0 1 1 1
]
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream f("date.in");
unsigned int nr, min=100, max=0, fr[100]={0}, i;
while(f>>nr)
fr[nr]++;///vector de aparitie
for(i=0; i<=99; i++)
{
if(fr[i]<min&&fr[i]!=0) min=fr[i];
if(fr[i]>max) max=fr[i];
}
for(i=0; i<=99; i++)
if(fr[i]==min)
{
cout<<i<<" ";
break;
}
for(i=0; i<=99; i++)
if(fr[i]==max)
{
cout<<i<<" ";
break;
}
return 0;
}
22. În fişierul numere.in se află pe prima linie maxim un milion de numere naturale de cel
mult 2 cifre fiecare. Scrieţi programul C/C++ care citeşte numerele din fişierul numere.in şi
determină şi afişează pe ecran care dintre numerele citite apare de cele mai multe ori în
fişier.
Exemplu :
numere.in se afişează
5316313613 3
23. Se da un număr natural n între 1 şi 100000. Să se afişeze numărul de elemente al
mulţimii cifrelor sale și cel mai mare număr care se poate forma cu cifrele sale.
Indicaţie de rezolvare: Construim vectorul de frecvenţe asociat numărului n, notat cu fr. Numărul
maxim care poate fi format cu cifrele sale se obţine prin parcurgerea în ordine descrescătoare, de
la 9 la 0, a vectorului de frecvenţe şi scriind fiecare cifră c de fr[c] ori.
Vectorul de apariții pentru cifrele unui număr se declară sub forma unui vector cu 10
componente, de la a[0],…,a[9]. Acestea vor fi iniţializate cu 0, iar după citirea numărului n se va
incrementa cu 1 numărul apariţiilor pentru fiecare cifră a lui n.
Atenţie! Vectorul de frecvenţe nu permite refacerea numărului citit iniţial, dacă este necesară
valoarea acestuia trebuie memorată separat.
i 0 1 2 3 4 5 6 7 8 9
fr[i 0 0 3 3 3 0 0 0 0 0
]
#include <iostream>
using namespace std;
int main()
{
int i,nr,fr[10]={0};
cout<<"nr="; cin>>nr;
while(nr>0) //construim vectorul de aparitii
{
fr[nr%10]++;
nr=nr/10;
}
for(i=9;i>=0;i--)
if(fr[i]>0)
{
for(int j=1;j<=fr[i];j++)//merg pe cate aparitii are
cout<<i ; //si de atatea ori afisez cifra i
}
return 0;
}
Algoritmi elementari
Stergerea unui element de pe o pozitie data
for(i=poz;i<n;i++)
a[i]=a[i+1];
n- -;
int main()
{
int n, poz, a[20], max, i;
cout<<"n= "; cin>>n;
///citirea elementelor din vector
for(i=0; i<=n-1; i++)
cin>>a[i];
///alg de detrminare a maximului
max=a[0];
for(i=1; i<=n-1; i++)
if(a[i]>max)
{
max=a[i];
poz=i;
}
///stergem maximul prin mutarea spre stanga a elementelor
for(i=poz; i<=n-1; i++)
a[i]=a[i+1];
n--;
///afisarea elementelor vectorului
for(i=0; i<=n-1; i++)
cout<<a[i]<< " ";
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a[100],n,i,j;
cout<<"n=";cin>>n;
//citirea elem vect
for(i=0;i<n;i++)
cin>>a[i];
for(i=0; i<n; i=i+2)
{
for(j=n-1;j>=i;j--)///pt ca val sa nu fie inlocuite incepem prelucr de la dr la stg
a[j+1]=a[j];
a[i]=0;//plasez valoarea 0 pe pozitie para
n++;//incrementez nr de elemente din vector
}
//afisez elementele din vector
for(i=0;i<n;i++)
cout<<a[i]<<” “;
return 0;
}
Aplicatii cu matrici nepătratice (numarul de linii ≠ numarul de coloane)
1. Să se citească și să se afișeze o matrice cu n linii și m coloane cu elemente întregi date.
pt n= 2 , m=3 si elementele
a[0][0]=1
a[0][1]=2
a[0][2]=3
a[1][0]=4
a[1][1]=5
a[1][2]=6
se va afisa
123
456
iar pentru elementele
a[0][0]=12
a[0][1]=2365
a[0][2]=2
a[1][0]=1523
a[1][1]=137
a[1][2]=1526
se va afisa
12 2365 2
1523 137 1526
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
///declararea matricei si a datelor de intrare
int a[30][30],n,m,i,j;
///citirea datelor de intrare
cout<<"n= ";cin>>n;///nr linii
cout<<"m= ";cin>>m;///nr coloane
for(i=0;i<n;i++)
for(j=0;j<m;j++)
{
cout<<"a["<<i<<"]["<<j<<"]= ";
cin>>a[i][j];
}
///afisarea matricei
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
cout<<setw(5)<<a[i][j];
cout<<endl;
}
return 0;
}
2. Fiind dată o matrice cu n linii și m coloane, cu elemente întregi de maxim două cifre, să
se calculeze suma tuturor elementelor din matrice.
pt datele de la pb 1 se va afisa s=21
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
///declararea matricei si a datelor de intrare
int a[30][30],n,m,i,j,s=0;
///citirea datelor de intrare
cout<<"n= ";cin>>n;///nr linii
cout<<"m= ";cin>>m;///nr coloane
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>a[i][j];
///afisarea matricei
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
cout<<setw(5)<<a[i][j];
cout<<endl;
}
///suma tuturor elementelor
for(i=0;i<n;i++)
for(j=0;j<m;j++)
s=s+a[i][j];
cout<<endl<<"suma elementelor este: "<<s;
return 0;
}
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
///declararea matricei si a datelor de intrare
int a[30][30],n,m,i,j,s;
///citirea datelor de intrare
cout<<"n= ";cin>>n;///nr linii
cout<<"m= ";cin>>m;///nr coloane
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>a[i][j];
///afisarea matricei
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
cout<<setw(5)<<a[i][j];
cout<<endl;
}
///suma elementelor pe fiecare linie
for(i=0;i<n;i++)
{
s=0;
for(j=0;j<m;j++)
s=s+a[i][j];
cout<<endl<<"suma elementelor de pe linia "<<i<<" este "<<s;
}
return 0;
}
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
///declararea matricei si a datelor de intrare
int a[30][30],n,m,i,j,s;
///citirea datelor de intrare
cout<<"n= ";cin>>n;///nr linii
cout<<"m= ";cin>>m;///nr coloane
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cin>>a[i][j];
///afisarea matricei
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
cout<<setw(5)<<a[i][j];
cout<<endl;
}
///suma elementelor pe fiecare coloana
for(j=0;j<m;j++)
{
s=0;
for(i=0;i<n;i++)
s=s+a[i][j];
cout<<endl<<"suma elementelor de pe coloana "<<j<<" este "<<s;
}
return 0;
}
s=64
#include<iostream>
using namespace std;
int main()
{
int n,m,a[20][20],s=0,i,j;
cout<<"n= "; cin>>n;
cout<<"m= "; cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(i==1 || j==m || i==n || j==1)
s=s+a[i][j];
}
cout<<"s= "<<s;
return 0;
}
7. Scrieti un program C/C++ care citeste de la tastatura trei numere naturale n, m, k si apoi
m*n numere intregi reprezentand elementele unui tablou bidimensional cu linii
numerotate de la 1 la m si coloane numerotate de la 1 la n. Programul elimina linia k si
reafiseaza matricea.
#include<iostream>
using namespace std;
int main()
{
unsigned int m,n,k;
int i,j,a[30][30];
cout<<"m= ";cin>>m;///linie
cout<<"n= ";cin>>n;///coloana
cout<<"k= ";cin>>k;
///citirea elementelor din matrice
for(i=1;i<=m; i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
///eliminarea liniei k
for(i=k;i<=m;i++)
for(j=1;j<=n; j++)
a[i][j]=a[i+1][j];
m--;
cout<<endl;
///afisarea matricii
for(i=1; i<=m; i++)
{
for(j=1; j<=n; j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
8.
pt n=4 si m=5 obtinem matricea
11111
12222
12333
12344
#include<iostream>
using namespace std;
int main()
{
int a[100][100],m,n,i,j;
///testarea pentru m si n pt a indeplini conditiile din cerinta
do{
cout<<"n= ";cin>>n;
}while(n<2 || n>10);
do{
cout<<"m= ";cin>>m;
}while(m<2 || m>10);
///construim matricea prin atribuire de valori conform cerintei
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(i<j)a[i][j]=i;
else a[i][j]=j;
///afisarea matricei
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a[25][25], i,j,n, S=0,P=1;
cout<<"n= ";cin>>n;
///citirea elementelor din matrice
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
/**Varianta1
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(i==j) S=S+a[i][j];
if(i+j==n-1) P=P*a[i][j];
}
*/
///Varianta 2
for(i=0;i<n;i++)
{
S=S+a[i][i];
P=P*a[i][n-i-1];///pt ca elem de pe DS indeplinesc conditia i+j=n-1, obtinem j=n-1-i
}
cout<<"Suma elementelor de pe DP este "<<S<<endl;
cout<<"Produsul elementelor de pe DS este "<<P;
return 0;
}
pt n=3 si matricea
123
254
347
se afișează mesajul Matricea este simetrica fata de DP
#include<iostream>
using namespace std;
int main()
{
int a[25][25], i,j,n, sim=1;///presupunem ca matricea este simetrica
cout<<"n= ";cin>>n;
///citirea elementelor din matrice
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j];
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[i][j]!=a[j][i]) sim=0;
if(sim==1) cout<<"Matricea este simetrica";
else cout<<"Matricea nu este simetrica";
return 0;
}
int main()
{
int a[25][25], i,j,n;
cout<<"n= ";cin>>n;
///am atribuit valori elementelor din matrice, nu exista citirea elementelor
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==j) a[i][j]=2;
else if(i<j) a[i][j]=1;
else a[i][j]=3;
///afisarea matricei
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}
12. Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (1≤ n≤ 10) apoi
construieşte în memorie o matrice cu 2*n linii şi 2*n coloane, numerotate de la 1 la 2*n, astfel
încât parcurgând doar liniile impare ale matricei de sus în jos şi fiecare linie impară de la stânga
la dreapta se obţin în ordine strict crescătoare toate numerele impare cuprinse în intervalul [1,
4*n ], iar parcurgând doar liniile pare ale matricei de sus în jos şi fiecare linie pară de la dreapta
2
la stânga se obţin în ordine strict crescătoare toate numerele pare cuprinse în intervalul [1,
4*n ], ca în exemplu.
2
Programul afişează pe ecran matricea obţinută, câte o linie a matricei pe câte o linie a
ecranului, elementele fiecărei linii fiind separate prin câte un spaţiu.
Exemplu: pentru n=2 se obţine matricea alăturată
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int a[10][10],n,i,j,val=1;
do{
cout<<"n= ";
cin>>n;
}while(n<1 || n>10);
/// Introducem valori pe liniile impare , pornind de la o valoare initiala , val=1
for(i=1;i<=2*n;i++)
for(j=1;j<=2*n;j++)
if(i%2!=0)
{
a[i][j]=val;
val+=2;
}
/// Introducem valori pe liniile pare de la dreapta la stanga, pornind de la o valoare initiala ,
val=2
val=2;
for(i=1;i<=2*n;i++)
for(j=2*n;j>=1;j--)
if(i%2==0)
{
a[i][j]=val;
val+=2;
}
/// Afisarea matricei
for(i=1;i<=2*n;i++)
{
for(j=1;j<=2*n;j++)
cout<<setw(4)<<a[i][j];
cout<<endl;
}
return 0;
}
Aplicatii mixte
14.
15.
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int i, j, n, p, a[20][20], val=1;
do
{
cout<<"n = "; cin>>n;
} while(n<2 || n>20);
do
{
cout<<"p = "; cin>>p;
} while(p<1 || p>20);
16.
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int i, j, n, a[20][20];
do
{
cout<<"n = "; cin>>n;
} while(n<2 || n>23);
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
do
{
cin>>a[i][j];
}while(a[i][j]<0 || a[i][j]>9999);
for(j=1;j<=n;++j)
cout<<a[1][j]<<" ";
for(i=2;i<=n;++i)
cout<<a[i][n]<<" ";
for(j=n-1;j>=1;--j)
cout<<a[n][j]<<" ";
for(i=n-1;i>=2;--i)
cout<<a[i][1]<<" ";
return 0;
}
17. Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (2≤n≤24) şi
construieşte în memorie o matrice cu n linii şi n coloane ale cărei elemente vor primi valori după
cum urmează:
- elementele aflate pe diagonala principală a matricei vor primi valoarea 0
- elementele de pe prima coloană, cu excepţia celui aflat pe diagonala principală vor primi
valoarea n
- elementele de pe a doua coloană, cu excepţia celui aflat pe diagonala principală vor primi
valoarea n-1
...
- elementele de pe ultima coloană, cu excepţia celui aflat pe diagonala principală vor primi
valoarea 1
Programul va afişa matricea astfel construită pe ecran, câte o linie a matricei pe câte o linie a
ecranului, cu câte un spaţiu între elementele fiecărei linii (ca în exemplu).
Exemplu: pentru n=4 se va afişa matricea alăturată.
0321
4021
4301
4320
18. Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (2≤n≤24) şi
construieşte în memorie o matrice cu n linii şi n coloane ale cărei elemente vor primi valori după
cum urmează:
- elementele aflate pe diagonala secundară a matricei vor primi valoarea 0
- elementele de pe prima linie, cu excepţia celui aflat pe diagonala secundară vor primi valoarea
n
- elementele de pe a doua linie, cu excepţia celui aflat pe diagonala secundară vor primi
valoarea n-1
...
- elementele de pe ultima linie, cu excepţia celui aflat pe diagonala secundară vor primi
valoarea 1
Programul va afişa matricea astfel construită pe ecran, câte o linie a matricei pe câte o linie a
ecranului, cu câte un spaţiu între elementele fiecărei linii (ca în exemplu).
Exemplu: pentru n=4 se va afişa matricea alăturată.
4440
3303
2022
0111
19. Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (1≤n≤6) apoi
construieşte în memorie o matrice cu n linii şi n coloane, astfel încât parcurgând liniile matricei
de sus în jos şi de la stânga la dreapta se obţin, în prima linie primele n numere ale şirului
Fibonacci în ordine crescătoare, în linia a doua următoarele n numere ale şirului Fibonacci în
ordine descrescătoare, în linia a treia următoarele n numere ale acestui şir în ordine
crescătoare, şi aşa mai departe, ca în exemplu. Elementele şirului Fibonacci se obţin astfel:
primul element este 0, al doilea este 1, iar elementele următoare se obţin însumând cele două
elemente care preced elementul curent. Astfel, primele 16 elemente ale acestui şir sunt: 0, 1, 1,
2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610.
Programul afişează pe ecran matricea obţinută, câte o linie a matricei pe câte o linie a
ecranului, elementele fiecărei linii fiind separate prin câte un spaţiu.
Exemplu: pentru n=4 se obţine matricea alăturată.
0 1 1 2
13 8 5 3
21 34 55 89
610 377 233 144
20. Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (1≤n≤100)şi apoi
elementele unui tablou bidimensional cu n linii şi n coloane, care memorează numere naturale
cu cel mult 9 cifre fiecare; programul afişează pe ecran acele valori din tablou care sunt strict
mai mici decât toate elementele cu care se învecinează direct (aflate pe aceeaşi linie dar pe o
coloană alăturată sau pe aceeaşi coloană dar pe o linie alăturată), ca în exemplu. Numerele
afişate vor fi separate prin câte un spaţiu.
Exemplu: pentru n=4 şi matricea alăturată se afişează valoarea 0.25 (S1=2.75, calculată din
elementele aflate deasupra diagonalei principale, marcate cu chenar, şi S2=2.5, calculată din
elementele subliniate).
-1 2 -4 5
0 6 3 1
2 4 2 0
3 -5 1 -3
22. Scrieţi un program C/C++ care citeşte de la tastatură numerele naturale m şi n din intervalul
[1,24], apoi construieşte în memorie şi afişează pe ecran un tablou bidimensional cu m linii şi n
coloane astfel încât prin parcurgerea acestuia linie cu linie de sus în jos şi fiecare linie de la
stânga la dreapta, se obţin în ordine descrescătoare toate numerele naturale de la 1 la m*n, ca
în exemplu. Fiecare linie a tabloului este afişată pe câte o linie a ecranului, elementele aceleiaşi
linii fiind separate prin câte un spaţiu. Exemplu: pentru m=4 şi n=3 se va construi şi afişa tabloul
alăturat.
12 11 10
9 8 7
6 5 4
3 2 1
23. Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (2<n<20) şi
construieşte în memorie o matrice cu n linii şi n coloane, numerotate de la 1 la n, în care fiecare
element aflat pe chenarul exterior al matricei este egal cu suma dintre indicele liniei şi indicele
coloanei pe care se află, iar fiecare dintre celelalte elemente este egal cu suma celor trei
“vecini” situaţi în matrice pe linia anterioară. Două elemente din matrice se numesc vecine dacă
se găsesc alături pe linie, coloană sau diagonală. Chenarul exterior al unei matrice este format
din prima linie, ultima linie, prima coloană şi ultima coloană.
Elementele matricei vor fi afişate pe ecran, câte o linie a matricei pe câte o linie a ecranului cu
câte un spaţiu între elementele fiecărei linii.
24. Scrieţi un program C/C++ care citeşte de la tastatură un număr natural nenul, cu maximum
8 cifre, construieşte în memorie şi afişează apoi in fisierul text date.out o matrice pătratică,
având numărul de linii şi de coloane egal cu numărul de cifre ale numărului dat, completată cu
cifrele numărului citit.
Astfel, elementele de pe prima coloană a matricei vor fi toate egale cu cifra unităţilor numărului
dat, elementele de pe a doua coloană a matricei vor fi toate egale cu cifra zecilor numărului dat,
şi aşa mai
departe, ca în exemplu.
Exemplu: dacă se citeşte numărul 1359, matricea construită va fi cea alăturată.
9531
9531
9531
9531
m=numar coloane
...
an−10
...
an−11
...
...
...
an−1m−1
)
Forma generala:
=> forma generala a elementelor din linia x: a[x][j], j=0, 1, ...., m-1
coloana x: a0x
a1x
.....
an-1 x
=> forma generala a elementelor din coloana x: a[i][x], i=0, 1, ...., n-1
for(i=0;i<n;i++)
for(j=0;j<m;j++)
for(j=0;j<m;j++)
for(i=0;i<n;i++)
cout<<"n=";cin>>n;//nr linii
cout<<”m=”cin>>m;//nr coloane
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
ifstream f("date.in”);
f>>n>>m;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
f>>a[i][j];
f.close();
linie
coloana
linie coloane
Declarare:
tip nume[dim1][dim2];
nume=identificatorul(numele) matricei
metoda I for(i=0;i<n;i++)
for(j=0;j<m;j++)cout<<a[i][j]<<” ”;
cout<<endl;
12 12365 2
*/
ofstream g("date.out”);
for(i=0;i<n;i++)
for(j=0;j<m;j++)g<<a[i][j]<<” ”;
g<<endl;
g.close();
metoda II for(i=0;i<n;i++)
for(j=0;j<m;j++)cout<<setw(5)<<a[i][j];
cout<<endl;
}
/* setw(x)= afiseaza elem pe x sau x-1
Se utilizeaza #include<iomaninp>
12 2365 2
ofstream g("date.out”);
for(i=0;i<n;i++)
for(j=0;j<m;j++)g<<setw(5)<<a[i][j];
g<<endl;
g.close();
1.Fiind data o matrice cu n linii si m coloane cu elemente intregi de maxim 2 cifre sa se calculeze suma
#include<iostream>
#include<iomanip>
int main()
//declararea variabilelor
int a[20][20],i,j,n,m,s=0;
cout<<"n=";cin>>n;
cout<<"m=";cin>>m;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
for(i=0;i<n;i++)
for(j=0;j<m;j++)cout<<setw(4)<<a[i][j];
cout<<endl;
//rezolvarea cerintei
for(i=0;i<n;i++)
for(j=0;j<m;j++)
s=s+a[i][j];
cout<<"s="<<s;
return 0;
...
an−10
...
an−11
...
...
...
an−1n−1
Forma generala:
=> forma generala a elementelor din linia x: a[x][j], j=0, 1, ...., n-1
coloana x
a0x
a1x
.....
an-1 x
=> forma generala a elementelor din coloana x: a[i][x], i=0, 1, ...., n-1
Diagonala principala(DP)
.....................................................................................................
linie coloane
......................................................................................................
deasupra DS sub DS
i=0,1...,n-2, j=0,..., n-i-2 i=1,..., n-1, j=n-i,...,n-1