Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

[c++] Kalkulator z ONP

#1
[c++] Kalkulator z ONP
Witam. Przychodzę tutaj, bo mam pewne obawy, że mój czas został zmarnowany. Piszę kalkulator na ocenę celującą z programowania. Ma on liczyć liniowo wyrażenia. Zacząłem się już bawić w moduł, który przekształci mi postać infiksową na ONP.

Jednak czytając o tym wszystkim. Natknęła mnie jedna rzecz. Od użytkownika szczytuję po jednym znaku co on tam wklepie na klawiaturze. To co uważam za istotne (czyli liczby i znaki) zapisuje do stringa. Reszta służy do włączania menu z funkcjami, stałymi itd (ta funkcjonalność jeszcze nie opracowana, ale to będzie się tam liczyło i wynik zapisywał do stringa, aby pominąć problem z rozpoznawaniem funkcji). I tutaj się pojawiają moje kłopoty i zmartwienia. Liczby będą raz, że zmiennoprzecinkowe, dwa, że one będą w stringu zapisane (czy ja czasem nie powinienem zrobić tablicy?). Ewentualnie jak ładnie wyłuskać te liczby z stringa, aby całe wrzucać na stos (bo chyba tak trzeba).

No dobra. Pokażę mój kod:
main.cpp: http://wklej.org/id/1509170/
klawiatura.cpp http://wklej.org/id/1509172/
stale.cpp http://wklej.org/id/1509174/
bledy.cpp http://wklej.org/id/1509175/
deklaracje.hpp http://wklej.org/id/1509176/

Nie gańcie mnie za te zmienne globalne. Kombinowałem jak mogłem, aby je pominąć i się nie udało.

Wiem, że mógłbym liczyć to za pomocą system(), bo konsola Windowsowska potrafi liczyć, ale mi nie o to chodzi.

Z góry dziękuję za odpowiedź.
Pozdrawiam
SzateX
Nieregulaminowy podpis ! Patrz dział Ważne ogłoszenia


ojojoj.... ja tam mam czas zaglądać...

SMFZ - Szef grupy
 System operacyjny: windows_seven Przeglądarka: firefox
#2
RE: [c++] Kalkulator z ONP
Witam, lepiej chyba wczytać na raz cały wiersz i potem go analizować - tak jak kalkulator liczy dopiero po wciśnięciu przycisku =. Gdy ja pisałem sobie kalkulator ONP (a było to dość dawno), to podczas analizy łańcucha odkładałem poszczególne elementy do takiej struktury:
Kod:
struct element
{
    char znak;
    double liczba;
};
Żeby ułatwić sobie życie, to możesz skorzystać z klasy istringstream - wtedy po prostu próbowałbyś wczytać liczbę, a w razie niepowodzenia wczytałbyś znak (chyba lepsze to od samodzielnego analizowania łańcucha). Później zaimplementowanie ONP nie powinno sprawić większego problemu.
 System operacyjny: linux Przeglądarka: firefox
#3
RE: [c++] Kalkulator z ONP
Przyglądam się temu: http://www.cplusplus.com/reference/sstre...ingstream/ i dochodzę do wniosku, że ta klasa działa tylko dla intów :-(
Nieregulaminowy podpis ! Patrz dział Ważne ogłoszenia


ojojoj.... ja tam mam czas zaglądać...

SMFZ - Szef grupy
 System operacyjny: windows_seven Przeglądarka: firefox
#4
RE: [c++] Kalkulator z ONP
Złej rzeczy się przyglądałeś Wesoły Klasa ta przeładowuje ten operator.
 System operacyjny: linux Przeglądarka: firefox
#5
RE: [c++] Kalkulator z ONP
Tym bardziej przestałem cokolwiek ogarniać. Szczególnie, że jestem zmąconym katowaniem pythona przez 6 godzin na praktykach (szybko go znienawidziłem. Jest to język bardzo nieczytelny dla mnie).

Nie wiem. Mózg mi wywalił jak python dzisiaj wielokrotnie. Syntax error.
Zapewne z tej struktury muszę zrobić tablicę, aby tam zapisywać te liczby.
Mam tak na krzywy... krzywą buzię zrobić w pętli takie coś?:

Kod:
wyrazenie >> element.costam[i];
?

Znając życie to wszystko jest znacznie prostsze niż mi się wydaje.
Nieregulaminowy podpis ! Patrz dział Ważne ogłoszenia


ojojoj.... ja tam mam czas zaglądać...

SMFZ - Szef grupy
 System operacyjny: windows_seven Przeglądarka: firefox
#6
RE: [c++] Kalkulator z ONP
Ewentualnie wrzucać do wektora - w końcu nie wiadomo, ile elementów się trafi.
Kod:
istringstream linia;
string line;
double liczba;
char znak;
vector<element> elementy;
cin >> line;
linia.str(line);
while (!linia.eof())
{
    if (isdigit(linia.peek()))
    {
        linia >> liczba;
        elementy.push_back(element('\0', liczba));  // konstruktor trzeba napisać
    }
    else  // może warto sprawdzić, czy ten znak jest tym znakiem (nawiasem, plusem itd.)
    {
        linia >> znak;
        elementy.push_back(element(znak, 0));
    }
}
 System operacyjny: linux Przeglądarka: firefox
