Informatică, întrebare adresată de Saharra, 8 ani în urmă

HELP
Cerinţa
Scrieți definiția completă a subprogramului C++ recursiv P care primeşte prin intermediul parametrului n un număr natural nenul (n≤100), iar prin intermediul parametrului x un tablou unidimensional cu n componente întregi, de maximum șase cifre fiecare.

Subprogramul furnizează prin intermediul parametrului s suma elementelor din tabloul x care au valori numere prime.

Restricţii şi precizări
0 < n ≤ 100
numele subprogramului cerut este P
parametrii sunt, în această ordine: x, n, s
elementele vectorului x sunt indexate de la zero
se recomandă realizarea unei soluții recursive



Exemplu
Dacă n=6 și x=(12, 7, 6, 3, 8, 5), după apel s=15.

Important
Soluţia propusă va conţine definiţia subprogramului cerut și eventual al altor subprograme, apelate de acesta. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.

Aceasta este solutia mea:

int prim(int a){

int c=1;

if(a<2)
return 0;
for(int i=2; i*i<=a; i++){
if(a%i==0)
c=0;
}
return c;
}

int P(int x[], int n, int s){

if(n==0)
return 0;
else{
if(prim(x[n-1])!=0)
s=s+x[n-1];
return P(x, n-1, s);
}
}

SI NU INTELEG DE CE NU MERGE

Va rog mult, AJUTOR!

Răspunsuri la întrebare

Răspuns de Cactus
1
In primul rand, subprogramul tau nu are voie sa returneze ceva. In cerinta e precizat sa se furnizeze prin parametrul s, deci ai un subprogram void si ai nevoie de ampersant la s...In al doilea rand, sirul incepe numerotarea de la 0 
Aceasta este solutia:

void P(int x[], int n, int &s){
if(n!=-1)
 P(x,n-1,s);
if(prim(x[n])!=0)
   s=s+x[n];
}

Saharra: Multumesc mult! :)
Saharra: Totusi, imi da 0p
Alte întrebări interesante