C# týden ITnetwork Flashka zdarma
Akce! Pouze tento sleva až 80 % na kurzy C# .NET. Lze kombinovat s akcí 50 % bodů navíc na prémiový obsah!
Brno? Vypsali jsme pro vás nové termíny školení Základů programování a OOP v Brně!

Diskuze: Pomoc s kódem...

Aktivity (4)
Avatar
Vítězslav Skopal:21.10.2018 22:22

Ahoj všem... Pomohl by mi někdo se snadnějším psaním kódu ve visual basic?
Píšu kód který má měnit text v textboxu podle kriterií. Nechce se mě psát neustále Textbox1.Text­.Replace("11", "2") protože 1+1=2 jako další pravidlo je Textbox1.Text­.Replace("12", "3") protože 1+2=3 dál to pokračuje ve stejném znění...
Chtěl bych to až do 8 místného čísla a je blbost psát každou variantu zvlášť. Neví někdo jak to napsat jednodužšeji?

Zkusil jsem:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        With TextBox1
            .Text = .Text.Replace("a", "1")
            .Text = .Text.Replace("b", "2")
            .Text = .Text.Replace("c", "3")
            .Text = .Text.Replace("d", "4")
            .Text = .Text.Replace("e", "5")
            .Text = .Text.Replace("f", "6")
            .Text = .Text.Replace("g", "7")
            .Text = .Text.Replace("h", "8")
            .Text = .Text.Replace("i", "9")
            .Text = .Text.Replace("j", "1")
            .Text = .Text.Replace("k", "2")
            .Text = .Text.Replace("l", "3")
            .Text = .Text.Replace("m", "4")
            .Text = .Text.Replace("n", "5")
            .Text = .Text.Replace("o", "6")
            .Text = .Text.Replace("p", "7")
            .Text = .Text.Replace("q", "8")
            .Text = .Text.Replace("r", "9")
            .Text = .Text.Replace("s", "1")
            .Text = .Text.Replace("t", "2")
            .Text = .Text.Replace("u", "3")
            .Text = .Text.Replace("v", "4")
            .Text = .Text.Replace("w", "5")
            .Text = .Text.Replace("x", "6")
            .Text = .Text.Replace("y", "7")
            .Text = .Text.Replace("z", "8")
            .Text = .Text.Replace(" ", " - ")
            .Text = .Text.Replace("11", "2")
            .Text = .Text.Replace("12", "3")
            .Text = .Text.Replace("13", "4")
            .Text = .Text.Replace("14", "5")
            .Text = .Text.Replace("15", "6")
            .Text = .Text.Replace("16", "7")
            .Text = .Text.Replace("17", "8")
            .Text = .Text.Replace("18", "9")
            .Text = .Text.Replace("19", "1")
            .Text = .Text.Replace("20", "2")
            .Text = .Text.Replace("21", "3")
            .Text = .Text.Replace("22", "4")
            .Text = .Text.Replace("23", "5")
            .Text = .Text.Replace("24", "6")
            .Text = .Text.Replace("25", "7")
            .Text = .Text.Replace("26", "8")
            .Text = .Text.Replace("27", "9")
        End With
End Sub

Chci docílit: Jednodužšího kód.

 
Odpovědět 21.10.2018 22:22
Avatar
Ondřej Šrytr:21.10.2018 23:14

Ahoj,

ty čísla jsou nějak oddělená mezerou nebo čárkou?

Jako řešení bych to viděl tak, že bych si vyhledal číslo v textovém poli a pomocí tohoto kódu provedl ciferný součet. Proměnná "s" představuje nalezené číslo.

Dim s As String = "11"
Dim soucet As Integer = 0

For Each c As Char In s
        soucet += Integer.Parse(c)
Next

TextBox1.Text = TextBox1.Text.Replace(s, soucet)
 
Nahoru Odpovědět 21.10.2018 23:14
Avatar
Odpovídá na Vítězslav Skopal
Jan Procházka:22.10.2018 11:36

Co se týče ciferných součtů, tak Ondřej už odpověděl :)

Co se týče písmen, tak Ti stačí daný znak přetypovat z char do int což Ti vrátí polohu (adresu) daného znaku v ASCII tabulce.

Dalším krokem je odečíst vhodné číslo tak, abys pro a dostal 0, b 1 atd.

Pak už jen spočítat modulo, tedy zbytek po dělení, devíti a k výsledku přičíst jedničku.

Tím jsi dostal první polovinu "tabulky" do jedné funkce.

 
Nahoru Odpovědět 22.10.2018 11:36
Avatar
Vítězslav Skopal:22.10.2018 11:45

Díky za reakce, nula nepřichází v úvahu. Je to aplikace na jednoduché dekódování textu kde a=1 b=2 c=3 atd...
Dále když je to celá věta s dlouhým textem tak to znamená že čísla se sečtou tak dokud nezůstane jen jednociferné číslo jako příklad text aabcd = 11234 = 1+1+2+3+4= 11 = 1+1 = 2 ... "2" Je výsledné číslo slova. Jako řešení bych nejspíše viděl odpověď Ondřeje.

 
Nahoru Odpovědět 22.10.2018 11:45
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:23.10.2018 10:57

A pro "aj" to bude 1+10 nebo 1+1+0 a nebo, jak mas tu puvodni tabulku 1+1?
Jestli to puvodni, tak bych pouzil podobny kod jako psal ondrej. Pseudokod nejak takto:

cyklus (vsechny znaky)
{
if (code>=65 && code<75) zapis(code - 64); // 65 ascii kod znaku pro 'A' http://www.asciitable.com/
if (code>=75 && code<85) zapis(code - 64 - 10); ...
}
soucet = 0;
cyklus (vsechny znaky)
{
if (code>=48 && code<=57) {soucet += code - 47;}
 else {zapis(soucet) + znak; soucet = 0;}
}
if (soucet>0) zapis(soucet);
Editováno 23.10.2018 10:59
 
Nahoru Odpovědět 23.10.2018 10:57
Avatar
Odpovídá na Peter Mlich
Vítězslav Skopal:24.10.2018 9:56

Pro "aj" je to 1+1 tudíž 2...

 
Nahoru Odpovědět 24.10.2018 9:56
Avatar
Odpovídá na Vítězslav Skopal
Jan Procházka:30.10.2018 9:52

Jestli s tou nulou narážíš na můj příspěvek, tak nehrozí, že by ta nula byla vrácená. Modulo vrací zbytek po celočíselném dělení, pro X modulo 9 to vrátí číslo od nuly do osmi. V dalším kroku je přičtení jedničky, takže výsledek je v rozsahu od jedné do devíti.

Celou větu můžeš jednoduše zpracovat rekurzivní funkcí.

Private Sub String zvejkej (String StaryRetezec)
// kod pro prevod StaryRetezec na NovyRetezec
if (NovyRetezec.length>1)
        NovyRetezec=zvejkej(NovyRetezec);
return NovyRetezec;
 
Nahoru Odpovědět 30.10.2018 9:52
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.