Sunteți pe pagina 1din 5

MINISTERUL EDUCAȚIEI, CULTURII ȘI CERCETĂRII AL REPUBLICII MOLDOVA

IP CENTRUL DE EXCELENȚĂ ÎN INFORMATICĂ ȘI TEHNOLOGII INFORMAȚIONALE

SPECIALITATEA: REȚELE DE CALCULATOARE


DISCIPLINA: PROGRAMARE PROCEDURALĂ

Listru Gheorghe – R-1911

REALIZAREA SARCINILOR ÎN CLASĂ

Varianta II
Problema 1
Se citeşte un număr natural n în baza 10 şi b un număr natural 2<=b<=9 reprezentând o bazăde numeraţie.
Să se transforme numărul n în baza b.

Programul C++
#include <iostream>
#include<math.h>
using namespace std;
int i,y,baza,num,a,b,n;
int ZecInBaza(int baza, int n);
int main(){
i=0,y=1,baza=0;
char r;
while(y!=0)
{
cout<<"Introduceti numarul: ";cin>>i;
cout<<"Introduceti baza: ";cin>>baza;
cout<<"Numarul " <<i<<" in baza 10 "<<", in baza "<<baza<<":
"<<ZecInBaza( baza, i)<<endl;
cout<<"\nDoriti sa mai incercati odata? (Y/N): ";cin>>r;
if(r=='Y'||r=='y'){
y=1;

cout<<"____________________________________________________________"<<endl<<endl
;}
else y=0;
}
return 0;
}
int ZecInBaza(int baza, int n){
num=0,i=0,a=n,b=0;
while(a != 0){
b = a%baza;
a = a / baza;
num = pow(10,i)*b + num;
i++;
}
return num;
}
Problema 2
Scrieţi o funcţie într-un program, care verifică dacă un număr este palindrom impar. Funcţia va primi ca
parametru numărul şi va returna 1 dacă numărul este palindrom şi zero în caz contrar

Programul C++
#include <iostream>
using namespace std;
int palindrom(int n);
int main(){
int n,y=1;
char r;
while(y!=0)
{
cout<<"Introduceti un numar: ";cin>>n;
if(palindrom(n))
cout<<"Numarul este palindrom impar!"<<endl;
else
cout<<"Numarul nu este palindrom impar!"<<endl;
cout<<"\nDoriti sa mai incercati odata? (Y/N): ";cin>>r;
if(r=='Y'||r=='y'){
y=1;

cout<<"____________________________________________________________"<<endl<<endl
;}
else y=0;
}
return 0;
}
int palindrom(int n){
int copie,invers=0,m=n;
copie=n;
while (n!=0){
invers=invers*10+n%10;
n=n/10;
}
if (invers==copie && m%2!=0)
return 1;
else
return 0;
}

Problema 3
Se citeşte un număr natural n. Să se descompună în produs de numere ale ciurului lui Eratostene.

Programul C++
#include <iostream>
using namespace std;
void Eratostene(int n);
int main()
{
int n,y=1;
char r;
while(y!=0)
{
cout<<"Introduceti un numar: ";cin>>n;
cout<<"\nNumarul "<<n<<" descompus in produs de numere ale ciurului
lui Eratostene: "<<endl;
Eratostene(n);cout<<endl;
cout<<"Doriti sa mai incercati odata? (Y/N): ";cin>>r;
if(r=='Y'||r=='y'){
y=1;

cout<<"____________________________________________________________"<<endl<<endl
;}
else y=0;
}
return 0;
}
void Eratostene(int n){
int p,f=2;
while(n>=f){
if(n%f==0){
n=n/f;
cout<<f<<" ";
}
else{
f++;
}
}
cout<<endl;
}

REALIZAREA SARCINILOR PENTRU ACASĂ

Problema 1
Subprogramul f returnează prin intermediul parametrului s suma cifrelor numărului natural n transmis ca
parametru. Care dintre următoarele variante este antetul corect al unui astfel de subprogram?
a. void f(int n, int s) b. void f(float n, int &s)
c. void f(int n, int &s) d. void f(float n, float s)

Răspuns / Explicație
c. void f(int n, int &s)
Variablia ‚n’ este un număr natural, deci tipul acesteia va fi ‚int’.
Variabila ‚s’ va returna de asemenea un număr natural (int), deoarece va calcula suma cifrelor lui n – număr natural.
‚s’ este transmis prin referință, deoarece dorim ca variabila să rețină valoarea stabilită în timpul execuției programului.
La executare, subprogramul reține în stivă adresa variabilei.

