Cyklus - přehrávání písmen   zodpovězená otázka

VB.NET, Algoritmy

Dobrý den,mohl by mi někdo poradit?Tento zdrojový kód kontroluje odeslané slovo po písmenku,šlo by udělat aby kontroloval nejprve 3 písmena,potom 2 a nakonec jedno a pokud není konec slova opakovat ciklus?

Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
Dim slovo As String 

slovo = TextBox1.Text 
For I As Integer = 1 To Len(slovo) 
Select Case LCase(Mid(slovo, I, 1)) 
Case "a" 
AxWindowsMediaPlayer1.URL = "c:\hlas\a.wma" 

Case "z" 
AxWindowsMediaPlayer1.URL = "c:\hlas\z.wma" 
Case " " 
AxWindowsMediaPlayer1.URL = "c:\hlas\mezera.wma" 
Case Else 
MsgBox("Tento znak '" & LCase(Mid(slovo, I, 1)) & "' neznám") 
End Select 
Next I 
End Sub 

End Class 

Něco jsem zkoušel ale dopadlo to tak že sice kontroloval 3 písmena ale porom se vrátil a kontroloval druhé,třetí a tak dále ale stále hledal shodu tří písmen,která už tam ovšem není.

děkuji

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkuste trochu blíž problém popsat. Chyba může být ve vnoření opakovacího tam, kde není potřeba.

Nebo spíš ve zpracování slova opakovaně od začátku ve chvíli, kdy již např. první tři znaky byly zpracovány. Např. zkoušíte skupiny po třech znacích, nedojde k nalezení zvukového souboru, opakujete zpracování pro dva znaky atd. pro jeden a nemáte ošetřenou situaci, kdy skupina znaků byla zpracována. Musíte slovo o zpracované znaky zkrátit!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Omlouvám se,pokusím se to lépe popsat:

mám slovo které se skládá z několika slabik,pro příklad třeba z 3písmenná,2písmenné,3písmenné a jednoho písmenne

potřebuju aby se kontrolovaly nejdříve nejdelší slabiky,potom by se ciklus vrátil a pokud našel shodu pokračoval v hledání znova 3písmených slabik,pokud nenašel pokračuje na 2písmené které znova prochází,dokud je shoda,potom se přesune na písmena a pak znova na 3písmenné dokud není vše přečteno ale vždy se musí vrátit a číst slovo tam kde zkončil a to je pro mne ten velkej otazník,jak to všechno udělat aniš by se kód stal nepřehledným a já ho mohl pochopit :o)

děkuji za radu

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nevím, jestli jsem Vaše potřeby pochopil zcela strávně, ale zkuste třeba toto (vypadá to sice delší, ale myslím, že i bez okomenyování je to pochopitelné):

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim slovo As String = "kontrolováno"
        Dim posledni As Integer

        Label1.Text = ""
        posledni = slovo.Length - 1
        For i As Integer = 0 To posledni

            If posledni - i >= 2 AndAlso hledejtri(slovo.Substring(i, 3)) Then
                i += 2
            Else
                If posledni - i >= 1 AndAlso hledejdva(slovo.Substring(i, 2)) Then
                    i += 1
                Else
                    If Not hledejjeden(slovo.Substring(i, 1)) Then
                        MsgBox("interpretace pro písmeno " & slovo.Substring(i, 1) & " nenalezena!")
                    End If
                End If
            End If

        Next
    End Sub


    Private Function hledejtri(ByVal txt As String) As Boolean
        Select Case txt.ToLower
            Case "kon"
                Label1.Text &= "-Kon-"
            Case "tro"
                Label1.Text &= "-Tro-"
            Case "ová"
                Label1.Text &= "-Ová-"
            Case Else
                Return False
        End Select
        Return True
    End Function


    Private Function hledejdva(ByVal txt As String) As Boolean
        Select Case txt.ToLower
            Case "ko"
                Label1.Text &= "-Ko-"
            Case "lo"
                Label1.Text &= "-Lo-"
            Case "vá"
                Label1.Text &= "-Vá-"
            Case "no"
                Label1.Text &= "-No-"
            Case Else
                Return False
        End Select
        Return True
    End Function


    Private Function hledejjeden(ByVal txt As String) As Boolean
        Select Case txt.ToLower
            Case "k"
                Label1.Text &= "-K-"
            Case "l"
                Label1.Text &= "-L-"
            Case "v"
                Label1.Text &= "-V-"
            Case "n"
                Label1.Text &= "-N-"
            Case Else
                Return False
        End Select
        Return True
    End Function

(Jenom pro testovací účely posílám "zprávy o nalezení hledané skupiny) do labelu, je samozřejmě na Vás, co s nimi již podniknete)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den, pojmenovat toto téma v diskusi ciklus, to opravdu nemůžete dávat trošku pozor? Píše se cyklus a ani to není výstižný titulek pro to, co řešíte. Zkuste se příště zamyslet.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback