Césarovou šifrou - Visual Basic Vyřešeno
Re: Césarovou šifrou - Visual Basic
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)
(pravil K. H. Borovský o cenzuře internetu)
Re: Césarovou šifrou - Visual Basic
No tak nechám to takhle
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 :)
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 :)
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
Re: Césarovou šifrou - Visual Basic
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
Re: Césarovou šifrou - Visual Basic
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)
(pravil K. H. Borovský o cenzuře internetu)
Re: Césarovou šifrou - Visual Basic
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. :)
--- 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. :)
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
Re: Césarovou šifrou - Visual Basic
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.
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)
(pravil K. H. Borovský o cenzuře internetu)
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
- 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 6 hostů