cw08 pas2

background image

Ć

w. 8 Programowanie Pascal (2) - obliczenia numeryczne

Pętla warunkowa

while.. do...

(dopóki .. wykonuj..)

Postać ogólna instrukcji:

while

W

B

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 y i k w 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

4

=

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) ;

{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 tangens, cotangens, logarytm
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).


Wyszukiwarka

Podobne podstrony:
Cw08 Matlab2
cw08
instrukcja cw08
Cw08 2, Akademia Morska, 1 rok, Fizyka, FIZYKA1, fiza
mamet cw08, WYDZIAŁ INŻYNIERII PRODUKCJI
IB cw08
C16 2005 cw08
GW CW08 B TRANSP
ELEKTRONIKA cw08 (1)
cw08
cw08-1, Studia, Pracownie, I pracownia, 8 Badanie zjawiska rezonansu mechanicznego, 8 Piotr Ludwikow
Cw08 MK2 Operacje 8051
Urz Zew Cw08
cw08 pliki cwo08
Cw08
cw08

więcej podobnych podstron