NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: C++ problém s výpisem maximalního a minimalního čísla

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jakub Klindera:28.2.2016 14:47

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.2.2016 14:47
 
Odpovědět
28.2.2016 14:47
Avatar
Odpovídá na Jakub Klindera
Neaktivní uživatel:28.2.2016 15:22

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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
28.2.2016 15:22
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Michal Žůrek - misaz:28.2.2016 15:24

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

 
Nahoru Odpovědět
28.2.2016 15:24
Avatar
Nahoru Odpovědět
28.2.2016 17:16
Neaktivní uživatelský účet
Avatar
LacoS.
Člen
Avatar
LacoS.:8.4.2016 11:35

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.4.2016 11:37
 
Nahoru Odpovědět
8.4.2016 11:35
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na LacoS.
tomisoka:8.4.2016 14:55

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

 
Nahoru Odpovědět
8.4.2016 14:55
Avatar
LacoS.
Člen
Avatar
LacoS.:8.4.2016 23:18

... (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.4.2016 23:18
Avatar
tomisoka
Tvůrce
Avatar
Odpovídá na LacoS.
tomisoka:9.4.2016 7:26

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.4.2016 7:26
Avatar
LacoS.
Člen
Avatar
LacoS.:9.4.2016 9:31

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
9.4.2016 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.