alekspit 1 Napisano 8 Marca 2015 Udostępnij Napisano 8 Marca 2015 Wydaje mi się że nie co tu dużo mówić więc odrazu przejdę do problemu. Kod: program kelkulejtor; var l1, l2: integer; znak: char; begin Read(l1, znak, l2); if znak = '+' then write(l1+l2) else if znak = '-' then write(l1 - l2) else {itd. kolejne działania} writeln('maciej z klanu'); end. Błąd występuje przy wpisywaniu wartości z jakiegoś powodu typ char nie może rozpoznać znaków mat.(z liczbami jest ok) Z góry dzięki za pomoc. Ps.wolałbym nie dostać "gotowca" ale pomęczyć się z tym sam. Cytuj Link to post Share on other sites
F0rfrey 810 Napisano 9 Marca 2015 Udostępnij Napisano 9 Marca 2015 Czy struktura musi być taka jak w podanym przez Ciebie kodzie? Moim zdaniem prościej byłoby zrobić kalkulator z menu, pozbyć się zmiennej typu char a zamiast niej dorzucić jedną zmienną typu integer, która odpowiadałaby za typ działania. Poza tym, dla znaków matematycznych nie potrzebujesz żadnej zmiennej, nie ma kompilatora, który ów działań nie rozpoznaje. Ponadto, zamiast if, możesz użyć case of. Cytuj Link to post Share on other sites
Naleśniczek 4 Napisano 9 Marca 2015 Udostępnij Napisano 9 Marca 2015 zamiast tylu ifow to uzyj instrukcji case ... of ... Cytuj Link to post Share on other sites
Rexlu 170 Napisano 9 Marca 2015 Udostępnij Napisano 9 Marca 2015 (edytowane) Jeżeli będzie więcej działań to case ... of ... by kod był wydajniejszy. Złe jest wczytywanie danych. Kiedy wczytujesz liczby a następnie po środku masz string czy char. On nie wie kiedy jest koniec tego stringu czy charu. W char może się zawierać także i liczba jednak w integer nie może się zawierać litera czy znak. Dlatego masz między innymi runtime error. Przy wczytywaniu w jednej lini. najpierw jest l1. wpisujesz 2+ i masz runtime error, bo on nie wie gdzie jest koniec tej liczby. troszku to zawiłe. Jeżeli wszystko będziesz wczytywał po enterze to będzie działać: Readln(l1); Readln(znak); Readln(l2); Jeżeli chcesz żeby było tak jak jest to musisz napisać inaczej. Okej edit: Chwilę musiałem nad tym posiedzieć. ok 30 minut. Musiałem sobie przypomnieć pascala. W sposób który ty chcesz zrobić, trzeba użyć stringów. Odczytać działanie i wpisać je do stringa. Następnie stringa podzielić na dwa stringi (liczby) i znak. Potem dwa stringi zamienić na dwie liczby. Następnie zrobić warunki poprzez odczytany znak. Proszę bardzo, świeżo napisany, z 4 podstawowymi działaniami. CRT potrzebne do zaokrąglenia liczby w dzieleniu, stąd też dodatkowa zmienna typu real. Jeżeli chcesz robić operacje na liczbach niecałkowitych to będzie trzeba przerobić kod. program Kalkulator_by_Rexlu; Uses CRT; var dlugosc, l1, l2,i: integer; dzialanie, sl1, sl2: string; dzielenie: real; znak:char; begin Write('Wpisz dzialanie: '); readln(dzialanie); dlugosc:=length(dzialanie); for i:=1 to dlugosc do begin if (dzialanie[i]='+') or (dzialanie[i]='-') or (dzialanie[i]='*') or (dzialanie[i]='/') then begin znak:=dzialanie[i]; sl1:=copy(dzialanie, 1, i-1); sl2:=copy(dzialanie, i+1, dlugosc-i); break; end; end; Val(sl1,l1); Val(sl2,l2); writeln; case znak of '+': Writeln('Wynik: ',l1+l2); '-': Writeln('Wynik: ',l1-l2); '*': Writeln('Wynik: ',l1*l2); '/': begin dzielenie:=l1/l2; Writeln('Wynik: ',dzielenie:1:2); end; else Writeln('Wystapil Blad'); end; readln(); end. Jeżeli pomogłem daj mi plusika Edytowane 9 Marca 2015 przez Rexlu 1 Cytuj Link to post Share on other sites
alekspit 1 Napisano 9 Marca 2015 Autor Udostępnij Napisano 9 Marca 2015 Dzięki za popowiedź jestem strasznie początkujący w temacie programowania więc (dopiero wczoraj w nocy dowiedziałem się wgl o czymś takim jak instrukcja case:P) Tak czy siak, jeszcze raz dzięki za pomoc i miłego dnia. Cytuj Link to post Share on other sites
Rexlu 170 Napisano 9 Marca 2015 Udostępnij Napisano 9 Marca 2015 (edytowane) Jeżeli będziesz miał pytania daj znać jeżeli chcesz wyślę ci ten kod z przerobieniem jeszcze tak by był odporny na złośliwego użytkownika oraz działał na liczbach niecałkowitych. Ach, niech tam, napisałem go http://forum.benchmark.pl/topic/168813-gotowiec-kalkulator-stringowy/ Edytowane 9 Marca 2015 przez Rexlu Cytuj Link to post Share on other sites
alekspit 1 Napisano 9 Marca 2015 Autor Udostępnij Napisano 9 Marca 2015 Tak jak napisałem nie chcę gotowca bo to jest tylko dla mnie poco mam siebie oszukiwać. Pewnie jeszcze dużo pytań zadam 1 Cytuj Link to post Share on other sites
Rexlu 170 Napisano 9 Marca 2015 Udostępnij Napisano 9 Marca 2015 Analizuj gotowe kody, krok po kroku działanie to dużo daje Cytuj Link to post Share on other sites
alekspit 1 Napisano 9 Marca 2015 Autor Udostępnij Napisano 9 Marca 2015 Jak na razie ogarniam 1 który mi wysłałeś . Czy w innych językach również występują takie problemy jak w moim 1 kodzie? Cytuj Link to post Share on other sites
Rexlu 170 Napisano 9 Marca 2015 Udostępnij Napisano 9 Marca 2015 (edytowane) Edit: Właśnie sprawdziłem, gdyż nie byłem pewien. W c++ taki problem nie występuje i twój pomysł jak najbardziej, świetnie się spisuje #include <iostream> int main() { int liczba1,liczba2; char znak; std::cin >> liczba1; std::cin >> znak; std::cin >> liczba2; if (znak=='+') std::cout << "Wynik: " << liczba1+liczba2 << std::endl; if (znak=='-') std::cout << "Wynik: " << liczba1-liczba2 << std::endl; return 0; } Jednak to są dogodności wyższego języka. Przy wpisywaniu ignoruje samo spacje (pascal się wywali, w kodzie to uwzględniam). Niezależnie jak wpiszemy czy: - 25+5 - czy 25 + 5 czy też: 25 + 5 To i tak prawidłowo wczyta nam zmienne. Niestety w pascalu wszystko to trzeba uwzględnić. Dlatego pascal świetnie się nadaje do nauki, tak aby programista o wszystkim myślał =) Pascal nie wybacza. Edytowane 9 Marca 2015 przez Rexlu Cytuj Link to post Share on other sites
alekspit 1 Napisano 10 Marca 2015 Autor Udostępnij Napisano 10 Marca 2015 (edytowane) Kolega pożyczy mi dzisiaj książkę "Rusz głową! Java" to jest dobra pozycja czy nie za bardzo? Chciałbym się uczyć javy bo marzy mi się pisanie androidowych apk. Edytowane 10 Marca 2015 przez alekspit Cytuj Link to post Share on other sites
Rexlu 170 Napisano 10 Marca 2015 Udostępnij Napisano 10 Marca 2015 (edytowane) Powiem Ci tak. Java a java na androida to delikatnie inna sprawa. Ja od razu na przekór, bez podstaw javy zabrałem sięza pisanie swojej apki, która ma ponad 110tyś pobrań na ten moment: https://play.google.com/store/apps/details?id=app.pelnoletnosc Może i grałeś Długo była w rankingach, ostatnio wypadłą z głównego, ale jeszcze powinna być w najlepszych w kategori quizy. Jednak, miałem podstawy algorytmiki (pascal świetnie do tego się nadaje). Czyli co można zrobić dzięki petli, dzięki warunkom i cuda nie widy podstawowymi rzeczami Przyda ci się nazewnictwo w języku angielskim. Na początku oczywiście napisałem proste rzeczy jak wyświetl napis po prostu. Próbowałem czytać jakieś poradniki, jednak to na nic. Jedyne warte uwagi filmy, lecz niestety już stare znajdziesz na thenewboston, jeżeli chodzi o androida. Jeżeli wiesz co chcesz napisać. Czyli użycie pętli itp. Jeżeli wiesz w jaki sposób to formułujesz pytanie po angielsku dodajesz java android i szukasz w google Praktycznie wszystko jest na przykładach rozpisane. Analizujac przyklady napiszesz swoj kod. Nie mowie ze to latwa droga, ale tak sie nauczysz najwiecej i najszybciej, lecz moze nie najlepiej - to taki mały minus. Ps. Jeżeli chodzi o książkę to jej nie znam, jednak jeśli jest faktcznie w miarę napisana to dasz sobie radę i się nauczysz też fajnych rzeczy . Jednak pisanie konsolowe, a z interfejsem graficznym, troszku się różni. A i nie porywaj się od razu na jakieś platformówki czy inne. Do bardziej zaawansowanych gierek musiałbyś zainteresować się silnikiem unity. PS2. swoja droga zaczynam się zastanawiać, czy ten błąd nie wynika z winy kompilatora do Pascala niżeli jako z Pascala. W czym pisałeś? Ja sprawdzałem twój kod i swój w devpascal. Edytowane 10 Marca 2015 przez Rexlu Cytuj Link to post Share on other sites
alekspit 1 Napisano 10 Marca 2015 Autor Udostępnij Napisano 10 Marca 2015 Pascalgui na androida Cytuj Link to post Share on other sites
Rexlu 170 Napisano 11 Marca 2015 Udostępnij Napisano 11 Marca 2015 To w takim razie jak na 2 kompilatorach to samo to pewno taki urok języka, więc z tego wynika to co napisałem wcześniej Cytuj Link to post Share on other sites
Naleśniczek 4 Napisano 13 Marca 2015 Udostępnij Napisano 13 Marca 2015 skoro piszecie kalkulator czemu nie wykorzystujecie ONP ? pisanie tak podstawowych kalkulatorow dzisiaj juz nie ma sensu nawet dla nauki jak juz jechac to z grubej rury Cytuj Link to post Share on other sites
alekspit 1 Napisano 13 Marca 2015 Autor Udostępnij Napisano 13 Marca 2015 Naleśniczek a na czym polega onp? Cytuj Link to post Share on other sites
helfi 82 Napisano 13 Marca 2015 Udostępnij Napisano 13 Marca 2015 (edytowane) Naleśniczek a na czym polega onp? Już lepiej napisać to w cpp na strumieniach, a nie bawić się w coś co było w LO. Książki rusz głową raczej nie są zbyt obszerne w wiedzę. Imho najlepszy wybór do cpp to książki Eckelsa. Jak pisał Rexlu apki na Android-a w Javie to inna sprawa niż zwykła Java SE. Jak napiszesz coś to zrozumiesz. Jak się ogarnie to jest bardzo przyjemne. Jest dużo tutoriali. Nie brakuje gotowych rozwiązań na StackOverflow. API czy Parsery nie są problemem. Jak chcesz zaadaptować jakiś gotowy algorytm w Javie nie ma większych problemów(ostatnio Ranlux-a kopiowałem). Nie testowałem jak wydajnościowo mają się do apek pisanych w Qt(możliwość kompilacji dla iOS) ale w stosunku do np. APP inventora jest to ponad 10k krotnie szybsze wykonywanie kodu. Edytowane 13 Marca 2015 przez helfi Cytuj Link to post Share on other sites
Rexlu 170 Napisano 13 Marca 2015 Udostępnij Napisano 13 Marca 2015 Ta, pełno gotowych nawet algorytmów czy kodu na zasadzie kopiuj wklej (oczywiście trzeba mieć pojęcie jak to zastosować i co to robi w jaki sposób) jest na StackOverflow po wpisaniu zagadnienia. Cytuj Link to post Share on other sites
Naleśniczek 4 Napisano 17 Marca 2015 Udostępnij Napisano 17 Marca 2015 Naleśniczek a na czym polega onp? Odwrotna notacja polska, zeby napisac ciekawszy kalkulator a nie dodaj, odejmij dwie liczby. Cytuj Link to post Share on other sites
Recommended Posts
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.