Wykonywanie nieprawidłowej funkcji

0

Cześć! Niedawno zacząłem przygodę z programowaniem w C++ i postanowiłem stworzyć prosty kalkulator, ale przy dwóch ostatnich operacjach (suma i iloczyn kolejnych liczb) pojawiają się błędy tzn. program wykonuje obliczenia, które są przypisane do innej funkcji. Proszę o pomoc. Jeśli są inne błędy to także proszę o ich wskazanie. Z góry dziękuję.
Pozdrawiam

#include <iostream>
#include <conio.h>
#include <cmath>
 
double dodawanie(double x, double y)
{
        return x+y;
}
 
double odejmowanie(double x, double y)
{
        return x-y;
}
 
double mnozenie(double x, double y)
{
        return x*y;
}
        
double dzielenie(double x, double y)
{
        return x/y;
}
 
double sumaliczb(double x, double y)
{
        double suma=0;
        for (double i=x ; i<=y ; i++)
        {
        suma += i;
        }
        return suma;
}
 
double iloczynliczb(double x, double y)
{
        double iloczyn=x;
        for (double i=x ; i<=y ; i++)
        {
        iloczyn *= i;
        }
        return iloczyn;
}
 
double pierwiastkowanie(double x)
{
        return sqrt(x);         
}
        
 
int main() 
{
        std::cout <<"Witaj w kalkulatorze!\n"; getch();
        
        int dzialanie;
        double a , b;
        
        std::cout <<"\n1. Dodawanie";
        std::cout <<"\n2. Odejmowanie";
        std::cout <<"\n3. Mnozenie";
        std::cout <<"\n4. Dzielenie";
        std::cout <<"\n5. Pierwiastkowanie";
        std::cout <<"\n6. Suma kolejnych liczb";
        std::cout <<"\n7. Iloczyn kolejnych liczb";
        std::cout <<"\nWybierz dzialanie: ";
                std::cin >> dzialanie;
        
        if(dzialanie >= 1 && dzialanie <= 4)
                {
                std::cout <<"\nWprowadz liczbe a: ";
                        std::cin >> a;
        
                std::cout <<"Wprowadz liczbe b: ";
                        std::cin >> b; 
                }
        else if(dzialanie = 5)
                {
                std::cout <<"\nWprowadz liczbe: ";
                        std::cin >> a; 
                }
        else if (dzialanie = 6 ||  7)
                {
                std::cout <<"\nPodaj poczatek przedzialu: ";
                        std::cin >> a;
        
                std::cout <<"Podaj koniec przedzialu: ";
                        std::cin >> b; 
                } 
 
switch(dzialanie) 
{
        case 1:
                std::cout<< a << "+" << b << "=" << dodawanie(a , b); break;
        case 2:
                std::cout<< a << "-" << b << "=" << odejmowanie(a , b); break;
        case 3:
                std::cout<< a << "*" << b << "=" << mnozenie(a , b); break;     
        case 4:
                if(b!=0)
                        {
                        std::cout<< a << "/" << b << "=" << dzielenie(a , b); break;
                        }
                else
                        {
                        std::cout<< "Nie mozna dzielic przez 0"; break;
                        }
        case 5:
                if(a<0)
                        {
                                std::cout<<"Nie mozna obliczyc pierwiastka kwadratowego z liczby ujemnej"; break;
                        }
                else
                        {
                                std::cout<< "Pierwiastek z " << a << " wynosi " << pierwiastkowanie(a); break;
                        }
                
        case 6:
                std::cout << "Suma liczb nalezacych do przedzialu od "<< a <<" do " << b << " wynosi: " << sumaliczb(a , b); break;
                
        case 7:
                std::cout << "Iloczyn liczb nalezacych do przedzialu od "<< a <<" do " << b << " wynosi: " << iloczynliczb(a , b); break;
 
        getch();
}
}

1
 else if(dzialanie = 5)

dzialanie = 5 to przypisanie, a nie porównanie. Użyj ==.

double sumaliczb(double x, double y)
{
        double suma=0;
        for (double i=x ; i<=y ; i++)
        {
        suma += i;
        }
        return suma;
}

omfg.

Poza tym, zamiast pisać własne dodawanie czy mnozenie możesz użyć biblioteki standardowej z std::plus czy std::multiplies ( http://en.cppreference.com/w/cpp/utility/functional )

0
else if (dzialanie = 6 ||  7)       // NIE
else if (dzialanie == 6 || dzialanie == 7)      // TAK
3
double sumaliczb(double x,double y)
  {
   return (x+y)*(y-x+1)/2;
  }
0

We funkcjii iloczyn liczb zmienna lokalna 'iloczyn' ustaw na 1 bo wychodza zle wyniki.

0

int menu()
{
std::cout << "Wybierz dzialanie: \n"
<< "1. Dodawanie" << "\n2. Odejmowanie"
<< "\n3. Mnozenie" << "\n4. Dzielenie"
<< "\n5. Suma kolejnych liczb"
<< "\n6. Iloczyn kolejnych liczb\n"
<< "7. Potegowanie\n";
int odp;
std::cin >> odp;

    return odp;

}

int main()
{
std::cout <<"Witaj w kalkulatorze!\n";
double (*wsk[6])(double, double) = {&dodawanie, &odejmowanie, &mnozenie, &dzielenie, &sumaliczb, &iloczynliczb};
int wybor = menu();
if(wybor == 7)
{
std::cout << "Podaj liczbe\n";
double a;
std::cin >> a;
std::cout << "Potega: " << a * a;
}
else
{
std::cout << "Podaj dwie liczby \n";
double a, b,;
std::cin >> a >> b;
std::cout << wsk[wybor - 1](a, b);
}

    getch();

}

1 użytkowników online, w tym zalogowanych: 0, gości: 1