Konspekt z przedmiotu Programowanie strukturalne
Temat: Typy danych w Pascalu.
Prowadz膮cy: in偶. Marek Pude艂ko
Klasa I SP, specjalno艣膰 technik Informatyk
Lekcja odby艂a si臋
Czas zaj臋膰: 2 x 45 minut.
Cele dydaktyczne:
Zapoznanie z podstawami programowania w Pascalu.
Nabranie odpowiednich nawyk贸w programowania.
Wypracowanie ergonomicznych zasad pracy z komputerem.
Poznanie typ贸w danych w Pascalu.
Zapoznanie z reprezentacj膮 liczb w Pascalu.
Cele operacyjne:
Po zaj臋ciach s艂uchacze powinni:
Umie膰 rozr贸偶ni膰 poszczeg贸lne typy danych.
Poprawnie nazywa膰 przyk艂ady r贸偶nych liczb i zmiennych w programie.
Zmodyfikowa膰 gotowy kod programu.
艢rodki dydaktyczne: komputer z edytorem Turbo Pascal 7.0, tablica, karteczki z programem.
Metody: wyk艂ad, praca z komputerem, praca z tablic膮, praca samodzielna.
Formy: praca z zespo艂em klasowym, praca indywidualna s艂uchacza
Przebieg lekcji:
1) Cz臋艣膰 wst臋pna:
powitanie
sprawdzenie listy obecno艣ci
2) Lekcja w艂a艣ciwa:
Przypomnienie wiadomo艣ci. Jaka jest r贸偶nica mi臋dzy liczbami ca艂kowitymi a rzeczywistymi? Om贸wi膰 Kod dw贸jkowy, 贸semkowy i szesnastkowy. Spos贸b reprezentacji liczb w pami臋ci komputera. Poj臋cie zmiennej i poj臋cie typu.
Informacja. Z poj臋ciem zmiennej 艣ci艣le 艂膮czy si臋 poj臋cie typu. M贸wimy, 偶e zmienna jest pewnego typu. Znaczy to tyle, 偶e mo偶e ona przyjmowa膰 warto艣ci dopuszczalne dla tego typu. zmienne s膮 wykorzystywane w ka偶dym j臋zyku programowania.
Deklarujemy je w nag艂贸wku poprzedzaj膮c s艂owem kluczowym var (od variable) - zmienna.
Przyk艂adowa deklaracja.
var x : integer:
deklaracja nazwa zmiennej : typ zmiennej;
Informacja. Typy w Pascalu dzielimy na proste, 艂a艅cuchowe, strukturalne, wska藕nikowe, proceduralne i obiektowe.
Informacja. Liczby w komputerze s膮 reprezentowane za pomoc膮 bit贸w. W zale偶no艣ci od ilo艣ci bit贸w s艂owo mo偶e mie膰 r贸偶n膮 d艂ugo艣膰. Oznacza to, 偶e liczba mo偶e mie膰 r贸偶ny zakres, jak zajmowa膰 niejednakow膮 ilo艣膰 miejsca w pami臋ci. Zale偶no艣膰 jest prosta: im wi臋cej ma bit贸w, tym wi臋kszy zakres, ale zajmuje wi臋cej miejsca w pami臋ci komputera. Dlatego wyr贸偶niamy kilka typ贸w ka偶dego rodzaju liczb.
Informacja. Typy ca艂kowite (bez przecinka):
Liczby bez znaku
Ten typ danych odpowiada kodowaniu warto艣ci ca艂kowitych w naturalnym kodzie dw贸jkowym.
byte
1-bajtowa liczba ca艂kowita bez znaku (8 bit贸w).
Zakres od 0 do 28 - 1 (255).
word
2-bajtowa liczba ca艂kowita bez znaku (16 bit贸w).
Zakres od 0 do 216 - 1 (65535).
Liczby ze znakiem
Ten typ danych odpowiada kodowaniu warto艣ci ca艂kowitych w kodzie uzupe艂nieniowym do 2 - U2.
shortint
1-bajtowa liczba ca艂kowita ze znakiem w kodzie U2 (8 bit贸w).
Zakres od -27 (-128) do 27 - 1 (127).
integer
2-bajtowa liczba ca艂kowita ze znakiem w kodzie U2 (32 bity).
Zakres od -215 (-32768) do 215 - 1 (32767)
longint
4-bajtowa liczba ca艂kowita ze znakiem w kodzie U2 (32 bity).
Zakres od -231 (-2147483648) do 231 - 1 (2147483647)
Typy ca艂kowite - zestawienie (dla wszystkich j臋zyk贸w Pascal) |
|||||
bez znaku - NBC |
|
Zakres |
ze znakiem - U2 |
|
Zakres |
byte |
8b - 1B |
0...28-1 |
shortint |
8b - 1B |
-27...27-1 |
word |
16b - 2B |
0...216-1 |
smallint |
16b - 2B |
-215...215-1 |
longword |
32b - 4B |
0...232-1 |
longint |
32b - 4B |
-231...231-1 |
|
|
|
int64 |
64b - 8B |
-263...-1 |
cardinal |
32b - 4B |
0...232-1 |
integer |
32b - 4B |
-231...231-1 |
膯wiczenie. Uczniowie otrzymuj膮 karteczki z kodem programu, kt贸ry przypisuj膮.
program zakres_liczb;
var a,b:integer;
c:integer;
d: longint;
e: shortint;
f: byte;
g: word;
begin
writeln ('Program demonstrujacy bledy w obliczaniu zakresu liczb ');
writeln ('podaj pierwsza liczbe do dodania: ');
readln(a);
writeln ('podaj druga liczbe do dodania: ');
readln(b);
c:=a+b;
d:=a+b;
e:=a+b;
f:=a+b;
g:=a+b;
writeln ('Suma wynosi : ',c,' (typ integer - zakres -32768 .. 32767)');
writeln ('Suma wynosi : ',d,' (typ longint)');
writeln ('Suma wynosi : ',e,' (typ shortint zakres -128 .. 127)');
writeln ('Suma wynosi : ',f,' (typ byte - zakres 0 .. 255)');
writeln ('Suma wynosi : ',g,' (typ word - zakres 0 .. 65535)');
readln;
end.
Sprawdzaj膮, jak dla kolejnych zakres贸w liczb, nast臋puje przekroczenie zakresu i jak to zaburza wyniki oblicze艅.
Informacja. Typy zmiennoprzecinkowe:
Liczby ze znakiem
real
64-bitowa liczba zmiennoprzecinkowa o podw贸jnej precyzji w standardzie IEEE 754 (8 bajt贸w).
Zakres od - 1,8 10308 do 1,8 10308. Precyzja oko艂o 15...16 cyfr znacz膮cych.
Poni偶sze typy tylko w trybie 8087
single
32-bitowa liczba zmiennoprzecinkowa o pojedynczej precyzji w standardzie IEEE 754 (4 bajty).
Zakres od - 3,4 1038 do 3,4 1038. Precyzja oko艂o 7 cyfr znacz膮cych.
double
64-bitowa liczba zmiennoprzecinkowa o podw贸jnej precyzji w standardzie IEEE 754 (8 bajt贸w).
Zakres od - 1,8 10308 do 1,8 10308. Precyzja oko艂o 15...16 cyfr znacz膮cych.
comp
32-bitowa liczba
Ten typ jest typem po艣rednim pomi臋dzy liczbami ca艂kowitymi a liczbami zmiennoprzecinkowymi. Liczba typu comp traktowana jest przez koprocesor jak liczby zmiennoprzecinkowa ca艂kowita bez wyk艂adnika.
Najcz臋艣ciej typ ten stosujemy do przechowywania du偶ych warto艣ci ca艂kowitych, takich jak sumy pieni臋偶ne. W tym przypadku suma jest wyra偶ona w groszach. Aby uzyska膰 warto艣膰 w z艂ot贸wkach, dzielimy j膮 przez 100.
64-bitowa liczba ca艂kowita ze znakiem w kodzie U2. Odpowiada typowi int64.
Zakres od -263 (-9223372036854775808) do 263 - 1 (9223372036854775807).
extended
Jest to wewn臋trzny tym reprezentacji liczb zmiennoprzecinkowych w koprocesorze arytmetycznym. Aby zminimalizowa膰 b艂臋dy obliczeniowe koprocesor wykonuje wewn臋trznie obliczenia na rozszerzonym formacie do 80-bit贸w. Dzi臋ki temu wzrasta zakres oraz precyzja przetwarzanych liczb. Koprocesor po wykonaniu oblicze艅 automatycznie przelicza wynik z typu extended na typ single lub double.
80-bitowa liczba zmiennoprzecinkowa o rozszerzonej precyzji w standardzie IEEE 754 (10-bajt贸w).
Zakres od -1,1 104932 do 1,1 104932. Precyzja oko艂o 19...20 cyfr znacz膮cych.
Typy zmiennoprzecinkowe - zestawienie (dla wszystkich j臋zyk贸w Pascal) |
|||
|
|
Zakres |
Precyzja |
single |
32b - 4B |
卤3,4 1038 |
7...8 cyfr |
double |
64b - 8B |
卤1,8 10308 |
15...16 cyfr |
extended |
80b - 10B |
卤1,1 104932 |
19...20cyfr |
comp |
64b - 8B |
-263 do 263 - 1 |
Liczba dok艂adna |
real |
64b - 8B |
卤1,8 10308 |
15...16 cyfr |
Informacja. Typy logiczne:
boolean
Przyjmuje dwie warto艣ci logiczne: TRUE (prawda, tak) i FALSE (fa艂sz, Nie).
Zmienna 8-bitowa (1 bajt).
Je艣li wszystkie bity s膮 ustawione na 0, to przedstawia warto艣膰 logiczn膮 FALSE. Je艣li chocia偶 jeden z bit贸w ma warto艣膰 1, to przedstawia warto艣膰 logiczn膮 TRUE. Standardowo wyra偶enia logiczne zmieniaj膮 zawarto艣膰 najm艂odszego bitu - pozosta艂e przyjmuj膮 zawsze warto艣膰 0:
00000000(BOOLEAN) = FALSE (fa艂sz)
00000001(BOOLEAN) = TRUE (prawda)
Informacja. Typy znakowe
Znaki przechowywane s膮 w pami臋ci komputera w postaci kod贸w ASCII (8 bit贸w) lub Unicode (16 bit贸w). Kod znaku jest liczb膮 ca艂kowit膮 w naturalnym kodzie binarnym.
char
Dana 1-znakowa. Zmienna tego typu przechowuje jeden znak ASCII (8-bit贸w, 1 bajt). Kod znaku zawiera si臋 w granicach od 0 do 255.
Znaki o kodach mniejszych od 32 s膮 zwykle tzw. znakami steruj膮cymi, kt贸rych celem nie jest prezentacja znak贸w, lecz wykonanie okre艣lonych dzia艂a艅. Na przyk艂ad znak NL o kodzie 10 powoduje przej艣cie z wydrukiem do nowego wiersza. Znak CR o kodzie 13 ustawia kursor na pocz膮tku wiersza.
string
Dana typu string jest 256 elementow膮 tablic膮 znakow膮 i mo偶e przechowywa膰 ci膮g znak贸w. Dost臋p do poszczeg贸lnych literek przechowywanego tekstu uzyskuje si臋 za pomoc膮 indeksu. Element o indeksie 0 zawiera informacj臋 o ilo艣ci przechowywanych znak贸w. Kolejne elementy zawieraj膮 poszczeg贸lne znaki tekstu. Ilo艣膰 znak贸w jest zatem ograniczona do 255.
W zmiennej s umieszczamy napis Janusz.
Zawarto艣膰 zmiennej typu string
s[0] |
s[1] |
s[2] |
s[3] |
s[4] |
s[5] |
s[6] |
s[7] |
\0 |
J |
a |
n |
u |
s |
z |
? |
Zawarto艣膰 kom贸rek zmiennej s poza obszarem tekstu (s[7]...s[255]) jest niezdefiniowana, tzn. mog膮 tam by膰 dowolne znaki pochodz膮ce z poprzednich dzia艂a艅 nad t膮 zmienn膮 lub obszarem pami臋ci przez ni膮 zajmowanym.
Informacja. Typ wyliczeniowy
type pora_roku = (wiosna, lato, jesien, zima);
Informacja. Typ okrojony
type Dni_robocze = (poniedzia艂ek,.....pi膮tek);
Informacja. Typ zbiorowy
type znaki = set of Char;
male_litery = set of 'a'..'z';
Informacja. Typ plikowy
type wektor = array[0...50] of Integer;
Informacja. Typ tablicowy
type data = file of record
rok : Integer;
mies : 1..12;
dzien : 1..31;
end;
Informacja. Typ rekordowy
type karta_pracownika = record
numer : ShortInt;
pers : record
naz_imie : record
naz : string [20];
imie : string [15]
end;
end;
Informacja. Typ wska藕nikowy
type wskaznik = ^zapis;
zapis = record
naglowek : Char;
tekst : string [50];
liczba : Integer
end;
Informacja. Typ proceduralny
type nazwa = procedure;
type nazwa = function;
Informacja. Typ obiektowy
type punkt = obiect
x,y : Integer;
end;
Typ |
Zakres |
Rodzaj liczb... |
integer |
-32768...32767 |
Ca艂kowite |
byte |
0...255 |
Ca艂kowite |
longint |
-2147483648...2147483647 |
Ca艂kowite |
shortint |
-128...127 |
Ca艂kowite |
word |
0...65535 |
Ca艂kowite |
real |
5.0x10-324...1.7x10308 |
Rzeczywiste |
double |
5.0x10-324...1.7x10308 |
Rzeczywiste |
extended |
3.4x10-4932..1.1x104932 |
Rzeczywiste |
comp |
-9 223 372 036 854 775 808...9 223 372 036 854 775 807 |
Rzeczywiste |
Char |
Pojedynczy znak |
Tekstowy |
String |
艁a艅cuch znak贸w |
Tekstowy |
3) Zaj臋cia ko艅cowe:
powt贸rzenie materia艂u z lekcji:
budowa programu w Pascalu
Co oznaczaj膮 poszczeg贸lne polecenia Pascala?
Jak wygl膮da sk艂adnia polece艅 READ i READLN?
ocena pracy s艂uchaczy.
Zadanie domowe: Uczniowie zmieniaj膮 typ integer na typ zmiennoprzecinkowy real i obserwuj膮 efekt zmian jego dzia艂ania.
program zakres_liczb;
var a,b:integer;
c:integer;
d: longint;
e: shortint;
f: byte;
g: word;
begin
writeln ('Program demonstrujacy bledy w obliczaniu zakresu liczb ');
writeln ('podaj pierwsza liczbe do dodania: ');
readln(a);
writeln ('podaj druga liczbe do dodania: ');
readln(b);
c:=a+b;
d:=a+b;
e:=a+b;
f:=a+b;
g:=a+b;
writeln ('Suma wynosi : ',c,' (typ integer - zakres -32768 .. 32767)');
writeln ('Suma wynosi : ',d,' (typ longint)');
writeln ('Suma wynosi : ',e,' (typ shortint zakres -128 .. 127)');
writeln ('Suma wynosi : ',f,' (typ byte - zakres 0 .. 255)');
writeln ('Suma wynosi : ',g,' (typ word - zakres 0 .. 65535)');
readln;
end.
program zakres_liczb;
var a,b:integer;
c:integer;
d: longint;
e: shortint;
f: byte;
g: word;
begin
writeln ('Program demonstrujacy bledy w obliczaniu zakresu liczb ');
writeln ('podaj pierwsza liczbe do dodania: ');
readln(a);
writeln ('podaj druga liczbe do dodania: ');
readln(b);
c:=a+b;
d:=a+b;
e:=a+b;
f:=a+b;
g:=a+b;
writeln ('Suma wynosi : ',c,' (typ integer - zakres -32768 .. 32767)');
writeln ('Suma wynosi : ',d,' (typ longint)');
writeln ('Suma wynosi : ',e,' (typ shortint zakres -128 .. 127)');
writeln ('Suma wynosi : ',f,' (typ byte - zakres 0 .. 255)');
writeln ('Suma wynosi : ',g,' (typ word - zakres 0 .. 65535)');
readln;
end.
Typ |
Zakres |
Rodzaj liczb... |
integer |
-32768...32767 |
Ca艂kowite |
byte |
0...255 |
Ca艂kowite |
longint |
-2147483648...2147483647 |
Ca艂kowite |
shortint |
-128...127 |
Ca艂kowite |
word |
0...65535 |
Ca艂kowite |
real |
5.0x10-324...1.7x10308 |
Rzeczywiste |
double |
5.0x10-324...1.7x10308 |
Rzeczywiste |
extended |
3.4x10-4932..1.1x104932 |
Rzeczywiste |
comp |
-9 223 372 036 854 775 808...9 223 372 036 854 775 807 |
Rzeczywiste |
Char |
Pojedynczy znak |
Tekstowy |
String |
艁a艅cuch znak贸w |
Tekstowy |
Typ |
Zakres |
Rodzaj liczb... |
integer |
-32768...32767 |
Ca艂kowite |
byte |
0...255 |
Ca艂kowite |
longint |
-2147483648...2147483647 |
Ca艂kowite |
shortint |
-128...127 |
Ca艂kowite |
word |
0...65535 |
Ca艂kowite |
real |
5.0x10-324...1.7x10308 |
Rzeczywiste |
double |
5.0x10-324...1.7x10308 |
Rzeczywiste |
extended |
3.4x10-4932..1.1x104932 |
Rzeczywiste |
comp |
-9 223 372 036 854 775 808...9 223 372 036 854 775 807 |
Rzeczywiste |
Char |
Pojedynczy znak |
Tekstowy |
String |
艁a艅cuch znak贸w |
Tekstowy |
6