Perykles Napisano Listopad 14, 2009 Zgłoś Share Napisano Listopad 14, 2009 Witam, Zrobiłem dzisiaj w pascalu prosty kalkulator obliczający sumę, różnicę, iloczyn i iloraz z dwóch liczb. Zacząłem się zastanawiać, jak wyprowadzić wynik z więcej niż 2 liczb, oraz jak wyliczyć wynik z liczb dziesiętnych. Zacząłem pisać program w pascalu: Uses CRT; var a,w:real; dzialanie:char; i,n:integer; Begin Clrscr; Writeln('Kalkulator - wersja 1'); Writeln('-----------------------'); Writeln; Writeln('Wybierz dzialanie jakie chcesz wykonac: '); Writeln; Writeln('Dodawanie wcisnij +'); Readln(dzialanie); IF dzialanie:=+ THEN writeln('Podaj ile liczb chcesz sumować'); readln(n); suma:=0; for i:=1 to n do begin writeln('Podaj ', i ,' liczbe:'); readln(a); suma:=suma+a; end; writeln (' Suma podanych liczb przez ciebie wynosi: ', suma:2:2); Else End; Readln; Readkey; End. Umieściłem go w kalkulatorze, ale wyskakują błędy. Co mam zrobić, żeby jakoś napisać ten kalkulator tak, żeby obliczał też ułamki dziesiętne? Link do komentarza Udostępnij na innych stronach More sharing options...
Adam27 Napisano Listopad 14, 2009 Zgłoś Share Napisano Listopad 14, 2009 IF dzialanie:=+ THEN OS6ŚjWIF dzialanie='+' THEN Powinno działać. Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link do komentarza Udostępnij na innych stronach More sharing options...
Perykles Napisano Listopad 14, 2009 Autor Zgłoś Share Napisano Listopad 14, 2009 Zmieniłem to w tym programie co napisałem w poprzednim poscie ale i tak wyskakują błędy. Moze dlatego ze juz trochę się zagmatwałem w tym próbowaniu obliczyć ułamki dziesiętne. Sprawdziłem, czy działa to co napisałeś w innym programie, który troszkę zmodyfikowałem. Na początku był taki: Uses CRT; var a,b,w:extended; dzialanie:char; Begin Clrscr; Writeln('Kalkulator - wersja 1'); Writeln('-----------------------'); Writeln; Writeln('Wybierz dzialanie jakie chcesz wykonac: '); Writeln; Writeln('Dodawanie wcisnij +'); Writeln('Odejmowanie wcisnij -'); Writeln('Mnozenie wcisnij *'); Writeln('Dzielenie wcisnij /'); Readln(dzialanie); Writeln('Podaj pierwsza liczbe: '); Read(a); Writeln('Podaj druga liczbe: '); Read(b); Case dzialanie of '+':writeln('Wynik wynosi: ',a+b); '-':writeln('Wynik wynosi: ',a-b); '*':writeln('Wynik wynosi: ',a*b); '/':writeln('Wynik wynosi: ',a/b); Else End; Readln; Readkey; End.OP-zg!r&i-z #zębzź\"jdŁZvyźłvZ{z9{Ł7'zxśźmyĘk)iz7pbs6i)ę-&óy-)d7ZźŚunŚ'&ŹśJ0jxk k 'Ę\"zb'ĄŁŚ''3m挌Zbs6śZvjXśĘVĘxŚkćfZŹqQU IP()ąąŃ(ąĄ() ( ą(]Ńą- ąąŃ(]Ńą(]Ńą(]Ńą ]ąĄ(]Ńą(]ŃąŹ (]Ńą=(]Ńą5(]Ńą ąź(]ŃąAŃ(IąĄą(( % ąŹźQ!8((]ŃąAą(IĄ(]Ń ąAą(IĄ((% ąQ!8((]ŃAąŃĄŃŹ (IĄ(( ą((ŹŃą]Źą(Ńą] Źą(Ńą]Źą(źŃą ]Źą(Ńą]ŹąĄ((ą(( ((Ią((I() Chciałem zrobić jakoś tak, że jak się wybierze pierwiastkowanie to "wybierz liczbe" wyswietli się tylko raz, a jak się wybierze inne działania, to wyświetli się dwa razy. Ale coś jest nie tak i wyświetla cały czas błędy. Widzisz gdzieś tutaj błąd? Link do komentarza Udostępnij na innych stronach More sharing options...
ktoś Napisano Listopad 14, 2009 Zgłoś Share Napisano Listopad 14, 2009 Zainteresuj się tym: http://pl.wikipedia.org/wiki/Odwrotna_notacja_polska Sposób zapisywania działań tak, aby wyeliminować konieczność analizowania zapisu. Alternatywnie możesz stworzyć własny system zapisu. Jeżeli to ma być używalne, to unikaj konstrukcji w stylu: >> x >> o >> y Żeby dodać 2 liczby nie potrzebuję kalkulatora. A jak będę chciał policzyć więcej, to najlepszym kalkulatorem będzie ten wymagający najmniej "rozmawiania" z nim. Narzędzia nie-interaktywne są wydajne. Narzędzia interaktywne co najwyżej wygodne. Czyli zamiast powyższego robimy >> linia konwersja tekstu na działanie obliczenia zapamiętanie wyniku w zmiennej gotowej do użycia w następnym działaniu Link do komentarza Udostępnij na innych stronach More sharing options...
Adam27 Napisano Listopad 15, 2009 Zgłoś Share Napisano Listopad 15, 2009 IF dzialanie<>'p' THEN begin Writeln('Podaj pierwsza liczbe: '); Read(a); Writeln('Podaj druga liczbe: '); Read(b); end else begin Write('Podaj liczbe z ktorej chcesz wyciagnac pierwiastek: '); Read(a); end; A druga liczba w pierwiastkowaniu może spełniać rolę stopnia tego pierwiastka. Tak samo w potęgowaniu - pierwsza liczba to podstawa, a druga wykładnik. Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link do komentarza Udostępnij na innych stronach More sharing options...
Perykles Napisano Listopad 15, 2009 Autor Zgłoś Share Napisano Listopad 15, 2009 Uses CRT; var a,b,w:real; dzialanie:char; Begin Clrscr; Writeln('Kalkulator - wersja 1'); Writeln('-----------------------'); Writeln; Writeln('Podaj dzialanie: '); Readln(a,dzialanie,b); Case dzialanie of '+':writeln('Wynik wynosi: ',a+b:2:2); '-':writeln('Wynik wynosi: ',a-b:2:2); '*':writeln('Wynik wynosi: ',a*b:2:2); '/':writeln('Wynik wynosi: ',a/b:2:2); Else End; Readln; Readkey; End. Jak zapisać w tej linijce: Readln(a,dzialanie,b ); żeby, program wczytal np. dzialanie 2+2? Zmieniłem ten kalkulator tak jak pisałeś, ale wywala jak wpisuje działanie, jakaś podpowiedź co tutaj jest źle? Link do komentarza Udostępnij na innych stronach More sharing options...
Adam27 Napisano Listopad 15, 2009 Zgłoś Share Napisano Listopad 15, 2009 Do procedury Readln przekazujesz jeden argument, a nie trzy. Albo zmienną liczbową, charową albo tam jeszcze inną. I następnym razem pisz, jaki i gdzie błąd/błędy Ci wywala. Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link do komentarza Udostępnij na innych stronach More sharing options...
Perykles Napisano Listopad 15, 2009 Autor Zgłoś Share Napisano Listopad 15, 2009 Napisałem: wywala jak wpisuje działanie. Włączam program, wpisuje działanie i wtedy wyskakuje exitcode=106. Zmieniłem tak: Writeln('Podaj dzialanie: '); Readln(a); Readln(dzialanie); Readln(b ); Co jeszcze trzeba zrobić, żeby nie wywalało? Link do komentarza Udostępnij na innych stronach More sharing options...
Adam27 Napisano Listopad 15, 2009 Zgłoś Share Napisano Listopad 15, 2009 Nie wpisujesz od razu całego działania, tylko najpierw pierwszą liczbę -> enter -> działanie - > enter - > drugą liczbę. Etharnion - 2D RPG Szukam grafika chętnego do współpracy przy projekcie. Link do komentarza Udostępnij na innych stronach More sharing options...
Perykles Napisano Listopad 15, 2009 Autor Zgłoś Share Napisano Listopad 15, 2009 Ok, dzięki. Już zrobiłem, wszystko działa. Link do komentarza Udostępnij na innych stronach More sharing options...
ktoś Napisano Listopad 15, 2009 Zgłoś Share Napisano Listopad 15, 2009 Adam: spacja jest lepsza, bo łatwiej (szybciej) się wciska spację niż enter A wczytywać trzeba całą linię do stringa, a później dopiero sprawdzać czym dany znak jest. Np. [a-z] nazwa zmiennej, jak na jej końcu są nawiasy, to nazwa funkcji. [1-9,0] - wartość do obliczeń, [+-*^%!] (inne?) operatory działań. Spacja oddziela od siebie kolejne elementy. Jak masz działanie zapisane w RPNie, to możesz je od razu wykonywać, jeżeli w czymś wymagającym zmiany kolejności wykonywania działań w stosunku do kolejności zapisu, to trzeba najpierw jakoś to ogarnąć. Czyli albo zamieniasz to na inną, jednoznaczną strukturkę, albo szukasz działania, które możesz wykonać od razu, przepisujesz działanie do innej zmiennej zastępując te działania ich wynikami, i wracasz do punktu pierwszego tak długo, aż nie znajdziesz żadnego działania do wykonania - co znaczy, że algorytm się zakończył. Link do komentarza Udostępnij na innych stronach More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.