30 (552)

30 (552)



begin

Write ('Podaj liczbę: '); Readln (N);

Silnia 1; for I 1 to N do Silnia Silnia * I;

Writeln (N, '! — ‘, Silnia);

Readln; end.

No dobrze. A czemu nie sprawdzamy, czy N nie jest równe 0 i nie wypisujemy wtedy osobno wyniku? Prześledźmy program: ustalamy, że pierwsza wartość silni to 1. Zmieniamy ją w pętli, mnożąc przez kolejne liczby. Ile razy wykona się pętla dla N = 0? Ani razu — będzie to pętla „w górę” od 1 do 0 — żadna liczba nie należy do takiego przedziału, więc instrukcje w pętli się nie wykonają. Pozostanie nam wynik Silnia = 1, który jest dla 0 prawdziwy. (W rzeczywistości ponieważ l! jest też równe 1, można by w pętli liczbę początkową ustalić na 2, a nie 1, i program też działałby poprawnie!).

Uwaga tycząca się zakresu przytoczona w poprzednim ćwiczeniu ma też zastosowanie tu. Funkcja rośnie bardzo szybko i dla niewielkich wartości przekroczy zakres zmiennej Silnia (pomimo że jest ona zadeklarowana jako Longint).

• I C Z E N I E

3.38


Określanie liczb pierwszych

Napisz program, który sprawdzi, czy N jest liczbą pierwszą. Wykorzystaj pierwszą, najprostszą wersją algorytmu z ćwiczenia 1.10.

program cw3_38;

{ Program sprawdza, czy liczba N jest pierwsza. } { Katalog r3_08 : 3_38.pas    }

var

N, I : Longint;

Pierwsza : Boolean;

begin

Write ('Podaj liczbę: '); Readln (N); if (N<1) then

Writeln ('To pojecie nie ma zastosowania dla', N, '.') else

if (N-l) then

Writeln ('Liczba 1 nie jest ani pierwsza, ani zlozona.') else begin

Pierwsza True; for I :- 2 to N-l do

if Pierwsza then

if (N mod I-O) then Pierwsza :- False; if Pierwsza then

Writeln ('Liczba ’, N, ' jest pierwsza.') else

Writeln ('Liczba ', N, ' nie jest pierwsza.')

end;

Readln; end.

Kilka słów wyjaśnienia. Dla niskich wartości program działa poprawnie. Jeżeli jednak chcesz sprawdzić na przykład liczbę 9-cyfrową, to... przerwać działanie programu możesz, wciskając kombinację Ctrl+Break. Program w najprostszej wersji sprawdza podzielność


Wyszukiwarka

Podobne podstrony:
PLD24 ; Ponowne uaktywnienie zliczania SETF ENA FOR X:=0 TO 9 DO BEGIN CLOCKF CLK END TRACE_OFF FOR
47 (361) begin Write ( Podaj X: ); Readln (X); Write ( Podaj Y: ); Readln (Y); ZamienZmienne (X, Y
44 (399) else end; { PotegaCalkowita A * Sqr (PotegaCalkowita (A, N div 2)) PotegaCalkowita -} begin
img171 171 12.1. Parsing ekspansywnych języków grafowych procedurę ExpRec (var rec); begin for i :=
img171 171 12.1. Parsing ekspansywnych języków grafowych procedurę ExpRec (var rec); begin for i :=
obraz0 (84) Analiza algorytmu Algorytm begin for i:= 1 to n do for j := 1 to n do begin end k:= I t
Program sekwencyjny begin for i:=l to n do read(a[k]); sort(1,n); for k:=l to n do
89417 zdj3 (4) Praktyczne sposoby optymalizacji Ograniczanie liczby pętli for i := 1 to n do write(
fragment programu dla tablicy F indeksowanej od 1 do N j:=1; for i:=1 to N do begin if j>i
begin for i:=l to n do for j:=1 to n do begin s:=0; for t:=l to n do s:=s+A[i,t]*B[t,j]
Sortowanie proste Procedurę prostewybieranie; Var i,j,k : indeks; x:obiekt; Begin For I:=l to n-1 do
return 1; else return n*silnia(n-1); > int mainO { int n; std::cout << "Podaj liczbę:
img072 (30) 4.4. Jak sobie poradzić z większą liczbę wejść neuronu? Przytoczone wyżej przykłady były
Podaj liczbę kolumn:    4 0.8147

więcej podobnych podstron