Sunteți pe pagina 1din 2

Test la INFORMATICĂ

Subprograme, Limbajul C/C++

7p 1. Se consideră subprogramul sub definit int sub(int x){


if (x == 0 or x == 1) return 1;
alăturat. Ce valoare va returna apelul sub(5)?
if (x%2 == 0) return (x+1)*sub(x-1);
return (x-1)*sub(x-1);
}

2. Se consideră subprogramul F definit int F(int x){


8p if (x < 1)
alăturat. Ce valoare va returna apelul F(15)? return 1;
if (x%2 == 0)
return F(x/2-1)*F(x/2-1);
return 2*F((x-1)/2)*F((x-1)/2);
}

10p 3. Scrieţi definiţia completă a unui subprogram recursiv care primeşte ca parametru un număr
natural nenul n şi returnează numărul de cifre divizibile cu 3.
10p 4. Scrieţi definiţia completă a unui subprogram recursiv care primeşte ca parametru un număr
natural nenul n şi returnează numărul obţinut din n prin eliminarea cifrelor impare.
10p 5. Scrieţi definiţia completă a unui subprogram recursiv care primeşte ca parametru un număr
natural nenul n şi afişează cifrele sale în ordinea din el şi separate prin câte un spaţiu.
15p 6. Scrieţi definiţia completă a unui subprogram recursiv care primeşte 3 parametri: prin n un număr
natural nenul, c1, c2 cifre şi returnează numărul obţinut din n prin înlocuirea tuturor apariţiilor
cifrei c1 cu c2.

30p 7. Considerăm definite următoarele 3 subprograme:


- prim, care primeşte prin intermediul parametrului x un număr natural nenul şi returnează
1 dacă numărul este prim şi 0 în caz contrar;
- palindrom, care primeşte prin intermediul parametrului x un număr natural nenul şi
returnează 1 dacă numărul este palindrom şi 0 în caz contrar;
- cmmdc, care primeşte 2 parametri, numere naturale nenule, a şi b şi returnează cel mai
mare divizor comun al numerelor a şi b.
În fişierul numere.txt se află pe prima linie un număr natural n şi pe următoarele n linii câte 2
numere naturale, despărţite prin câte un spaţiu. Scrieţi un program C/C++ care citeşte cele n
perechi de numere şi afişează câte dintre acestea sunt palindrom şi au cel mai mare divizor comun
număr prim. Se vor folosi apeluri ale subprogramelor prim, palindrom şi cmmdc.
BAREM

1. 120 7.
#include <iostream>
2. 32768 #include <fstream>
#include <math.h>

3. using namespace std;


int sub(int n)
{
if (n == 0) ifstream in(„numere.txt”);
return 0;
if (n % 10 % 3 == 0) int prim(int x){
return 1 + sub(n/10); if (x % 2 == 0){
return sub(n/10); if (x == 2) return 1;
}
return 0;
}
else{
4. int d = 3;
int sub(int n) while (d <= sqrt(x))
{ if (x % d==0 or x==1) return 0;
if(n==0)
return 0; else d += 2;
else return 1;
if(n%2==1) }
return sub(n/10)*10+n%10; }
else
return sub(n/10); int palindrom(int n){
}
int aux = n, inv = 0;
while (aux){
inv = inv * 10 + aux % 10;
5. aux /= 10;
void sub(int n) }
{ if (inv == n) return 1;
if(n!=0)
{ return 0;
sub(n/10); }
cout<<n%10<<' ';
} int cmmdc(int a, int b){
} while (a != b)
if (a > b) a -= b;
6. else b -= a;
int sub(int n, int c1, int c2) return a;
{ }
if(n==0)
return 0; int main(){
else
int n, i, a, b, s = 0;
if(n%10==c1)
return sub(n/10,c1,c2)*10+c2; in >> n;
else for (i=1 ; i<=n ; i++){
return sub(n/10,c1,c2)*10+n%10; in >> a >> b;
} if (palindrom(a) and palindrom(b) and
prim(cmmdc(a, b)))
s++;
}
cout << s;
return 0;
}

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