Diskuze: převod písmena na číslo

C# .NET .NET (C# a Visual Basic) převod písmena na číslo American English version English version

Avatar
Ola Dvořáková:

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. října 11:28
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Ola Dvořáková
DarkCoder:

Ř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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 5. října 13:44
Avatar
Odpovídá na DarkCoder
Ola Dvořáková:

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. října 14:55
Avatar
Elisse
Člen
Avatar
Odpovídá na Ola Dvořáková
Elisse:

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. října 16:13
 
Nahoru Odpovědět 5. října 16:12
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Ola Dvořáková
DarkCoder:

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. října 17:12
Avatar
DarkCoder
Člen
Avatar
Odpovídá na DarkCoder
DarkCoder:

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. října 17:23
Avatar
 
Nahoru Odpovědět 5. října 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.