16.06.2015 Views

Wykład 4

Wykład 4

Wykład 4

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

●<br />

●<br />

TYPY PROSTE<br />

typy rzeczywiste<br />

(Real, Single, Double, Extended, Comp)<br />

typy porządkowe:<br />

● typy całkowite<br />

(Integer, ShortInt, Byte, Word, LongInt)<br />

● typ logiczny (Boolean)<br />

● typ znakowy (Char)<br />

● typ wyliczeniowy<br />

● typ okrojony


ZAKRESY TYPÓW<br />

ShortInt -128 127 1 bajt<br />

Byte 0 255 1 bajt<br />

Integer -32768 32767 2 bajty<br />

Word 0 65535 2 bajty<br />

LongInt -2147483648 2147483647 4 bajty<br />

Real 2.9e-39 1.7e38 6 bajtów<br />

Single 1.5e-45 3.4e38 4 bajty<br />

Double 5.0e-324 1.7e308 8 bajtów<br />

Extended 3.4e-4932 1.1e4932 10 bajtów<br />

Comp -9.2e18 9.2e18 8 bajtów


DEFINICJE TYPÓW<br />

type<br />

nazwa_typu_1 = opis_typu_1;<br />

nazwa_typu_2 = opis_typu_2;<br />

...<br />

nazwa_typu_n = opis_typu_n;<br />

W Pascalu możemy definiować własne typy.<br />

Definicje typów umieszczamy pomiędzy<br />

deklaracjami modułów i częścią wykonawczą<br />

programu (część wykonawcza programu zaczyna<br />

się od słowa begin i kończy słowem end)


DEFINICJE TYPÓW c.d.<br />

Przykład:<br />

program moje_nazwy_typów;<br />

uses crt;<br />

type<br />

tab10x10int = array [1..10, 1..10] of integer;<br />

l_calkowite = integer;<br />

l_rzeczywiste = real;<br />

var<br />

tab : tab10x10int;<br />

tab2 : array [1..5] of l_calkowite;<br />

liczba : l_rzeczywiste;<br />

liczba2 : real;<br />

begin


TYP WYLICZENIOWY<br />

type identyfikator_typu = (lista_identyfikatorów);<br />

Zbiór wartości typu wyliczeniowego tworzą<br />

identyfikatory wymienione na liście<br />

identyfikatorów (oddzielone przecinkami)<br />

Przykłady:<br />

type miesiace = (styczen, luty, marzec, kwiecien, maj,<br />

czerwiec, lipiec, sierpien, wrzesien,<br />

pazdziernik, listopad, grudzien);<br />

tydzien = (poniedzialek, wtorek, sroda, czwartek,<br />

piatek, sobota, niedziela);


TYP OKROJONY<br />

type identyfikator_typu = stala1 .. stala2;<br />

Typ okrojony służy do ograniczania zakresu<br />

wartości dowolnego typu porządkowego do<br />

wartości zawartych w przedziale<br />

. Typ porządkowy, którego<br />

zakres ograniczamy nazywamy typem bazowym.<br />

Obie stałe muszą być tego typu.<br />

Przykłady:<br />

type dni_robocze = poniedzialek .. piatek;<br />

litery = 'a' .. 'z';<br />

od_0_do_100 = 0 .. 100;


program typy;<br />

type<br />

kolory = (k_bialy, k_czarny, k_czerwony,<br />

k_zielony, k_niebieski, k_zolty,<br />

k_rozowy, k_pomaranczowy);<br />

kolory_rgb = k_czerwony .. k_niebieski;<br />

var<br />

wybrany : integer;<br />

kolor1 : kolory;<br />

kolor2 : kolory_rgb;<br />

begin<br />

write ('Wybierz pierwszy kolor: ');<br />

readln (wybrany);<br />

case wybrany of


1 : kolor1 := k_bialy;<br />

2 : kolor1 := k_czarny;<br />

3 : kolor1 := k_czerwony;<br />

4 : kolor1 := k_zielony;<br />

5 : kolor1 := k_niebieski;<br />

6 : kolor1 := k_zolty;<br />

7 : kolor1 := k_rozowy;<br />

8 : kolor1 := k_pomaranczowy;<br />

else : kolor1 := k_bialy;<br />

end;<br />

if kolor1 = k_niebieski then<br />

writeln ('Wybrałeś niebieski kolor');<br />

readln;<br />

end.


TYP ŁAŃCUCHOWY<br />

type identyfikator_typu = string [rozmiar];<br />

type identyfikator_typu = string;<br />

Zbiorem wartości typu string są napisy długości<br />

nie większej niż podany rozmiar. Jeśli nie został<br />

podany rozmiar, to domyślnie wynosi on 255- to<br />

największa liczba znaków, jaką może zawierać<br />

napis. Zmienna typu string zajmuje w pamięci<br />

tyle bajtów, ile wynosi podany rozmiar plus jeden<br />

dodatkowy bajt, w którym pamiętana jest<br />

