Avatar
Jakub Klindera:

Ahoj,
dělám jeden algoritmus, ale nefunguje mi. Už jsem se v něm tam ztratil, že nevím, kde může být chyba. Jsem začátečník.

Algoritmus posílám jako obrázek.

Zde máte zdroják:

#include <iostream>
#include <ctime>


using namespace std;

int main() {
        int max = 0;
        int min = 32767;
        srand(time(NULL));

        bool program = true;

        int x = rand() % 101;

        if (x < -1 || x > -1) {
                if (x > max) {
                        max = x;
                }
                else {
                        if (x < min) {
                                min = x;
                        }
                        else {

                        }
                }
        }
        else {
                cout << max << endl;
                cout << min << endl;
        }
        cin.get(); cin.get();
}

Děkuji

Editováno 28. února 14:47
 
Odpovědět 28. února 14:47
Avatar
Odpovídá na Jakub Klindera
Jakub Šárník:

Tak jsem se na to jen velice zběžně podíval a

  • Začáteční hodnoty pro min a max jsou špatně. Jde to i bez nastavování na tyto hodnoty a i pokud bys to tak chtěl, tak nastavovat to takhle velice omezí možnosti funkce - proć to vůbec omezuješ na těch 32 tisíc?
  • V diagramu máš cyklus, ale v kódu žádný není
  • Proč tu vnější podmínku nenapíšeš radši jako x != 0?
  • Vážně není potřeba psát prázdné else větve
  • Na co je tam ta proměnná program??
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 28. února 15:22
Avatar
Odpovídá na Jakub Šárník
Michal Žůrek (misaz):

omezení na 32 tisíc je určitě učí ve škole :(

Nahoru Odpovědět 28. února 15:24
Nesnáším {}, proto se jim vyhýbám.
Avatar
LacoS.
Člen
Avatar
LacoS.:

Ahoj.

... pre istotu nikdy nepouzivaj premenne min, max (ale napr. i_min, i_max),
lebo niektory prekladac to moze povazovat za funkciu, a nemusi Ti to prekompilovat.

... nemal si tam ziaden cyklus, takze Ti prg. vygeneroval 1 cislo a za tym aj skoncil

... vlozil som Ti tam cyklus, a trochu poopravil. Mrkni sa na to.

#include <iostream>
#include <ctime>


using namespace std;

int main()
{
    int i_max = 0;
    int i_min = 32767;
    srand(time(NULL));

    bool program = true;

        do
        {
                int x = rand() % 101; // tuto by si mal nacitavat z klavesnice, a nie random cislo !!!

                if (x < 1 || x > 1)  /// zmenil som -1 na 1, pretoze (predpokladam), ze rnd NEvracia zapornu hodnotu, ba dokonca: zvysok po deleni 101 je: <0,100>
                { //
                        if (x > i_max)
                        {
                                i_max = x;
                        }
                        else
                        {
                                if (x < i_min)
                                {
                                                i_min = x;
                                }
                        }
                }
                else
                {
                        program = false;
                }
        } while (program == true);

        cout << i_max << endl;
        cout << i_min << endl;
    cin.get();
        cin.get();
}
Editováno 8. dubna 11:37
 
Nahoru Odpovědět 8. dubna 11:35
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na LacoS.
tomisoka:

Který překladač by si to mohl splést s funkcí?

 
Nahoru Odpovědět 8. dubna 14:55
Avatar
LacoS.
Člen
Avatar
LacoS.:

... (stary) BorlandC
... MS-VisualStudio: C++ (tam je to define, nie priamo fcia, ak Ti ide o toto...)
... v C# ... je to ale s velkym pismenom: Min ...

Ale myslim, ze podstata toho dotazu je v niecom inom.
Je velmi vhodne, ak sa programator nauci pouzivat nazvy premennych tak, aby sa mu neplietli s funkciami, metodami.... a ak vie na prvy pohlad rozhodnut, ci to je lokalna premenna alebo napr. clenska premenna triedy.

Topicka chyba u zacinajucich je, je si urobia premenne pre limity :
int od, do; ... a potom im to trva pekne dlho, kym zistia, ze 'do' je klucove slovo pre cyklus.
Je fajn, ak si clovek hned od zaciatku zvykne na nejaky system, moze to iba pomoct.

 
Nahoru Odpovědět 8. dubna 23:18
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na LacoS.
tomisoka:

No, je tam funkce o stejném názvu. To stejně není dostatečný problém, aby si to mohl překladač splést.
Pokud je to z důvodu, aby si to člověk nepletl, tak to řekni rovnou a nezmiňuj čistě "min" a "max" s úplně jiným důvodem. Osobně tento systém nemám rád, ale určitě funguje taky dobře.
K té typické chybě, to vážně člověku nepřijde divné, že zrovna to slovo má jinou barvu, kupodivu stejnou jako if, else, while...? Pokud teda používají alespoň zvýraznění syntaxe.

 
Nahoru Odpovědět 9. dubna 7:26
Avatar
LacoS.
Člen
Avatar
LacoS.:

Si spicka. Ospravedlnujem sa, ze som nieco napisal...
Len sa divim, ze si nenapisal/neopravil zdrojak Ty.
Teaz mi mozes este vytknut, ze sa to dalo napisat na polovicny pocet riadkov.

Lutujem, ze som sem prispel, vsade je to to iste.

 
Nahoru Odpovědět  -1 9. dubna 9:31
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 9 zpráv z 9.