background image

Ć

w. 8 Programowanie Pascal (2) - obliczenia numeryczne 

Pętla warunkowa 

while.. do...

 (dopóki .. wykonuj..) 

Postać ogólna instrukcji: 

while 

W

do

 

   instrukcja; 

Instrukcja  wewnętzna  (także  sekwencji  –  instrukcje  otoczone  słowami  kluczo-

wymi begin i end) jest wykonywana wielokrotnie, dopóki wyrażenie logiczne W

B

 jest 

prawdą. Tak jak w "pętli" repeat  instrukcje muszą mieć wpływ na wartość W

B

, tak 

aby pętla kiedyś się skończyła. 

W pętli while instrukcje są ponawiane gdy warunek jest prawdziwy, w odróżnie-

niu  od  pętli  repeat,  w  której  prawdziwość  warunku  wymusza  zakończenie  iteracji. 
W "pętli" while warunek jest sprawdzany przed wykonaniem instrukcji – w pętli re-
peat
 jest sprawdzany po jej wykonaniu. 

Przykład: 
 

y:= 5; 

 

while y>1 do 

 

   begin 

 

     

y:= y–0.5; 

 

     y:= y*0.1; 

 

  end; 

Ć

wiczenie 

Sprawdzi

ć

 powy

ż

szy przykład, wykonuj

ą

c program krokowo (F7). Wyprowa-

dza

ć

 warto

ś

ci zmiennych ka

ż

dym kroku p

ę

tli oraz po jej zako

ń

czeniu 

wykorzystuj

ą

c procedur

ę

 write.

 

Wyrażenia arytmetyczne

  

Służą  one  do  zapisu  wykonywania  operacji  obliczeniowych  w  trakcie  przebiegu 

programu. Wyrażeniem arytmetycznym  może być stała, zmienna lub zapis złożonej 
operacji na stałych, zmiennych i funkcjach (standardowych, bibliotecznych lub wła-
snych  użytkownika)  z  użyciem  operatorów  arytmetycznych.  Ponadto  używamy  na-
wiasów (tylko okrągłych!) w celu zmiany kolejności działań. 

Definicja wyrażenia

 

ma postać:

 

wyrażenie = stała 
wyrażenie
 = zmienna 
