PDA

View Full Version : [C++] Distanza alfabetica ricorsiva in una stringa


mistergks
11-03-2012, 01:48
Provando a fare questo esercizio...ho incontrato una difficoltà... distanza la definisco come la differenza tra dim/2 e il primo elemento dell'array. In questo esempio mi dà l'intero 3.
Ora...quando faccio la ricorsiva... a volte mi da 3 e a volte -3.. quindi non rispetta la condizione e restituisce sempre false.. help me!!!



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.



SOLUZIONE:

#include <iostream>
using namespace std;

bool distanzaalfa(char alfa[], int dim, int i);


int main(){
const int dim=8;
char alfa[]={"athidqkf"};
int i=1;
if(distanzaalfa(alfa,dim,i))
cout<<"ok"<<endl;
else cout<<"no"<<endl;





system("pause");
return 0;
}

bool distanzaalfa(char alfa[], int dim, int i){
int distanza=0;

if(dim%2!=0)
return false;

if(i==dim/2)
return true;

distanza=alfa[dim/2]-alfa[0];

if(alfa[dim/2+i] - alfa[i] != distanza)
return false;


return distanzaalfa(alfa, dim, ++i);
}

vendettaaaaa
11-03-2012, 02:25
Usa abs(int):
bool distanzaalfa(char alfa[], int dim, int i)
{
if (dim % 2 != 0) return false;

static int distanza = abs(alfa[dim/2] - alfa[0]);

if (i == dim/2) return true;

if (abs(alfa[dim/2+i] - alfa[i]) != distanza) return false;

return distanzaalfa(alfa, dim, i + 1);
}

mistergks
11-03-2012, 10:15
sarebbe il modulo? è un po una scappatoia;-) ..ai fini di esercitazione universitaria come potrei fare?

Inviato dal mio GT-I9003 usando Tapatalk

vendettaaaaa
11-03-2012, 11:21
...
Ma che scappatoia e scappatoia! La distanza, in ogni ambito della matematica e delle scienze è un numero positivo, le distanze negative non hanno senso, quindi ci metti il modulo e punto.
Te lo suggerisce pure il testo dell'esercizio dicendo esplicitamente "la distanza tra due lettere è un numero positivo".

mistergks
11-03-2012, 15:37
...
Ma che scappatoia e scappatoia! La distanza, in ogni ambito della matematica e delle scienze è un numero positivo, le distanze negative non hanno senso, quindi ci metti il modulo e punto.
Te lo suggerisce pure il testo dell'esercizio dicendo esplicitamente "la distanza tra due lettere è un numero positivo".

beh in effetti hai ragione.. ok allora il problema era questo!

Inviato dal mio GT-I9003 usando Tapatalk