Césarovou šifrou - Visual Basic Vyřešeno

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Césarovou šifrou - Visual Basic

Příspěvekod faraon » 27 kvě 2012 22:29

Měla by se změnit všechna velká písmena, zkus do prvního políčka napsat text velkými a uvidíš. Prostě budeš muset nejdřív zjistit jestli je písmeno velké nebo malé, a podle toho šifrovat. Navíc spočítat jestli je liché nebo sudé v pořadí, a podle toho použít posun1 nebo posun2. A na závěr, podle toho jestli bylo malé nebo velké, zjistit jestli ses dostal přes malé nebo velké 'z' a ošetřit přetečení. Dál je potřeba vědět co se má dělat s ostatními znaky, jako jsou třeba číslice...
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Reklama
Uživatelský avatar
roady
Level 2.5
Level 2.5
Příspěvky: 351
Registrován: červen 09
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Césarovou šifrou - Visual Basic

Příspěvekod roady » 03 čer 2012 17:02

No tak nechám to takhle

Kód: Vybrat vše

Option Explicit

Private Sub Command1_Click()
    Dim vstup As String
    Dim vystup As String
    Dim i As Integer
    Dim znak As String
    Dim posun As Integer
    Dim posun2 As Integer
   
    posun = Val(text2.Text)
    vstup = text1.Text
    vystup = ""
   
     ' kontrola formulářů
     
    If text1.Text = "" Then
    MsgBox "Zadej text", vbCritical, "Error"
   
    End If
   
    If text2.Text = "" Then
    MsgBox "Zadej číslo", vbCritical, "Error"
    End If
   ' pocitame pouze se zbytkem po deleni celkoveho poctu znaku
 posun = posun Mod 26
   
    For i = 1 To Len(vstup)
        znak = Mid(vstup, i, 1)
        If znak >= "a" And znak <= "z" Then 'pro mala znaky
            znak = Chr(Asc(znak) - posun)
            If znak > "z" Then
            znak = Chr(Asc(znak) - 26)
        ElseIf znak >= "A" And znak <= "Z" Then 'pro velke znaky
            znak = Chr(Asc(znak) - posun)
            If znak > "Z" Then
            znak = Chr(Asc(znak) - 26)
        End If
        vystup = vystup & znak
    Next i
   
    text3.Text = vystup
   
End Sub

Private Sub Command2_Click()
    Dim vstup As String
    Dim vystup As String
    Dim i As Integer
    Dim znak As String
    Dim posun As Integer
    Dim posun2 As Integer
   
    posun = Val(text2.Text)
    vstup = text1.Text
    vystup = ""
   
    ' kontrola formulářů
   
    If text1.Text = "" Then
    MsgBox "Zadej text", vbCritical, "Error"
    End If
   
    If text2.Text = "" Then
    MsgBox "Zadej číslo", vbCritical, "Error"
    End If
   
    posun = posun Mod 26 ' pocitame pouze se zbytkem po deleni celkoveho poctu znaku
   
For i = 1 To Len(vstup)
        znak = Mid(vstup, i, 1)
        If znak >= "a" And znak <= "z" Then 'pro malé znaky
            znak = Chr(Asc(znak) + posun)
            If znak > "z" Then
            znak = Chr(Asc(znak) - 26)
                 Else
        If znak >= "A" And znak <= "Z" Then 'pro velké znaky
            znak = Chr(Asc(znak) + posun)
            If znak > "Z" Then
            znak = Chr(Asc(znak) - 26)
        End If
       End If
        vystup = vystup & znak
Next i
    text3.Text = vystup
End Sub



Nepřekontroloval by jsi mi vývoják?
Asi nebude dobře. A ještě bych se chtěl zeptat co znamená přesně to -26. A posun = posun Mod 26. Někdo mi s tím ještě radil, takže jsem to nevymyslel sám :)
Přílohy
vd.jpg
vývoják
KINGSTON 4GB RAM | nVIDIA GeForce GTX 560 | Intel Core2 Quad Q8400 @ 2.67GHz | LCPOWER 600W | Gigabyte GA-EP35-DS4 | SAMSUNG SpinPoint F3 1000Gb, Hitachi 500GB | W7

Uživatelský avatar
roady
Level 2.5
Level 2.5
Příspěvky: 351
Registrován: červen 09
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Césarovou šifrou - Visual Basic

Příspěvekod roady » 04 čer 2012 20:10

Top, spěchá to.
KINGSTON 4GB RAM | nVIDIA GeForce GTX 560 | Intel Core2 Quad Q8400 @ 2.67GHz | LCPOWER 600W | Gigabyte GA-EP35-DS4 | SAMSUNG SpinPoint F3 1000Gb, Hitachi 500GB | W7

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Césarovou šifrou - Visual Basic

Příspěvekod faraon » 04 čer 2012 20:53

Chybí ti u těch podmínek větvení, jen z té první vycházejí dvě cesty, ale nemáš rozlišené která je při TRUE a která při FALSE. Jak to bude s těmi posuny? Podle toho příkladu, co jsi poslal nakonec, by měly být dva různé, podle toho jestli má šifrovaný znak liché nebo sudé pořadí...
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
roady
Level 2.5
Level 2.5
Příspěvky: 351
Registrován: červen 09
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: Césarovou šifrou - Visual Basic

Příspěvekod roady » 04 čer 2012 21:17

Takže takhle?

--- Doplnění předchozího příspěvku (04 Čer 2012 21:19) ---

Ty posuny takhle nechám, jen chci tu definici proč tam je to -26. A posun = posun Mod 26 a k čemu to přesně slouží, kdyby se mě na to někdo ptal, tak co na odpovědět. :)
Přílohy
vd1.jpg
výv
KINGSTON 4GB RAM | nVIDIA GeForce GTX 560 | Intel Core2 Quad Q8400 @ 2.67GHz | LCPOWER 600W | Gigabyte GA-EP35-DS4 | SAMSUNG SpinPoint F3 1000Gb, Hitachi 500GB | W7

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Césarovou šifrou - Visual Basic

Příspěvekod faraon » 04 čer 2012 22:03

posun = posun Mod 26

Písmen je jen 26, takže nemá smysl posouvat o více než 25 pozic, což je vzdálenost od A do Z. Pokud by někdo zadal větší číslo, tak místo běhání dokolečka v kruhu (viz šifrovací disk) se použije jen zbytek po dělení 26, ty nadbytečné oběhy se odstraní. Máš to tam dokonce napsané jako komentář ;-)

znak = Chr(Asc(znak) - 26)

To je ze stejného důvodu jako předchozí, protože se pořád musíš udržet v rozsahu A..Z. Co se stane když k ASCII kódu písmene Z přičteš jedničku? Vyběhneš z toho kruhu ven a vyjde ti znak [. Takže se musíš dostat zpátky do abecedy, což provedeš skokem o 26 písmen zpátky, a tím se dostaneš na písmeno A.

Akorát na tom diagramu máš jen šifrování, pro dešifrování bys potřeboval totéž, jen s opačnými znaménky.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Visual studio 2022 Příloha(y)
    od Tondaaaa » 06 říj 2024 20:03 » v Vše ostatní (sw)
    3
    3366
    od faraon Zobrazit poslední příspěvek
    08 říj 2024 19:33

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti