ZAPIS PROGRAMU ZA POMOCĄ SCHEMATÓW BLOKOWYCH

Oznaczenia:

Ogólna struktura programu w języku PASCAL

0x08 graphic
{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,
całkowity

rzeczywisty,
całkowity

ArcTan

arcus tangens

rzeczywisty,
całkowity

rzeczywisty

Cos

cosinus

rzeczywisty,
całkowity

rzeczywisty

Exp

e do potęgi

rzeczywisty,
całkowity

rzeczywisty

Frac

część ułamkowa

rzeczywisty,
całkowity

rzeczywisty

Int

część całkowita

rzeczywisty,
całkowity

rzeczywisty

Ln

logarytm naturalny

rzeczywisty,
całkowity (>0)

rzeczywisty

Pi

3.1415926536

nie ma

rzeczywisty

Round

zaokrąglenie do
najbliższej liczby całkowitej

rzeczywisty

Longint

Sin

sinus

rzeczywisty,
całkowity

rzeczywisty

Sqr

kwadrat

rzeczywisty,
całkowity

rzeczywisty,
całkowity

Sqrt

pierwiastek

rzeczywisty,
całkowity (>0)

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

0x01 graphic

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;