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