kalkulacka v C++

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod pelda21 30. 10. 2009 18:41

Zdravim mam takovy problem ,ucim se programovat v C++ a chtel jsem si udelat jednoduchou kalkulacku +,-,*,/ vytvoril jsem jen scitani a kdyz tam dam dalsi funkci(odcitani) tak mi to nefaka mohl by mi to nekdo upravit aby to jak scitalo a odecitalo
Kód: Vybrat vše
#include <iostream>
using namespace std;


float scitani (float a, float b);
float odecitani(float a, float b);


int main ()
{

    float x;       
    float y;       
    float n;       
    int b;


    b = 1;           
    cout << "Calculator";       
    while (b==1)                                       
    {
       
        cout << "\n" << "Vloz cislo : ";
        cin >> x;
        cout << " Druhe cislo: ";
        cin >> y;
        n = scitani (x,y);
      n = odecitani (x,y);
   
        cout << "Ans: " << x << " + " << y << " = " << n << "\n";
      cout << "Ans: " << x << " - " << y << " = " << n << "\n";
      

       
        cout << "pokracovat? (1=ano, 2=ne): ";
        cin >> b;
        cout << "\n";
        if (b==2)
        cout << "konec.";
    }

   
    return 0;
    }

float scitani (float a, float b)
{
    float c;
    c = a+b;
    return (c);
}

float odecitani (float a, float b)
{
    float c;
    c = a-b;
    return (c);  //tady nevim jestli to ma byt
}



Jeste bych potreboval poradit -jak udelat na zacatku programu vyber z tech funkci
napr spustim program
Vitejte v programu Calculator
vyber funkci : 1 scitani
2 odecitani
pak by nebehlo dana fce napr scitani
pelda21
Kolemjdoucí

Odeslat příspěvekod 3.14 30. 10. 2009 19:14

ten main si uprav takto :

Kód: Vybrat vše
float scitani (float a, float b)
{
return a+b;
}

float odecitani (float a, float b)
{
return a-b;
}

int main ()
{

    float x;       
    float y;       
    float sucet;
    float rozdiel;       
    int b;


    b = 1;           
    cout << "Calculator";       
    while (b==1)                                       
    {
       
        cout << "\n" << "Vloz cislo : ";
        cin >> x;
        cout << "Druhe cislo: ";
        cin >> y;
        sucet = scitani (x,y);
        rozdiel = odecitani (x,y);
   
        cout << "Ans: " << x << " + " << y << " = " << sucet << "\n";
        cout << "Ans: " << x << " - " << y << " = " << rozdiel << "\n";
     

       
        cout << "pokracovat? (1=ano, 2=ne): ";
        cin >> b;
        cout << "\n";
        if (b==2)
        cout << "konec.";
    }

   
    system("PAUSE");
    return EXIT_SUCCESS;
    }


ty si uklada sucet aj rozdiel do tej istej premennej n, preto ti to vypisovala rozdiel dvoch cisel ;-]

ked si zadal 1,

1) vypocital si sucet a ulozil do premennej n
2) vypocital si rozdiel a ulozil do pre premmnej n, tym si ju prepisal

preto ti vypisalo 2 krat rozdiel
3.14
Junior

Odeslat příspěvekod pelda21 1. 11. 2009 12:36

Ok diky moc ,jeste bych potreboval poradit s tou nabidkou pomoci switche.
Delam to pomoci knizky C++ za 21 dni ale neni to tam moc dobre udelano.
mam tedy kalkulacku +,-,*,/ a potrebuju aby pri spusteni programu nabehlo asi takto
Kód: Vybrat vše
Vita vas program Calculator
Vyberte funkci 1 az 4:   (1) scitani
                         (2).odecitani     atd nasobeni 3, deleni za 4

po stisku cislice 1-4 by nabehla operace napr pro 1 scitani


provede se funkce a nabehlo zase nabidky
tu je zdrojak calkulackya vnem i nabidky ale nefunkcni

