Stránka 1 z 1

jazyk c min a max cislo

Napsal: 08 lis 2011 12:36
od crash40
cau nevite kde mam chybu v kodu. Chci bypsat nejmensi a nejvetsi cislo ze zadane rady.

int main()
{
int cislo,max,min;
while (scanf("%d", &cislo) && cislo != 0){
if (cislo > max)
max = cislo;
else if (cislo < min)
min = cislo;
}

printf("%d--%d", min, max);

return 0;
}

Re: jazyk c min a max cislo

Napsal: 08 lis 2011 16:22
od faraon
Chyba je ta, že na počátku nemáš v proměnných min a max přiřazenou žádnou hodnotu, dokonce jsi udělal jednu z největších programátorských chyb, a to že používáš neinicializovanou proměnnou! Zkus si vypsat jejich obsah hned po spuštění programu, ještě než začneš zadávat čísla...

Máš dvě možnosti. Buď amatérsky hned na počátku zadat nějaké extrémní hodnoty, například
int cislo,max=-999999999,min=999999999;
a doufat že žádnou z nich nepřekročíš, a nebo se zamyslet programátorsky a použít první zadané číslo, které nejdřív vložíš do obou proměnných a teprve potom začít porovnávat. V druhém případě budeš muset tu smyčku trochu přeuspořádat.

Jak má fungovat to while()? To co tam máš se ukončí buď při zadání nuly nebo při neplatném vstupu, kdy scanf() nedokáže načíst číslo a vrátí nulu (počet načtených položek) jako chybu, je to určitě to co jsi chtěl?

Re: jazyk c min a max cislo

Napsal: 08 lis 2011 19:43
od crash40
a jeste jeden problem lamu si tam dim dlouho hlavu jak napisu cykly aby mi setridily cisla 0,1,2,3,4 jako 0,1,2 0,2,3 0,3,4 proste aby na prvnim myste bylo cislo 1 pak 2 pak 3 ja si lamu hlavu s tou 0 jak ti tam pak dostat

Re: jazyk c min a max cislo

Napsal: 08 lis 2011 20:32
od faraon
O třídění asi nepůjde, to je přesný opak toho co chceš ;-)

Kód: Vybrat vše

int main(void)
    {
    int i,j,pole[]={0,1,2,3,4,5,6,7,8,9};

    for (i=1;i<=3;++i) /* počáteční prvek */
        {
        printf("%d",pole[0]);
        for (j=0;j<=1;++j) /* kolikátý prvek */
            printf(",%d",pole[i+j]);
        putchar('\n');
        }

    return 0;
    }


Kód: Vybrat vše

0,1,2
0,2,3
0,3,4


Zkus si změnit čísla v deklaraci toho pole, místo 0-9 tam napsat jiná, třeba pozadu. Také si zkus změnit konečné hodnoty u smyček for, v podmínkách i<=3 a j<=1