Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 11. diel - Textové reťazce v C# druhýkrát - Práca s jednotlivými znakmi

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
tasuro
Člen
Avatar
Odpovedá na Josef Theuer
tasuro:13.3.2020 17:14

Tak samozřejmě, že někteří odpadnou. A nebo prostě potřebovali vysvětlit nějakou látku kvůli škole a zbytek již chápou ze školy.

Avatar
Marek Vajčner:14.3.2020 13:16

No popravdě já dodnes slyšel jen o šifře mistra Leonarda. :-D Nicméně v případě Cézarovi šifry už alespoň trochu vím o co jde.

Avatar
Alesh
Tvůrce
Avatar
Alesh:11.6.2020 9:55

Nechci rejpat :-), ale když se v článku tvrdí:

Všimněme si, že nikde nepoužíváme přímé kódy znaků, v podmínce je (int)'z', i když bychom tam mohli napsat rovnou 122.

Tak by místo:

if (i > (int)'z')
    i -= 26;

Mělo být:

if (i > (int)'z')
    i -= (int)'z' - (int)'a' + 1;       // Přetypování není nezbytné, funguje to i bez něj.
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na Alesh
David Hartinger:11.6.2020 10:17

26 není kód znaku, ale počet znaků v abecedě.

Odpovedať
New kid back on the block with a R.I.P
Avatar
Alesh
Tvůrce
Avatar
Odpovedá na David Hartinger
Alesh:11.6.2020 10:35

No, dobře, ale situace je zcela analogická, uživatel se může splést, jak v samotném kódu znaku, tak v počtu znaků abecedy. Davide, dej mi za pravdu, dík. :-)

Avatar
David Hartinger
Vlastník
Avatar
Odpovedá na Alesh
David Hartinger:11.6.2020 16:51

Já třeba vím, že je v abecedě 26 písmen, když to někdo neví, tak je to asi lepší odečíst, ale zas se může splést na tom jak tam musíš dát + 1.

Odpovedať
New kid back on the block with a R.I.P
Avatar
Savi
Člen
Avatar
Savi:21.6.2020 11:47

Tak jsem si příklady vyzkoušel a to včetně dešifrování textu zpět. Nicméně jsem nepoužil podmínku přetečení. Jeden z důvodů byl, že stejně neošetřila mezery nebo interpunkci v celých větách a ty "ošklivé" znaky mi v šifrovaném textu přišli OK.
Ale k otázce... Bylo by vůbec možné dešifrovat text zpět s použitím této podmínky přetečení, pokud si v programu mohu zvolit i počet míst, o které znaky posouvám ? Asi bychom museli použít ještě nějaké jiné proměnné, které by dávali info o původním textu, že ??

Děkuji moc!

Avatar
Alesh
Tvůrce
Avatar
Odpovedá na Savi
Alesh:21.6.2020 17:24

Cézarova šifra je spíš taková legrácka než metoda, jak něco opravdu bezpečně zašifrovat, to je snad jasné. Možná ještě v době, kdy neexistovaly počítače, že to mohlo mít nějaké reálné využití, samozřejmě za předpokladu, že ten posun se udělal o nějaký "těžko odhadnutelný" posun. Dnes bys velmi jednoduše naprogramoval nástroj, který by zkoušel různé posuny a "na oči" bys posoudil, zda ten text po tom posunu je ten původní nezašifrovaný.
Pokud jde o tvůj dotaz, tak tam bys v podstatě asi mohl udělat 2 věci:

  1. naprogramovat "šifrovač" a "dešifrovač", v každém z nich by byl natvrdo nastavený posun o "n" znaků (šifrovač posunu tedy o "n" a "dešifrovač" o "-n").
  2. variantou je mít jeden nástroj, kde bude možná zadat posun uživatelem. Pak jinou cestou příjemci sdělíš posun, pak mu pošleš zprávu a on si i zas posune o -posun.

Ale jak jsem již psal, tuto úlohu ber jen jako cvičení s char proměnnými, reálné využití k šifrování to prostě nemá, čili tvoje úvahy jsou v tomto smyslu víceméně zbytečné.

Avatar
drevpe
Člen
Avatar
drevpe:2.7.2020 15:47

Ahoj jen taková poznámka.
dnes zkouším kód z článku a kompilátor mi hlásí error
Error 1 The best overloaded method match for 'string.Conta­ins(string)' has some invalid arguments
Error 2 Argument 1: cannot convert from 'char' to 'string'

když zkonvertuji tak je to ok.

foreach (char c in s)
{
    if (samohlasky.Contains(c))
        pocetSamohlasek++;
    else if (souhlasky.Contains(Convert.ToString(c)))
        pocetSouhlasek++;
}
Avatar
drevpe
Člen
Avatar
Odpovedá na drevpe
drevpe:2.7.2020 15:59

škoda že nemůžu editovat komentář...
už vím čím to je... .NET Framework verze a použití using System.Linq

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 115.