NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
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í.

Diskuze – Lekce 11 - Textové řetězce v C# podruhé - Práce s jednotlivými znaky

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Rostislav Danko:5.8.2022 16:11

Ahoj,
chci se zeptat, proč mi to jako výstup vrací : programátor se `asekne ve sprše, protože instrukce na šampónu byly: namydlit, omýt, opakovat.
všechny znaky mi to dešifruje zpátky správně až na "z" .
link ke kódu : https://www.itnetwork.cz/…lighter/1494
díky za radu

 
Odpovědět
5.8.2022 16:11
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Rostislav Danko
DarkCoder:5.8.2022 19:12

Máš chybu v posunu. Pokud znakem bude písmeno z (ASCII 122), pak při posunu o 26 zpět se dostaneš na hodnotu 96, což odpovídá znaku ' nikoli znaku a (ASCII 97).

Odpovědět
5.8.2022 19:12
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Rostislav Danko
DarkCoder:5.8.2022 19:45

Ještě jinak, přesněji. Když šifruješ písmeno z, dostaneš a. Při dešifrování písmene a posouváš o 1 zpět. Čímž se dostaneš na ASCII hodnotu 96 odpovídající znaku '. Následující podmínka je nesmyslná a nikdy nenastane. Musíš testovat na podsah nikoli přesah.

Odpovědět
5.8.2022 19:45
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Rostislav Danko:5.8.2022 19:56

Díky, už sem na to asi přišel. ve výše poslaném kódu jsem vyměnil znaménka u obou loopů "foreach" a šlape to jak má, viz https://www.itnetwork.cz/…lighter/1495

konkrétně :
i -= 26 -------> i += 26
a += 26 -------> a -= 26

 
Odpovědět
5.8.2022 19:56
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Rostislav Danko
DarkCoder:5.8.2022 20:10

Jsi si jist že šifrované písmeno z bude písmeno a?

Odpovědět
5.8.2022 20:10
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Rostislav Danko:5.8.2022 20:31

No, vypadá to takto...viz screen

 
Odpovědět
5.8.2022 20:31
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Rostislav Danko
DarkCoder:5.8.2022 21:03

Samotný pohled na zašifrovanou zprávu říká že něco je špatně. To co si vytvořil je nekonstantní posun. ASCII hodnoty malých písmen jsou v rozsahu 97-122. Znaky s diakritikou mají hodnoty vyšší než 122. Pokud řešíš cyklickou šifru, nemůžeš provádět posun vpřed nad mezní hodnotu. Jak už jsem naznačil a na výstupu je to krásně vidět, hodnoty znaků od znaků z výše nebudou přetočeny, z se nestane a. U zašifrování kontroluješ přesah a posouváš zpět, u dešifrování kontroluješ podsah a posouváš vpřed. Tedy dvě doporučení.. odstraň diakritiku, použij pouze písmena, ať už velká nebo malá a jako vstupní řetězec pro testování si zadej celou abecedu, od a do z. Na tom krásně uvidíš, jak se tvůj program chová.

Odpovědět
5.8.2022 21:03
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Walter Němec:16.10.2022 21:42

Ahoj, může mi někdo říct kde mám chybu?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace program_acsii
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Zadejte jeden znak:");
            char a = ' ';
            string znak = Console.ReadLine();
            bool spravnaHodnota = false;
            while (spravnaHodnota = false)
            {
                a:
                if (znak.Length == 1)
                {
                    a = Convert.ToChar(znak);
                    spravnaHodnota = true;
                }
                else
                {
                    Console.WriteLine("Zadaný text je delší než jeden znak");
                    Console.WriteLine("Zadejte znovu");
                    znak = Console.ReadLine();
                    goto a;
                }
            }
            Console.WriteLine($"ACSII hednota zadaného znaku{znak} je :{(int) a}");
            Console.ReadKey();



        }
    }
}

Visual studio chybu nenapíše,ale výstup se vždy je:ACSII hednota zadaného znaku je :32

do stringu "znak" můžu napsat cokoli,ale vždy vypíše základní hodnotu charu "a"

Editováno 16.10.2022 21:45
 
Odpovědět
16.10.2022 21:42
Avatar
Walter Němec:16.10.2022 21:56

ukázka:

 
Odpovědět
16.10.2022 21:56
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Walter Němec
DarkCoder:16.10.2022 22:36

Podívej se, jaký výraz si zadal do podmínky cyklu while. A určitě by to šlo i bez toho návěští a příkazu goto. 😊

Odpovědět
16.10.2022 22:36
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
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 10 zpráv z 115.