Kód: Vybrat vše
#include <iostream>
using namespace std;



float scitani (float a, float b)
{
   return a+b;
}

float odecitani (float a, float b)
{
   return a-b;
}
float nasobeni (float a,float b)
{
   return a*b;
}
float deleni (float a,float b)
{
   return a/b;
}


int nabidka()
{
   using namespace std;
   int cislo;
   cout << "Vlozte cislo mezi 1-4:  "; //tady jsem neco yacal podle knizky ale pisemi to pri komplimaci:Error   1   error C2084: function 'int main(void)' already has a body   ulator\calculator.cpp   52

   cin >> cislo;
   switch (cislo)
   {
   case 4:    cout <<" Deleni \n";
      break;
   case 3:    cout << "Nasobeni  \n";
      break;
   case 2:    cout << "odecitani \n";
      break;

   case 1:    cout << "scitani  \n";
      break;
   }

   cout << "\n\n";
   return 0;
}



 
int main ()
{

    float x;       
    float y;       
    float scitame;
    float odecitame;
   float nasobime;
   float delime;
    int b;


    b = 1;           
    cout << "Calculator";       
    while (b==1)                                       
    {
       
        cout << "\n" << "Vloz cislo : ";
        cin >> x;
        cout << "Druhe cislo: ";
        cin >> y;
        scitame   = scitani (x,y);
        odecitame = odecitani (x,y);
      nasobime  = nasobeni (x,y);
      delime    = deleni (x,y);
   
        cout << "Ans: " << x << " + " << y << " = " << scitame << "\n";
        cout << "Ans: " << x << " - " << y << " = " << odecitame << "\n";
      cout << "Ans: " << x << " * " << y << " = " << nasobime << "\n";
      cout << "Ans: " << x << " / " << y << " = " << delime << "\n";
     

       
        cout << "pokracovat? (1=ano, 2=ne): ";
        cin >> b;
        cout << "\n";
        if (b==2)
        cout << "konec.    ";
    }

   
    system("PAUSE");
    return EXIT_SUCCESS;
    }


budu rad za kazdou radu diky moc
Naposledy upravil pelda21 dne 1. 11. 2009 14:55, celkově upraveno 1
pelda21
Kolemjdoucí

Odeslat příspěvekod kohutisko 1. 11. 2009 13:02

skus sa v tej knizke vratit par kapitol naspat, v zdrojaku mas 2x main ;-)
kohutisko
Junior
Uživatelský avatar

Odeslat příspěvekod pelda21 1. 11. 2009 14:59

uz jsem to opravil na int nabidka
ale ta nabidka se tam pri spusteni nezobrazi
pelda21
Kolemjdoucí

Odeslat příspěvekod kohutisko 1. 11. 2009 15:14

si si isty, ze si nechybaju nejake strany v tej knihe? lebo to su uplne zakladne nedostatky, ktore sa tu prejavuju. kazdy sme nejak zacinali, ale zacinali sme od zaciatku. ked si to z main premenoval na nabidka, tak si zadefinoval funkciu nabidka. aby sa ta funkcia aj vykonala, musi ju niekto niekde volat.
kohutisko
Junior
Uživatelský avatar

Odeslat příspěvekod Vilik20 10. 11. 2009 18:04

Tohleto je kalkulačka a chci si tam dat vypočet faktorialu jenže s ním mi to nejede co mám špatně?
#include "stdafx.h"
#include <cstdlib>
#include <iostream>


using namespace std;

int p;
int y;
int x;
int vysledek = 0;

void menu (void);
void scitani (void);
void odcitani (void);
void nasobeni (void);
void deleni (void);
void mocnina (void);
void odmocnina (void);
int faktorial (int n)
int Male(int y);


int main(int argc, char *argv[])
{


menu();

system("PAUSE");
return EXIT_SUCCESS;
}

