Newsgroup: it.comp.lang.pascal
Titolo: Un altro quesito.

Se ho questa dichiarazione
type T =array [1..n] of char
come si scrive la versione iterativa e ricorsiva di una procedura Pascal che
prende in input un array di tipo T e verifica se la stringa contenuta
nell'aray č palindroma?? (cioč si puň leggere ugulmente sia da sinistra che
da destra.
ciao dani


L'algoritmo per la versione iterativa è semplice.Prendi 2 indici I e
J. I lo fai puntare al primo elemento dell'array mentre J lo fai
puntare all'ultimo elemento.Poi prendi una variabile booleana che
inizializzi a true.Infine in un ciclo confronti l'elemento i-esimo
dell'array con l'elemento j-esimo.Finche' sono uguali va tutto bene,ma
appena sono diversi fai diventare la variabile booleana false ed esci
dal ciclo.
Ovviamente ad ogni ciclo devi incrementare I e decrementare J.
Il ciclo puoi farlo terminare o quando la variabile booleana=false
oppure quando il valore di I>=j
Per la versione ricorsiva non saprei.
______________________________
e-mail:  
Aur...@hotmail.com
ICQ:     16005054

Per la versione ricorsiva non saprei.
program PalindromoRicorsivo ;
var s : string ;
function palindromo ( s : string ; i, j : integer ) : boolean ;
begin
  if (j - i < 1) then palindromo := true
  else
  if (s[i] = s[j]) then
     palindromo := palindromo ( s, i+1, j-1 )
  else
  palindromo := false;
end ;
begin
  s := 'anna' ;
  writeln ( palindromo ( s, 1, length(s) ) ) ;
  s := 'radar' ;
  writeln ( palindromo ( s, 1, length(s) ) ) ;
end.

 
ok, allora io mi butto sul NON ricorsivo... :-)
var s: string ;
function palindromo (s: string): boolean;
var i, l: integer;
begin
  palindromo := true;
  l := length(s) div 2;
  for i := 1 to l do
    if s[i] != s[length(s) - i] then
      begin
        palindromo := false;
        break;	{ Il break e' opzionale, se non vi piace, non lo mettete }
      end;
end; 
begin
  s := 'anna';
  writeln (palindromo (s, 1, length(s)));
  s := 'radar';
  writeln (palindromo (s, 1, length(s)));
end.
-- 
Emanuele Cesena                 
http://www.penguinpowered.com/~ecesena
ece...@penguinpowered.com
                 Attenti all'antispam NOSPAM
"Il lavoro si espande fino a occupare tutto il tempo disponibile; piu' e' il
tempo e piu' il lavoro sembra importante ed impegnativo", prima legge di
Parkinson
"Ogni lavoro si espande fino ad occupare tutto lo spazio disponibile",
estensione di Einstein

    if s[i] != s[length(s) - i] then
A meno che non utilizzi un compilatore poliglotta, questo confronto
non va bene...

        break;	{ Il break e' opzionale, se non vi piace, non lo mettete }
Il break non va messo affatto, in quanto non e' un'istruzione valida
in pascal.
Andrea Laforgia
-----------------------------------------------------
There is nothing better for understanding a kangaroo
than seeing it jump.
-----------------------------------------------------

 
ah... e' solo Turbo?? :-)
bye! ;-)
-- 
Emanuele Cesena                 
http://www.penguinpowered.com/~ecesena
ece...@penguinpowered.com
                 Attenti all'antispam NOSPAM
"Linux air conditioned, don't open Windows"

ah... e' solo Turbo?? :-)
Neanche, e' questo il bello !!!
Andrea Laforgia        (
andrea_...@bigfoot.com
)


 
eh eh... ma allora, donde funza, codesto break?? :-)
bye!
-- 
Emanuele Cesena                 
http://www.penguinpowered.com/~ecesena
ece...@penguinpowered.com
                 Attenti all'antispam NOSPAM
"L'organizzazione di ogni burocrazia e' molto simile a una cloaca: i pezzi
piu' grossi emergono sempre", legge di Imhoff

eh eh... ma allora, donde funza, codesto break?? :-)
E basta ! e' un'istruzione C !