#7
RE: [c++] Kalkulator z ONP
O i tutaj się zacznie. Bo uczyłem się programowania obiektowego i nic nie zrozumiałem z symfonii c++, ani z od zera do gier kodera. Ale nic. będę wałczył.

tam o cin>>linia moge wywalic? Mam juz stringa o nazwie wyrazenie.
Nieregulaminowy podpis ! Patrz dział Ważne ogłoszenia


ojojoj.... ja tam mam czas zaglądać...

SMFZ - Szef grupy
 System operacyjny: windows_seven Przeglądarka: firefox
#8
RE: [c++] Kalkulator z ONP
Niby można. Tak jak pisałem - ja bym wczytał od razu całą linię, a nie znak po znaku za pomocą funkcji getch().
 System operacyjny: linux Przeglądarka: firefox
#9
RE: [c++] Kalkulator z ONP
Ja wczytuje znak po znaku, bo może gdzieś w trakcie będę potrzebował wykorzystać jakąś stałą. I to wszystko ma działać bez użycia entera.

Jakbym miał używać cin'y to mógłbym się pogimnastykować o to, że od razu to co zostało wpisane, wpisać do wektora i tylko zliczać ile jest elementów. A następnie zrobić rekurencyjną zamianę na ONP za pomocą algorytmu z wiki.

Chyba, że masz jakiś pomysł, aby znaki + - * / (tylko te 4, bo potęga będzie pod funkcjami). Działałyby jak enter i one wrzucane byłyby do wektora również. Wtedy cały galimatias z przekształcaniem stringów i wyciąganiem z niego liczb byłby zbędny.

EDIT: Trzeba było zjeść jabłko, żeby coś wymyślić. Wpadłem na inny pomysł. Mogę przecież przejechać się rekurencyjnie po każdym znaku (wiem, to szybkie nie będzie, ale tymczasowo może być). Ściągnąć wszystkie cyfry (aż do znaku) do jakiegoś sub-stringa i zamienić na double poprzez stod(). Następnie wartość pchnąć według algorytmu z wiki do stosu, lub nie. Z znakami podobnie.
Nieregulaminowy podpis ! Patrz dział Ważne ogłoszenia


ojojoj.... ja tam mam czas zaglądać...

SMFZ - Szef grupy
 System operacyjny: windows_seven Przeglądarka: firefox
Programy: Polecane / Nowe / Inne




Podobne wątki ([c++] Kalkulator z ONP)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Początki z bashem - jak napisać skrypty: wysłanie maila i kalkulator? Kristov81 4 13594 21.03.2018, 18:32
Ostatni post: Szachista
  Kalkulator problem z funkcjami lub czymś takim. Pan_Gronostaj 1 6330 17.02.2015, 20:37
Ostatni post: Raciawelli
Sad Zrobi Kalkulator graficzny [java] Milus47 2 7191 12.01.2015, 18:00
Ostatni post: flowslow

Skocz do:


Wybrane wątki ([c++] Kalkulator z ONP)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Wyszukiwarka w spawnerze nie reaguje na polskie znaki kazik666 0 9059 16.05.2018 12:04
Ostatni post: kazik666
  BASH symulator silnika dawswi1 3 9548 13.05.2018 10:43
Ostatni post: Szachista
  Autohotkey automatyczny zapis TheProgson 0 9153 07.05.2018 21:27
Ostatni post: TheProgson
  VBA Pobieranie wybranych plików z danymi julietta03 1 9398 04.05.2018 08:25
Ostatni post: broda99
  [VBA] Przenoszenie danych między formularzami Pioro 4 9819 23.04.2018 11:48
Ostatni post: broda99
  Skrypt, który szuka i zamienia armen10 2 9545 23.04.2018 10:04
Ostatni post: armen10
  Liniowa regresja w Pythonie a budowanie modelu Trojan3000 2 9747 16.04.2018 13:26
Ostatni post: Trojan3000
  Początki z bashem - jak napisać skrypty: wysłanie maila i kalkulator? Kristov81 4 13594 21.03.2018 18:32
Ostatni post: Szachista
Ściana Zadanie cmd.... Yanke$ 2 10707 16.03.2018 17:20
Ostatni post: FireBytes
  Poszukuj kogoś do pomocy FireBytes 0 9320 16.03.2018 16:58
Ostatni post: FireBytes
  Program liczący liczby pierwsze Mersenne'a raistin 2 9612 12.03.2018 12:51
Ostatni post: Szachista
  Wykres Funkcji w Javie wanhelsing 4 10188 17.02.2018 22:27
Ostatni post: wanhelsing
  [SQL]procedura zliczania czasu CTRL85 0 9290 17.02.2018 12:58
Ostatni post: CTRL85
  [VBA Excel] Zaokrąglanie liczby w górę Pioro 2 10689 13.02.2018 21:25
Ostatni post: Pioro
  Sumowanie czasu excel. Cixi 7 9417 13.02.2018 11:52
Ostatni post: Cixi