void menu (void)
{
int c;
system ("color 3");
system ("cls");
printf("\t\tKALKULACKA-HLAVNI MENU\n\n\n");
printf("\t\t1.Scitani\n\t\t2.Odcitani\n\t\t3.Nasobeni\n\t\t4.Deleni\n");
printf("\t\t5.Mocnina\n\t\t6.Odmocnina\n\t\t7.Faktorial\n\n\n");
printf("\t\tVyber z moznosti(1-7):\n");

printf("\t\tJak chces vybrat cislo z pameti stlac 0\n\t\tcislo muzes vybrat jen jak jsi ho ulozil\n\n\t\t");
scanf("%d",&c);

switch(c)
{
case 1 : system("cls");
scitani();
system("PAUSE");
menu();
break;

case 2 : system("cls");
odcitani();
system("PAUSE");
menu();
break;

case 3 : system("cls");
nasobeni();
system("PAUSE");
menu();
break;

case 4 : system("cls");
deleni();
system("PAUSE");
menu();
break;

case 5 : system("cls");
mocnina ();
system("PAUSE");
menu();
break;

case 6 : system("cls");
odmocnina();
system("PAUSE");
menu();
break;

case 7 : system("cls");
faktorial();
system("PAUSE");
menu();
break;

default: printf ("Spatny znak!\nKONEC\n");
break;

}
}

void scitani (void)
{

int vysledek=0;
int vstup;




printf("Zadej prvni cislo ktere chces scitat\n");
scanf("%d",&x);

if( x == 0)
{
x = p;
printf ("\ncislo z pameti je:%d\n",p);
}

printf("Zadej druhe cislo ktere chces scitat\n");
scanf("%d",&y);

if( y == 0)
{
y = p;
printf ("\ncislo z pameti je:%d\n",p);
}

vysledek = x+y;

printf("Vysledek je:%d\n",vysledek);
printf("\n\n\n\t\t\t1.Navrat do menu\n\t\t\t2.Ulozeni vysledku do pameti\n\t\t\t");
scanf("%d",&vstup);
switch(vstup)
{
case 1 : menu();
break;
case 2 : p=vysledek;
printf("\n\t\t\t%d byla ulozena do pameti\n",vysledek);

break;
default : system("pause");
break;
}


}

void odcitani(void)
{

int vysledek=0;
int vstup;

system ("cls");
printf("Zadej cislo od ktereho chces odcitat\n");
scanf("%d",&x);

if( x == 0)
{
x = p;
printf ("cislo z pameti je:%d\n",p);
}

printf("Zadej cislo ktere chces odcitat\n");
scanf("%d",&y);

if( y == 0)
{
y = p;
printf("\n\t\t\t%d byla ulozena do pameti\n",vysledek);
}

vysledek= x-y;

printf("Rozdil je:%d\n",vysledek);

printf("\n\n\n\t\t\t1.Navrat do menu\n\t\t\t2.Ulozeni vysledku do pameti\n\t\t\t");
scanf("%d",&vstup);
switch(vstup)
{
case 1 : menu();
break;
case 2 : p=vysledek;
printf("Vysledek je:%d\n",vysledek);

break;
default : system("pause");
break;
}
}

void nasobeni (void)
{
int x;
int y;
int vysledek=0;
int vstup;

system ("cls");
printf("Zadej prvni cislo ktere chces nasobit\n");
scanf("%d",&x);

if( x == 0)
{
x = p;
printf ("cislo z pameti je:%d\n",p);
}

printf("Zadej druhe cislo ktere chces nasobit\n");
scanf("%d",&y);
if( y == 0)
{
y = p;
printf("\n\t\t\t%d byla ulozena do pameti\n",vysledek);
}

for(int n = 0; n < x; n++)
{
vysledek =vysledek + y;

}
printf("Vysledek je:%d\n",vysledek);

printf("\n\n\n\t\t\t1.Navrat do menu\n\t\t\t2.Ulozeni vysledku do pameti\n\t\t\t");
scanf("%d",&vstup);
switch(vstup)
{
case 1 : menu();
break;
case 2 : p=vysledek;
printf("\n%d byla ulozena do pameti\n",vysledek);

break;
default : system("pause");
break;
}

}

