|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Dec 2001
Città: Partinico(PA)-Torino
Messaggi: 2885
|
Pascal e ricorsione...
Come creare una funzione ricorsiva in pascal per testare se una parola è palindroma?
__________________
Main: Barton 2500@3200+ Asus A7N8X-dlx 2*512 DDRPowercolor 9800Pro Maxtor 80GB sATA + Seagate 160GB pATA LCD Acer AL1721 Epson C62 Antec T.P. 430w Tin.it ADSL Muletto: Pentium4 1800 Notebook: Idea Progress P4 Auto e moto d'epoca
|
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2001
Città: Milano
Messaggi: 2072
|
Re: Pascal e ricorsione...
Quote:
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Dec 2001
Città: Partinico(PA)-Torino
Messaggi: 2885
|
Grazie moolto gentile!
__________________
Main: Barton 2500@3200+ Asus A7N8X-dlx 2*512 DDRPowercolor 9800Pro Maxtor 80GB sATA + Seagate 160GB pATA LCD Acer AL1721 Epson C62 Antec T.P. 430w Tin.it ADSL Muletto: Pentium4 1800 Notebook: Idea Progress P4 Auto e moto d'epoca
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19148
|
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. |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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) 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
Codice:
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
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
Come al solito Cionci si esprime meglio in C che in linguaggio normale
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
La devo prendere come offesa o come complimento ?
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Dec 2001
Città: Partinico(PA)-Torino
Messaggi: 2885
|
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!
__________________
Main: Barton 2500@3200+ Asus A7N8X-dlx 2*512 DDRPowercolor 9800Pro Maxtor 80GB sATA + Seagate 160GB pATA LCD Acer AL1721 Epson C62 Antec T.P. 430w Tin.it ADSL Muletto: Pentium4 1800 Notebook: Idea Progress P4 Auto e moto d'epoca
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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 |
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Palermo
Messaggi: 4913
|
Quote:
__________________
Sun Certified Java Programmer - Sun Certified Web Component Developer - Sun Certified Business Component Developer |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Dec 2001
Città: Partinico(PA)-Torino
Messaggi: 2885
|
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!
__________________
Main: Barton 2500@3200+ Asus A7N8X-dlx 2*512 DDRPowercolor 9800Pro Maxtor 80GB sATA + Seagate 160GB pATA LCD Acer AL1721 Epson C62 Antec T.P. 430w Tin.it ADSL Muletto: Pentium4 1800 Notebook: Idea Progress P4 Auto e moto d'epoca
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Dec 2001
Città: Partinico(PA)-Torino
Messaggi: 2885
|
X cionci:
Hai qualke suggerimento x compattare il codice?
__________________
Main: Barton 2500@3200+ Asus A7N8X-dlx 2*512 DDRPowercolor 9800Pro Maxtor 80GB sATA + Seagate 160GB pATA LCD Acer AL1721 Epson C62 Antec T.P. 430w Tin.it ADSL Muletto: Pentium4 1800 Notebook: Idea Progress P4 Auto e moto d'epoca
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
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;
Basta chiamarla con palindr(1,n); PS: non sono sicuro del codice... Non mi ricordo molto Pascal !!! |
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Dec 2001
Città: Partinico(PA)-Torino
Messaggi: 2885
|
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;
__________________
Main: Barton 2500@3200+ Asus A7N8X-dlx 2*512 DDRPowercolor 9800Pro Maxtor 80GB sATA + Seagate 160GB pATA LCD Acer AL1721 Epson C62 Antec T.P. 430w Tin.it ADSL Muletto: Pentium4 1800 Notebook: Idea Progress P4 Auto e moto d'epoca
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
i+1...vero...avevo confuso la i con la j
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:24.










Main: Barton 2500@3200+ Asus A7N8X-dlx 2*512 DDRPowercolor 9800Pro Maxtor 80GB sATA + Seagate 160GB pATA LCD Acer AL1721 Epson C62 Antec T.P. 430w Tin.it ADSL Muletto: Pentium4 1800 Notebook: Idea Progress P4 








