Użycie wyniku poprzedniej operacji do kolejnej w kalkulatorze

0

Witam. W jaki sposob mogę rozbudować ten kalkulator, aby po wykonaniu jakiegos dzialania, uzyc wyniku i np cos do niego dodac? Czy uzywajac funkcji liczenia(suma itp (patrz w kod)), bez stwarzania zmiennej przypisującej wynik jest to w ogole mozliwe?

#include "stdfix.h"
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

//Funkcje liczenia w kalkulatorze

float iloraz(float number1, float number2);
float roznica(float number1, float number2);
float iloczyn(float number1, float number2);
float suma(float number1, float number2);
float potega(float number1, float number2);

int main(void)
{
        float number1, number2;
        char akcja, powtorka;

    printf("Witaj w tym swietnym kalkulatorze!\n");
        do
    {
    printf("Podaj pierwsza liczbe: ");
    scanf("%f", &number1);
    printf("Podaj druga liczbe(potege) : ");
    scanf("%f", &number2);
    printf("Jaka operacje chcesz wykonac?\n");
    printf("Wpisz : '+'  - dodawanie, '-' - odejmowanie, '/' - dzielenie, '*' - mnozenie, '^' - potega\n");
    scanf(" %c", &akcja);

    switch(akcja){

        case '-':
            printf("Wynik twojego dzialania to %.3f\n", roznica(number1, number2));
            break;

        case '*':
            printf("Wynik twojego dzialania to %.3f\n", iloczyn(number1, number2));
            break;

        case '+':
            printf("Wynik twojego dzialania to %.3f\n", suma(number1, number2));
            break;

        case '^':
            printf("Wynik twojego dzialania to %.3f\n", potega(number1, number2));
            break;

        case '/':
            if (number2 == 0)
            {
                printf("Nie dzielimy przez 0 ! \n");
            }
            else
            {
                printf("Wynik twojego dzialania to %.3f\n", iloraz(number1, number2));
            }
            break;
    }
    printf("Chcesz jeszcze raz wykonac jakies dzialanie? Wpisz (t/n):\n");
    scanf(" %c", &powtorka);
    } while (powtorka == 't');



    return 0;
}

float iloczyn(float number1, float number2)
{
    return number1*number2;
}
float iloraz(float number1, float number2)
{
    return number1/number2;
}
float suma(float number1, float number2)
{
    return number1+number2;
}
float roznica(float number1, float number2)
{
    return number1-number2;
}
float potega(float number1, float number2)
{
    return pow(number1, number2);
}
0

Zwracaj wynik operacji

return wynik;

i wtedy użyj wskaźnika wynik aby coś z nim robić
tylko jak odpalisz kilka wyników, to nie wiem jak dotrzesz do interesującego Cię

0

Ale fajny kod... ładny kalkulator xD lel...

but aye...
nie możesz po prostu zwrócić liczby do jakiejś zmiennej a potem podeslać zmiennej np. int wynik;
jako wartość do funkcji ?... możesz też pobawić się z if-em

nie chce mi się rozpisywać ale wpisz sobie coś takiego
if(cout<<"hello !...") cos...
if pozwala nie tylko na sprawdzenia warunków nawet czasem śmiesznych ( roznica od zabawnego :P ) jak 40 == x
ale if pozwala też na stworzenie pętli czy czegoś na wzór rozbudowanych funkcji :P

ale prostsza metoda to po prostu Wynik = dodaj ( a , b ); // a potem a = Wynik // i wystarczy ponownie pobrać nowe B aby dodac / odjąć / pomnożyć itp. kolejny raz

//Edit:
tak w ogole czemu printf a nie cout ? :P
niby jest szybsze ale... cout brzmi normalniej i działa normalniej :P no ale to gusta xD

0

Mozesz dodac warunek tutaj:

    printf("Chcesz jeszcze raz wykonac jakies dzialanie? Wpisz (t/n):\n");
    scanf(" %c", &powtorka);
    if (powtorka == t)
     {
         printf("Zapamietac poprzedni wynik? Wpisz(t/n):\n");
         scanf(" %c", &zapamietajPoprzedniWynik); 
     }

Czytelniej byloby dodac zmienna wynik i przypisywac do niej wartosci zwracana przez funkcje, wtedy nie musialbys dwa razy wywolywac funkcji, w tym przypadku to szybkie dzialanie ale jezeli bylaby to bardziej zlozna funkcja warto dodac dodatkowa zmienna zamiast wywolywac dwa razy funkcje.
Nie wiem dlaczego chcesz to zrobic bez stwarzania zmiennej ale mozesz po prostu przypisac wynik do pierwszej liczby tak jak napisal TobiPL, np.:

case '*':
            printf("Wynik twojego dzialania to %.3f\n", iloczyn(number1, number2));
            number1 = iloczyn(number1, number2);
            break;

Pozniej jezeli byl zapamietany poprzedni wynik to wczytac tylko jedna liczbe od uzytkownika:

   if (zapamietajPoprzedniWynik != 't') 
   {
        printf("Podaj pierwsza liczbe: ");
        scanf("%f", &number1)
   } 
   else  printf("Zapamietany wynik:%f", number1);

   printf("Podaj druga liczbe(potege) : ");
   scanf("%f", &number2);   

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