NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Neaktivní uživatel:8.4.2017 17:55

Ahoj,
začínám s programováním a nějak nechápu zdroják aplikace pro palindromy ze cvičení k deváté lekci.

Zdroják je:

{
            // Zadání vstupu
            Console.WriteLine("Zadej palindrom: ");
            string palindrom = Console.ReadLine();
            // Získání řetězce pozpátku
            string pozpatku = "";
            for (int i = palindrom.Length - 1; i >= 0; i--)
            {
                pozpatku += palindrom[i];
            }
            // Porovnání
            if (palindrom == pozpatku)
                Console.WriteLine("Ano, toto je palindrom.");
            else
                Console.WriteLine("Toto není palindrom.");
            Console.ReadKey();
        }

Zadání vstupu a porovnání je jasný, ale mohl by mi někdo, prosím, vysvětlit, co dělají konkrétní části kódu mezi nimi?

Díky moc,
Godxon

Editováno 8.4.2017 17:58
Odpovědět
8.4.2017 17:55
Neaktivní uživatelský účet
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Verquido:8.4.2017 18:21

Však už to tam máš vysvětlené v komentářích. Jde o to že si nahraješ do proměné text, který potom v cyklu projedeš. Začínáš odzadu a jedeš ke předu a tím pádem si vždy přidáš do další proměné písmeno ze zadu.

// slovo = auto
// písmena jsou a,u,t,o
for (int i = palindrom.Length - 1; i >= 0; i--)
{
    pozpatku += palindrom[i];
}
//nakonci budeš mít slovo "otua"

Nakonci se porovná palindrom s tím pozpátku a to je vše.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
8.4.2017 18:21
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Verquido:8.4.2017 18:25

Pokud tedy víš že

string slovo = "auto";
string tretiPismeno = slovo[2];
 
Nahoru Odpovědět
8.4.2017 18:25
Avatar
Neaktivní uživatel:8.4.2017 18:52

Už to v podstatě chápu... Jen mi nejde do mysli, proč se od palindrom.Length odčítá jednička...?

Nahoru Odpovědět
8.4.2017 18:52
Neaktivní uživatelský účet
Avatar
Jurajs
Člen
Avatar
Odpovídá na Neaktivní uživatel
Jurajs:8.4.2017 18:56

Psal ti....pokud to dobře chápu, že jedeš od zadu "AUTO" == OTUA to znamena -1 a kdyby si to chtel projet od predu tak +1.... Nebo ne?

 
Nahoru Odpovědět
8.4.2017 18:56
Avatar
Tomas
Člen
Avatar
Tomas:8.4.2017 18:57

Představ si:

string slovo = "auto";

Délka tohoto stringu: 4 prvky
Ovšem, pokud si string předsavíme jako pole, tak víme, že se čísluje od 0. Tzn. že ve stringu to vypadá nějak takhle:
index: 0 - písmeno: a
index: 1 - písmeno: u
index: 2 - písmeno: t
index: 3 - písmeno: o

Kdyby tam ta -1 nebyla, tak by jsi přetekl :)

 
Nahoru Odpovědět
8.4.2017 18:57
Avatar
Neaktivní uživatel:8.4.2017 18:59

Díky moc kluci, už to chápu.

Nahoru Odpovědět
8.4.2017 18:59
Neaktivní uživatelský účet
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Jurajs
Verquido:8.4.2017 21:20

Nene, Ta -1 je tam jen kvůli tomu aby nevznikl overflow error. Jinak jestli pojedeš v cyklu dopředu v poli nebo dozadu se řeší pouze takto.

// Od předu
for (int i = 0; i <= palindrom.Length -1; i++)
// Od zadu
for (int i = palindrom.Length - 1; i >= 0; i--)
 
Nahoru Odpovědět
8.4.2017 21:20
Avatar
Verquido
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Verquido:8.4.2017 21:24

Ta -1 je tam hlavně protože délka stringu se počítá absolutně takže 4 znaky jsou prostě 4 znaky, ale poslední index pole z něj je 3 protože [0,1,2,3].

Jinak pokud by jsi pracoval s polem jako takovým tak v některých případech stačí jen upravit podmínku v cyklu a vynechat tu -1.

Editováno 8.4.2017 21:27
 
Nahoru Odpovědět
8.4.2017 21:24
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 9 zpráv z 9.