Dlaczego 2 + 2 * 2 = 6?

0

Hej kochani, mam problem z pewnym zadaniem. Mianowicie musze rozwiazać zadanie: 2 + 2 * 2 i mi ciągle wychodzi że to jest 8 ale to jest nieprawidłowe rozwiazanie bo to jest 6 Niby dlaczego? Przecież w języku polskim czytamy od lewej do prawej więc 2 + 2 = 4; 4 * 2 = 8 więc skąd te 6 ?

Bardzo proszę o wyjaśnienie bo po prostu nie wyrobię koledzy i koleŻanki programistki..

17

Wbrew pozorom nie jest to taka oczywista sprawa. Wszystko zależy od gramatyki według której parsujemy dane równanie. Tutaj:
http://kompilatory.agh.edu.pl/pages/ta-wyklady/3-1-rozbior.htm
jest przykład "naturalnej" gramatyki i przykładowe drzewo rozbioru dla analogicznego przykładu. Faktem jest że można by napisać inną gramatykę, dla której wynik byłby 8. Niemniej arbitralnie przyjęto w matematyce stosowanie gramatyki według której operatory * oraz / mają wyższy priorytet niż + oraz -.

1

WTF.
Perełka?

0

Kolejność wykonywania działań młoda blondynko, kolejność wykonywania działań. To co @Shalom przedstawił w wersji na sterydach, czyli takiej, jaką powinien rozumieć porządny programista.

1

To zadanie polega na tym że są pewne elementarne zasady w matematyce które mają tu zastosowanie (kolejność działań).

http://www.math.edu.pl/kolejnosc-wykonywania-dzialan

Żeby to zadanie było dyskusyjne należałoby je trochę ubarwić. Np.

  • w zależności od rodzaju kalkulatora różnie to działanie jest realizowane. Przy wklepaniu na fizycznym np. może wyjść 8. Na komputerze wychodzi 6.
  • w matematyce akademickiej działania "*" oraz "+" mogą być na nowo zdefiniowane i oznaczać coś innego niż zwykle

Coś o kalkulatorach:
http://en.wikipedia.org/wiki/Calculator_input_methods

Ogólnie to stosuje się to pytanie chyba w dwóch celach:

  • po to żeby sprawdzić w rozmowie kwalifikacyjnej czy ktoś wie jakie są możliwe wariacje tego problemu
  • po to żeby bardzo prostym pytaniem w reklamie przyciągnąć kogoś na stronę
0

Dziękuję bardzo za wszystkie wypowiedzi. Najbardziej przemawia do mnie odpowiedź @Shalom akurat o gramatykach bezkontekstowych, kontekstowych, regularnych hierarchii Chomskiego, maszynach Turinga i sposobie rozwiązania problemu przez tę maszynę uczyłam się niedawno :). Musiałam sobie to po prostu powtórzyć :)

0

a może to efekt synergii?

0

Jest jeszcze opcja że obliczenia były wykonywane w środowisku z przeładowanymi operatorami.

Number operator*(Number a, Number b){
    return a+b;
}

dodanie znacznika <code class="csharp"> - @furious programming

1

Bo to był javascript, siostro.
user image

1 użytkowników online, w tym zalogowanych: 0, gości: 1