Sunteți pe pagina 1din 5

Bacalaureat - Științe ale naturii Teorie - Șiruri de numere

Șiruri de numere
1. Șiruri de n numere
 Problema 1: Câte numere pozitive există într–un șir de n numere întregi
Enunț: Se citesc de la tastatură un șir de n numere întregi. Să se calculeze și să se afișeze câte numere strict pozitive există
în șir.
Exemplu: Dacă n=6 și se introduce șirul (3,-1,0,5,-7,1), programul va afișa valoarea 3, deoarece valorile 3,5 și 1 sunt valori
strict pozitive.
֠ Soluție: În rezolvarea problemei, vom avea nevoie de următoarele variabile:
• n, în care precizăm numărul de elemente a șirului,
• (contor) i pentru a citi fiecare dintre cele n valori a șirului de n numere întregi,
• o singură variabilă, în care se va citi pe rând câte o valoare, fie acesta x,
• (contor) k, pentru numărarea valorilor pozitive din șir.
În rezolvarea problemei enunțate, vom proceda astfel:
• inițializăm variabila contor(pentru numărarea valorilor pozitive) cu 0: k=0;
• citim numărul de elemente din care va fi compus șirul: cin>>n;
• folosind instrucțiunea repetitivă cu număr cunoscut de pași(for):
o citim câte o valoare în variabila x: cin>>x;
o testăm dacă valoarea din șir este pozitivă (x>0); în caz afirmativ incrementăm valoarea lui k: k++;
• după introducerea celor n numere întregi, se testează dacă valoarea contorului k este diferită de 0; în caz
afirmativ se tipărește numărul de valori pozitive, iar în caz contrar se afișează un mesaj corespunzător(de
exemplu ”Nu exista numere pozitive!”).
#include <iostream>
using namespace std;
int main(){
int n,i,x,k=0;
cout << "Intr. nr de elem. a sirului: "; cin>>n;
for(i=1;i<=n;i++){
cout<<"x= ";cin>>x;
if(x>0)
k++;
}
if(k!=0)
cout<<k<<endl;
else cout<<"Nu exista numere pozitive!"<<endl;
return 0;
}

 Problema 2: Maximul dintr–un șir de n numere întregi


Enunț: Se citesc de la tastatură un șir de n numere întregi(maxim 8 cifre). Să se determine și să se afișeze cel mai mare
număr din șirul de n numere întregi.
Exemplu: Dacă n=6 și se introduce șirul (3,-1,0,5,-7,1), programul va afișa valoarea 5(cea mai mare valoare din șirul dat).
֠ Soluție: În rezolvarea problemei, vom avea nevoie de următoarele variabile:
• n, în care precizăm numărul de elemente a șirului,
• (contor) i pentru a citi fiecare dintre cele n valori a șirului de n numere întregi,
• o singură variabilă, în care se va citi pe rând câte o valoare, fie acesta x,
• maxim, pentru păstrarea celui mai mare număr din șir.
În rezolvarea problemei enunțate, vom proceda astfel:
• inițializăm variabila maxim cu cea mai mică valoare posibilă(ținând cont de cerințele problemei):
maxim= – 99999999;
• citim numărul de elemente din care va fi compus șirul: cin>>n;
• folosind instrucțiunea repetitivă cu număr cunoscut de pași(for):
o citim câte o valoare în variabila x: cin>>x;
o testăm dacă valoarea din șir este mai mare decât valoarea din maxim(x>maxim); în caz afirmativ
modificăm valoarea variabile maxim valoarea găsită mai mare;
• la final, afișăm valoarea obținută în variabila maxim.
#include <iostream>
using namespace std;
int main(){
int n,x,maxim=-99999999;
cout <<"Intr. nr de elem. a sirului: "; cin>>n;
for(int i=1;i<=n;i++){
cout<<"x= ";cin>>x;
if(x>maxim)
maxim=x;
}
cout<<"Maximul din sir este: "<<maxim<<endl;
return 0;
}

 Exerciții și probleme
1. (Bacalaureat, Model 2013) În secvența de mai jos toate variabilele sunt de tip întreg. Numerele citite sunt naturale, cu
cel mult două cifre și cel puțin unul dintre ele este impar. Scrieți expresia care poate înlocui punctele de suspensie astfel
încât, în urma executării secvenței obținute, valoarea variabilei min să fie egală cu cel mai mic număr impar citit.
min=100;
for(i=1;i<=10;i++)
{ cin>>x;
if(……………………)
min=x;
}