wyrażenie
 = identyfikator_funkcji (wyrażenie
wyrażenie
 = wyrażenie operator wyrażenie 

Z definicji wynika, że wyrażenia po prawej stronie mogą mieć każdą z postaci de-

finiowanych, a zatem np. argument funkcji może być np. inną funkcją (tzw. zagnież-
dżanie funkcji), a  operatorami można łączyć wiele wyrażeń. 

Wyrażenia używane są najczęściej w instrukcjach przypisania po prawej stronie 

operatora przypisania :=  

dopóki” ...„wykonuj” 

background image

Operatory arytmetyczne 

 

Rozróżniamy następujące operatory: 

 

jednoargumentowe 

– 

zmiana znaku, 

powielenie znaku, 

 

dwuargumentowe 

o

 

multiplikatywne 

  mnożenie, 

  dzielenie (rzeczywiste), 

div■  dzielenie całkowite (obydwa argumenty operacji muszą być 

całkowite, wynik jest całkowity), 

mod■    reszta z dzielenia całkowitego (jak wyżej), 

(znak ■ przedstawia spację),

 

o

 

addytywne 

+  dodawanie, 
–  odejmowanie. 

Kolejność wykonywania operacji określają następujące reguły: 

 

Wyrażenia w nawiasach wykonywane najwcześniej (od najbardziej wewnętrz-
nych), 

 

Kolejność operacji (od najwcześniej wykonywanych): 

1. jednoargumentowe, 
2. multiplikatywne, 
3. addytywne. 

UWAGA:  

 

Dla operatorów tej samej wagi - kolejność działań od lewej do prawej. 

 

Jeżeli w wyrażeniu są tylko argumenty całkowite i nie ma dzielenia rzeczywiste-
go (/) to wynik jest typu integer

 

Jeżeli występuje chociaż jeden element typu real lub dzielenie rzeczywiste to wy-
nik jest typu real

Funkcje standardowe 

Istnieje możliwość użycia w wyrażeniu funkcji standardowych (w kontekście 

identycznym jak zmienne proste) w postaci: 

identyfikator_funkcji (argument

Argumentem  może  być  wyrażenie  odpowiedniego  typu.  Zestaw  funkcji  standar-

dowych przedstawia tabela: 

background image

Funkcje standardowe 

Znaczenie 

Nazwa 

funkcji 

Typ wyniku 

Typ 

argumentu 

Przykład 

wartość 
bezwzględna 

abs 

całkowity 
rzeczywisty 

całkowity 
rzeczywisty 

abs(-2)  

pierwiastek 
kwadratowy 

sqrt 

rzeczywisty  rzeczywisty  sqrt(5.45) 

kwadrat  

sqr 

rzeczywisty  rzeczywisty  sqr(x-5) 

e

x

 

exp 

rzeczywisty  rzeczywisty  exp(-x/2) 

logarytm 
naturalny 

ln 

rzeczywisty  rzeczywisty  ln(2*x-4) 

sinus 

sin 

rzeczywisty 

rzecz. (ra-
diany) 

sin(3*alfa) 

cosinus 

cos 

rzeczywisty 

rzecz. (ra-
diany) 

cos(beta/2) 

arcus tangens  arctan  rzeczywisty  rzeczywisty  arctan(fi) 
część całko-
wita 

int 

rzeczywisty 

całkowity 
rzeczywisty 

int(2.5)  

część 
ułamkowa 

frac 

rzeczywisty 

całkowity 
rzeczywisty 

frac(3.6)  

zaokrąglenie  round  całkowity 

rzeczywisty  round(3.6)  

obcięcie 

trunc 

całkowity 

rzeczywisty  trunc(3.6)  

znak następ-
ny  

succ 

porządkowy  porządkowy  succ ( 

'

g

)  

znak po-
przedni  

pred 

porządkowy  porządkowy  pred( 

'

j

)   

znak 
o podanym 
kodzie 
ASCII 

chr 

znakowy 

całkowity 

chr(49)   

kod znaku 

ord 

całkowity 

znakowy 

ord( 

'

1

)  

długość tek-
stu 

length  łańcuchowy  całkowity 

length( 

'

alfa

)  

W wyrażeniach istotne są wszelkie ograniczenia obszaru określoności funkcji, np. 

użycie ln(-3), sqrt(-5.0) spowoduje błędy wykonania. 

Brak w języku operatora lub funkcji standardowej potęgowania, stąd stosuje się: 

 

x

x*x*x*x 

lub 

sqr (x)*sqr (x)   

lub 

 

sqr (sqr (x)), 

Można wykorzystac funkcję: 

power(podstawa,wykładnik) 

jej użycie wymaga dopisania deklaracji modułu Math w sekcji uses

uses sysutils,math; 
begin 

writeln( power(5.1, 3.7); 
readln; 

end. 

background image

Brak w języku również innych, często potrzebnych funkcji, jak na przykład tan-

gens  czy  logarytm  dziesiętny.  Trzeba  wówczas  korzystać  z  elementarnych  wzorów 
matematycznych: 

log ݔ =

୪୬ ௫

௟௡ଵ଴

 

tg ݔ =

ୱ୧୬ ௫

ୡ୭ୱ ௫

 

Należy zwrócić uwagę na możliwość wystąpienia przekroczenia dopuszczalnych 

zakresów wartości zmiennych przy obliczeniach. 

Poniższe wyrażenie w postaci matematycznej: 

 

można zapisać w przykładowej postaci 

1/(2*pi)*sin(3*x-3)

 

 

lub   

1/2/pi*sin(3*x-3) 

W przypadku zastosowania w instrukcji przypisania wyrażenia zawierającego 

zmienną, której aktualnie przypisujemy wartość, np.: 

x := x + 5 ; 

obliczana jest wartość wyrażenia (wartość x powinna być wcześniej określona), 
a następnie uaktualniana wartość zmiennej, np. w ciągu instrukcji: 

... 

x := 5 ; 
x := sqr(x) ;

 

{b

ę

dzie równe 25}

 

x := x +2 ;

 

{powi

ę

kszenie poprzedniej warto

ś

ci x o 2, x  b

ę

dzie równe  27} 

... 

Funkcje standardowe nie wymagają deklaracji ich użycia. 

Pisząc wyrażenie należy szczególnie uważać na: 

-

 

operatory arytmetyczne – szczególnie mnożenia: 

2*x

, a nie 2x

-

 

format wykładniczy – np.

1.34E-8

  (10

7

 to 1e7 a nie e7), 

-

 

argumenty funkcji trygonometrycznych – podajemy je w radianach, w przypadku 
konieczności używania kąta w stopniach należy przeliczyć kąt na radiany wyra-
ż

eniem stopnie*pi/180, (pi jest predefiniowaną nazwą stałej). 

-

 

hierarchię działań – odpowiednie stosowanie nawiasów, 

-

 

brak w języku operacji potęgowania, brak funkcji tangenscotangenslogarytm 
dziesiętny, 

-

 

różnicę między funkcjami o podobnych nazwach – sqr i sqrt

Wyrażenia logiczne 

Wyrażeniem logicznym może być: 

1. stała logiczna: true

prawda,  false

fałsz  

2. zmienna typu boolean
3. porównanie w sensie liczbowym lub tekstowym (kolejności alfabetycznej) 

według schematu: 
wyrażenie

1  

operator  wyrażenie

2

 

Porównanie ma wartość logiczną true lub false. Operatorami porównań są: 

<

 

<= 

>= 

< > „różny” 

Przykłady porównań: 

)

3

x

3

sin(

2

1

π

background image

 

x12 2   

 

(4*x+1.5) 30.7 
nazwisko >= 'G'   

{nazwiska od litery G do ko

ń

ca alfabetu} 

4. stałe logiczne, zmienne logiczne, porównania (w nawiasie!), połączone 

operatorami logicznymi

- jednoargumentowymi: 

not(negacja) 

 

 

np.  

not(i < 5)

 

 

 

- dwuargumentowymi: 

and  (iloczyn logiczny –

"

i

 

jednoczesne

 

spełnienie

 

warunków)  

 

np.  

(x > 0) and (x < 3)

 

or   (suma logiczna –

"

lub

 

alternatywne spełnienie warunków) 

 

np.  

(x <= 0) or (x >= 100)

 

Poniższa tabela przedstawia wartości wyrażeń logicznych w zależności od wartości 

argumentów: 

Argument 1 

Argument 2 

and 

or 

false 

false 

false 

false 

true 

false 

false 

true 

false 

true 

false 

true 

true 

true 

true 

true 

Wartość wyrażenia logicznego można przypisać zmiennej typu boolean bądź 

użyć je w instrukcjach warunkowych lub pętlach repeat i while. Efektem wypisania 
na ekranie wyrażenia logicznego lub zmiennej logicznej będzie wartość true lub fal-
se.
 Przykładowe użycie w programie: 

var zm1, zm2: boolean
 

x:real; 

begin 
  readln(x); 
  if (x>0) and (x<100) then  

writeln ('cos tam. . . '); 

  zm1:= not (x>sin(x));  
  zm2:= (x>0) and (x<>35); 
  writeln(zm2); 
  readln; 
end. 

Ć

wiczenie 

1.

 

Napisać program, w  którym dla podanej wartości 

x

 (np. x=3.45) obliczane są 

wartości następujących wyrażeń oraz wyprowadzane wyniki na ekran konsoli 
(wykorzystać tabelę funkcji standardowych ): 

2sin 2x

2

 

3e

-2x

 cos

3

3x

3

 

ctg (x-30

o

) 10

-7

 

 

 

 

)

3

x

3

sin(

1

π

4

2

x

tg

5

x

4

x

56

,

4

x

3

cos

x

x

log

2

2

+

background image

2.

 

Napisać  program  obliczający  wynik  dzielenia  całkowitego  liczby  3456  przez 
17 oraz resztę z tego dzielenia. 

3.

 

Napisać program, w którym wymagane jest wprowadzenie przez użytkownika 
liczby rzeczywistej, a następnie sprawdzana jest przynależność podanej liczby 
do przedziału (0,  10). 

4.

 

Napisać program, w którym: 

a)

 

użytkownik podaje wartość początkową zmiennej

 

x

b)

 

w  "pętli"  while..do..  warunek  sprawdza  czy  wartość

 

x

 

jest  większa  od 

0.0001 i jeśli tak, to aktualne

 

x

 

jest dzielone przez 3, 

c)

 

program oblicza i wyświetla liczbę wykonanych dzieleń oraz wartość koń-
cową

 

x

 

(zastosować  zmienną  typu  całkowitego  licznik,  powiększaną  o  1 

wewnątrz pętli). 

5.

 

Napisać  program,  w  którym  użytkownik  podaje  dowolne  nazwisko,  program 
wyświetla  długość  (liczbę  znaków)  nazwiska  (zastosować  zmienną  typu 
string). 

6.

 

Napisać program,  w  którym  użytkownik podaje dwa  dowolne  nazwiska,  pro-
gram podaje informację które nazwisko jest wcześniej w alfabecie (zastosować 
porównanie dwóch zmiennych typu string). 

7.

 

Napisać  program,  w  którym  znajdujemy  kod  ASCII  wpisanego  przez  użyt-
kownika znaku. Wyświetlanie kodów wpisywanych znaków odbywa się w pę-
tli, której warunkiem zakończenia jest  wpisanie znaku '0'. (zastosować zmien-
ną typu char)