Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 09. 06. 2010 23:17

case_fcs
Příspěvky: 101
Reputace:   -1 
 

skok z funkce do funkce

ahoj prosím o radu, ve funkci main uživatel zadá slovo a jiná funkce hledá v souboru zda toto slovo existuje, pokud ano vypíše ho, pokud ne vypíš chybu a zeptá se zda chce uživatel slovo zadat znovu a pokud ano vyskočí znovu nabídka pro zadání slova, ale já nevím jak zase zpětně skočit do main, kde se zadává, pro pochopení uvedu příklad

find(string s)
{
   /*nejake prikazy pro hledani slova v souboru*/
   if (slovo je nalezeno)
  {
     vypis nalezeneho slova
     
  }
else
{
   cout << "slovo nenalezeno" << endl << "chcete hledat znovu? " << endl;
   cin >> answer;
   if (answer == "n")
       exit(0);
   else if (answer == "y")
      A TADY BYCH PRAVE POTREBOVALA SKOCIT ZASE DO MAIN NA ZACATEK
}


}

main()
{
   string slovo;
   cout << "zadejte slovo" << endl;
   cin >> slovo;
   find(slovo);

}

Offline

  • (téma jako vyřešené označil(a) gladiator01)

#2 09. 06. 2010 23:31 — Editoval frank_horrigan (10. 06. 2010 09:05)

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: skok z funkce do funkce

Asi nejelegantneji tak, že funkce find bude typu bool nebo int, pokud uzivatel zada N na otazku zda hledat znovu, bude funkce mit s false nebo 0, pokud cokoli jineho (Y), tak funkce vrati true, 1 nebo cokoli jiného, si vymysli, ale doporucuji true nebo 1. No a v mainu testuj na stav promenne, pokud bude po funkci 0, program skonci, main vrati nulu (pokud vraci, ja ji psaval void), pokud ma promenna (třeba newTest) hodnotu true, pak se zavola funkce znovu (napadá mně teď goto a navesti hned za hlavicku main() ) jasne, nebo chces kousek kodu, jak to myslim?

#include <iostream>
using namespace std;
bool find(char s[50]); // taky piseme prototypy, i ve strasich verzich, s tim using namespace a pod. muzou byt potize, zalezi co mas za verzi compileru


int main(char argv[], int argc)
{
   char slovo[50];
   bool newFind = true;
  while(newFind == true)
  {
    cout << "zadejte slovo" << endl;
   cin >> slovo;
   newFind = find(slovo);
   }
   return 0;

}

bool find (char s[50])
{
   /*nejake prikazy pro hledani slova v souboru*/
   if (slovo je nalezeno)
  {
     vypis nalezeneho slova
     
  }
else
{
   cout << "slovo nenalezeno" << endl << "chcete hledat znovu? " << endl;
   cin >> answer;
   if (answer == "n")
       return(false);
   else if (answer == "y")
      return (true)
   else cout << "Spatne zadana odpoved, koncim....\n";
}


}

Pouzivas cout a cin, takze pracujes s C++, pouzivam ty same vymozenosti, jako jsou prototypy funkci, misto string pouzivejme radeji char[], pripadne dynamicke prideleni, i kdyz v tomto pripad je s tim dost psani, atd. :) Pochopila?


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

#3 09. 06. 2010 23:48 — Editoval case_fcs (09. 06. 2010 23:58)

case_fcs
Příspěvky: 101
Reputace:   -1 
 

Re: skok z funkce do funkce

jo jasný tak já to zkusim díky moc :)

Offline

 

#4 10. 06. 2010 00:15

Stýv
Vrchní cenzor
Příspěvky: 5710
Reputace:   215 
Web
 

Re: skok z funkce do funkce

já teda nejsem žádnej velkej programátor, ale mám pocit, že goto neni zrovna vzorem elegance. radši bych to volání find() umístil do cyklu do-while (nebo co je v céčku)

Offline

 

#5 10. 06. 2010 00:20

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: skok z funkce do funkce

Souhlasim, ovsem za danych okolnosti... i kdyz mas pravdu, ze do-while ma stejny efekt, a navic to vypada lip...Ja se do-while nikdy nenaucil poradne pouzivat :)


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

#6 10. 06. 2010 00:39 — Editoval gladiator01 (10. 06. 2010 00:40)

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: skok z funkce do funkce

frank_horrigan napsal(a):

(idealne goto a navesti hned za hlavicku main() )
Pouzivas cout a cin, takze pracujes s C++, pouzivam ty same vymozenosti, jako jsou prototypy funkci, misto string pouzivejme radeji char[], pripadne dynamicke prideleni, i kdyz v tomto pripad je s tim dost psani, atd. :) Pochopila?

Nás teda učily goto vůbec nepoužívat - držím se toho, program je pak přehlednější a neříkej ideálně - používat goto není nejlepší volba.
A proč ne string? Tam alespoň nemusíš kontrolovat velikost.


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#7 10. 06. 2010 00:48

Stýv
Vrchní cenzor
Příspěvky: 5710
Reputace:   215 
Web
 

Re: skok z funkce do funkce

použil jsem asi příliš silný eufemismus. tím "goto neni zrovna vzorem elegance" jsem myslel, že je to fakt prasárna:)

http://imgs.xkcd.com/comics/goto.png

