C pierwszy program kalkulator

0

Witam
Mam za zadanie napisać prosty kalkulator na dodawanie w konsoli, mój problem jest taki, ze nie wiem jak zmusić program do liczenia. Udało mi się już zawołać o dwie liczby ale dalej nie wiem jak zrobić żeby je dodał.

Oto do czego doszedłem nie jest tego dużo ale przynajmniej to rozumiem.

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

int main(void)
{
        int liczba1, liczba2;

        printf("Podaj liczbe 1:");
        scanf("%d",&liczba1);
        fflush(stdin);

        printf("Podaj liczbe 2:");
        scanf("%d",&liczba2);
        fflush(stdin);

        return 0;
        system("pause")
}
0

system("pause"); po return 0 nie wykona się.

Dodawanie:

printf("%d\n",liczba1+liczba2);
0

Zrób sobie jeszcze zmienną wynik, potem napisz np tak

wynik = liczba1 + liczba2;

a potem po prostu klasycznie wyświetl tę zmienną wynik.
Dokładnie Ci tego nie napiszę bo ja to bardziej w komendach C++owych się znam,

0

Zielu a po co ta zmienna?

0

Poprawiłem i działa

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

int main(void)
{
        int liczba1, liczba2;

        printf("Podaj liczbe 1:");
        scanf("%d",&liczba1);
        fflush(stdin);

        printf("Podaj liczbe 2:");
        scanf("%d",&liczba2);
        fflush(stdin);

        printf("Wynik to: %d\n",liczba1+liczba2);

        system("pause");

        return 0;

}

I mam jeszcze jedną sprawę, w szkole mieliśmy coś takiego
image jpg 1006-102

moglibyście mi powiedzieć jak się kierować projektując coś takiego oraz co oznacza to T i N

mam takie ćwiczenie zaprojektować kalkulator na 4 działania(-,+,*), a potem oczywiście go napisać.

0

To coś takiego to schemat blokowy, którego na pewno też mieliście w cholerę. B != 0 to warunek, T to prawda, N to fałsz.

0

Narysuje taki schemat na kalkulator z 4 działaniami i dam tutaj do sprawdzenia, ale to jutro.
Oczywiście jeśli się zgodzicie.

0

Narysowałem ten schemat blokowy na kalkulator z 4 działaniami, możecie ocenić ewentualnie powiedzieć jak poprawić.

image jpg 1007-261

0

Ściągnij sobie Magiczne Bloczki ;p Schemat wydaje się dobry, jednak zamiast tylu ifów lepiej zainwestować w switch. Ja bym dodatkowo sprawdzał czy został podany znak, a jak nie to bym cofał usera na początek programu.

0

Zamiast warunku znak + Ja bym dał najpierw wczytaj Z a później warunki Z == '+', Z=='-' etc.

@Lukas - w schematach blokowych nie ma switcha, przynajmniej tych klasycznych.

0

Mógłby by mi ktoś wytłumaczyć jak zrobić taki kalkulator na 4 działania,
wiem że muszę skorzystać z instrukcji if albo switch (najlepiej to jak sie dowiem jak zrobić dla obydwóch)
tylko że niemego tego zajarzyć

I jeszcze jedno wyczytałem że jak zaczynam nawais np. przy printf to moge go skończyć w innej lini, ale jak chce wybór operacji sobie ładnie rozłożyć w słupku to nie idzie

Mniej więcej chce żeby to wyglądało tak ;
podaj liczbe1: 3
podaj liczbe2: 3
wybór operacji: 1
tutaj lista z operacjami
3+3=6

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
        int liczba1, liczba2;
        int znak;
 
 
        printf("Podaj liczbe 1:");
        scanf("%d",&liczba1);
        fflush(stdin);
 
        printf("Podaj liczbe 2:");
        scanf("%d",&liczba2);
        fflush(stdin);
 
        printf("Operacje:\n 1 Dodawanie \n 2 Odejmowanie \n 3 Mnozenie \n 4 Dzielenie \n");
 
        printf("Wybierz operacje:");
        scanf("%d", &znak);
        fflush(stdin);
 
 
        system("pause");
 
        return 0;
 
}
0

Najlepsze będzie tutaj switch. Nie wiem jak to wygląda na C ale w c++ coś takiego:

 int l1,l2,wynik,znak;
cout << "Podaj liczbe 1: ";
cin >> l1;
cout << "Podaj liczbe 2: ";
cin >> l2;
cout << "Dzialanie: 1.+ , 2.- , 3./ , 4.* : ";
cin >> znak;
swtich(znak)
{
case 1: // dodawanie b
break;
case 2: // odejmowanie
break;
case 3: // dzielenie
break;
case 4: // mnożenie
break;
default: // cos tam 
break;
}
cout << wynik << endl;

Poczytaj o instrukcji if i switch. Nie jest do zbyt obszerny temat i trudny do zrozumienia.
Instrukcje sterujące

0
printf("Operacje:\n"
       "1 Dodawanie\n"
       "2 Odejmowanie\n"
       "3 Mnozenie\n"
       "4 Dzielenie\n");

switch (znak) {
    case 1: 
        /* operacja dla dodawania */;
        break;
    case 2:
        /* operacja dla odejmowania */;
        break;
    /* itd... */
 }
 
0

wykombinowałem coś takiego, tylko wyświetla mi jakieś bzdury na końcu

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

int main(void)
{
        int a, b, wynik; /* a-pierwsza liczba, b-druga liczba */
        char znak;


        printf("Podaj pierwsza liczbe:");
        scanf("%d",&a);
        fflush(stdin);

        printf("Podaj druga liczbe:");
        scanf("%d",&b);
        fflush(stdin);

        printf("\n\n Operacje:\n"
               "1 Dodawanie (+)\n"
               "2 Odejmowanie (-)\n"
               "3 Mnozenie (*)\n"
               "4 Dzielenie (/)\n");

        printf("Wybierz numer operacji:");
        scanf("%d", &znak);
        fflush(stdin);

        switch(znak)
        {
                case '1':
                wynik = a + b;
                break;

                case '2':
                wynik = a - b;
                break;

                case '3':
                wynik = a * b;
                break;

                case '4':
                        if(b != 0)
                        {
                                wynik = a / b;
                        }
                        else
                        {
                                printf("ERROR");
                        }
                        break;
        }

        printf("Obliczenia:  %d %c %d = %d", a, znak, b, wynik);

        printf("Koniec programu");

        system("pause");
        return 0;
}
0

nie oto mi chodzi, tylko wynik jest zawsze 0 a zamiast znaku jakieś symbole ja serce albo jakieś uśmiechnięta gęba

0

Nie wiem, o co ci chodzi, ale próbujesz wczytać liczbę do znaku.

0
 printf("\n\n Operacje:\n"
               "1 Dodawanie (+)\n"
               "2 Odejmowanie (-)\n"
               "3 Mnozenie (*)\n"
               "4 Dzielenie (/)\n")

;

chcę żeby w miejscu znak wyświetlało się to co w nawiasie, a wynik mam zawsze 0 nieważne co wpisze

a wygląda to tak

image jpg 1010-2

jak widać zamiast znaku jakaś gęba

0

Toć mówię, że do chara wczytujesz inta.

0

osiągnąłem co chciałem ale jeszcze inaczej, bo w tym pierwszym sposobie, już nie mogę nic wymyślić
mógłbyś powiedzieć jak to zmienić, rozumiem co źle ale nie wiem jak to zrobić żeby działało jak powinno

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

int main(void)
{
        int a, b, wynik, znak; /* a-pierwsza liczba, b-druga liczba */

        printf("Podaj pierwsza liczbe:");
        scanf("%d",&a);
        fflush(stdin);

        printf("Podaj druga liczbe:");
        scanf("%d",&b);
        fflush(stdin);

        printf("\n\n Operacje:\n"
               "1 Dodawanie (+)\n"
               "2 Odejmowanie (-)\n"
               "3 Mnozenie (*)\n"
               "4 Dzielenie (/)\n");

        printf("Wybierz numer operacji:");
        scanf("%d", &znak);
        fflush(stdin);

        switch(znak)
        {
                case 1:
                wynik = a + b;
                printf("%d + %d = %d \n",a,b,wynik);
                break;

                case 2:
                wynik = a - b;
                printf("%d - %d = %d  \n",a,b,wynik);
                break;

                case 3:
                wynik = a * b;
                printf("%d * %d = %d  \n",a,b,wynik);
                break;

                case 4:
                        if(b != 0)
                        {
                                wynik = a / b;
                                printf("%d / %d = %d  \n",a,b,wynik);
                        }
                        else
                        {
                                printf("ERROR  \n");
                        }
                        break;
        }

        printf("Koniec programu  \n");

        system("pause");
        return 0;
}
0

to co przed chwilą napisałem działa, ale chciałbym jeszcze żeby ten poprzedni zadziałał jak należy,
czyli tam gdzie narzekałem ze wynik ciągle zero i nie daje znaku

0
 printf("%d + %d = %d \n",a,b,wynik);

nie powinno być tutaj jakiejś przerwy między podstawieniem zmiennych a stringiem?
Coś typu:

cout << a << " + " << b << " =  " << a +b << endl; // ?

Czy to działa jak w c#

console.write("{0} + {1} = {2}",a,b,a+b); // ?
0

Zamiast numeru, mógłbyś tam bezpośrednio wczytywać znak:

char znak;
scanf("%c", &znak);

switch (znak) {
    case '+':
        wynik = a + b;
        break;
    case '-':
        // itd...
}

printf("Obliczenia:  %d %c %d = %d\n", a, znak, b, wynik);

Ale w tamtym kodzie masz jeszcze jeden błąd - wynik i tak się wypisze przy dzieleniu przez zero.

0

Jak to zrobić podając bezpośrednio znak wiem bo znalazłem cały przykład
Tylko że chciałbym podawać same numery

0

No to jakoś musisz powiązać numery ze znakami:

char op;
// ...
switch(znak) {
    case 1:
        wynik = a + b;
        op = '+';
        break;
 
    case 2:
        wynik = a - b;
        op = '-';
        // ...
}
printf("Obliczenia:  %d %c %d = %d\n", a, op, b, wynik);
0

dzięki!!!
wszystko działa teraz tylko muszę poczytać o pętli żeby się nie zamykał po każdej operacji

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
        int a, b, wynik, znak; /* a-pierwsza liczba, b-druga liczba */
        char x; /* znak wykonywanej operacji */

 
        printf("Podaj pierwsza liczbe:");
        scanf("%d",&a);
        fflush(stdin);

        printf("Podaj druga liczbe:");
        scanf("%d",&b);
        fflush(stdin);
 
        printf("\n\n Operacje:\n"
               "1 Dodawanie (+)\n"
               "2 Odejmowanie (-)\n"
               "3 Mnozenie (*)\n"
               "4 Dzielenie (/)\n");
 
        printf("Wybierz numer operacji:");
        scanf("%d", &znak);
        fflush(stdin);
 
        switch(znak)
        {
                case 1:
                wynik = a + b;
                x = '+';
                break;

                case 2:
                wynik = a - b;
                x = '-';
                break;

                case 3:
                wynik = a * b;
                x = '*';
                break;

                case 4:
                        if(b != 0)
                        {
                                wynik = a / b;
                                x = '/';
                        }
                        else
                        {
                                printf("ERROR");
                        }
                        break;
        }

        printf("Obliczenia:  %d %c %d = %d  \n", a, x, b, wynik);

        printf("Koniec programu \n");

        system("pause");
        return 0;
}
0

