program cw3_41;
{ Program czyta kolejne liczby i liczy ich sumę, }
{ az do napotkania liczby 0. }
{ Katalog r3_09 : 3_41.pas }
const
Suma : Real - 0; var
Liczba : Real;
begin
repeat
Write ('Dotychczasowa suma: Suma:10:2, Podaj liczbę: ');
Readln (Liczba);
Suma Suma + Liczba until (Liczba - 0);
Writeln; Writeln ('Całkowita suma: ', Suma:10:2);
Readln; end.
liczba, która miała być ogranicznikiem, została także dodana do naszej sumy. Na szczęście było to 0. Gdybyśmy jednak chcieli ustalić ogranicznik innej wartości, powinniśmy zapobiec uwzględnieniu go w sumie (albo poprzez instrukcję warunkową, która przed sumowaniem sprawdzałaby, czy liczba nie jest ogranicznikiem, albo poprzez odjęcie .iczby po wyjściu z pętli]. Spróbuj poprawić program przy założeniu, że ogranicznikiem jest liczba -1 na oba sposoby.
Ihcesz zobaczyć, jak komputer oszukuje? Spróbuj wpisać liczbę 13-cyfrową. Zobacz, aką sumę podał komputer. Dodaj 1. Straszne, prawda? To są właśnie błędy zaokrągleń. Zobacz, ile maksymalnie cyfr pamięta zmienna typu Real. To trochę wyjaśnia. Ale zawsze trzeba to mieć na uwadze.
IC Z E N I E
Program jest zapisem schematu zmodyfikowanego algorytmu Euklidesa z ćwiczenia 1.3, .ctórego schemat blokowy został zaprezentowany w ćwiczeniu 2.1. Ponieważ sprawdzanie warunku odbywa się na początku, możemy wykorzystać pętlę while... do.
program cw3_42;
{ Program znajduje największy wspólny dzielnik A i B. }
{ Katalog r3_09 : 3_42.pas }
var
A, B, Pom : Integer; begin
Write ('Podaj A: '); Readln (A);
Write ('Podaj B: '); Readln (B);
Write ('NWD (', A, *, ', B, ') = ');
while (A<>B) do
begin
if A<B then begin
Pom := A; A :== B; B : - Pom; end;
A := A - B; end;
Writeln (A);
Readln; end.