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

Jak zamienić string na wzór matematyczny?

0 głosów
77 wizyt
pytanie zadane 6 dni temu w C i C++ przez manjaro Nałogowiec (28,810 p.)

Prosty przykład mamy takie coś

std::string wzor="2*5";

Jak w prosty sposób wyliczyć to?

 

Idealnie byłoby gdybym mógł wyrażenie przypisać do zmiennej na przykład coś takiego

std::string wzorzec="x*x-x+1";

przypisać do zmiennej

double wzor=x*x+x+1;

 

Czy takie coś jest możliwe bez wykorzystania skomplikowanych zewnętrznych bibliotek?

komentarz 6 dni temu przez tkz Nowicjusz (100 p.)
String to tablica, możesz odwoływać się do niego przez [], zrób pętle czytającą od lewej do prawej. Zaczynasz tak, masz "2*5", czyli masz 2, następnie w switchu ustawiasz co ma sie dziać dla "*", a następnie wczytujesz 5
komentarz 6 dni temu przez Eryk Andrzejewski Mędrzec (157,080 p.)

@tkz, ale prosta analiza wzoru od lewej do prawej strony to kiepski pomysł. Popatrz na poniższe wyrażenie:

2*2+2*2

Tutaj prawidłowa kolejność wykonywania działań nie jest zbieżna z liczeniem tego od lewej do prawej. wink Kiedy dołożysz jeszcze jakieś nawiasy do wyrażenia, to już w ogóle zrobi się słabo.

@manjaro, chyba najlepiej będzie skorzystać z RPN (czyli Odwrotnej Notacji Polskiej). Poczytaj sobie tutaj: https://pl.wikipedia.org/wiki/Odwrotna_notacja_polska

komentarz 6 dni temu przez manjaro Nałogowiec (28,810 p.)
Jak tak czytam Wasze propozycje to widzę że jednak nie ma prostej metody na to i trzeba napisać własną funkcję parsującą.

ONP średnio się tu chyba nada bo co jeśli mi użytkownik wpisze funkcje z sinusami logarytmami itp? To też trzeba brać pod uwagę...

Masakra C++ istnieje tyle lat a nie potrafi takich rzeczy...
komentarz 6 dni temu przez tkz Nowicjusz (100 p.)
To python, powinno być szybciej
komentarz 6 dni temu przez Eryk Andrzejewski Mędrzec (157,080 p.)

@manjaro, a co ma do tego C++? Komputer nie zrozumie stringa z wyrażeniem matematycznym, musi gdzieś pojawić się kod, który je sparsuje i przedstawi w zrozumiałej dla komputera postaci. Może to być interpreter, który analizuje na bieżąco to co wprowadza użytkownik, a może być to kompilator, który w momencie kompilacji analizuje to wyrażenie i zapisuje je w postaci czytelnej dla komputera (instrukcji j. asemblera).

Poszukaj jakiejś zewnętrznej biblioteki do parsowania wyrażeń matematycznych, jestem pewien że coś się znajdzie. wink

komentarz 6 dni temu przez manjaro Nałogowiec (28,810 p.)
@tkc musi być C++

@Eryk chodzi mi o to że nikt przez tyle lat nie napisał oficjalnej biblioteki wykonującej właśnie takie zadanie.

Generalnie to jest zadanie z metod numerycznych i obliczania całek funkcji którą poda użytkownik...
komentarz 6 dni temu przez j23 VIP (103,060 p.)
Przeszukaj to forum, bo było już parę rozwiązań parsujących wyrażenia matematyczne.

1 odpowiedź

+1 głos
odpowiedź 6 dni temu przez Aisekai Nałogowiec (35,130 p.)
Da się, tylko nie zapisujesz tego w zmiennych a tworzysz do tego funkcję. Gdzie jako pierwszy parametr masz np wzór, a drugi parametr będzie zmienną.

Mając wzór w postaci stringa, możesz najpierw zapisać go w postaci postfiksowej (np ONP), potem opcjonalnie zapamiętać go jakoś (żeby nie wyprowadzać go na nowo). Potem zastępujesz zmienne, parametrami (argumenty funkcji) i potem już obliczasz wynik.

Podobne pytania

0 głosów
2 odpowiedzi 305 wizyt
pytanie zadane 1 stycznia 2018 w C i C++ przez stasiu2901 Nowicjusz (120 p.)
+1 głos
2 odpowiedzi 249 wizyt
pytanie zadane 8 grudnia 2016 w Matematyka, fizyka, logika przez DamianW Użytkownik (620 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

64,071 zapytań

110,467 odpowiedzi

231,381 komentarzy

47,836 pasjonatów

Przeglądających: 226
Pasjonatów: 6 Gości: 220

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...