faktyczna długość przechowywanego napisu.


program napisy;<br />

type krotki_napis = string [20];<br />

dlugi_napis = string [40];<br />

var<br />

imie : krotki_napis;<br />

nazwisko : dlugi_napis;<br />

adres : string [100];<br />

begin<br />

write ('Podaj swoje imię: '); readln (imie);<br />

write ('Podaj swoje nazwisko: '); readln (nazwisko);<br />

writeln ('Nazywasz się: ', imie, ' ', nazwisko);<br />

writeln ('Dlugość Twojego imienia: ', length (imie));<br />

writeln ('Dlugość nazwiska: ', length (nazwisko));<br />

end.


OPERACJE NA NAPISACH<br />

● a + b konkatenacja a i b (łączenie napisów)<br />

● a = b, a b a równe b, a różne od b<br />

● a < b, a b, a >= b a większe b, a większe równe b<br />

Wynik porównania dwóch napisów jest<br />

wynikiem porównania dwóch pierwszych<br />

różniących się znaków w tych napisach. Jeśli<br />

wszystkie kolejne znaki są równe, ale napis a jest<br />

krótszy od napisu b, to mniejszy jest napis a.


OPERACJE NA NAPISACH c.d.<br />

Przykłady<br />

wyr := 'abc' 'ABC'; {True}<br />

wyr := 'M'+'ar'+'ek' = 'Marek'; {True}<br />

wyr := 'abc' < 'abcd'; {True}<br />

wyr := 'abce' > 'abcd'; {True}<br />

wyr := 'Ela' < 'Ola'; {True}<br />

wyr := 'sosna' > 'solna'; {True}


TYP ZBIOROWY<br />

type nazwa_typu = set of typ_porzadkowy;<br />

Zbiorem wartości typu zbiorowego są wszystkie<br />

podzbiory typu_porzadkowego w tym zbiór pusty<br />

Typ_porzadkowy, który jest typem bazowym typu<br />

zbiorowego może zawierać nie więcej niż 256<br />

elementów, których liczby porządkowe muszą<br />

zawierać się w przedziale <br />

Wartości typu zbiorowego zapisujemy, wypisując<br />

w nawiasach kwadratowych elementy zbioru<br />

oddzielone przecinkami.


OPERACJE NA ZBIORACH<br />

● a + b suma zbiorów a i b<br />

● a – b różnica zbiorów a i b<br />

● a * b iloczyn zbiorów a i b<br />

● a = b równość zbiorów a i b<br />

● a b różność zbiorów a i b<br />

● a = b zawieranie zbioru b w zbiorze a<br />

● el in a przynależność el do zbioru a


program zbiory;<br />

type<br />

dni_t = (pn, wt, sr, czw, pt, sob, nd);<br />

zb_dni_t = set of dni_t;<br />

var<br />

dni, dni_wsz : zb_dni_t;<br />

m_wolne, n_wolne, wolne, spokoj : zb_dni_t;<br />

dzien : dni_t;<br />

moje_dni_prac, jej_dni_prac : set of pn .. sob;<br />

begin<br />

dni := [pn, sr, pt]; dzien := nd;<br />

moje_dni_prac := [pn..czw]; jej_dni_prac := [wt..pt];<br />

dni_wsz := [pn, wt, sr, czw, pt, sob, nd];<br />

m_wolne := dni_wsz – moje_dni_prac;


n_wolne :=dni_wsz–(moje_dni_prac+jej_dni_prac);<br />

wolne := dni_wsz-(moje_dni_prac*jej_dni_prac);<br />

spokoj := (dni_wsz-moje_dni_prac)*jej_dni_prac;<br />

if pn in wolne then<br />

writeln ('W poniedziałek masz wolne.');<br />

if spokoj = [] then<br />

writeln ('To dobrze czy zle???');<br />

if moje_dni_prac


program kalendarz;<br />

var rok : integer;<br />

begin<br />

readln (rok);<br />

if rok > 1582 then<br />

if (rok mod 4 = 0) and (rok mod 100 0)<br />

or (rok mod 400 = 0) then<br />

writeln (rok, ' jest rokiem przestępnym')<br />

else<br />

writeln (rok, ' jest rokiem zwyklym')<br />

else<br />

writeln ('Obowiązywał kalendarz juliański');<br />

readln;<br />

end.


Inny sposób na sprawdzanie “przestępności” roku:<br />

if rok > 1582 then<br />

if rok mod 400 = 0 then<br />

writeln (rok, ' jest rokiem przestępnym')<br />

else<br />

if rok mod 100 = 0 then<br />

writeln (rok, ' jest rokiem zwykłym')<br />

else<br />

if rok mod 4 = 0 then<br />

writeln (rok, ' jest rokiem przestępnym')<br />

else<br />

writeln (rok, ' jest rokiem zwykłym')<br />

else<br />

writeln ('Obowiązywał kalendarz juliański');

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!