2. (Bacalaureat, Iunie-Iulie 2013) În secvenţa de mai jos, toate variabilele sunt de tip întreg. Scrieţi instrucțiunea sau
instrucțiunile care pot înlocui punctele de suspensie astfel încât, în urma executării secvenţei obţinute, valoarea
variabilei ok să fie 1 dacă toate numerele citite sunt egale cu 2013, sau valoarea 0 altfel.
ok=1;
for(i=1;i<=10;i++)
{ cin>>x;
……………………
}
3. (Bacalaureat, August-Septembrie 2014) În secvenţa alăturată toate variabilele sunt de tip întreg, iar numerele citite
sunt naturale. Scrieţi secvența înlocuind punctele de suspensie astfel încât, în urma executării secvenţei obţinute,
valoarea variabilei ok să fie 1 dacă toate valorile citite au fost strict mai mici decât 2014, sau 0 altfel.
ok=……;
for(i=1;i<=10;i++)
{ cin>>x;
……………………
}

4. (Bacalaureat, Iunie-Iulie 2016) În secvenţa de mai jos toate variabilele sunt de tip întreg. Scrieţi secvența înlocuind
punctele de suspensie astfel încât, în urma executării secvenţei obţinute, valoarea variabilei p să fie 1, dacă s-au citit
doar numere strict pozitive, sau 0 altfel.
p=............;
for(i=1;i<=10;i++)
{ cin>>x;
..............
}

5. (Bacalaureat, August-Septembrie 2016) În secvenţa alăturată toate variabilele sunt de tip întreg. Scrieţi secvența,
înlocuind punctele de suspensie astfel încât, în urma executării secvenţei obţinute, valoarea variabilei s să fie egală cu
suma numerelor întregi citite care au cel mult două cifre.
s=.........;
for(i=1;i<=10;i++)
{ cin>>x; |
if(.............)
s=s+x;
}

2. Șiruri de numere citite pe rând(până la introducerea valorii 0)


 Problema 1: Câte numere pozitive există într-un șir de numere întregi
Enunț: Se citesc de la tastatură un șir de numere întregi, până la introducerea valorii 0( care nu face parte din șir). Să se
calculeze și să se afișeze câte numere strict pozitive există în șir.
Exemplu: Dacă se introduce șirul (3,-1,-2,5,-7,1,0), programul va afișa valoarea 3, deoarece valorile 3,5 și 1 sunt valori strict
pozitive.
֠ Soluție: În rezolvarea problemei, vom avea nevoie de o singură variabilă, în care se va citi pe rând câte o valoare, atâta
timp cât nu se introduce valoarea 0. Deoarece problema enunțată, cere să se numere câte valori, dintre cele citite, sunt
pozitive vom lua o altă variabilă(de tip contor), fie acesta k. În rezolvarea problemei enunțate, vom proceda astfel:
• Inițializăm variabila contor cu 0: k=0;
• Citim prima valoare din șir: cin>>x;
• Cât timp valoarea citită este diferită de 0(x!=0):
o testăm dacă valoarea din șir este pozitivă (x>0); în caz afirmativ incrementăm valoarea contorului
k
o citim următoarea valoarea, tot în variabila x și reluăm verificările
• la introducerea valorii 0, se iese din structura repetitivă și se testează dacă valoarea contorului este diferită
de 0; în caz afirmativ se tipărește numărul de valori pozitive, iar în caz contrar se afișează un mesaj
corespunzător(de exemplu ”Nu exista numere pozitive!”).
#include <iostream>
using namespace std;
int main(){
int x,k=0;
cout << "Intr. prima valoare"; cin>>x;
while(x!=0){
if(x>0)
k++;
cout<<"x= ";cin>>x;
}
if(k!=0) cout<<k<<endl;
else cout<<"Nu exista numere pozitive!" <<endl;
return 0;
}

3. Afișarea unor șiruri de numere


 Problema 1: Afișarea unui triunghi de numere