Problema 2
Parametri utilizaţi la apelul unui subprogram, se numesc:
a. parametri actuali b. parametri locali
c. parametri globali d. parametri formali

Răspuns / Explicație
a. parametri actuali
Parametrii folosiţi la apelul unei funcţii sunt parametri actuali, iar valorile lor vor fi atribuite parametrilor
formali, la execuţie. Utilizarea parametrilor formali la implementarea funcţiilor şi atribuirea de valori
concrete pentru ei, la execuţie, reprezintă un prim nivel de abstractizare în programare.

Problema 3
Care dintre următoarele reprezintă un antet corect folosit la definirea subprogramului P, astfel încât
programul principal alăturat să afişeze valorile 1 9?
void main()
{int a=1,b=5;
P(a,b);
cout<<a<<’ ’<<b;
/printf(“%d %d”,a,b);}
a. void P (int a,int b) b. int P (int a,int b)
c. int P (int &x,int y) d. void P(int x,int &y)

Răspuns / Explicație
d. void P(int x,int &y)
Variabila ‚x’ este de tip ‚int’, deoarece va efectua operații cu un număr natural.
Variabila ‚y’ este de tip ‚int’, deoarece va efectua operații cu un număr natural. ‚y’ este transmis ca referință, deoarece
putem observa că în programul principal, aceasta și-a schimbat valoarea. Aceasta înseamnă că ’y’ memorează adresa
variabilei ’b’, iar la execuția programului, aceasta îi schimbă valoarea în funcție de operațiile efectuate în funcție.

Problema 4
Funcţia f cu parametrii x şi y determină numărul de numere întregi pare din intervalul [x,y],
(x<y). Care din următoarele expresii este adevărată pentru orice numere x şi y care nu au
aceiaşi paritate?
a. f(x,y)==y-x b. f(x,y)==(y-x+1)/2
c. f(x,y)==(y-x)/2 d. f(x,y)==f(x,y+1)

Răspuns / Explicație
b. f(x,y)==(y-x+1)/2
Prima data vom scadea cele doua valori (y-x, deoarece y este mai mare), iar apoi vom aduna 1 la rezultatul obinut
pentru a asigura paritatea rezultatului. Vom imparti rezultatul adunarii si scaderii la 2 pentru a obine valoarea din
mijlocul intervalului.

Problema 5
Subprogramul S returnează în parametrii d şi m, cel mai mare divizor comun şi respectiv cel mai
mic multiplu comun a două numere întregi transmise prin parametrii a şi b. Antetul corect al
subprogramului S este:
a. int S(int a,int b,int d, int m) b. void S(int a,int b,int &d,int &m)
c. void S(int a,b,int &d,&m) d. float S(int a,b)

Răspuns / Explicație
b. void S(int a,int b,int &d,int &m)
Toate variabilele vor efectua operații cu numere întregi, deci tipul acestora va fi ‚int’.
Variabilele ‚d’ și ‚m’ sunt transmise ca referințe, deoarece acestea vor memora adresa variabilei actuale și va
returna valoarea celui mai mare și celui mai mic divizor comun în programul principal.

Problema 6
Ştiind că funcţia cmmdc, cu doi parametri întregi a şi b, returnează valoarea celui mai mare
divizor comun al numerelor a şi b, stabiliţi care dintre următoarele variante atribuie variabilei m
valoarea celui mai mare divizor comun al numerelor a,b şi c.
a. m:=cmmdc(cmmdc(a,b),c) a. m=cmmdc(cmmdc(a,b),c);
b. m:=cmmdc(a,b)*c b. m=cmmdc(a,b)*c;
c. m:=cmmdc(a,b,c) c. m=cmmdc(a,b,c);
d. m:=cmmdc(a,b) div c d. m=cmmdc(a,b)/c;
Răspuns / Explicație
a. m:=cmmdc(cmmdc(a,b),c)
a. m=cmmdc(cmmdc(a,b),c);
Deoarece programul nu suportă decât 2 variabile, ‚m’ va trebui prima dată să calculeze cel mai mare divizor comun al
variabilelor ‚a’ și ‚b’. Cel mai mare divizor comul al celor 2 variabile va fi component al acceași funcții, de data aceasta
cu variabila ‚c’, pentru a calcula cmmdc final. Intr-un final va fi determinat cel mai mare divizor comun al celor 3
variabile.
Această metodă se aplică și în Pascal și în C++.

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