Witam,
Mam zadanie domowe w stylu:
Napisać program tak aby wczytywał 3 zmienne A, B oraz K (krok narastania) - wszystkie typu real. Należy wprowadzić wartość A oraz wartość B, a następnie wypisywać wartości od A co KROK w zwyż tak aby nie przekroczyć B. Mam zrobić to zadanie za pomocą WHILE i UNTIL.
No więc wydziargałem sobie prosty bzdet:
PROGRAM petla;
USES CRT;
VAR
i,a,b,k:real;
BEGIN
CLRSCR;
REPEAT
WRITE('Podaj a: '); READLN(a);
WRITE('Podaj b: '); READLN(b);
if a>=b THEN
WRITELN('Zmienna a musi byc mniejsza od zmiennej b !') ;
UNTIL a<b;
REPEAT
WRITE('Podaj krok narastania: '); READLN(k);
if k<=0 THEN
WRITELN('Krok narastania musi byc liczba dodatnia!');
UNTIL k>0;
WRITELN('Pokazuje petle REPEAT');
i:=a;
REPEAT
WRITELN(i:3:3);
i:=i+k;
UNTIL i>b;
WRITELN('Nacisnij dowolny klawisz aby kontynuowac...'); READKEY;
i:=a;
WRITELN('Pokazuje petle WHILE');
WHILE i<=b DO
BEGIN
WRITELN(i:3:3);
i:=i+k;
END;
WRITELN('Nacisnij dowolny klawisz aby kontynuowac...'); READKEY;
END.
Jednak mam pewną wątpliwość. Program działa na pozór dobrze:
Podaj a: 0
Podaj b: 5
Podaj krok narastania: 1
Pokazuje petle REPEAT
0.000
1.000
2.000
3.000
4.000
5.000
Nacisnij dowolny klawisz aby kontynuowac...
Pokazuje petle WHILE
0.000
1.000
2.000
3.000
4.000
5.000
Nacisnij dowolny klawisz aby kontynuowac...
Wypisał idealnie tak jak chciałem. To samo w przypadku:
Podaj a: 3
Podaj b: 4
Podaj krok narastania: 0.3
Pokazuje petle REPEAT
3.000
3.300
3.600
3.900
Nacisnij dowolny klawisz aby kontynuowac...
Pokazuje petle WHILE
3.000
3.300
3.600
3.900
Nacisnij dowolny klawisz aby kontynuowac...
Ale dziwactwa zaczynają się tutaj:
Podaj a: 1
Podaj b: 2
Podaj krok narastania: 0.01
Pokazuje petle REPEAT
1.000
1.010
....
Tu wycinam
....
1.980
1.990
Nacisnij dowolny klawisz aby kontynuowac...
Wycinku z WHILE już nie wklejam, bo wychodzi dokładnie tak samo jak w przypadku REPEAT. Dlaczego nie wyświetla 2.000 ? Skoro w przypadku innych liczb (na innych normalnie działa, problem zauważyłem z 0.01 jako krok) gdy wynik "i" jest równe wartości B to jeszcze wyświetla?
Dziwne jest to, że teraz według matematyki powinno "i" mieć wartość 2 więc w zakresie nadal się mieści więc powinno zostać wyświetlone. Nie wiem czy gdzieś zrobiłem błąd (ale gdzie skoro w przypadku innych liczb działa ok?). Możecie mi pomóc? Z góry dziękuje.