Jednoduchá kalkulačka

Ostatní Jednoduchá kalkulačka

Zdravím, v této "sekci" Programujeme v jazyce C si budeme ukazovat přesný postup při tvorbě různých aplikací. Od kalkulačky až po nějaké hry či jiné fajn aplikace.

Dnes si ukážeme podrobný postup při tvorbě kalkulačky.

Především si musíme ujasnit, jak kalkulačku chceme napsat. Já jsem zvolil podle mě nejednoduší způsob, ale ten je zároveň asi i nejlepší. Zjistíme si předem kolik tak chceme proměnných, jaké datové typy a jaké funkce/knihovny na to použít.

Já si myslím, že tři proměnné nám budou bohatě stačit. A = první číslo, B = druhé číslo, ZNAK = operátor ( + / * - ). A bude datového typu double, stejně jako proměnná B, znak bude samozřejmě datového typu char. Bude nám bohatě stačit knihovna pro základní funkce pro vstup/výstup, tedy stdio.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    double a,b; // první a druhé číslo datového typu double
    char znak;  // proměnná operátoru ( + - * / )
    return 0;
}

Dále si samozřejmě musíme načíst naše proměnné od uživatele. Samozřejmě si je od něj také vyžádáme a řekneme mu, v jakém formátu je má zadávat.

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    double a,b;
    char znak;
    printf("Zadej priklad ve tvaru < a+b > : ");
    scanf("%lf%c%lf", &a,&znak,&b);
    return 0;
}

Doporučuji ošetřit "kravinky", aby někdo nezadával třeba místo 5+5 ... třeba medvěd+5. Na to lze využít klasickou podmínku s obsahem funkce scanf, protože nám vrací návratovou hodnotu... tedy.:

if(scanf("%lf%c%lf", &a,&znak,&b) == 3)

Dále použijeme krásou funkci switch, aby jsme mohli rozeznat operátora, co uživatel zadal a podle toho vypočítat příklad.

if(scanf("%lf%c%lf", &a,&znak,&b) == 3)
 {
     switch(znak)
     {
     }
 }

A teď už jen dosadíme do přepínače switch, jaké jsou možnosti, které může uživatel využít. Pokud zadá jinou, vypíše se "zadali jste nespravny operator!".

if(scanf("%lf%c%lf", &a,&znak,&b) == 3)
    {
        switch(znak)
        {
            case '+': printf("Vysledek prikladu je %lf\n", a+b);
            break;
            case '-': printf("Vysledek prikladu je %lf\n", a-b);
            break;
            case '*': printf("Vysledek prikladu je %lf\n", a*b);
            break;
            case '/': printf("Vysledek prikladu je %lf\n", a/b);
            break;
            default: printf("Zadali jste nespravny operator!\n");
        }
    }

A už jen doplníme, co se stane, když se scanf hodnota navrátí jinak, než 3. Náš kód by měl nyní vypadat takto:

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    double a,b;
    char znak;
    printf("Zadej priklad ve tvaru < a+b > : ");
    if(scanf("%lf%c%lf", &a,&znak,&b) == 3)
    {
        switch(znak)
        {
            case '+': printf("Vysledek prikladu je %lf\n", a+b);
            break;
            case '-': printf("Vysledek prikladu je %lf\n", a-b);
            break;
            case '*': printf("Vysledek prikladu je %lf\n", a*b);
            break;
            case '/': printf("Vysledek prikladu je %lf\n", a/b);
            break;
            default: printf("Zadali jste nespravny operator!\n");
        }
    }
    else
    {
        printf("Zadal si nesmysl!\n");
    }
    return 0;
}

 

Stáhnout

Staženo 450x (10.48 kB)
Aplikace je včetně zdrojových kódů

 

  Aktivity (5)

Článek pro vás napsal Зайчик
Avatar
Коммунизм для нашего будущего!

Jak se ti líbí článek?
Celkem (1 hlasů) :
55555


 



 

 

Komentáře

Avatar
Jiří Jeřábek (thechorcheecz):

Mám dotaz neví někdo co mám udělat pro to abych neměl za výsledkem výpočtu napsané př: 150.000000 ( myslím ty nuly) a ještě když zapnu samostatně ve složce bin/debug/ tu kalkulacku tak po vypočítaní se příkazovej řádek okamžitě vypne? neví někdo co stím ? Díky!

 
Odpovědět 5.10.2013 2:19
Avatar
oraz123
Člen
Avatar
Odpovídá na Jiří Jeřábek (thechorcheecz)
oraz123:

S dotazem ohledně těch nul ti neporadím to sám ještě nevím :D ale aby se ti ten řádek ihned nevypnul a ukázalo ti to v klidu výsledek musíš napsat nad return system("pause");
takže takto bude vypadat závěr:
}
system("pause");
return 0;
}

 
Odpovědět 16.10.2013 17:43
Avatar

Neregistrovaný
Avatar
:

Musím pochválit za pěkně provedený a dobře popsaný návod na kalkulačku, pořád jsem nevěděl jak "rozkouskovat" vstup z scanf do více proměnných a konečně to mám. Děkuju :-)

 
Odpovědět 26.10.2013 9:27
Avatar
David Oczka
Redaktor
Avatar
Odpovídá na Jiří Jeřábek (thechorcheecz)
David Oczka:

Pokud problém stále trvá, tak co se týče těch vašich nul. Jde o to, že vypisujete long float ("%lf"), chcete-li vypisovat třeba na dvě desetinná místa použijte "%.2f".

 
Odpovědět 26.10.2013 9:57
Avatar
Marek Vach
Člen
Avatar
Odpovídá na Jiří Jeřábek (thechorcheecz)
Marek Vach:

u %lf se doplní tečka a číslo, které reprezentuje počet desetinných míst.

printf("Vysledek prikladu je %.2lf \n", a/b");

Pokud chceš výsledek bez desetinného místa, tak .0, ale nepoužívá se to.

 
Odpovědět 3.11.2015 19:52
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 5 zpráv z 5.