NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Ola Dvořáková:5.10.2016 11:28

Zdravím všechny, potřebovala bych poradit s jedním úkolem. Stále se mi nedaří přijít na to,jak to provést. Zadání zní takto:
,,Jak jistě víte, když píšete SMS na starém mobilním telefonu, tak mačkáte tlačítka s čísly.
K jednomu číslu je přiřazeno vždy několik znaků. Napsání jednoho znaku proto znamená zmáčknou
jedno tlačítko několikrát. Zde je schematicky ukázaná klávesnice. Takže například tlačítko 1 = (+ - = * / _ . ,? 1), 2= (a b c á č 2)

Například pro zobrazení písmena „c“ zmáčknete třikrát číslo 2.

Vaším úkolem je napsat 2 jednoduché verze programu, který ze souboru „vstup.txt“ načte text a
následně s ním pracuje:

1. Každé písmeno nahradí číslem, které musel uživatel zmáčknout a také kolikrát, takovým
způsobem, že například písmeno „v“ nahradí číslem „888“ (za každé takové číslo napíše
mezeru pro přehlednost).

2. Každé písmeno nahradí číslem, keré musel uživatel zmáčknout a také kolikrát, takovým
způsobem, že například písmeno „v“ nahradí znakem „3x8“ (za každý takový znak napíše
mezeru pro přehlednost).

Neznámý znak v obou případech nahradí otazníkem.
Můžete mít obě verze v 1 programu, kde bude mezi nimi výběr (těžší varianta) nebo mít uloženou
každou zvlášť jako samostatné programy (lehčí varianta).
Na konci výstup vytiskne, uloží ho pod názvem: „vystup–číslo_verze.txt“ a program se ukončí po stisknutí klávesy enter.
Nápověda:
funkce tuple(), funkce lower(), metoda slovnik.keys(), dělat na základě slovníku"¨
Děkuji za případnou pomoc :).

 
Odpovědět
5.10.2016 11:28
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Ola Dvořáková
DarkCoder:5.10.2016 13:44

Řešení je velice snadné. Vytvoř si pole struktur, kde pole má velikost počtu typů znaků které se mohou zobrazit. Struktura představuje informaci znaku a je tvořena dvěma celočíselnými typy, kde první značí pod jakým stisknutým číslem se znak nachází a druhý značí pozici (tedy kolikrát musíš tlačítko stisknout pro výběr daného znaku).

Postup:

  • načteš znak se souboru, provedeš potřebné testy a úpravy pro identifikaci případného neznámého znaku
  • sáhneš si do pole, kde index pole značí ASCII hodnotu znaku a pak už jen vypisuješ vše potřebné

1. verze
pracuješ s prvky struktury, využiješ cyklus for

2. verze
pracuješ s prvky struktury bez nutnosti dalších řídících procedur

Mít obě verze v programu není nic těžkého, je to jeden rozhodovací příkaz

V programu můžeš pro testy a úpravy využít např. některou z následujících funkcí:
isalnum(), isalpha(), isdigit(), isprint(), islower(), isupper(), tolower(), toupper()

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
5.10.2016 13:44
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Ola Dvořáková:5.10.2016 14:55

Díky za odpověď. Jsem v tom nováček, tak hodně tápu.Takže vytvořím pole: int[] Array = new int[60]; -kt. má 61 znaků, jenže nevím, jak zadat každému znaku tu danou informaci.

 
Nahoru Odpovědět
5.10.2016 14:55
Avatar
Odpovídá na Ola Dvořáková
Erik Šťastný:5.10.2016 16:12

Pole struktur kolega říkal ne pole intů :)

struktura vypadá např :)

 struct Login_Credential
{
     string Username;
     string Password;
}

Takto uložíš do jednoho prvku pole víc než jednu informaci.

Editováno 5.10.2016 16:13
 
Nahoru Odpovědět
5.10.2016 16:12
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Ola Dvořáková
DarkCoder:5.10.2016 17:12

V pohodě, není to nic těžkého. Na následujících řádcích Ti blíže nastíním postup.
Vytvoř si typ struktury

struct sType {
        unsigned int num;
        unsigned int pos;
};

Vytvoř si pole struktur

struct sType znak[256];

Vytvoř si soubor init.ini obsahující informace o rozložení znaku, něco jako viz kód níže.
první znak je znak který zpracovávám, druhý znak je číslo tlačítka a třetí je pozice.

a 2 2
b 2 3
...
1 1 1
2 2 1

Nyní je třeba načíst hodnoty ze souboru init.ini do pole struktur.
Každý načtený znak má svoji ASCII hodnotu. Tu použiješ jako index pole struktur.
Pro každý řádek v souboru init.ini použij něco jako toto:

znak[p1].num = p2;
znak[p2].pos = p3;

kde:
p1 je ASCII hodnota prvního znaku na řádku
p2 je hodnota druhého znaku na řádku
p3 je hodnota třetího znaku na řádku

Tím máš naplněné pole struktur hodnotami.
Pak už jen čteš znaky ze souboru vstup.txt, zjistíš ASCII hodnotu znaku, tu použiješ jako index pole struktur ze kterého si bereš potřebné informace a ty následně zpracováváš na výstup.

Nahoru Odpovědět
5.10.2016 17: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 DarkCoder
DarkCoder:5.10.2016 17:23

Oprava úryvku kódu týkajícího se načítání hodnot ze souboru init.ini

znak[p1].num = p2;
znak[p1].pos = p3;
Nahoru Odpovědět
5.10.2016 17:23
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Ola Dvořáková:5.10.2016 20:39

Děkuju moc, jdu na to 8-)

 
Nahoru Odpovědět
5.10.2016 20:39
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 7 zpráv z 7.