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: mocniny, C

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

Aktivity
Avatar
Miňko Holik
Člen
Avatar
Miňko Holik:14.3.2017 11:53

Kde mám, prosím vás, logickú chybu:

int f3(int n)
{
int count = 1, a = 2, vysledok;

while(vysledok < n)
{
vysledok = pow(a,count);
printf("%d\n", vysledok);
count++;
}

return vysledok;
}

Program má vypísať všetky mocniny dvojky, až po zadaný parameter, napr. parameter 20, takže vypíše 2, 4, 8, 16. Po kompilácii nič nevypíše... Som viac-menej začiatočník, dakujem za odpoved...

 
Odpovědět
14.3.2017 11:53
Avatar
martanec
Člen
Avatar
Odpovídá na Miňko Holik
martanec:14.3.2017 12:19

skus este inicializovat premennu 'vysledok'

int count = 1, a = 2, vysledok = 0;

Ak si dobre pamatam, tak lokalne premenne treba inicializovat na pozadovanu hodnotu. Inak nadobudnu nedefinovanu hodnotu (vacsinou pri int je to MAX_INT?). Ak by si vsak premennu definoval ako globalnu, tak jej defaultna inicializacna hodnota je 0.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
14.3.2017 12:19
Avatar
Erik Šťastný:14.3.2017 12:19

Logickou? Zkus prosím uvést příklad, který jde alespoň zkompilovat, protože uvedený příklad nejde ani zkompilovat :)

#include "stdafx.h"
#include <math.h>

int f3(int n)
{
    int count = 1, a = 2, vysledok;

    while (vysledok < n)
    {
            vysledok = pow(a, count);
            printf("%d\n", vysledok);
            count++;
    }

    return vysledok;
}

int main()
{
    f3(20);
    return 0;
}
Editováno 14.3.2017 12:21
 
Nahoru Odpovědět
14.3.2017 12:19
Avatar
Odpovídá na Erik Šťastný
Libor Šimo (libcosenior):14.3.2017 12:51

Možno lepšie takto:

#include <stdio.h>
#include <math.h>

void f3(int n)
{
    int count = 1, a = 2, vysledok;

    while (1) {
        vysledok = pow(a, count);
        if (vysledok > n)
            break;
        printf("%d\n", vysledok);
        count++;
    }
}

int main(void)
{
    f3(20);
    return 0;
}
Nahoru Odpovědět
14.3.2017 12:51
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Miňko Holik
Člen
Avatar
Odpovídá na martanec
Miňko Holik:14.3.2017 12:52

Bolo to tým, vdaka... ešte síce musím poriešiť, že síce vypíše 2,4,8,16, no a kedže 16 je stále menšie ako 20, tak to vypíše ešte aj 32... to už ale zvládam, vdaka za odpoved...

 
Nahoru Odpovědět
14.3.2017 12:52
Avatar
Odpovídá na Libor Šimo (libcosenior)
Erik Šťastný:14.3.2017 12:54

Já tam vůbec nic neupravil jen jsem použil zmíněný kód, rád bych aby se lidé naučili postovat kód, který si člověk zkopíruje a použije a ne že v něm prvně hledá věci jak ho zprovoznit :)

na SO by ti to omlátili o hlavu :D

 
Nahoru Odpovědět
14.3.2017 12:54
Avatar
Odpovídá na Miňko Holik
Libor Šimo (libcosenior):14.3.2017 12:57

Tvoje funkcia má návratovú hodnotu int a vracia len poslednú hodnotu výsledku. Je to tak správne?
Prečo má funkcia návratovú hodnotu, keď výsledky vypisuje sama?

Nahoru Odpovědět
14.3.2017 12:57
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Miňko Holik
Člen
Avatar
Odpovídá na Libor Šimo (libcosenior)
Miňko Holik:14.3.2017 21:19

Tá tam byť nemusí, máte pravdu...

 
Nahoru Odpovědět
14.3.2017 21:19
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 8 zpráv z 8.