Se da functia furmatoare:
int f(lint a[ ], int N){
int i,j;
for(i=0;i<N-1;i++)
for(j=i+1;j<N;j++)
if(a[i]==a[j])return 0;
return 1; }
Daca vectorul a contine numerele: 2,1,3,0,3, ce valoare va fi afisata la apelul functiei f:
cout<<f(a,5);
Ma puteti ajuta va rog ?
Si daca se poate sa imi explicati ce face programul.
Răspunsuri la întrebare
Întâi să aranjăm puțin codul (am atașat și o poză cu el aranjat):
int f(int a[], int N){
int i,j;
for(i=0; i<N-1; i++) {
for(j=i+1; j<N; j++) {
if(a[i] == a[j]) {
return 0;
}
}
}
return 1;
}
Observăm că funcția primește un vector de int-uri (a) și un număr N, probabil lungimea vectorului.
Iar apoi parcurge cu i, vectorul, însă merge de la 0 până la penultimul element (N-2, adică mai mic decât N -1).
Iar pentru fiecare dintre aceste repetiții (iterații) cu acest i, mai avem un for, care pornește de la i + 1 și merge până la ultimul element (N-1, adică < N).
Deci să încercăm să simulăm un exemplu simplu, să zicem că N = 6.
În acest caz, i-ul o să aibă, pe rând, următoarele valori: 0, 1, 2, 3, 4, și atât (se oprește la i < N - 1, adică la i < 5, adică la 4), deci va parcurge doar pentru primele 5 elemente din vector (fără ultimul).
Bun, și să luăm prima iterație a for-ului:
o să fie i = 0, și începe al 2-lea for, în care j-ul merge de la i + 1 (adică de la 1) până la j < N (adică până la 5), deci j va fi pe rând 1, 2, 3, 4, 5 (adică toate elementele, dar începând de la al doilea).
Și pentru fiecare dintre acestea se face o verificare dacă elementul de pe poziția i este egală cu cea de pe poziția j. Dacă condiția este adevărată, se returnează 0 și se încheie funcția (imedat după un return într-o funcție, se iese din funcție, nu se mai execută nimic altceva), iar dacă condiția e falsă, de fiecare dată, se termină for-urile și se returnează 1.
Deci, practic, se verifică următoarele numere
i = 0
--> j = 1 => a[0] == a[1]
--> j = 2 => a[0] == a[2]
...
--> j = 5 => a[0] == a[5]
i = 1
--> j = 2 => a[1] == a[2]
--> j = 3 => a[1] == a[3]
...
--> j = 5 => a[1] == a[5]
...
până la i = 4 și j = 5 (a[4] == a[5])
Deci vedem că sunt verificate toate numerele între ele 2 câte 2 (1-2, 1-3, 1-4, ..., 3-4, 3-5, 4-5), și dacă vreunul din ele este egal, se returnează 0 și se oprește funcția. Iar dacă niciunul din ele nu este, și scăpăm de return 0 ăla, se încheie for-ul și ajungem la return 1, deci funcția returnează 1.
În cazul cerinței tale, când va ajunge i-ul la 2 (a[2], adică 3) și j-ul la 4 (a[4], adică celălalt 3), condiția ca a[i]==a[j] este adevărată și se returnează 0.
Mai general vorbind, funcția respectivă verifică în vectorul a (considerând că N este numărul de elemente din el) dacă toate elementele sunt unice. Dacă sunt, se returnează 1, iar dacă există dubluri, se returnează 0.