Offline

 

#8 10. 06. 2010 08:51 — Editoval frank_horrigan (10. 06. 2010 08:57)

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: skok z funkce do funkce

Dobra, kluci, dobra :) sam jsem se goto take vyhybal, ale obcas se mi v kodu objevilo (bez nej by to nebylo uplne prehledny, priznavam, while nebo do-while udělá stejnou práci, ovsem to mne nenapadlo). Za slovo idealne se omlouvam, vim ze to idealni neni, byl to prvni napad, dalsi, jiny, byť lepší  se mi vymýšlet pro dany problem v danou hodinu vymýšlet nechtělo.

Takže ok, na goto si dám majzla, a příslušný vzorek kódu přepíšu

Gladiator01: jde o to, ze jsem se nikdy s tridou string (nebo jak je to implemenotavny, myslim ze jako trida) nesetkal, pouze jsem o tom četl v učebnici, a nevím, jestli je dobré "střílet brabce bazukou", tedy na párřádkový kód zavádět zbytečnou string, když jde o jedno slovo. A myslim, ze 50 znaků ani nevezme moc paměti, a postihne 99,9% všech platných slov. Kdyz nechci hlidat velikost, hodim na to dynamické přidělení, porad jsou to dva radky navic, než string.. Jinak krom toho, že string neznam a nevyplati se na jeden řetezec jej zavadet nic nemam :)


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

#9 10. 06. 2010 12:16 — Editoval gladiator01 (10. 06. 2010 12:21)

gladiator01
Místo: Jindřichův Hradec
Příspěvky: 1587
Škola: ZČU FAV - SWI
Pozice: absolvent
Reputace:   53 
Web
 

Re: skok z funkce do funkce

↑ frank_horrigan:
A kde se to má naučit, když ne na takovýhto jednoduchých programech?

Stačí přilinkovat jednu knihovnu navíc a místo char* použít string, co je na tom těžkého? A krom toho jsem v C++ a jestli se nepletu zde se používá pro práci s řetězci string a char řetězec je na bázi C.


Naděje jako svíce jas, potěší srdce štvané, čím temnější je noční čas, tím zářivěji plane.
VIVERE - MILITARE EST (Seneca)
Vím, že nic nevím. - Sokrates

Offline

 

#10 10. 06. 2010 16:55

hradecek
Příspěvky: 772
Pozice: Student
Reputace:   25 
Web
 

Re: skok z funkce do funkce

Ahoj nečítal som všetky príspevky(kvôli času), ale takýto problém sa dá riešiť veľa spôsobmi, napríklad aj takto...

Code:

void find()
{
    string slovo;
    char volba;
    cout << "Zadejte slovo: " << endl;
    cin >> slovo;
    
    if (slovo je nalezeno) {
        cout << slovo;    
    }
    else {
        cout << "Slovo nenalezeno." << endl << "Chcete hledat znovu ?" << endl;
        cin >> volba;
        switch(volba) {
            case 'A' || 'a' : 
                find();
                break;
            case 'N' || 'n' :
                break;
        }
    }
}

int main()
{
    find();
}

Netrápte sa nad svojimi problémami s matematikou, môžem vás uistiť, že tie moje sú ešte väčšie. ~~Albert Einstein~~
Jak spozná člověk, že není pitomec ? - Moudrý člověk to nepozná nikdy a blbci je to jedno. ~~Jak přicházejí básnici o iluze~~
Někteří lidi se nikdy nezmění. Anebo se rychle změní a pak se zase rychle změní nazpátek. ~~Homer Simpson~~

Offline

 

#11 10. 06. 2010 22:23

Stýv
Vrchní cenzor
Příspěvky: 5710
Reputace:   215 
Web
 

Re: skok z funkce do funkce

↑ hradecek: tohle řešení s rekurzí mi taky nepřijde zrovna šťastný

Offline

 

#12 10. 06. 2010 22:43 — Editoval hradecek (10. 06. 2010 23:31)

hradecek
Příspěvky: 772
Pozice: Student
Reputace:   25 
Web
 

Re: skok z funkce do funkce

↑ Stýv:
Ja nehovorim ze rekurzia je najlepsie riesenie, ja hovorim ze je to jedno z rieseni...
Napríklad ďalšie možné riešenie:

Code:

#include <iostream>
#include <string>

using namespace std;

int main()
{
    char volba;
    do {
        string s;
        cout << "Zadaj hladane slovo: ";
        cin >> s;
        if(s == ..........) {
            cout << s << endl;
            break;
        }
        else {
            cout << "Slovo nebolo najdene." << endl;
            cout << "Hladat znovu ? A/N ";
            cin >> volba;
            system("CLS");
            if(volba == 'A' || volba == 'a')
                continue;
            else
                break;
        }
    } while(true);

    return 0;
}

takto sa dá vyhnúť príkazu GOTO...


Netrápte sa nad svojimi problémami s matematikou, môžem vás uistiť, že tie moje sú ešte väčšie. ~~Albert Einstein~~
Jak spozná člověk, že není pitomec ? - Moudrý člověk to nepozná nikdy a blbci je to jedno. ~~Jak přicházejí básnici o iluze~~
Někteří lidi se nikdy nezmění. Anebo se rychle změní a pak se zase rychle změní nazpátek. ~~Homer Simpson~~

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson