Skocz do zawartości

prosty kalkulator w C(z jednej lini)


Bruise

Rekomendowane odpowiedzi

siemka potrzebuje kalkulator w C, a mianowicie: wczytywanie z jednej linii, zabezpieczenie przed znakami +-,++,--, 2 przecinki, 4 podstawowe funkcje, liczba zmiennoprzecinkowa.

bardzo prosty kalkulator zrobilem:

 

#include<stdio.h>

#include<conio.h>

main()

{

int a,b,c,d,e,f;

printf("podaj liczbe \na=");

scanf("%d",&a);

printf("b=");

scanf("%d",&b);

c=a+b;

d=a-b;

e=a*b;

f=a/b;

printf("\n a=%d\n b=%d\n a+b=%d+%d=%d\n a-b=%d-%d=%d\n a*b=%d*%d=%d\n a/b=%d/%d=%d\n"

,a,b,a,b,c,a,b,d,a,b,e,a,b,d,e,a,b,f);

getch();

}

 

a to jest banal wrecz:D:D

pomoże mi ktos :D:D

Odnośnik do komentarza
Udostępnij na innych stronach

W zasadzie jeżeli dobrze zrozumiałem to linia ma zawierać ciąg znaków i cyfr a je należy potem odpowiednio sparsować a następnie wykonać obliczenia. Może to wyglądać mniej więcej tak , że ta linia to string a nastepnie kolejne elementy stringa są odpowiednio interpretowane. example:

4+5*7-2 -> następnie z tego string wyciągamy takie działania cyfra-operator-cyfra czyli:

4+5 , 5*7 , 7-2 Następnie spr które z nich ma największy priorytet:

1.5*7=35 następnie od lewej 4+35=39 i na końcu 39-2=37 Co się tyczy zakazanych znaków to poprostu jezeli pomiędzy cyframi będzie znak , którego nie mamy w jakiejś tam tablicy operatorów wywalamy błąd i po sprawie. Implementacje z podstawową znajomościa c czy c++ napisze sam(Bruise).

Odnośnik do komentarza
Udostępnij na innych stronach

Wystarczy wyjść z założenia, że na poczatku zawsze jest jakas cyfra a następnie znak a następnie->

dajmy na to , że string tekst ma już tą wczytaną linie:

vector<float> liczby;

vector<string> operatory;

bool CzyCyfra=true; //na poczatku mam cyfre

for(int a=0;a<tekst.size();a++)

{

char znak=tekst[a];

if(CzyCyfra)

{

//int czy float czy double

liczby.push_back(ZamienNaCyfre(znak)); //to moze sie odbywac poprzez stringstream

}

else

{

operatory.push_back(tekst[a]);

}

CzyCyfra=!CzyCyfra;

}

/////////////////////////////////////////////////////////////////////////////////////////////////////////

mamy tablice z operatorami string operatoryArray[4]={*,/,+,-}; //wedlug priorytetow

bool jest;

for(int i=0;i<4;i++)

{

int index=find(operatory,opearatoryArray);

jest=true;

while(jest)

{

if(index>0) //jezeli nie ma zwrac -1

{

jest=true; //jednakowych operatorow moze byc wiecej

switch(i)

{

case 0:

{

float liczba=liczby[index-1];

float liczba2=liczby[index+1];

Wynik+=liczba*liczba2;

}break;

 

}

else

{

// juz takeigo nei ma przechodzimy dalej

jest=false;

}

}/while

}//for

 

To jest baaardzo uproszczone i pewnie z błędami bo pisane na szybko.

Odnośnik do komentarza
Udostępnij na innych stronach

Masz tutaj taki co napisałem:

https://gmclan.org/up3937_3_CCalc.html

Nie daje kodu tutaj bo to prawie 300 linii :jezor:, jest napisany w C i nawet działa. Najpierw parsuje linie poleceń i tworzy z niej drzewo :D a potem przerabia to drzewo na trochę inne drzewo zawierające już odpowiednie wskaźniki na funkcje operatorów i na koniec odpala funkcję getValue z głównej gałęzi :jezor:

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...