ZAPIS PROGRAMU ZA POMOCĄ SCHEMATÓW BLOKOWYCH
Oznaczenia:
Ogólna struktura programu w języku PASCAL
{Nagłówek Programu}
program nazwa_programu ( lista_identyfikatorów ) ;
{ SEKCJA DEKLARACJI }
uses lista_nazw_modułów ;
label lista_etykiet ; {Deklaracja etykiet}
const sekwencja_definicji_stałych ; {Definicje stałych}
type sekwencja_definicji_typów ; {Definicje typów}
var sekwencja_deklaracji_zmiennych ; {Deklaracje zmiennych}
procedure nazwa_procedury_1 ; {Definicje procedur}
{Definicja_składowych_procedury_1}
procedure nazwa_procedury_2 ( lista_parametrów ) ;
{Definicja_składowych_procedury_2}
. . .
function nazwa_funkcji_1 : typ_wartosci ; {Definicje funkcji}
{Definicja_składowych_funkcji_1}
function nazwa_funkcji_2( lista_parametrów ) : typ_wartości ;
{Definicja_składowych_funkcji_2}
. . .
{ SEKCJA INSTRUKCJI }
begin
instrukcja_1 ;
instrukcja_2 ;
. . .
instrukcja_N ;
end .
REPREZENTACJA DANYCH W PASCALU
OPIS DANYCH :
definicje stałych CONST
definicje typów TYPE
deklaracje zmiennych VAR
TYP ZMIENNEJ:
zbiór (przedział) jej wartości,
format jej zapisu w pamięci (wielkość pamięci, struktura),
zbiór możliwych operacji.
Typ porządkowy:
Zbiór elementów ze zdefiniowaną relacją porządku.
Funkcje standardowe: Ord( N ) − numer porządkowy,
Pred( N ) − poprzednik (element poprzedzający),
Succ( N ) − następnik (element następny ),
Typy porządkowe całkowite:
Nazwa Zakres Format
Shortint -128 . . 127 1 bajt
Integer -32768 . . 32767 2 bajty
Longint -2 147 483 648 . . 2 147 483 647 4 bajty
Byte 0 . . 255 1 bajt
Word 0 . . 65535 2 bajty
Operatory: + , , * , / , div , mod , = , < , > , <= , >= , <> , :=
div ← operator dzielenia całkowito-liczbowego, np: 5 div 2 = 2
mod ← operator reszty z dzielenia (modulo), np: 5 mod 2 = 1
Typ porządkowy ZNAKOWY:
Nazwa Zakres Format
Char # 0 . . #255 1 bajt
Operatory: = , < , > , <= , >= , <> , := , +
Funkcje standardowe: Chr( numer_znaku ) , UpCase( znak )
Typy prOSTE RZECZYWISTE:
Nazwa Zakres Format
Real - 2.9*10-39 ÷ 1.7*1038 6 bajtów
Single 1.5*10-45 ÷ 3.4*1038 4 bajty
Double 5.0*10-324 ÷ 1.7*10308 8 bajtów
Extended 3.4*10-4392 ÷ 1.1*104932 10 bajtów
Comp ( 263 + 1) . . ( 263 1) 8 bajtów
Operatory: + , , * , / , = , < , > , <= , >= , <> , :=
STANDARDOWE FUNKCJE ARYTMETYCZNE
Nazwa |
Wynik |
Typ argumentu |
Typ wyniku |
Abs |
wart. bezwzględna |
rzeczywisty, |
rzeczywisty, |
ArcTan |
arcus tangens |
rzeczywisty, |
rzeczywisty |
Cos |
cosinus |
rzeczywisty, |
rzeczywisty |
Exp |
e do potęgi |
rzeczywisty, |
rzeczywisty |
Frac |
część ułamkowa |
rzeczywisty, |
rzeczywisty |
Int |
część całkowita |
rzeczywisty, |
rzeczywisty |
Ln |
logarytm naturalny |
rzeczywisty, |
rzeczywisty |
Pi |
3.1415926536 |
nie ma |
rzeczywisty |
Round |
zaokrąglenie do |
rzeczywisty |
Longint |
Sin |
sinus |
rzeczywisty, |
rzeczywisty |
Sqr |
kwadrat |
rzeczywisty, |
rzeczywisty, |
Sqrt |
pierwiastek |
rzeczywisty, |
rzeczywisty |
Trunc |
część całkowita |
rzeczywisty |
longint |
Instrukcja warunkowa „if then”
if wyrażenie_logiczne then instrukcja ;
if wyrażenie_logiczne then
begin
instrukcja_1;
instrukcja_2; { ciąg instrukcji }
. . .
instrukcja_n;
end;
Przykłady:
{Program klasyfikujacy wzrost osoby} var wzrost : word ; begin write( ' Podaj wzrost osoby: ' ); readln( wzrost ); if wzrost<150 then writeln( ' maly wzrost ' ); if (150<=wzrost) and (wzrost<180) then writeln( ' sredni wzrost ' ); if 180<=wzrost then writeln( ' wysoki wzrost ' ); readln; end. |
{Maksimum z trzech liczb} var a, b, c, max : real ; begin write( ' Podaj pierwsza liczbe: ' ); readln( a ); write( ' Podaj druga liczbe: ' ); readln( b ); write( ' Podaj trzecia liczbe: ' ); readln( c ) ; max := a ; if max<b then max := b ; if max<c then max := c ; writeln( ' Maksimum = ', max:0:2 ); readln; end. |
Instrukcja warunkowa „if then else”
if wyrażenie_logiczne then instrukcja_1
else instrukcja_2 ;
if wyrażenie_logiczne then
begin
{ciąg_instrukcji_1}
end
else
begin
{ciąg_instrukcji_2}
end;
Przykłady:
{ Program klasyfikujacy wzrost osoby - 2 } var wzrost : word ; begin write( ' Podaj wzrost osoby: ' ); readln( wzrost ); if wzrost<150 then writeln( ' maly wzrost ' ) else if wzrost<180 then writeln( ' sredni wzrost ' ) else writeln( ' wysoki wzrost ' ); readln; end. |
{ Maksimum z trzech liczb - 2 } var a, b, c, max : real ; begin write( ' Podaj pierwsza liczbe: ' ); readln( a ); write( ' Podaj druga liczbe: ' ); readln( b ); write( ' Podaj trzecia liczbe: ' ); readln( c ) ; if a>b then if a>c then max = a else max = c else if b>c then max = b else max = c; writeln( ' Maksimum = ', max:0:2 ); readln; end. |
{ Uporządkuj trzy liczby }
var
a, b, c : real ;
begin
write( ' Podaj pierwsza liczbe: ' );
readln( a );
write( ' Podaj druga liczbe: ' );
readln( b );
write( ' Podaj trzecia liczbe: ' );
readln( c ) ;
if a>b then
if b>c then
writeln( a,b,c )
else
if a>c then
writeln( a,c,b )
else
writeln( c,a,b )
else
if a>c then
writeln( b,a,c )
else
if b>c then
writeln( b,c,a )
else
writeln( c,b,a )
readln;
end.
Instrukcja wyboru:
case wyróżnik of
zakres_1: instrukcja_1;
zakres_2: instrukcja_2;
. . .
zakres_N: instrukcja_N;
end;
case wyróżnik of
zakres_1: instrukcja_1;
zakres_2: instrukcja_2;
. . .
zakres_N: instrukcja_N;
else instrukcja_M;
end;
Przykłady:
{ Rozpoznawanie klawiszy } var znak : char; begin writeln( ` Podaj jeden znak: ` ); readln( znak ); case znak of `a' : write( ` mala litera <a>' ); `x', 'y' : write( ` litera <x> lub <y> ` ); `A' .. `Z' : write( `duża litera ` ); else write( ` Inny klawisz ` ); end ; end . |
{ Wyświetlanie pełnej nazwy dnia } type Dni_tygodnia = ( Pon, Wt, Sr, Czw, Pt, Sob, Niedz ); var dzien : Dni_tygodnia ; begin . . . case dzien of Pon : write( ' Poniedziałek ' ); Wt : write( ' Wtorek ' ); Sr : write( ' Środa ' ); Czw : write( ' Czwartek ' ); Pt : write( ' Piątek ' ); Sob : write( ' Sobota ' ); Niedz : Write( ' Niedziela ' ); end ; end . |
Instrukcja iteracyjna - do wielokrotnego powtarzania(iteracji) tych samych czynności REPEAT
|
repeat Instrukcja_1; Instrukcja_2; { . . . } Instrukcja_N; until wyr ; |
Powtarzaj wykonanie sekwencji instrukcji tak długo, jak długo wyrażenie logiczne będzie mieć wartość False.
Instrukcja iteracyjna WHILE
|
while wyr do begin Instrukcja_1; Instrukcja_2; { . . . } Instrukcja_N; end;
|
Przykład 1 { odczytywanie klawiszy do momentu nacisniecia klawisza k' }
{ za pomoca petli REPEAT }
var
znak:char;
begin
repeat
write('podaj znak: ');
znak:=readkey;
until znak='k';
{ za pomoca petli WHILE }
znak:=#0;
while znak<>'k' do
begin
write('podaj znak: ');
znak:=readkey;
end;
end;
Przykład 2 { odgadywanie wartosci wylosowanej liczby z przedziału 1-6 }
Funkcja losowa random(zakres); wybiera losowo liczby całkowite z przedziału
0 do zakres-1. Jeśli zakres nie jest podany funkcja wybiera liczby rzeczywiste z przedziału 0 do 1. Pierwsze wywołanie funkcji random musi być poprzedzone wywołaniem funkcji RANDOMIZE;
var
liczba_losowa,liczba_wczytana:integer;
begin
liczba_losowa:=1+random(6); { losowanie liczby }
repeat { za pomoca petli REPEAT }
write('Odgadnij wylosowana liczbe: ');
readln(liczba_wczytana);
until liczba_wczytana=liczba_losowa;
write('Wylosowana liczba to: ',liczba_losowa);
{ za pomoca petli WHILE }
liczba_wczytana:=0;
while liczba_wczytana<>liczba_losowa do
begin
write('Odgadnij wylosowana liczbe: ');
readln(liczba_wczytana);
end;
write('Wylosowana liczba to: ',liczba_losowa);
end;
Instrukcja iteracyjna FOR TO
Wykorzystywana jest, gdy znana jest liczba cykli.
For zmienna:=wyrażenie1 to wyrażenie2 do
Lub
For zmienna:=wyrażeni1 downto wyrażenie2 do
Instrukcja iteracyjna FOR DOWNTO
Przykład 3 { drukowanie na ekranie poziomej kreski o zadanej długości }
var
i,dlugosc:integer;
begin
write('Podaj zadana dlugosc kreski: ');
readln(dlugosc);
clrscr; { za pomoca petli REPEAT }
i:=1;
repeat
write('-');
i:=i+1;
until i>dlugosc;
{ za pomoca petli WHILE }
clrscr;
i:=1;
while i<=dlugosc do
begin
write('-');
i:=i+1;
end;
{ za pomoca petli FOR }
clrscr;
for i:=1 to dlugosc do
write('-');
end;
Przykład { zliczenie sumy N podanych liczb }
var
i,N:integer;
liczba,suma:real;
begin
write('Podaj ile liczb chcesz zsumowac:');
readln(N);
suma:=0; { za pomoca petli FOR }
for i:=1 to N do
begin
write('Podaj ',i,' liczbe: ');
readln(liczba);
suma:=suma+liczba;
end;
writeln('Suma podanych liczb wynosi: ', suma );
end;
Przykład 5
{ sumowanie podawanych liczb aż ich wartość przekroczy granicę }
var
liczba,suma,granica:real;
begin
write('Podaj wartosc graniczna sumowania:');
readln(granica);
suma:=0; { za pomoca petli REPEAT }
repeat
write('Podaj liczbe: ');
readln(liczba);
suma:=suma+liczba;
until suma>granica;
writeln('Suma podanych liczb przekroczyla ',granica,
' i wynosi: ', suma );
end;
Przykład 6
{ sumowanie liczb naturalnych aż ich wartość przekroczy granicę }
var
i:integer;
liczba,suma,granica:real;
begin
write('Podaj wartosc graniczna sumowania:');
readln(granica);
suma:=0; { za pomoca petli WHILE }
i:=0;
while suma<=granica do
begin
suma:=suma+i;
i:=i+1;
end;
writeln('Suma podanych liczb wynosi: ', suma );
end;
Przykład 10
{ policzenie wartości n! }
function SILNIA( n:word ):longint;
var
i:word;
s:longint;
begin
s:=1;
for i:=2 to n do
s:=s*i;
SILNIA:=s;
end;{-----------SILNIA}
Zagnieżdżanie instrukcji iteracyjnych
For i:=1 to 2 do
For j:=1 to 3 do
For k:=1 to 4 do
A[i,j,k]:=i*j*k;
Przykład 9
{ wyznaczenie wartości i pozycji maximum z podanych liczb }
var
i,pozycja,N:integer;
liczba,minimum:real;
begin
write('Podaj ile liczb chcesz sprawdzic:');
readln(N);
minimum:=+1.7e38; {najwieksza wartosc liczby real}
pozycja:=-1;
i:=1;
while i<=N do
begin
write('Podaj ',i,' liczbe: ');
readln(liczba);
if liczba<minimum then
begin
minimum:=liczba;
pozycja:=i;
end;
i:=i+1;
end;
writeln('Najmniejsza byla ',pozycja,
' liczba o wartosci: ',minimum);
end;
Definiowanie procedurY:
procedure Nazwa_procedury( lista_parametrów );
var {itd., jak w sekcji deklaracji programu.
mogą tu być również definicje: stałych, typów
oraz wewnętrznych procedur i funkcji !}
begin
{ciąg instrukcji procedury}
end ;
Definiowanie FUNKCJI:
function Nazwa_funkcji( lista_parametrów ): typ_wyniku;
var {itd., jak w sekcji deklaracji programu.
mogą tu być również definicje: stałych, typów
oraz wewnętrznych procedur i funkcji !}
begin
{ciąg instrukcji procedury}
Nazwa_funkcji := obliczona_wartość ;
end ;
Instrukcja wywołania procedury:
Nazwa_procedury ( Param_1, Param_2, . . . , Param_n );
procedury bez parametrów (np. ClrScr, Break, Continue),
procedury o zmiennej liczbie i zmiennym typie parametrów (np. Write, Readln)
Funkcje i procedury standardowe przeznaczone do pracy z łańcuchami
function LENGTH ( S:string ) : Integer;
Zwraca aktualną długość łańcucha S.
function CONCAT( S1 [, S2, ... Sn] : string ) : string;
Łączy kilka łańcuchów w jeden. L : = Concat(S1,S2); L := S1 + S2;
function COPY( S: string; Poz: Integer; Dlugosc : Integer ):string;
Zwraca wycinek (podłańcuch) łańcucha S.
function POS( S1,S2 : string) : Byte;
Sprawdza, czy w łańcuchu S2 znajduje się podłańcuch S1 i zwraca numer jego pozycji początkowej. Jeżeli w S2 nie ma podłańcucha S1, to zwracane jest 0.
procedure DELETE( var S: string; Poz: Integer; Dlugosc: Integer);
Wycina podłańcuch z łańcucha S.
procedure INSERT( S1 : string; var S2: string; N: Integer);
Wstawia do łańcucha S2 podłańcuch S1
procedure STR( X [: Dlugosc[: Miejsca_dziesiętne]]; var S: string );
Przekształca daną X dowolnego typu liczbowego na łańcuch.
procedure VAL( S: string; var X; var Kod: Integer );
Przekształca łańcuch tekstowy S, na liczbę X.
stary = 'ma' nowy = 'miala'
tekst = 'Ala ma kota' 'Ala miala kota'
function ZamienFragmenty( tekst, stary, nowy : string ): string;
var
pozycja : byte;
begin
if stary<>nowy then
repeat
pozycja := Pos( stary, tekst );
if pozycja > 0 then
begin
delete( tekst, pozycja, length(stary) );
insert( nowy, tekst, pozycja );
end;
until pozycja = 0;
ZamienFragmenty := tekst;
end;
function ObetnijTekst_1( tekst : string; nowa_dlugosc:byte ): string;
begin
if nowa_dlugosc < length( tekst ) then
tekst[ 0 ] := nowa_dlugosc;
ObetnijTekst_1 := tekst;
end;
function ObetnijTekst_2( tekst : string; nowa_dlugosc:byte ): string;
begin
ObetnijTekst_2 := Copy( tekst, 1, nowa_dlugosc );
end;
function ObetnijSpacje( tekst ): string;
var
poczatek : byte;
begin
poczatek := 1;
while (tekst[ poczatek ] = #32) and (poczatek < length( tekst)) do
Inc( poczatek );
Delete( tekst, 1, poczatek1 );
ObetnijSpacje := tekst;
end;
TYP REKORDOWY
→dla kilka danych różnego typu, które wspólnie charakteryzują ten sam obiekt
Definicja typu rekordowego:
DANE OSOBOWE
|
TYPE Dane_Osobowe = RECORD |
Nazwisko .............................. |
Nazwisko : string [40]; |
Imię ....................................... |
Imie : string[20] |
Wiek ..................................... |
Wiek : byte; |
Adres ..................................... |
Adres : string; |
Liczba lat pracy ..................... |
Liczba_lat_pracy : byte; |
|
END ; |
Deklaracja zmiennych rekordowych:
VAR
kierownik, sekretarka, pracownik_1, pracownik_2 : Dane_Osobowe;
spis_osob : array [ 1 .. 100 ] of Dane_Osobowe;
Rekordy zagnieżdżone:
TYPE
Dane_adresowe = record
Miejscowosc : string [20];
Kod_pocztowy : string [6];
Ulica_nr_domu : string [30];
end ;
Miejscowosc |
Kod_pocztowy |
Ulica_nr_domu |
Warszawa |
34-678 |
Wielka 4 |
Dane_osobowe = record
Nazwisko : string [40];
Imie : string [20];
Adres : Dane_Adresowe; rekord zagnieżdżony
end;