Avatar
ngo.andrej
Člen
Avatar
ngo.andrej:

Dobrý den,
mám za úkol převrátit větu tzn. "Ahoj, Tomáši. Jak se máš. Já dobře. Ty také?" -> "Ty také? Já dobře. Jak se máš. Ahoj, Tomáši."
Všechno by bylo jednoduché kdyby jako zakončení věty byla jen tečka. Ale bohužel je tam ještě možnost vykřičníku a otazníku. To podle mě taky nebyl problém,
ale po napsání kódu program stále nejde. (neprovede se nic).
Díky za každou pomoc.

textBox2.Text = "";
                                int PocetTecek = 0;
                                string vety = textBox1.Text;
                                string Skladani = "";
                                int Pozice = 0;
                                //string znak = ".?!";
                                for (int R = 0; R <= textBox1.Text.Length - 1; R++)
                                {
                                        if (textBox1.Text[R] == '.' || textBox1.Text[R] == '!' || textBox1.Text[R] == '?')
                                                {
                                                        PocetTecek++;
                                                }
                                }


                                string[] Pole = new string[PocetTecek];
                                        for (int R = 0; R <= textBox1.Text.Length - 1; R++)
                                        {
                                                if (textBox1.Text[R] != '.' || textBox1.Text[R] != '!' || textBox1.Text[R] != '?')
                                                {
                                                        Skladani += textBox1.Text[R].ToString();
                                                }
                                                else
                                                {
                                                        Pole[Pozice] = (Skladani);
                                                        Skladani = "";
                                                        Pozice++;
                                                }
                                }
                                if (PocetTecek % 2 == 0)
                                {
                                        for (int i = 0; i < Pole.Length / 2; i++)
                                        {
                                                string prehaz = Pole[i];
                                                Pole[i] = Pole[Pole.Length - i - 1];
                                                Pole[Pole.Length - i - 1] = prehaz;
                                        }
                                        foreach (string veta in Pole)
                                        {
                                                textBox2.Text += veta;
                                        }
                                }
                                else
                                {
                                }
 
Odpovědět 27.4.2013 18:46
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na ngo.andrej
Petr Nymsa:

Tento celý kód máš vložený kde ? V metodě po kliknutí na tlačítko ? V konstruktoru ? Nebo jsi to prsknul někam ? Pod pojmem "program stále nejde" si můžeme představit cokoliv. Nezapne se ? Nezobrazí výsledek ? Přehází věty špatně ? Program padá ? Bohužel opět vedení dalo všechny věštecké nástroje vyčistit :). Popiš prosím více problém a pokusíme se poradit. Jen tak pro začátek. Proč tam máš prázdný blok else ?

Nahoru Odpovědět 27.4.2013 18:54
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Odpovídá na ngo.andrej
Michal Žůrek (misaz):

Ten kód tady vypadá blbě, proč je tam tolik mezer?

1.) Rozděl podle teček, vytvoř si kolekci věty<string>
2.) věty rozdělené podle teček rozděl podle ?
3.) věty rozdělené podle teček rozděl podle !
4.) věty rozdělené podle ? rozděl podle !

Myslím si že by to mělo stačit.

Nahoru Odpovědět 27.4.2013 18:55
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Petr Nymsa
Michal Žůrek (misaz):

On asi neumí používat debuger.

Nahoru Odpovědět 27.4.2013 18:56
Nesnáším {}, proto se jim vyhýbám.
Avatar
ngo.andrej
Člen
Avatar
ngo.andrej:

ano je to po kliknutí na tlačítko. Program po kliknutí neprovede nic.
Prázdné else tam je prozatím, jelikož přesné zadání je: "Program spočítá počet vět. Pokud jich je sudý počet vypíše věty v opačném pořadí. Pokud bude počet lichý, vypíše nejdříve věty v lichém pořadí (1., 3., 5. atd.) a teprve po nich věty v pořadí sudé (2., 4., 6. atd.).
např: Ahoj, Tomáši. Jak se máš. Já dobře. Ty také? -> Ty také? Já dobře. Jak se máš. Ahoj, Tomáši."
a else má být potom na lichý počet vět.

 
Nahoru Odpovědět 27.4.2013 18:57
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na ngo.andrej
Petr Nymsa:

