Distinguere le parole palindrome

Superlilu1
Salve a tutti avrei bisogno del vostro aiuto spero che qualcuno possa aiutarmi.....
Per domani il mio prof di informatica ha lasciato un programma da fare su visual basic. Richiamando una funzione(Function Palindroma)bisogna stampare se una parola è palindroma o meno e, ci ha consigliato di usare la funzione Mid....io ci ho provato e sinceramente non riesco a trovare l'errore....

Dim Parola(1 To 100) As String 'Array che contiene le parole da controllare
Dim I As Integer 'Indice dell'array
Dim N As Integer 'Numero totale delle parole
--------------------------------------------------------------------------------
Private Sub Caricamento_Click()
N = N + 1
Parola(N) = InputBox("Dammi la " & N & "° parola")
End Sub
--------------------------------------------------------------------------------
Function Palindroma(Key As String) As Boolean
Dim L As Integer 'Lunghezza media della parola
Dim A As String 'Prima metà della parola invertita
Dim Lun As Integer 'Lunghezza della parola
L = Len(Key) / 2
Lun = Len(Key)
For I = L To 1 Step -1
A = Mid(Key, I, 1)
Next
If Mid(Key, L + 1, Lun) = A Then
Palindroma = True
Else
Palindroma = False
End If
End Function
--------------------------------------------------------------------------------
Private Sub Palin_Click()
Dim C As Boolean
I = 0
Do Until I = N
I = I + 1
C = Palindroma(Parola(I))
If C = True Then
Print Parola(I) & " E' una parola palindroma"
Else
Print Parola(I) & " Non è una parola palindroma"
End If
Loop
End Sub




Ovviamente ho provato il programma utilizzando parole composte da lettere pari e tutte scritte in caratteri minuscoli, quando riesco a trovare l'errore modifico queste imprecisioni....
Grazie a tutti!!!

Risposte
david_e1
Mii che programma lungo :-D... purtroppo di visual basic non so' nulla per cui non so' trovarti l'errore, ma il tuo codice mi sembra troppo complicato non ti conviene riscriverlo da zero in maniera piu' semplice?

Ad esempio un versione Python potrebbe essere:

def IsPalindrom(x):
        if len(x)==0:
                  retyrn True
        if len(x)==1:
                  return False
        return x[0]==x[-1] and IsPalindrom(x[1:-1])


[size=75]*** EDIT ***
Cambiato il nome della variabile 'l' perché é indistinguibile dall'1...
[/size]

Superlilu1
:-D ihih io sono nata per complicarmi la vita....le cose più semplici le complico sempre cmq noi a scuola per adesso studiamo solo visual basic anche perchè sono in un indirizzo commerciale e non industriale...purtroppo neanche io so di cosa stai parlando e non so come semplificare il programma anche perchè il prof ha detto che potevamo utilizzare la funzione Mid cmq grazie mille lo stesso sei stato molto gentile!!!

lorven
E' errato essenzialmente il ciclo FOR nella FUNCTION Palindroma.
Eccone una versione corretta.

Dim Parola(1 To 100) As String 'Array che contiene le parole da controllare
Dim N As Integer 'Numero totale delle parole
'--------------------------------------------------------------------------------
Private Sub Caricamento_Click()
N = N + 1
Parola(N) = InputBox("Dammi la " & N & "° parola")
End Sub
'--------------------------------------------------------------------------------
Function Palindroma(Key As String) As Boolean
Dim L As Integer 'Lunghezza media della parola
Dim A As String 'Prima metà della parola invertita
Dim I As Integer 'Indice dell'array
Dim J As Integer ' Inizio sottostringa da confrontare
Dim Lun As Integer 'Lunghezza della parola
Lun = Len(Key)
L = Int(Len(Key) / 2)
A = ""
For I = L To 1 Step -1
    A = A & Mid(Key, I, 1)
Next
J = 1
If Lun Mod 2 = 1 Then J = 2
If Mid(Key, L + J, L) = A Then
   Palindroma = True
   Else
        Palindroma = False
End If
End Function
'--------------------------------------------------------------------------------
Private Sub Palin_Click()
Dim C As Boolean
Dim I As Integer 'Indice dell'array
For I = 1 To N
    C = Palindroma(Parola(I))
    If C = True Then
           MsgBox Parola(I) & " E' una parola palindroma"
       Else
           MsgBox Parola(I) & " Non è una parola palindroma"
    End If
Next
End Sub



Dovrebbe funzionare anche per parole di lunghezza dispari.
Ciao! :D

Superlilu1
Tu sei un genio!!!grazie mille!!!davvero grazie, funziona adesso non mi rimane che trasformare tutti i caratteri in maiuscolo in modo da togliere anche questa imperfezione!!!!grazie!!!!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.