Wpis z mikrobloga

w sumie to #programowanie #onp #algorytmy

W sumie prędzej czy później musiało to się zdarzyć. Jak odróżnić (w możliwie prosty ale skuteczny sposób) '-' od '-'. Chodzi mi o odróżnienie unarnego minusa (negacji) od odejmowania. A dokładnie chodzi mi o to, czy są na to jakieś sprawdzone metody, do których widocznie nie dotarłem czy trzeba samodzielnie się z tym uporać. Może macie jakieś wskazówki? W sumie gdy się z tym uporam będę miał w pełni funkcjonalny kalkulator na Atmedze.

#jezykc
  • 21
  • Odpowiedz
@ignacy130: Wprowadzasz ciąg znaków z klawiatury. Użytkownik nie rozróżnia negacji od odejmowania, zawsze posługuje się znakiem '-' (minus). Jak wpisze np. 3-5 jest łatwo - onp wywali 35- i obliczymy to bez problemów. Jeśli wpiszemy -3+5 onp wywali 35-+ i tu już jest problem - pierwszy znak to nie jest odejmowanie tylko negacja.
  • Odpowiedz
@Analityk: imho w tym przypadku - jako negacja powinien być przed nawiasem, jeżeli jest wew. to traktować jako ujemne. ale nie chcę się mądrzyć, bo onp nie znam zbyt dobrze. ew. zmusić do ~ jako negacji, ale to też pewnie niezgodne. więc #taktyk a co powinien zwrócić ten przykład?
  • Odpowiedz
@ignacy130: Właśnie w tym problem - najłatwiej dla mnie byłoby zastąpić negację innym znakiem już na samym początku - nawet w momencie wprowadzania danych. To bez sensu, więc we wprowadzonych danych trzeba najpierw odróżnić negacje od odejmowania - później mam dowolność jak to sobie oznaczę.
  • Odpowiedz
@Analityk: *Haskell - po prostu mój ulubiony język (mało boilerplate'u). A w czystym C też nie jest o wiele trudniej (tylko trza kolejki, stosu i drzewa do Shunting-yard'a - nie chciało mi się xD)
  • Odpowiedz
@korri: Fajnie wiedzieć co się zrobiło xD Nie wiedziałem, że to tak się nazywa.

A problem rozwiązałem tak:

jeśli znak odejmowania jest ogólnie skrajny z lewej strony to jest to negacja. Skrajny z lewej strony znaczy tyle, że jest poprzedzony niczym lub ( lub /. Czyli w zapisie -3-5 lub -(3-5) lub -(-3-5) lub -3/-5 nie ma wątpliwości jak to zadziała.
  • Odpowiedz
@korri: -(coś) wynika z powyższego. Na wyjściu wyląduje wartosc i negacja. Właściwie to w momencie znalezienia - rozstrzygam co to jest i na wyjscie leci odpowiednia funkcja a nie znak -. To było do zrobienia.
  • Odpowiedz