Program neudělá nic ... co udělá ? Běží dál bez spadnutí ? Pokud ano, není metoda registrovaná na tlačítko. Nejrychlejší cesta jak to zjistit je v Designeru kliknout na tlačítko a v properties najít záložku Events (ikona blesku) , najít si řádek Click a ujistit že tam je ta metoda napsaná, pokud ne, 2x klepnout do toho řádku a metoda se vygeneruje.

Nahoru Odpovědět 27.4.2013 19:03
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
ngo.andrej
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
ngo.andrej:

Promiň, jsem v programování amatér. Mohl bys to popsat víc pro blbce? :D

 
Nahoru Odpovědět 27.4.2013 19:03
Avatar
Odpovídá na ngo.andrej
Michal Žůrek (misaz):

3 je liché

:D

možná proto to nic neudělá :)

Editováno 27.4.2013 19:04
Nahoru Odpovědět 27.4.2013 19:04
Nesnáším {}, proto se jim vyhýbám.
Avatar
ngo.andrej
Člen
Avatar
Odpovídá na Petr Nymsa
ngo.andrej:

Běží bez spadnutí. Ale to není tímhle... Když smažu z podmínky if ostatní podmínky tzn. že nechám jen: "if (textBox1.Text[R] == '.')" tak funguje. Ale když tam dám další podmínky s OR (||) tak nic neprovede...

 
Nahoru Odpovědět 27.4.2013 19:06
Avatar
Odpovídá na ngo.andrej
Michal Žůrek (misaz):

No nevím na co konkrétně potřebuješ podmínky, ale za minutu jsem seplácal toto:

string dlouhyText = Console.ReadLine();
//string dlouhyText = "Ahoj, Tomáši. Jak se máš. Já dobře. Ty také?";
char[] poleRozdelovacu = { '.', '!', '?' };
string[] vety = dlouhyText.Split(poleRozdelovacu);
for (int i = vety.Length - 1; i > 0; i--)
{
    Console.WriteLine(vety[i]);
}
Console.ReadKey();
Nahoru Odpovědět  +2 27.4.2013 19:08
Nesnáším {}, proto se jim vyhýbám.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na ngo.andrej
Petr Nymsa:

Podívej se na zdejší tutoriály o práci se stringy, nalezneš velmi užitečnou metodu Split. Jinak, neousivís to přímo s programem, zápis kódu je šílený. Proměnné (privátní) by měly být vždy malým písmenem. Vždy !

Nahoru Odpovědět 27.4.2013 19:12
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na Petr Nymsa
Jiří Gracík:

upřesním, aby to ngo.andrej pochopil správně - první písmeno má být malé :) Poté můžeš využít pro "oddělení" slov dva způsoby zápisu, ten co tu používáš - velbloudí, to znamená že budeš mít:

int mojeKrasnaPromnenna

nebo použiješ podtržítkový zápis:

int moje_krasna_promnenna

To už je na tobě :)

Editováno 27.4.2013 19:29
Nahoru Odpovědět 27.4.2013 19:28
Creating websites is awesome till you see the result in another browser ...
Avatar
ngo.andrej
Člen
Avatar
Odpovídá na Michal Žůrek (misaz)
ngo.andrej:

No jo, ale zase to napíše zase takhle př. Ahoj, Tomáši. Jak se máš. Já dobře. Ty také? -> Ahoj, Tomáši. Jak se máš. Já dobře. ?ékat yT .eřbod áJ .šám es kaJ .išámoT ,johA
a to já nechci.

 
Nahoru Odpovědět 27.4.2013 19:34
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na ngo.andrej
Jiří Gracík:

Prosímtě o co ti teda jde, chceš
a)

vstup = "Babička Karkulky ráda skotačí s vlky";
výstup = "vlky s skotačí ráda Karkulky Babička";

nebo b)

vstup = "Babička Karkulky ráda skotačí s vlky";
výstup = "yklv s íčatoks adár yklukraK akčibaB";

?

