mistergks
01-04-2011, 18:05
Ho un problema con un esercizio su una funzione ricorsiva:
Si scriva in C++ una funzione ricorsiva che riceva almeno un array di caratteri (assumendo che contenga solo lettere dell’alfabeto minuscole) e la sua dimensione (supponendo che sia sempre PARI) e restituisca TRUE se è verificata la seguente proprietà. Si considerino coppie di elementi di cui il primo è nella prima metà dell’array, e il secondo è l’elemento di posto corrispondente nella seconda metà. Per ogni coppia, la distanza tra i due elementi nell’alfabeto inglese deve essere uguale. La distanza tra due lettere è un numero positivo, ed è definita come il numero di lettere che intercorrono tra essi nell’ordine alfabetico.
Esempio: la funzione invocata su un array contenente la sequenza di caratteri ‘a’ ‘t’ ‘h’ ‘i’ ‘d’ ‘q’ ‘k’ ‘f’ dovrà restituire TRUE. Infatti la distanza tra il primo elemento della prima metà (‘a’) e il primo elemento della seconda metà (‘d’) è pari a 3 e così è per tutte le altre coppie di elementi corrispondenti (‘t’ --‘q’, ‘h’ -- ‘k’ e ‘i’-- ‘f’).
Specificare quale deve essere la prima invocazione per la funzione.
Io ho provato a fare cosi'... va bene?non mi compila...ma credo che l'algoritmo sia questo o no? magari c'è qualche errore
bool distanzaAlfabetica(char a[], int dim){
if(dim%2 != 0) //per far terminare subito la funzione in caso di stringa dispari
return false;
if(a[i]=='\0') //passo base
return true;
int distanza= a[0] - a[dim/2];
if(a[i] - a[dim/2+i] != distanza) //passo ricorsivo
return false;
distanzaAlfabetica(a[], dim, i+1);
}//chiusura funzione
Si scriva in C++ una funzione ricorsiva che riceva almeno un array di caratteri (assumendo che contenga solo lettere dell’alfabeto minuscole) e la sua dimensione (supponendo che sia sempre PARI) e restituisca TRUE se è verificata la seguente proprietà. Si considerino coppie di elementi di cui il primo è nella prima metà dell’array, e il secondo è l’elemento di posto corrispondente nella seconda metà. Per ogni coppia, la distanza tra i due elementi nell’alfabeto inglese deve essere uguale. La distanza tra due lettere è un numero positivo, ed è definita come il numero di lettere che intercorrono tra essi nell’ordine alfabetico.
Esempio: la funzione invocata su un array contenente la sequenza di caratteri ‘a’ ‘t’ ‘h’ ‘i’ ‘d’ ‘q’ ‘k’ ‘f’ dovrà restituire TRUE. Infatti la distanza tra il primo elemento della prima metà (‘a’) e il primo elemento della seconda metà (‘d’) è pari a 3 e così è per tutte le altre coppie di elementi corrispondenti (‘t’ --‘q’, ‘h’ -- ‘k’ e ‘i’-- ‘f’).
Specificare quale deve essere la prima invocazione per la funzione.
Io ho provato a fare cosi'... va bene?non mi compila...ma credo che l'algoritmo sia questo o no? magari c'è qualche errore
bool distanzaAlfabetica(char a[], int dim){
if(dim%2 != 0) //per far terminare subito la funzione in caso di stringa dispari
return false;
if(a[i]=='\0') //passo base
return true;
int distanza= a[0] - a[dim/2];
if(a[i] - a[dim/2+i] != distanza) //passo ricorsivo
return false;
distanzaAlfabetica(a[], dim, i+1);
}//chiusura funzione