Spoj_kalkulator - funkcja początkujący]

Spoj_kalkulator - funkcja początkujący]
J1
  • Rejestracja:prawie 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:10
0

Witam,
mam pytanie, co robię źle.
Mam za zadanie napisać program z podfunkcją, w którym deklaruję funkcję wynik, a następnie ją zwracam.
Prośba o poradę.

Czy potrzeba mi tutaj int wynik?

#include <iostream>

using namespace std;

int oblicz (char znak, int a, int b)
{
int wynik;

if (znak == '+')
    cout<< a+b << endl;

else if (znak == '-')
    cout<< a-b << endl;

else if (znak == '*')
    cout<< a*b << endl;

else if (znak == '/')
    cout<< a/b << endl;

else if (znak == '%')
    cout<< a%b << endl;

return wynik;

}
int main()
{
char znak;
int a,b;

while (cin >> znak)
{
    cin >> a >> b;
    cout << oblicz(znak, a, b) << endl;
}
return 0;

}

ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
1

jak brzmi oryginalne zadanie?
Piszesz o "funkcji wynik" ale robisz co inengo.

Oducz się drukowania w każdym punkcje. To kardynalny błąd większości początkujących. Pozornie efekt jest, ... bo się wydrukowało.
Drukuje ten fragment kodu (klient), który zamawiał, to być może aplikacja GUI, albo webowa, albo wynik jest potrzebny do dalszych obliczeń itd .... wyobrażasz sobie, ze oryginalna funkcja np sin() drukuje?

Funkcja dajmy na to "oblicz" ma robić to, jak głosi jej nazwa, czyli liczyć i zwracać wynik.
Jakbyś w tym kodzie trzymał się tej zasady, szybko być wyczaiłe, czego tam nie realizujesz, i pytania "Drukuje ten fragment kodu (klient), który zamawiał, to byc mozę apliakcja GUI, albo webowa, albo wynik jest potzrebny do dalszych obliczeń itd ....


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
J1
  • Rejestracja:prawie 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:10
0
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 12 godzin
3

Twoja funkcja nie zwraca wyniku działania tylko smaruje po ekranie po czym zwraca jakieś śmiecie.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
J1
  • Rejestracja:prawie 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:10
0

Wiem o tym, dlatego napisałem o pomoc, jak to poprawnie zapisać.
Ale widzę że raczej krytykujecie, niż pomagacie :)

ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
2
Janek_1998 napisał(a):

Wiem o tym, dlatego napisałem o pomoc, jak to poprawnie zapisać.
Ale widzę że raczej krytykujecie, niż pomagacie :)

Oczekujesz głaskania po główce? To nie ten URL.


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
_13th_Dragon
A jak my tego nie zrobimy to sam to zrobi, zobacz już ten problem jest rozwiązany :)
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:około 12 godzin
3

Wskazanie dokładnego miejsca i przyczyny problemu wg mnie jest pomocą.
Powiedz jaką definicją pomocy operujesz ty?


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
J1
  • Rejestracja:prawie 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:10
0

Algorytm jest poprawny, kwestią zwrócenia zmiennej wynik, tylko nie wiem czy mam tą zmienna że zmienna znak połączyć?

ZD
albowiem ponieważ?
_13th_Dragon
A jaką wartość przypisujesz aktualnie do zwracanej zmiennej?
K5
  • Rejestracja:około 6 lat
  • Ostatnio:dzień
  • Postów:1002
1

Algorytm nie jest poprawny ponieważ nie zwraca tego co trzeba.

Dostałeś podpowiedź od @_13th_Dragon, skupiłeś się na printowaniu, a nie zwróceniu wyniku.

MarekR22
Moderator C/C++
  • Rejestracja:około 17 lat
  • Ostatnio:mniej niż minuta
3

Otaczaj kod znacznikami, żeby włączyć kolorowanie składni:

Kopiuj
#include <iostream>

using namespace std;

int oblicz (char znak, int a, int b)
{
    int wynik;

    if (znak == '+')
        cout<< a+b << endl;

    else if (znak == '-')
        cout<< a-b << endl;

    else if (znak == '*')
        cout<< a*b << endl;

    else if (znak == '/')
        cout<< a/b << endl;

    else if (znak == '%')
        cout<< a%b << endl;

    return wynik;

}
int main()
{
    char znak;
    int a,b;

    while (cin >> znak)
    {
        cin >> a >> b;
        cout << oblicz(znak, a, b) << endl;
    }
    return 0;
}

Użyj "Odpowiedz" by zboczyć jak.

  • oblicz coś wypisuje, co równocześnie próbuje robić też main.
  • oblicz zwraca wynik o nie ma nadanej wartości (wartość śmieć).

Dodaj do swojego kompilatora opcje ostrzeżenia jako błędy. Dla gcc/clang jest to: -Wall -Wextra -pedantic -Werror https://godbolt.org/z/ss81zx19P


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 7x, ostatnio: MarekR22

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.