Enunț: Se citește de la tastatură un număr natural în variabila n. Să se afișeze triunghiul de numere de mai jos:
1
1 2
1 2 3
……………………
1 2 3 … n
֠ Soluție: Din exemplu, rezultă că triunghiul va avea n linii pe care le numerotăm 1,2,…,n. Pentru aceasta vom folosi un
ciclu FOR, în care valorile contorului i vor fi numerele de ordine a liniilor: for(i=1;i<=n;i++). Numărul de elemente de pe
o linie este dat de indicele liniei, așadar pentru a afișa valori de la 1 la i vom folosi un alt ciclu FOR în care contorul j va lua
valori de la 1 la i: for(j=1;j<=i;j++). După afișarea tuturor elementelor de pe o linie, cursorul trebuie ”trimis la linia
următoare”: cout<<endl;.
#include <iostream>
using namespace std;
int main(){
int n,i,j;
cout << "n= ";cin>>n;
for(i=1;i<=n;i++){
for(j=1;j<=i;j++)
cout<<j<<" ";
cout<<endl;
}
return 0;
}

 Problema 2: Afișarea unei matrici de numere


Amintim ca exemplu o matrice pătratică cu 4 linii și 4 coloane:
Linia 1, Coloana 1 (1,1) Linia 1, Coloana 2 (1,2) Linia 1, Coloana 3 (1,3) Linia 1, Coloana 4 (1,4)
Linia 2, Coloana 1 (2,1) Linia 2, Coloana 2 (2,2) Linia 2, Coloana 3 (2,3) Linia 2, Coloana 4 (2,4)
Linia 3, Coloana 1 (3,1) Linia 3, Coloana 2 (3,2) Linia 3, Coloana 3 (3,3) Linia 3, Coloana 4 (3,4)
Linia 4, Coloana 1 (4,1) Linia 4, Coloana 2 (4,2) Linia 4, Coloana 3 (4,3) Linia 4, Coloana 4 (4,4)
Enunț: Se citește de la tastatură un număr natural în variabila n. Să se afișeze matricea de numere de mai jos:
1 2 3 4 … n
2 3 4 5 … n+1
3 4 5 6 … n+2
……………………………
n n+1 … 2*n-1
֠ Soluție: Din exemplu, rezultă că matricea va avea n linii pe care le numerotăm 1,2,…,n. Pentru aceasta vom folosi un
ciclu FOR, în care valorile contorului i vor fi numerele de ordine a liniilor: for(i=1;i<=n;i++). Valoarea primului element
de pe orice linie este dat de indicele liniei, iar valorile celorlalte elemente se incrementează până vor fi n valori pe fiecare
linie; așadar avem de afișa pentru fiecare linie i, valori de la i la n + i -1, lucru care se realizează prin ciclul:
for(j=i;j<=n+i-1;j++). După afișarea tuturor elementelor de pe o linie, cursorul trebuie ”trimis la linia următoare”:
cout<<endl;.

#include <iostream>
using namespace std;

int main(){
int n,i,j;
cout << "n= ";cin>>n;
for(i=1;i<=n;i++){
for(j=i;j<=n+i-1;j++)
cout<<j<<" ";
cout<<endl;
}
return 0;
}

 Exerciții și probleme
1. (Bacalaureat, Iunie-Iulie 2015) Variabilele i și j sunt de tip întreg. Indicați expresia care poate înlocui punctele de
suspensie astfel încât, în urma executării secvenței obținute, să se afișeze numele:
5 4 3 2 1
4 4 3 2 1
3 3 3 2 1
2 2 2 2 1
1 1 1 1 1
for(i=1;i<=5;i++){
for(j=1;j<=5;j++)
if(…………………) cout<<6–j<<” ”;
else cout<<6–i<<” ”;
cout<<endl;
}
a. i<j b. i>j c. i+j<5 d. i+j>5
2. Variabilele i și j sunt de tip întreg. Indicați expresia care poate înlocui punctele de suspensie astfel încât, în urma
executării secvenței obținute, să se afișeze:
–+–+–
+–+–+
–+–+–
+–+–+
–+–+–
for(i=1;i<=5;i++){
for(j=1;j<=5;j++)
if(…………………) cout<<”– ”;
else cout<<”+ ”;
cout<<endl;}
a. i%2+j%2==0 c. i+j%2==0
b. i%2+j==0 d. (i+j)%2==0

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