![]() |
użyj komponentu timer :D albo uruchom sleepa w drugim wątku :D wydaje mi się ze tym drugim sposobem bardziej przybajerujesz :D
|
Jest sobie takie zadanko w Delphi:
Cytat:
thx4help :) ..::Update::.. OK, problem rozwiązany poprzez wstawienie przed każdym sleepem Kod:
Application.ProcessMessages;Qrde nie do konca to dobrze działa...animacja kulki się "rwie" :ysz: |
Trzeba jeszcze zrobic petle że dopoki readln nie zwroci 0 to ma pytac kolejno: liczba->dzialanie->liczba->działanie(...)->liczba->działanie...
I dobrze by było w międzyczasie podawać wynik, coś w tym stylu: 0 liczba: 2 działanie: * liczba: 2 4 dzialanie: + liczba: 2 6 dzialanie: |
Wydaje mi sie ze koncepcyjnie kalkulator powinien dzialac tak ze:
pyta sie o liczbe, pyta sie o dzialanie, pyta sie o liczbe (wykonuje dzialanie, zwraca liczbe), pyta sie o dzialanie, pyta sie o liczbe (wykonuje dzialanie na poprzedniej liczbie z parametrem w postaci nowej) itd.. W kazdym miejscu trzeba pamietac np. o dzieleniu przez 0 i innych rzeczach. Z typami bedzie troche zabawy, ale da sie to jakos sprytnie zrobic, jak np. sposob powyzej (nie wiem tylko co pascal odpowie 2 < 2.00 , mam nadzieje ze tak jak sie spodziewamy). Poza tym jest taki troche drazliwy temat: Jak 1 podzielimy przez 3, spytamy sie o wynik bedzie 0.(3) i teraz jak to pomnozymy przez 3 to obawiam sie ze bedzie 0.(9) a nie 1 (chociaz obie liczby zbiegaja do 1 to jednak druga reprezentacja jest znacznie przyjemniejsza). Fakt faktem ten defekt wystepuje rowniez w wiekszosci kalkulatorow, wiec nasz bedzie z nimi kompatybilny :) |
napewno sie da :) np. masz
var a, b, d : integer; var f : real; begin writeln ('podaj a'); readln(a); writeln ('podaj b'); readln(b); f:=a/b; d:=a div b; if d < f then writeln (f:2:2) else writeln (d); end. musisz to teraz tylko wstawic w ten fragment programu gdzie kalkulator dzieli, polega to na tym, ze f jest typu real i przechowuje rzeczywista wratosc dzielenia, natomiast d przechowuje wartosc calkowita, po odcieciu cyfr po kropce, jezeli f jest wieksze od d (a bedzie tak tylko wtedy jezeli bedzie cos mialo po kropce) to wypisywane jest np. 2.11 jezeli sa rowne, to wyswietla d jako normalna liczbe, bez kropki |
A da sie tak zrobic, zeby liczby calkowite wyswietlal normalnie bez miejsc po przecinku, a ulamki po 2 miejsca po przecinku, jak wynik przechowuje w tej samej zmiennej?
|
Cytat:
Kod:
writeln ('Wynik dzialania wynosi: ', w:0:2);@Predi był szybszy ;p |
zeby nie bylo "2.000000000E +0000" wypisuj zmienne np tak: writeln(zmienna:2:2); te dwojki znacza ze bedzie wyswietlana po dwoch polach z dwoma miejscami po przecinku
|
Dzieki wszystkim za odpowiedz
Mam jeszcze pytanie: kiedy ustawiam typ zmiennej jako 'real' to wyniki wychodza np. 2.000000000E +0000 A kiedy ustawie typ jako 'integer' to wywala blad z dzieleniem. Jakiego typu mam uzyc? |
Co do wspomnianej pętelki
Kod:
program kalkulatorek; |
Nie bede cytal calego, ale ja bym zastapił readln(d) na read(d); lub d:=readkey; - nie trzeba nacisnac klawisza enter w celu potwierdzenia wyboru. Dodałbym jeszcze modul crt (standard przy programach pascalowych) i komende crt na samym poczatku po begin oraz petle repeat ktora na samym koncu pytala by sie czy zakonczyc dzialanie programu. Ale cos nie wierze, ze taki prosty programik mialby by na zaliczenie semestru autorowi tematu pewnie chodzilo o cos bardziej skomplikowanego z bajerami i jaka szata graficzna :spoko: .
|
Cytat:
Kod:
program kalkulatorek; |
Cytat:
|
Cytat:
|
Cytat:
..::Update::.. Wynik 2-minutowej pracy (nie mam Pascala wiec napisalem to w Delphi...ale w Pascalu chyba bedzie wygladać podobnie) :) Programik robi podstawowe obliczenia (trzeba jeszcze dodac obsluge dzielenie przez zero) Kod:
program kalkulatorek; |
| Wszystkie czasy w strefie CET. Aktualna godzina: 19:31. |
Powered by vBulletin® Version 3.9.0 LTS
Copyright ©2000 - 2026, vBulletin Solutions Inc.