void deleni (void)
{
int poc=0;
int vstup;

system("cls");
printf("Zadej cislo ktere chces delit:\n");
scanf("%d",&x);

if( x == 0)
{
x = p;
printf ("cislo z pameti je:%d\n",p);
}
printf("Zadej cislo kterym chces delit:\n");
scanf("%d",&y);

if( y == 0)
{
y = p;
printf("\n\t\t\t%d byla ulozena do pameti\n",vysledek);
}

while(x>=y)
{
x=x-y;
poc++;
}
printf("Vysledek je:%d\n",poc);

printf("\n\n\n\t\t\t1.Navrat do menu\n\t\t\t2.Ulozeni vysledku do pameti\n\t\t\t");
scanf("%d",&vstup);
switch(vstup)
{
case 1 : menu();
break;
case 2 : p = poc;
printf("\n%d byla ulozena do pameti\n",poc);

break;
default : system("pause");
break;
}


}

void mocnina (void)
{
int poc = 2;
int vysledek=0;
int vstup;


printf("Zadej cislo ktere chces umocnit na 2:\n");
scanf("%d",&x);

if( x == 0)
{
x = p;
printf ("cislo z pameti je:%d\n",p);
}

while (poc != 1)
{
for(int n = 0; n < x; n++)
vysledek =vysledek + x;
poc--;
}
printf("Vysledek je:%d\n",vysledek);

printf("\n\n\n\t\t\t1.Navrat do menu\n\t\t\t2.Ulozeni vysledku do pameti\n\t\t\t");
scanf("%d",&vstup);

switch(vstup)
{
case 1 : menu();
break;
case 2 : p=vysledek;
printf("\n\t\t\t%d byla ulozena do pameti\n",vysledek);
break;
default : system("pause");
break;
}
}

int Male (int x)
{


vysledek=0;
for(int n = 0; n < x; n++)
{
vysledek = vysledek + x;

}
return vysledek;
}



void odmocnina (void)
{
int x;
int y = 1;
int vysledek = 0;
int vstup;

printf("Zadej cislo ktere chces odmocnit:");
scanf("%d",&x);

if( x == 0)
{
x = p;
printf ("cislo z pameti je:%d\n",p);
}

while(y <= x)
{
if(x == Male(y) )
{
printf(" vysledek je %d\n",y);
break;
}

else
y++;
}


if(y >= x)
printf("Odmocnina cisla neni cele cislo!!!\n");

printf("\n\n\n\t\t\t1.Navrat do menu\n\t\t\t2.Ulozeni vysledku do pameti\n\t\t\t");
scanf("%d",&vstup);
switch(vstup)
{
case 1 : menu();
break;
case 2 : p=y;
printf("\n\t\t\t%d byla ulozena do pameti\n",y);
break;
default : system("pause");
break;
}
}
int faktorial (int n)
{


int x=1;
for (int i=1; i<=n;i++)
{
x *=i;
}
return x;
}




cin.get(int n ;
cout << "Zadejte cislo:";
cin >> n;

cout << "faktorial " << n << " =" << faktorial (n);
)
cin.get();
}
printf("\n\n\n\t\t\t1.Navrat do menu\n\t\t\t2.Ulozeni vysledku do pameti\n\t\t\t");
scanf("%d",&vstup);
switch(vstup)
{
case 1 : menu();
break;
case 2 : p=y;
printf("\n\t\t\t%d byla ulozena do pameti\n",y);
break;
default : system("pause");
break;
}
}
Vilik20
Kolemjdoucí

Odeslat příspěvekod kohutisko 10. 11. 2009 19:41

