View Full Version : Pascal e ricorsione...
marcus81
27-11-2002, 19:06
Come creare una funzione ricorsiva in pascal per testare se una parola è palindroma?
Originariamente inviato da marcus81
[B]Come creare una funzione ricorsiva in pascal per testare se una parola è palindroma?
Almeno questo cerca di impararlo da solo:D
marcus81
28-11-2002, 09:01
Grazie moolto gentile!:D
per vedere se una parola è palindroma io non userei una ricorsione...
cmq, potresti tentare qualcosa di simile:
calcola(i,n)
dove i è l'indice che va da 1 in avanti e n è la lunghezza della parola... ad ogni passo della ricorsione tu controlli se i+1 è palindroma, fino a che la i non è arrivata a n/2.
Se per definizione una parola di una sola lettera e la stringa vuota sono palindrome...basta fare una cosa del genere :
(non mi ricordo la sintassi del Pascal...lo scrivo in uno pseudo-codice)
palindroma (parola)
begin
se (lunghezza(parola) < 2)
ritorno vero;
se (parola[0] è diversa da parola [indice ultima lettera])
ritorno falso;
da parola tolgo la prima e l'ultima lettera
ritorno palindroma(parola);
end
In C farei così:
int palindroma(char *parola)
{
if(strlen(parola) < 2)
return 0;
if(parola[0] != parola[strlen(parola) - 1])
return 0
parola[strlen(parola) - 1] = '\0';
return palindroma(parola + 1);
}
//PS: questo codice è distruttivo per la parola
Come al solito Cionci si esprime meglio in C che in linguaggio normale:D :D :D
La devo prendere come offesa o come complimento ? :rolleyes: :D :D
marcus81
29-11-2002, 21:45
complimento,complimento...sei il mago del C!
cmq io ho fatto così:
function palindr2(i,j:integer): boolean;
begin
palindr2:=true;
if (i>=1) then begin
palindr2(i-1,j+1);
if (stringa[i]<>stringa[j]) then
palindr2:=false;
end;
end;
function palindr1(n:integer): boolean;
var i,j:integer;
begin
if (n mod 2) <> 0 then begin
i:=n div 2;
j:=(n div 2) + 2;
end
else begin
i:=n div 2;
j:=n div 2 + 1;
end;
if (palindr2(i,j)) then
palindr1:=true
else palindr1:=false;
end;
"n" è la lunghezza della parola, la funzione chiamata dal programma è palindr1...
lo so è un po' incasinato però funziona...cionci nn mi sparare!:D
Sai come si ottiene una sottostringa da una stringa in Pascal ? E la lunghezza di una stringa ?
Ma stringa è globale ? In questi casi le variaibli globali sono bruttine ;)
Originariamente inviato da cionci
[B]La devo prendere come offesa o come complimento ? :rolleyes: :D :D
E' un complimento ovviamente:p
marcus81
30-11-2002, 11:59
Si, stringa è un array globale...
La lunghezza della stringa è calcolata nel programma principale attraverso un ciclo while(nn ricordavo la funz. predefinita)...
Nn so se ci sia qualke funzione predefinita per estrarre una sottostringa...
Cmq funziona bene!;)
marcus81
30-11-2002, 12:01
X cionci:
Hai qualke suggerimento x compattare il codice?
function palindr(i,j:integer): boolean;
begin
palindr:=false;
if (i>=1 and j>=i) then
begin
if (stringa[i]=stringa[j]) then
begin
if (i=j or j=i-1) then
palindr:=true;
else
palindr:=palindr(i+1, j-1);
end;
end;
end;
Dovrebbe bastare questa...
Basta chiamarla con palindr(1,n);
PS: non sono sicuro del codice... Non mi ricordo molto Pascal !!!
marcus81
30-11-2002, 12:41
function palindr(i,j:integer): boolean;
begin
palindr:=false;
if ((i>=1) and (j>=i)) then
begin
if (stringa[i]=stringa[j]) then
begin
if ((i=j) or (j=i+1)) then
palindr:=true
else
palindr:=palindr(i+1, j-1);
end;
end;
end;
ho fatto qualke piccolissima modifica al tuo codice...funziona benissimo,grazie ancora!;)
i+1...vero...avevo confuso la i con la j ;)
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.