Distinguere le parole palindrome
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!!!
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
Mii che programma lungo
... 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:
[size=75]*** EDIT ***
Cambiato il nome della variabile 'l' perché é indistinguibile dall'1... [/size]

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]

E' errato essenzialmente il ciclo FOR nella FUNCTION Palindroma.
Eccone una versione corretta.
Dovrebbe funzionare anche per parole di lunghezza dispari.
Ciao!
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!

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!!!!