Nahoru Odpovědět 27.4.2013 19:39
Creating websites is awesome till you see the result in another browser ...
Avatar
Honza Bittner
Redaktor
Avatar
Nahoru Odpovědět 27.4.2013 19:41
Student FIT ČVUT. Followuj mě na https://twitter.com/tenhobi a ptej se na https://github.com/HoBi/ama.
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na ngo.andrej
Jiří Gracík:

Tak v tom případě je misazovo řešení správné, až na to že tam nepřidává zpátky ty otazníky, tečky a vykříčníky. A chybí tam poslední slovo, místo i > 0 bude i >= 0;

Nahoru Odpovědět 27.4.2013 19:43
Creating websites is awesome till you see the result in another browser ...
Avatar
ngo.andrej
Člen
Avatar
ngo.andrej:

Omlouvám se, dobrý už to funguje. Ale problém ještě v tom aby mi to otisklo stejnou interpunkci. Nevíte někdo, jak to aplikovat?

 
Nahoru Odpovědět 27.4.2013 19:49
Avatar
Odpovídá na ngo.andrej
Michael Olšavský:

co třeba zkontrolavat, jestli se v dane casti vety vyskytuje carka a tu pak presunout na konec ;-)

 
Nahoru Odpovědět 27.4.2013 19:56
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na ngo.andrej
Jiří Gracík:

Nejlepší to bude projít cyklem, ukládat si postupně všechny čárky, tečky a tyhle blbosti třeba do zásobníku který by pro to byl úplně ideální, nebo do listu, a při výpisu je dávat mezi ty jednodlivý položky :)

Nahoru Odpovědět 27.4.2013 20:02
Creating websites is awesome till you see the result in another browser ...
Avatar
ngo.andrej
Člen
Avatar
Odpovídá na Jiří Gracík
ngo.andrej:

No já to stejně nechápu, jak bych to poté vyvolal přesně na to stejné místo, kam to patří? To mi vrtá hlavou..

 
Nahoru Odpovědět 27.4.2013 20:20
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na ngo.andrej
Petr Nymsa:

Použiješ zásobník :). Zásobník tak , že oc jde první tam, dje poslední ven. Tj nejdříve projedeš cyklem větu, naházíš do zásobníku charů znaky, poté použiješ Misazuv příklad -> rozplituješ na pole větu, projedeš opět cyklem a za každou část (resp. každý index) vyndáš prvek ze zásobníku a hotovo :)

Nahoru Odpovědět 27.4.2013 20:25
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na ngo.andrej
Petr Nymsa:

Sice to nedělám moc rád, ale posílám funkční řešení. Pokus se pochopit jak to funguje ;) A ty další záležitosti zvládneš :)

Stack<char> znaky = new Stack<char>();
           string veta = "Ahoj jak se jmenuješ ? Jmenuji se Tomáš ! Já také.";
           char[] set = new char[3] { '.', '!', '?' };

           foreach (char p in veta)
           {
               if (p == '.' || p == '!' || p == '?')
                   znaky.Push(p);
           }

           string[] pole = veta.Split(set,StringSplitOptions.RemoveEmptyEntries);
           string output = "";
           for (int i = pole.Length-1; i >= 0; i--)
           {
               if (znaky.Count > 0)
                   output += pole[i] + znaky.Pop();
               else output += pole[i];
           }

           Console.WriteLine(output);
Nahoru Odpovědět  +2 27.4.2013 20:39
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
ngo.andrej
Člen
Avatar
Odpovídá na Petr Nymsa
ngo.andrej:

Páni. Tleskám, a velké DÍKY!

 
Nahoru Odpovědět 27.4.2013 20:52
Avatar
Petr Nymsa
Redaktor
Avatar
Nahoru Odpovědět 27.4.2013 20:54
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Jiří Gracík
Redaktor
Avatar
Odpovídá na ngo.andrej
Jiří Gracík:

Nechci rejpat, ale hezčí v tom vypisovacím foru místo

if(znaky.Count > 0)
  output += pole[i] + znaky.Pop();
else output += pole[i];

bude toto:

output += pole[i];
if (znaky.Count > 0) output += znaky.Pop();

Jenom aby ten kód byl 130% dokonalý :D

Nahoru Odpovědět  +1 27.4.2013 20:57
Creating websites is awesome till you see the result in another browser ...
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 25 zpráv z 25.