IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Dominik Stanislav:17.11.2017 17:23

Ahoj,

v programování jsem úplný začátečník, momentálně se učím základy ve VB pod Excelem. Už dost dlouho si lámu hlavu s jedním malým příkladem, pořád se mi ale nedaří program rozchodit. Zadání:

"Uživatel zadá znak, program odpoví, zda se jedná o písmeno, číslici nebo jiný znak. Řešte pomocí else if. (nebo je možno řešit i složenou podmínkou)"

Má se řešit pouze pomocí If, pořád ale nemůžu přijít na to, jak ošetřit, aby program nezhavaroval s type mismatch, když uživatel zadává buď písmeno, nebo číslici.

Prosím, mohli byste mi poradit, jak tento prográmek vyřešit? Předem se omlouvám, pokud je můj dotaz moc hloupý, jsem opravdu začátečník, ale snažím se :)

Děkuji všem!

 
Odpovědět
17.11.2017 17:23
Avatar
Odpovídá na Dominik Stanislav
Michal Štěpánek:17.11.2017 18:34

Domácí úkoly bez tvé iniciativy řešit nikdo nebude...

If(číslo) vykonej něco
Else if(písmeno) vykonej něco jiného
End if
Nahoru Odpovědět
17.11.2017 18:34
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Dominik Stanislav:18.11.2017 12:36

Omlouvám se, zapomněl jsem přiložit, co jsem se pokoušel napsat, vkládám tedy teď.

Sub main()
  Dim znak As String
  znak = InputBox("Zadejte znak")
  If znak = "a" Or znak = "b" Then
    MsgBox "Písmeno"
  ElseIf znak >= 1 And znak <= 9 Then
    MsgBox "Číslice"
  Else
    MsgBox "Jiný znak"
  End If
End Sub

Jde mi o to, že nevím, jak udělat tu první podmínku tak, abych nemusel vypisovat všechny znaky abecedy.. Druhá podmínka funguje, uživatel má zadat jen jeden znak, číslo tedy rozpozná. U else zhavaruje s type mismatch, pokud zadám např. lomítko, to taky nevím, jak vyřešit. Vlastně si nejsem ani jistý, jestli má být znak nadeklarovaný jako string, když se může zadat i číslo.. Zatím děkuji a opravdu se omlouvám, ale jsem v úplných začátcích.

Editováno 18.11.2017 12:38
 
Nahoru Odpovědět
18.11.2017 12:36
Avatar
Odpovídá na Dominik Stanislav
Michal Štěpánek:19.11.2017 9:29

zeptej se strejdy gůgla na funkci isnumeric VBA a vyjede ti mnoho návodů, jak to ošetřit...

Nahoru Odpovědět
19.11.2017 9:29
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Juraj Béger
Člen
Avatar
Juraj Béger:19.11.2017 19:05

Ja by som to riešil takto nejako. Ešte som tam doplnil kontrolu na počet znakov (1). V prípade, že ich bude viac a zadáš nejaký alfanumerický, tak to vyhodnotí ako iný.

Sub main()
  Dim znak As String

    Do
      znak = InputBox("Zadejte znak")
      If Len(znak) > 1 Then MsgBox "Zadejte jenom jeden znak"
    Loop While Len(znak) > 1

    If Asc(znak) > 64 And Asc(znak) < 123 Then
        MsgBox "Písmeno"
    Else
    If IsNumeric(znak) Then
        MsgBox "Číslice"
    Else
        MsgBox "Jiný znak"
    End If
    End If

End Sub
 
Nahoru Odpovědět
19.11.2017 19:05
Avatar
Dominik Stanislav:20.11.2017 19:55

Děkuju moc za rady... přidám i svůj kód, kterým jsem to v mezidobí vyřešil, a vypadá to, že v pohodě funguje (akorát tam teda není kontrola na počet znaků, díky za nápad :))

Sub main()
  Dim znak As String
  Dim cislo As Boolean
  Dim pismeno As Integer
  znak = InputBox("Zadejte znak")
  cislo = IsNumeric(znak)
  pismeno = Asc(znak)
  If cislo = True Then
    MsgBox "Zadali jste číslici!"
  ElseIf cislo = False Then
    Select Case pismeno
      Case 65 To 90, 97 To 122
        MsgBox "Zadali jste písmeno!"
      Case 33 To 47, 58 To 64, 91 To 96, 123 To 126
        MsgBox "Zadali jste jiný znak!"
      End Select
  End If
End Sub
 
Nahoru Odpovědět
20.11.2017 19:55
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.