• 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?

VPS Starter Arubacloud
0 głosów
525 wizyt
pytanie zadane 13 czerwca 2019 w C i C++ przez manjaro Nałogowiec (37,390 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 13 czerwca 2019 przez tkz Nałogowiec (42,000 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 13 czerwca 2019 przez Eryk Andrzejewski Mędrzec (164,260 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 13 czerwca 2019 przez manjaro Nałogowiec (37,390 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 13 czerwca 2019 przez tkz Nałogowiec (42,000 p.)
To python, powinno być szybciej
komentarz 13 czerwca 2019 przez Eryk Andrzejewski Mędrzec (164,260 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 13 czerwca 2019 przez manjaro Nałogowiec (37,390 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 13 czerwca 2019 przez j23 Mędrzec (194,920 p.)
Przeszukaj to forum, bo było już parę rozwiązań parsujących wyrażenia matematyczne.

1 odpowiedź

+1 głos
odpowiedź 13 czerwca 2019 przez Aisekai Nałogowiec (42,190 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
1 odpowiedź 335 wizyt
0 głosów
2 odpowiedzi 834 wizyt
pytanie zadane 1 stycznia 2018 w C i C++ przez stasiu2901 Nowicjusz (120 p.)
0 głosów
2 odpowiedzi 170 wizyt

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...