co je toto?
Kód: Vybrat vše
cin.get(int n ;
kohutisko
Junior
Uživatelský avatar

Odeslat příspěvekod Vilik20 11. 11. 2009 20:37

sorry to je chyba jenom cin.get();
Vilik20
Kolemjdoucí

Odeslat příspěvekod Nargon 11. 11. 2009 20:48

A jakej tam mas problem? Podle me ta funkce na vypocet faktorialu je v pohode.
Jen si musis uvedomit ze "int" neni kdovijak velkej datovej typ. Takze to vypocita maximalne faktorial cisla 12. Vice se tam nevejde. Tak jestli nemas problem tady a nezkousis pocitat faktorial pro vetsi cisla.

A kdyz ani nepouzivas tak code tak odmitam kontrolovat jestli tam nemas nejaky "blby" chyby jako chybejici strednik atd.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod Vilik20 12. 11. 2009 13:43

Ok ale jestli ho tam mám dobře vložený. Jestli nemá být někde jinde a tak jinak dík.
Vilik20
Kolemjdoucí

Odeslat příspěvekod kohutisko 12. 11. 2009 15:55

pozri program bud funguje alebo nefunguje. a ak nefunguje, tak bud preto, ze nejde skompilovat alebo ide skompilovat ale nerobi nic, alebo ide skompilovat ale robit nieco ine, ako by mal. takze bud ti napise nejaku chybovu hlasku, alebo hodi nejaky zly vysledok alebo neurobi nic. podelis sa s nami o tieto informacie, alebo nas nechas, aby sme ich vestili z gule. navyse kolega ti napisal, ze na vlepovanie zdrojoveho kodu do fora je tag Code, tak ho prosim pouzi na zeditovanie svojich predchadzajucich prispevkov.
kohutisko
Junior
Uživatelský avatar

Odeslat příspěvekod Beholder_ 12. 11. 2009 17:17

...
void odmocnina (void);
int faktorial (int n)
int Male(int y);
...
Chýba tam bodkočiarka, to nevidíš!?!? :shock:
Vilik20, nauč sa písať prehladnejšie, dávaš prázdne riadky tam, kde netreba,
a tam, kde by sa zišli, tam nie sú.
Neverte svojmu srdcu. Chce vašu krv.
Tak, a prerazil si múr hlavou - a čo budeš robit v susednej cele?
Beholder_
Junior

Odeslat příspěvekod Nargon 12. 11. 2009 22:06

kohutisko píše:na vlepovanie zdrojoveho kodu do fora je tag Code, tak ho prosim pouzi na zeditovanie svojich predchadzajucich prispevkov.
Tohle ted uz bohuzel nepomuze. To formatovani zdrojoveho kodu uz je stejne ztracene. Ted tam sice code muze pridat ale bude naprd.

Snad kazde schopnejsi vyvojove prostredni (uricte tedy ne poznamkovy blok nebo pspad a pod) ma nejakou funkci na "formatovani kodu", takze cely kod spravne odsadi, odradkuje, upravi mezery kolem stredniku, plusu, rovnitek... a celkove to upravi tak aby to bylo prehlednejsi. Takze velice doporucuju tuhle funkci pouzit, a az pak sem ten kod vlozit.
V tehle prasecine co je tu postnuta se neda vyznat. jak tam chybi i to odsazeni u zavorek {} tak je hnus, kterym se nebudu probirat a pocitat kolik zavorek jsi otevrel, kolik jsi jich zavrel a na jake "urovni" zavorkovani mas nejaky kus kodu.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod cejdap 12. 11. 2009 23:10

Nevim proc michas c-ckove funkce printf a scanf se streamy. Nadpis je kalkulacka v c++ tak pouzivej streamy. Tvuj kod je dost chaoticky (zbytecne radky), vkladej sem tvuj kod do tagu code, aby to bylo prehlednejsi.
Ve for cyklu je lepsi psat ++i nez i++.
cejdap
Junior
Uživatelský avatar

Další stránka

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků