• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Interpretowanie znaków w konsoli i obliczenia

Object Storage Arubacloud
0 głosów
300 wizyt
pytanie zadane 24 października 2017 w C i C++ przez Kifu Nowicjusz (160 p.)

Moi drodzy, mam dzisiaj naprawdę sporą zagwozdkę. Od dłuższego czasu męczę się z kalkulatorem konsolowym w c++, ale nie takim, że wprowadzamy zmienne: podaj a, podaj b, co chcesz zrobić? Dodać, odjąć? Chodzi mi o taki, że w konsolę wpisuję powiedzmy 2*5+4/3, zatwierdzam enterem i mam wynik.

Próbowałem to ugryźć na kilka sposobów, na początku deklarowałem tablicę string, następnie przy pomocy pętli for ją sprawdzałem pod kątem wystąpienia znaku, np '/'. Wyglądało to mniej więcej tak:

int main() {

	string obl;

	cout << "Obliczenia: ";
	cin >> obl;

	for (int i = 0; i <= obl.length(); i++) {
		if (obl[i] == '/') {
			cout << "\nWynik: " << obl[i - 1] / obl[i + 1];
		}
	}

	system("pause");
	return 0;
}

Wiem, że to nie odpali, ponieważ próbuję podzielić przez siebie 2 stringi i nie przerzutowałem tego na inty czy tam float. Ale z kolei tworząc dodatkową zmienną np int a = atoi(obl.c_str()); i zastępując nią obl po fragmencie Wynik: wyrzuca kolejne błędy, ponieważ program nie wie czym jest ta zmienna.

Im więcej tego zmieniam i edytuję tym bardziej się gubię w tym problemie. Czy moglibyście mnie nakierować w jaki sposób powinienem analizować tą tablicę pod kątem obliczeń?

1
komentarz 24 października 2017 przez Knayder Nałogowiec (37,640 p.)
komentarz 24 października 2017 przez Kifu Nowicjusz (160 p.)
I co w związku z tą notacją?
komentarz 24 października 2017 przez Knayder Nałogowiec (37,640 p.)
No tak masz analizować działanie, żeby było zgodnie z kolejnością działań. :\
komentarz 24 października 2017 przez Knayder Nałogowiec (37,640 p.)
komentarz 24 października 2017 przez Kifu Nowicjusz (160 p.)
Czy mógłbyś trochę bardziej rozwinąć tę myśl? Poprzeć jakimś fragmentem kodu lub coś w ten deseń?
1
komentarz 24 października 2017 przez Knayder Nałogowiec (37,640 p.)

Jak ktoś ci wpisze w program:

((2+7)/3+(14-3)*4)/2

To zamieniasz to na 

2 7 + 3 / 14 3 - 4 * + 2 /

I to już łatwiej jest programowi liczyć.
Kodu nie mam, ale tutaj jakiś mam (Wpisałem w google) znaleziony w necie, nie wiem ile jest warty:
http://www.algorytm.org/algorytmy-arytmetyczne/odwrotna-notacja-polska/onp-1-c.html


(To jest odwrotna polska notacja jakby co)

 

1 odpowiedź

+1 głos
odpowiedź 24 października 2017 przez Bondrusiek Maniak (61,370 p.)

Witam,

tak jak wcześniej powiedzieli Ci koledzy do bardziej rozbudowanego wyrażenie(nawiasy + kolejność wykonywania obliczeń) użyj odwrotnej notacji polskiej( http://www.algorytm.org/algorytmy-arytmetyczne/odwrotna-notacja-polska/onp-1-c.html ). Możesz to również wykonać łopatologicznie.Proponuje tutaj użycie strumieni z biblioteki <sstream>. Tutaj przykład

#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main ()
{
    string wyrazenie = "2*5+4/3";

    ostringstream stream;
    stream << wyrazenie[0];
    int liczba = stoi(stream.str());
    cout << liczba << endl;


    return 0;
}

 

Podobne pytania

0 głosów
0 odpowiedzi 733 wizyt
pytanie zadane 11 kwietnia 2020 w Offtop przez Krasik Nowicjusz (120 p.)
0 głosów
1 odpowiedź 30,188 wizyt

92,568 zapytań

141,422 odpowiedzi

319,637 komentarzy

61,957 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...