online: 4; azi: 491; total: 52497 Manual clasa a x a - Tehnici de implementarea algoritmilor - Recursivitate

Manual clasa a X a

Tehnici de implementarea algoritmilor

Recursivitate

Se citesc de la tastatură două şiruri de caractere, s1 şi s2. Scrieți un subprogram recursiv care să compare cele două şiruri de caractere şi care va furniza următoarele valori: -1 dacă s1 este mai mic decât s2, 0 dacă sunt egale şi +1 dacă s1 este mai mare decât s2. Folosiţi subprogramul recursiv pentru a compara cele două şiruri de caractere.
Pentru a compara cele două şiruri de caractere s1 şi s2, putem utiliza un subprogram recursiv care compară caracter cu caracter până la găsirea primului caracter diferit sau până când unul dintre şiruri se termină. Dacă cele două şiruri sunt identice până la finalul celui mai scurt şir , atunci şirul mai lung este considerat mai mare.
# include < iostream >
# include < cstring >
using namespace std ;
int comparaSiruri ( const char s1[], const char s2[], int i = 0 ) {
if (s1[i] == '\0' && s2[i] == '\0' ) {
return 0 ; // ambele siruri sunt egale
}
else if (s1[i] == s2[i]) {
return comparaSiruri (s1, s2, i+ 1 ); // compar urmatorii caractere
}
else if (s1[i] == '\0' ) {
return -1 ; // s1 este mai scurt decat s2
}
else if (s2[i] == '\0' ) {
return 1 ; // s2 este mai scurt decat s1
}
else if (s1[i] < s2[i]) {
return -1 ; // s1 este mai mic decat s2
}
else {
return 1 ; // s1 este mai mare decat s2
}
}
int main () {
char s1[ 100 ], s2[ 100 ];
cout << " Introduceti primul sir: " ;
cin >> s1;
cout << " Introduceti al doilea sir: " ;
cin >> s2;
int rezultat = comparaSiruri (s1, s2);
if (rezultat == -1 ) {
cout << "S1 este mai mic decat S2.\n" ;
}
else if (rezultat == 0 ) {
cout << "S1 este egal cu S2.\n" ;
}
else {
cout << "S1 este mai mare decat S2.\n" ;
}
return 0 ;
}

În acest program, funcția comparaSiruri primește cele două șiruri de caractere s1 și s2 , împreună cu un index i care indică poziția curentă în șiruri ( default este 0 pentru a începe de la începutul șirurilor).
În funcție de caracterele de pe poziția i din cele două șiruri, se returnează -1 (s1 este mai mic decât s2), 0 (s1 este egal cu s2) sau 1 (s1 este mai mare decât s2). Dacă s1 este mai scurt decât s2, se consideră că este mai mic decât s2, iar dacă s2 este mai scurt decât s1, se consideră că este mai mare decât s1.