a jakbym chciał to zbudować wykorzystując if i else jak by to wyglądało??
zrobiłem tak ale tylko dodaje ;i jak w ostanie linijce obetnę if to wywala błędy

        if(znak = 1)
        {
                wynik = a + b;
                x = '+';
        }
        else if(znak = 2)
        {
                wynik = a - b;
                x = '-';
        }
        else if(znak = 3)
        {
                wynik = a * b;
                x = '*';
        }
        else if(znak = 4)
        {
                wynik = a / b;
                x = '/';
        }
0

= jest operatorem przypisania, zamień wszędzie znak = x na znak == x

0

Poprawiłem i teraz wykorzystuje same if i else.
I jedno pytanko
czy jak pisze

if ( ... )
{
.......
}

i nie dam na końcu else to jest to jakiś błąd??

#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
        int a, b, wynik, znak; /* a-pierwsza liczba, b-druga liczba */
        char x; /* znak wykonywanej operacji */

 
        printf("Podaj pierwsza liczbe:");
        scanf("%d",&a);
        fflush(stdin);

        printf("Podaj druga liczbe:");
        scanf("%d",&b);
        fflush(stdin);
 
        printf("\n\n Operacje:\n"
               "1 Dodawanie (+)\n"
               "2 Odejmowanie (-)\n"
               "3 Mnozenie (*)\n"
               "4 Dzielenie (/)\n\n");

        printf("Wybierz numer operacji:");
        scanf("%d", &znak);
        fflush(stdin);
 
       if(znak == 1)
        {
                wynik = a + b;
                x = '+';
        }
        else if(znak == 2)
        {
                wynik = a - b;
                x = '-';
        }
        else if(znak == 3)
        {
                wynik = a * b;
                x = '*';
        }
        else if(znak == 4)
        {
                if(b != 0)
                {
                        wynik = a / b;
                        x = '/';
                }
                else
                {
                        printf("\n Ty tluku, nigdy nie dzieli sie przez zero \n\n");
                }
        }

        if(b != 0)
        {
                printf("\n Obliczenia:  %d %c %d = %d  \n\n", a, x, b, wynik);
        }

        printf("Koniec programu \n\n");

        system("pause");
        return 0;
}
0

Nie. Dodatkowo nie musisz wcale pisać np.

if(a!=b)
{
   a=b;
}

tylko można zrobić to tak

if(a!=b)
   a=b;
0

udało mi się zrobić pętle ;D

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

int main(void)
{
        int a, b, wynik, znak, koniec; /* a-pierwsza liczba, b-druga liczbau */
        char x, z; /* x-znak wykonywanej operacji, z-zapytanie o koniec program */

        do
        {
                printf("Podaj pierwsza liczbe:");
                scanf("%d",&a);
                fflush(stdin);

                printf("Podaj druga liczbe:");
                scanf("%d",&b);
                fflush(stdin);

                printf("\n\n Operacje:\n"
                        "1 Dodawanie (+)\n"
                        "2 Odejmowanie (-)\n"
                        "3 Mnozenie (*)\n"
                        "4 Dzielenie (/)\n");

                printf("Wybierz numer operacji:");
                scanf("%d", &znak);
                fflush(stdin);

                switch(znak)
                {
                        case 1:
                        wynik = a + b;
                        x = '+';
                        break;

                        case 2:
                        wynik = a - b;
                        x = '-';
                        break;

                        case 3:
                        wynik = a * b;
                        x = '*';
                        break;

                        case 4:
                                if(b != 0)
                                {
                                        wynik = a / b;
                                        x = '/';
                                }
                                else
                                {
                                        printf("ERROR");
                                }
                                break;
                }


                printf("Obliczenia:  %d %c %d = %d  \n", a, x, b, wynik);

                printf("Koniec programu, czy chcesz zakaczyc?  y / n \n");
                scanf("%c",&z);
                fflush(stdin);
         }
         while (z !='y');



        return 0;


}

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