duza sciaga


MACIERZE PROCEDURY

program macierze;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
macierz=array [1..100,1..100] of real;
var
A,B,C,D:macierz;
wA,kA,wB,kB,wC,kC,wD,kD,s,i:byte;
spr:boolean;
x:string;
-
procedure wczytaj_macierz(opis:string;var Z:macierz; var wZ,kZ:byte);
var
i,j:byte;
begin
writeln(' Macierz ',opis);
Write('Podaj liczbe wierszy : '); Readln(wZ);
Write('Podaj liczbe kolumn : '); Readln(kZ);
for i:=1 to wZ do
begin
for j:=1 to kZ do
begin
writeln('Podaj wartosc macierzy ',opis,'[',i,',',j,']');
readln(Z[i,j]);
end;
end;
end;
-
procedure wypisz_macierz(opis:string;var Z:macierz;var wZ,kZ:byte);
var
i,j:byte;
begin
writeln(' Macierz ',opis);
readln;
for i:=1 to wZ do
begin
for j:=1 to kZ do
write(Z[i,j]:10:2);
writeln;
end;
readln;
end;
-procedure dodaj_macierz( wZ,kZ:byte;var Z:macierz; wX,kX:byte;var X:macierz;var wY,kY:byte;var Y:macierz;var Spr:boolean);
var
i,j:byte;
begin
Spr:= (wZ=wX) and (kZ=kX);
if Spr then
begin
for i:=1 to wZ do

for j:=1 to kZ do
Y[i,j]:=Z[i,j]+X[i,j];
wY:=wZ;
kY:=kZ;
end
else
writeln('Macierze nie maja rownych wymiarow, dodawanie niemozliwe.');
readln;
end;
begin
wczytaj_macierz('A',A,wA,kA);
wypisz_macierz('A',A,wA,kA);
wczytaj_macierz('B',B,wB,kB);
wypisz_macierz('B',B,wB,kB);
dodaj_macierz(wA,kA,A,wB,kB,B,wC,kC,C,Spr);
wypisz_macierz('C',C,wC,kC);
Readln;
end.
-procedure mnozenie_macierz( wZ,kZ:byte; Z:macierz; wX,kX:byte; X:macierz;var wY,kY:byte;var Y:macierz;var Spr:boolean);
var
i,j,k:byte;
Cos:array [1..2,1..2] of real;
begin
Spr:= (kZ=wX) ;
if Spr then
begin
Cos[1,1]:=0;
for i:=1 to wZ do
for j:=1 to kX do
begin
Cos[1,1]:=0;
for k:=1 to kZ do
begin
Cos[1,1]:=Z[i,k]*X[k,j]+Cos[1,1];
Y[i,j]:=Cos[1,1];
end
end;
wY:=wZ;
kY:=kX;
end
else
writeln('Mnozenie niemozliwe.');
readln;
end;

1.Type macierz=Array[1..10,1..10] of real;

var j,I,n,k:byte;

A:macierz;

Begin

Writeln(`podaj wartość n'); readln(n);

Writeln(`podaj wartość k'); readln(k);

For i:=1 to n do

For j:=1 to k do

Writeln(`podaj wartość macierzy A[`,j,',',i,']');

Readln(A[j,i]);

End.

2.Wypisywanie macierzy

type macierz=array[1..10,1..10] of real;

var j,i,n,k:byte;

A:macierz;

Begin

Writeln(`podaj wartość n'); readln(n);

Writeln(`podaj wartość k'); readln(k);

For i:=1 to n do

For j:=1 to k do

Begin

Writeln(`podaj element macierzy A[`,j,',',i,']');

Readln(A[j,i]);

End;

3.Type Tablica=Array[1..10,1..10] of Real;

Var A,B,C:Tablica;

wA,kA,wB,kB,wC,kC:Byte;

procedure czytaj(var X:Tablica;var wX,kX:Byte);

var i,j:Byte;

begin

write(`liczba wierszy'); readln(wX);

write(`liczba kolumn'); readln(kX);

for i:=1 to wX do

for j:=1 to kX do

begin

write(`X[`,i,',',j,']= `);

readln(X[i,j]);

end;

end.

SORTOWANIE

ALGORYTMY SORTOWANIA TABLIC

Sortowaniem nazywamy proces ustawiania zbioru obiektów w określonym porządku. Spośród wielu algorytmów sortowania przedstawione będą tyko najprostsze. Wybór algorytmu zależy od struktury przetwarzanych danych. Najważniejszym wymaganiem stawianym metodom sortowania tablic jest oszczędne korzystanie z pamięci komputera oraz szybkość sortowania.

Sortowanie bąbelkowe

Algorytm sortowania bąbelkowego polega na porównywaniu i zamianie par sąsiadujących ze sobą elementów. Na przykład, w przypadku sortowania rosnącego, jeżeli element pierwszy jest większy od następnego, elementy zastępujemy miejscami, w przeciwnym wypadku elementy pozostawiamy bez zmian. Ponieważ w czasie sortowania elementy o najmniejszych wartościach „wypływają do góry” natomiast elementy o wartościach większych „opadają na dno”, stąd nazwa sortowania. Sortowanie bąbelkowe jest bardzo proste do zaprogramowania, ale metoda ta jest wolna.

const Max = 100;

type Wektor = Array[0..Max] of Integer;

var A : Wektor; N_elementow : Integer;

procedure Sortowanie_babelkowe(var A : Wektor);

var

i,j : Integer;

pamiec : Integer;

begin

for i:=2 to N_elementow do

for j:=N_elementow DownTo i do

if A[j-1]>A[j] then

begin

pamiec:=A[j-1];

A[j-1]:=A[j];

A[j]:=pamiec;

end;

end;

Sortowanie przez wstawianie

Metoda ta polega na tym, że przeglądamy po kolei całą tablicę. Jeżeli któryś z elementów nie znajduje się na swoim miejscu, wstawiamy go tam, gdzie powinien się znajdować w przypadku tablicy posortowanej.

Algorytm ten można przyśpieszyć stosując inna metodę ustalania miejsca wstawienia sortowanego elementu, np. metodę przeszukiwania połówkowego.

procedure Sortowanie_przez_wstawianie (var A : Wektor);

var

i,j : Integer;

pamiec : Integer;

begin

for i:=2 to N_elementow do

begin

pamiec:=A[i];

A[0]:=pamiec;

j:=i-1;

while pamiec<A[j] do

begin

A[j+1]:=A[j];

j:=j-1;

end;

A[j+1]:=pamiec;

end;

end;

Sortowanie przez wybieranie

Algorytm polega na wyszukaniu elementu o najmniejszej wartości i zamianie go miejscami z elementem, który znajduje się na pozycji pierwszej pierwszym przebiegu, drugiej w przebiegi drugim, itd.

procedure Sortowanie_przez_wybieranie(var A : Wektor);

var

i,k : Integer;

pamiec : Integer;

procedure Min(n:Integer; var k:Integer);

var

j:Integer;

x:Integer;

begin

x:=A[n];

k:=n;

for j:=n+1 to N_elementow do

if A[j]<x then

begin

x:=A[j];

k:=j

end;

end;

begin

for i:=1 to N_elementow-1 do

begin

Min(i,k);

pamiec:=A[i];

A[i]:=A[k];

A[k]:=pamiec

end

end;

unit sort;interface const Max = 100;

type Wektor = Array[0..Max] of Integer;

var A : Wektor; N_elementow : Integer;

procedure Sortowanie_babelkowe(var A : Wektor);

procedure Sortowanie_przez_wstawianie(var A : Wektor);

procedure Sortowanie_przez_wybieranie(var A : Wektor);

implementation

procedure Sortowanie_babelkowe(var A : Wektor);

var

i,j : Integer;

pamiec : Integer;

begin

for i:=2 to N_elementow do

for j:=N_elementow DownTo i do

if A[j-1]>A[j] then

begin

pamiec:=A[j-1];

A[j-1]:=A[j];

A[j]:=pamiec;

end;

end;

procedure Sortowanie_przez_wstawianie (var A : Wektor);

var

i,j : Integer;

pamiec : Integer;

begin

for i:=2 to N_elementow do

begin

pamiec:=A[i];

A[0]:=pamiec;

j:=i-1;

while pamiec<A[j] do

begin

A[j+1]:=A[j];

j:=j-1;

end;

A[j+1]:=pamiec;

end;

end;

procedure Sortowanie_przez_wybieranie(var A : Wektor);

var

i,k : Integer;

pamiec : Integer;

procedure Min(n:Integer; var k:Integer);

var

j:Integer;

x:Integer;

begin

x:=A[n];

k:=n;

for j:=n+1 to N_elementow do

if A[j]<x then

begin

x:=A[j];

k:=j

end;

end;

begin

for i:=1 to N_elementow-1 do

begin

Min(i,k);

pamiec:=A[i];

A[i]:=A[k];

A[k]:=pamiec

end

end;

end.

Inne metody sortowania

Shaker-sort

Jest to metoda oparta na sortowaniu bąbelkowym, przy czym elementy zamienia się miejscami przemiennie od początku i końca. Dzięki temu proces sortowania jest nieco szybszy w porównaniu z sortowaniem bąbelkowym.

Heap-sort

Przedstawione wyżej metody sortowania przetwarzają podczas każdego przebiegu tylko jeden element z listy. Naturalnie wywołuje to znaczne ograniczenie szybkości działania. Użycie pomocniczego pola numerycznego (heap), w którym podczas jednego przebiegu można zapamiętać od razu kolejność sortowania dla kilku elementów, znacznie zwiększa szybkość działania. Pole pomocnicze można uważać jako drzewo binarne, w którym elementy występują według ich uporządkowania. Przebieg sortowania odbywa się w dw6ch etapach: najpierw powstaje pole pomocnicze w postaci drzew a binarnego w wyniku porównania elementów listy. Następnie, po przetworzeniu tego drzewa, można element po elemencie przenieść do prawidłowej pozycji listy.

A.TYPY PROSTE PREDEFINIOWANE

Typy całkowite

Typy całkowite są podzbiorami zbioru liczb całkowitych. W zależności od zakresu, z czym związana jest liczba bajtów pamięci rezerwowanych dla zmiennych danego typu, wyróżnia się typy:

Integer -32 768 do 32 767 (zmienna zajmuje 2 B pamięci)

ShortInt -128 do 127 (1 B)

LongInt -2 147 483 648 do 2 147 483 647 (4 B)

Byte 0 do 255 (1 B)

Word 0 do 655 535 (2 B)

Typy rzeczywiste

Typy te są dyskretnym i skończonym podzbiorem zbioru liczb rzeczywistych.

W Pascalu korzystać można z pięciu typów rzeczywistych o określonym zakresie:

Real 2.9e-39 do 1.7e38 (11-12 cyfr znaczących) (6B)

Single 1.5e-45 do 3.4e38 ( 7-8 cyfr znaczących) (4B)

Double 5.0e-324 do 1.7e308 (15-16 cyfr znaczących) (8B)

Extended 3.4e-4932 do 1e4932 (19-20 cyfr znaczących) (10B)

Comp około -9.2e18 do 9.2e18 (8B)

Typ logiczny

Boolean

Wartości tego typu są oznaczone za pomocą dwu predefiniowanych literałów (stałych) : FALSE i TRUE, oznaczających odpowiednio wartości logiczne fałsz i prawda, przy czym w sensie uporządkowania słała FALSE poprzedza stałą TRUE. Liczbami porządkowymi elementów typu Boolean są tylko 0 (False) i 1 (True). Typ Boolean jest jednym z typów wyliczeniowych, omówionych bliżej w punkcie B.

Typ znakowy

Char - elementami tego typu są znaki ASCII, z których każdy pamiętany jest w

jednym bajcie pamięci.

B.TYPY PROSTE DEFINIOWANE PRZEZ PROGRAMISTE

Typ wyliczeniowy

Jest stosowany zwykle dla zbiorów o niewielkiej liczbie elementów. Na elementach typu wyliczeniowego nie wykonuje się operacji arytmetycznych. Porządek w tym typie jest zgodny z kolejnością wyliczenia w definicji typu. Elementy typu wyliczeniowego posiadają liczby porządkowe odpowiednio 0,1,2, ..itd.

Definicja :

type identyfikator_typu = (lista_identyfikatorów);

Przykład poprawnych definicji typu wyliczeniowego

type

dni_tygodnia = (poniedzialek, wtorek, sroda, czwartek,

piatek, sobota, niedziela);

niewiadome = (x,y,z);

wspolrzedne = (x1,y1,x2,y2);

Przykłady błędnych definicji:

type

zbior_1 = (a,b,c,a); { powtórzony element a }

zbior_2 = (1,2,3a); { 1,2,3a nie są identyfikatorami)

zestaw_liter_1 = (a,b,c,d);

Edward Preweda KIOT WGGiIŚ AGH - 12 - Szkoła programowania w Pascalu

zestaw_liter_2 = (c,d);

{ dwa różne typy zawierają wspólne identyfikatory }

Typ okrojony

Typ okrojony ogranicza zbiór wartości dowolnego z typów porządkowych,poprzez wyspecyfikowanie najmniejszej i największej dopuszczalnej wartości.

Typy okrojone sluzy do ograniczania zakresów wartości dowolnego z dotychczas przedstawionych typów porzadkowych.

Definicja:

type identyfikator_typu = stala_1 .. stala_2;

Obie stałe muszą należeć do tego samego typu porządkowego, zwanego typem bazowym. Stała_1 podaje ograniczenie dolne i nie może być większa od stałej_ 2 - podającej ograniczenie górne. Pierwsze wyrażenie stałe w definicji typu okrojonego nie może rozpoczynać się od nawiasu okrągłego otwierającego, tj. znaku(.

Przykłady

type

znaki = 'a'..'z';

{ typ okrojony znaki jest podzbiorem

standardowego typu Char }

przedzial = 1..10

const

x = 20;

y = 30;

type

zakres = x+y..10*(x+y);

type

sprzet = (XT, 286, 386, 486, Pentium, PentiumII );

dobry_sprzet = Pentium..PentiumII;

Typ łańcuchowy

Typ łańcuchowy służy do przechowywania tekstów (napisów . nie można mylić z typem tekstowym Text). Elementami łańcucha mogą być dowolne znaki z bieżącej matrycy znaków komputera.

Definicja:

type identyfikator_typu : String;

identyfikator_typu : String[rozmiar];

Przykłady:

type

wiersz = String [72];

napis = String;

im_naz = String[40];

Typy strukturalne

Typy te stosuje siê do opisu obiektów zlozonych.Kazdy z typów strukturalnych definiuje siê przez podanie typów elementów i metody strukturalizacji, która zarazem okresla sposób dostêpu do elementów.

Definicja :

type identyfikator_typu = opis_typu;

Wyróżnia takie typy strukturalne jak tablicowy, rekordowy, plikowy, zbiorowy,

obiektowy, wskaźnikowy .

Typ tablicowy

Tablica jest zbiorem elementów tego samego typu. Dostęp do poszczególnych elementów tablicy następuje za pomocą indeksu (indeks w ogólności może być wyrażeniem). W przypadku tablic wielowymiarowych elementy tablicy identyfikowane są przez odpowiedni ciąg indeksów. W każdym przypadku indeks musi być typu porządkowego.

Definicja:

type

identyfikator_typu = Array[typ_indeksów] of typ_elementów;

Przykłady

type

wektor_1 = Array[1..10] of Real;

wektor_2 = Array[a..d] of Real;

macierz_1 = Array[0..10] of Array[30..40] of Integer;

macierz_2 = Array[1..10,30..40] of Integer;

Typ rekordowy

Rekord składa się z elementów zwanych polami. Pola mogą być różnych typów, a dostęp do nich następuje poprzez wyspecyfikowanie odpowiednich identyfikatorów określonych w definicji typu rekordowego.Rekord może mieć kilka wariantów, z których każdy może posiadać różną liczbę pól. Dostęp do danego wariantu rekordu uzyskuje się na ogół poprzez wartość tzw. pola znacznikowego, wspólnego dla wszystkich wariantów.

Definicja:

type identyfikator_typu = record

lista_deklaracji_pól

end;

Przykłady

type data = record

dzien : 1..31;

miesiac : 1..12;

rok : Word

end;

type punkt =record

numer : Word;

x,y,z : Real;

opis : String[40]

end;

Typ zbiorowy

Elementami zbioru są wszystkie podzbiory pewnego typu porządkowego,zwanego typem bazowym, określanego w definicji zbioru. Typ bazowy nie może przekraczać liczby 256 elementów. Na zbiorach można dokonywać operacji teoriomnogościowych.

Definicja:

type identyfikator_typu = set of typ_porządkowy;

Przykłady

type

weekend = (sobota, niedziela);

wyjazdy = set of dzien;

Typ plikowy

Plik reprezentuje dane przechowywane w pamięci dyskowej. Plik jest ciągiem elementów tego samego typu. Dostęp do elementów typu plikowego jest sekwencyjny,w danej chwili dostępny jest tylko jeden element pliku.

Definicja:

type

identyfikator_typu = file;

type

identyfikator_typu = file of opis_typu_;

type

identyfikator_typu = Text;

Przykłady

type

dowolny_plik = File;

dane = Text;

znaki = file of Char;

daty = file of record

dzien :1..31;

miesiac : 1..12;

rok : Word;

end;

Typ obiektowy

Obiekt jest strukturą składającą się ze stałej liczby elementów, z których każdy jest polem określonego typu (analogicznie jak w rekordzie) lub metodą (procedurą lub funkcją), która określa operacją wykonywaną na obiekcie. Typ obiektowy może dziedziczyć elementy innego typu obiektowego. Bliższe omówienie tego typu oraz dodatkowych pojęć z nim związanych znajduje się w punkcie [.]

Typ wskaźnikowy

Typ wskaźnikowy jest związany z tzw. zmiennymi dynamicznymi.W języku Pascal występują dwa rodzaje zmiennych : statyczne i dynamiczne.Zmienne statyczne są to zmienne deklarowane w programie, posiadające określony identyfikator i istniejące w obrębie określonej części programu. Zmienne dynamiczne mogą być natomiast wygenerowane w wyniku realizacji jednej z instrukcji i nie posiadające identyfikatorów.

Definicja typu wskaźnikowego

Definicja typu wskaźnikowego ma postać:

type identyfikator_typu_wskaźnikowego = ^identyfikator_typu_bazowego;

Zmienne typu wskaźnikowego wskazują na dane typu bazowego.Identyfikator typu bazowego może być określony wcześniej lub w tym samym zdaniu type, w którym występuje definicja danego typu wskaźnikowego.

Przykłady:

a) type Macierz = Array[1..10, 1..10] of Byte;

Macierz_dynamiczna = ^Macierz;

b) type Lista_dynamiczna = ^Lista;

Lista = record

Lp : Byte

X,Y : Real;

end;

c) type Liczba = ^LongInt;

Zmienne wskaźnikowe

Po wprowadzeniu deklaracji:

var M : Macierz_dynamiczna;

L : Lista_dynamiczna;

zmiennej wskaźnikowej M można będzie w programie przypisywać adresy pamięci danych (zmiennych dynamicznych) typu Macierz,natomiast zmiennej wskaźnikowej L - adresy pamięci danych (zmiennych dynamicznych) typu Lista.

Deklaracja zmiennej wskaźnikowej

var x : Liczba

umożliwi przypisanie zmiennej x adresów pamięci danych (zmiennych dynamicznych) typu LongInt.

Zmienne wskaźnikowe można również zadeklarować następująco:

var M1 : ^Macierz; L1 : ^Lista; X1 : ^LongInt;

Zmienne dynamiczne pamiętane są segmencie pamięci o strukturze stosowej.

Typy proceduralne

type nazwa = procedure (lista_parametrów);

lub

type nazwa = function {lista_paramatrow} : typ_wartsci_funkcji;

W obu przypadkach lista parametrów może być pusta - procedury i funkcje mogą być bezparametrowe.

DEKLARACJA ZMIENNYCH

-Zmienne całościowe

Zmienne całościowe są najprostszym rodzajem zmiennych. Nazwa zmiennych całościowych składa się z samego identyfikatora.

Przykłady

var licznik : Integer;

znak : Char;

a,b,c : Real;

begin

licznik:=1;

znak:='x';

a:=2;

b:=5;

c:=a/b;

end.

- Zmienne indeksowane

Są to zmienna które służą do odwołania się do elementów zmiennej typu tablicowego oraz do odwoływania się do pojedynczych znaków zmiennych łańcuchowych. Indeks jest dowolnym wyrażeniem którego wartość jest zgodna z typem indeksowym. W przypadku odwoływania się do zmiennych łańcuchowych, zmienna indeksowana może posiadać tylko jeden indeks o wartości od 0 do n, gdzie n -zadeklarowana długość łańcucha. Wartość zmiennej indeksowanej jest w tym przypadku typu znakowego (Char).

Przykłady:

type

Wektor = Array[0..5] of Word;

Macierz = Array[0..10, 0..10] of Real;

Napis = String[20];

var

w : Wektor;

m : Macierz;

nazwa : Napis

element : Real;

znak : Char;

begin

{...}

w[0]:=0;

element:=m[1][8] := 10.23;

element:=m[1,2*4] := 10.23;

znak:=nazwa[2];

{...}

end.

- Zmienne rekordowe

Są to zmienne których wartości są typu rekordowego. Aby odwołać się do pola rekordu, należy za identyfikatorem zmiennej rekordowej podać tzw. desygnator pola postaci:

Przykłady:

type opis = record

Lp : Byte;

Imie, Nazwisko : String[20]

end;

wykaz = Array[1..N] of opis;

var i: : Integer;

student : opis;

lista : wykaz;

zbior : record

wydzial : record

kierunek : String;

rok : 1..5;

end;

grupa : wykaz;

end;

- Zmienne absolutne

Są to zmienne którym adres pamięci przydziela programista. Adres ten specyfikuje się w deklaracji zmiennej.

Przykład:

var tryb : Byte absolute $0080:$0089

Jest to deklaracja zmiennej bajtowej tryb, której przydzielono pamięć w segmencie o adresie $0080 począwszy od bajtu o adresie względnym $0089.

var bufor : Array[1..100] of record

Lp : Byte;

znak : Char;

end absolute $B050:$0000;

-ZMIENNA OBIEKTOWA

Zmienna, której wartosci sa typu klasowego,nazywamy zmienna obiektowa.W celu odwolania się do pola obiektu stosuje się,podobnie jak dla rekordu, desygnator pola.

W odowolaniu do wlasnosci stosujemy desygnator wlasnosci:

.identyfikator-wlasnosci

-ZMIENNA DYNAMICZNA

Wartooeci typów wskaznikowych, tj. wskazniki, określają adresy pamiêci zmiennych dynamicznych , którym pamiêc moze byc przydzielana i zwalniana w trakcie wykonywania programu. W celu odwolania siê do zmiennej pewnego typu, z którym zwiazano typ wskaznikowy, stosuje siê zmienne wskazywane postaci zmienna-wskaznikowa ^

Jezeli zmienna wskaznikowz oznaczymy przez w i zalozymy,ze jest ona zwiazana z typem T, to zmienna wskazywana w^ jest ta zmienna typu T, na która wskazuje w. Wartoscia zmiennej w^ jest więc pewien element typu T o adresie w.

var w : wskaznik;

-ZMIENNE PROCEDYRALNE

var identyfikator-zmiennej : typ-proceduralny;Zmiennej proceduralnej moga byc przypisywane wartosci

proceduralne , tzn.:

- identyfikatory funkcji i procedur, gdy zmienna jest ogólnego typu proceduralnego (ale nie funkcje

i procedury z modulu System oraz zaglębione, tj.opisane wewnatrz innej funkcji lub procedury),

- identyfikatory metod (z kwalifikacja obejmujaca nazwę zmiennej obiektowej), gdy zmienna jest obiektowego typu proceduralnego,

- wartosci innych zmiennych proceduralnych,

- adres pusty (nil).

var parsin : function sinus(x : Extended) : Extended;

-ZMIENNE INDEKSOWE

[-5..10] , [0..19, 0..19]

Do dowolnego elementu statycznej tablicy jednowymiarowej mozna odwołać siê za pomoca nazwy indeksowanej.W najprostszym przypadku nazwa taka sklada siê z nazwy tablicy, tj. identyfikatora zmiennej typu tablicowego, po której nastêpuje ujêty w nawiasy kwadratowe indeks. Indeks jest dowolnym wyrazeniem (bêdzie dalej), którego wartosc powinna być zgodna w sensie przypisania z typem indeksowym podanym w definicji typu tablicowego. Zmienne indeksowane sluza takze do odwolywania sie do pojedynczych znaków zmiennych typów lañcuchowych krótkich (moze posiadac tylko jeden indeks o wartosci od 0 do n, gdzie n oznacza zadeklarowana lub przyjmowana standardowo długość lañcucha.) i dlugich (powinna nalezec do przedzialu od 1 do m, gdzie m oznacza dynamiczna dlugosc lañcucha,). Zmienne indeksowane moga byc uzywane takze do odwolywania siê do elementów tablic dynamicznych.

DYREKTYWY

definiujące 

taka dyrektywa definiuje pewną stałą, która umożliwia parametryzowanie kompilacji, poprzez kontrolę istnienia definicji w dyrektywach warunkowych, np. DEFINE, UNDEF

parametryczne 

które przekazują informację do translatora, informacje te mogą dotyczyć środowiska, w którym następuje kompilacja, dostępność pamięci, zbiór, który ma być włączony do kodu źródłowego, np. C

atrybuty, I nazwa_zbioru,

warunkowe 

umożliwiającą kompilację warunkową określonych sekcji kodu źródłowego (sekcja rozumiana jest jako tekst zawarty pomiędzy dyrektywą warunkową, a dyrektywą zamykającą blok dyrektywy warunkowej, porównaj: instrukcja warunkowa), może to dotyczyć np. uwzględnienia różnic systemów komputerowych i wiele innych zastosowań, np. IFDEF nazwa, IFNDEF nazwa, IFOPT przełącznik, ELSE, ENDIF,

przełącznikowe 

ustalające sposób kompilacji, sposób ten może być różny dla różnych, nawet niewielkich fragmentów kodu, np. F+, F-, S+, S- i inne.

DEFINICJA LITERAŁÓW ZMIENNYCH

Literał zmienny jest pośrednim elementem pomiędzy stałą i zmienną. Literały zmienne mogą być w pewnym sensie uważane za zmienne którym nadano wartość początkową. W programie, literały zmienne mogą zmieniać swoją wartość podobnie jak zmienne. Różnica względem zmiennych polega na tym że w wyniku ponownego uruchomienia programu znajdującego się w pamięci operacyjnej zachowywane są wartości literałów zmiennych z poprzedniego wykonania. Również literały zmienne deklarowane w procedurach i funkcjach nie są reinicjowane.Oznacza, to że przy ponownym wywołaniu procedury lub funkcji literały zmienne posiadają wartości z poprzedniego wywołania.

- Wyrażenie stałe jest to wyrażenie, które może być obliczone przez kompilator.wyrażenie stałe nie może zawierać zmiennych, literałów zmiennych z wyjątkiem literałów którym przypisano stałe wyrażenia adresowe, wywołań funkcji za wyjątkiem niektórych funkcji standardowych oraz operatora adresowego @. W szczególności, wyrażenie stałe jest liczbą lub łańcuchem.

Przykład:

const

znak : Char = 'x';

napis : String[10] = 'Wtorek';

liczba : Byte = 21;

- Stała tablicowa jest w ogólności ciągiem stałych ujętych w nawiasy okrągłe.Poszczególne stałe oddzielane są przecinkami. Stałe tablicowe znakowe mogą być podane również jako łańcuchy ( łańcuch podajemy bez nawiasów okrągłych).

Przykład:

const znaki_1 : Array[1..5] of Char = ('1','a','b','$');

znaki_2 : Array[1..5] of Char = '12ab$';

-Stała rekordowa jest ciągiem elementów oddzielonych średnikami. Każdy element ma postać:

identyfikator_pola : stała_typowa;

Pola powinny być wyspecyfikowane w takiej kolejności jak występują w definicji danego typu rekordowego. Nie jest dozwolone nadawanie wartości literałom zmiennym typu rekordowego zawierającego pola typu plikowego.

Przykład:

type punkt = record

Nr : Byte;

x,y : Real;

end;

odcinek = Array[1..2] of punkt;

const dane : punkt = (Nr:12 ; x:20.20 ; y:30.30);

rysuj : odcinek =( ( Nr:1 ; x:1.0 ; y:1.0) ,

( Nr:2 ; x:20.0 ; y:30.0));

- Stała zbiorowa jest ujętym w nawiasy kwadratowe ciągiem elementów zbioru oddzielanych przecinkami. Definicja literału zmiennego typu zbiorowego może również określać zbiór pusty [ ].

Przykłady:

type

kolory : (zolty, niebieski, zielony);

barwa : set of kolory;

const

kolor : barwa = [niebieski, zielony];

nieznany_kolor : barwa = [ ];

INSTRUKCJE STRUKTURALNE

- Instrukcja złożona jest ciągiem instrukcji poprzedzonych słowem kluczowym begin i zakończonym słowem kluczowym end. Składnia Turbo Pascala wymaga często użycia jednej instrukcji, podczas gdy dla realizacji celu niezbędne jest wykonanie wielu instrukcji. W tych przypadkach korzysta się z instrukcji złożonej,która tworzy z ciągu instrukcji jedną instrukcję.

Przykład:

begin

a:=4.5;

x:=18;

dane:='macierz.txt'

end;

- Instrukcje warunkowe W przypadku nawet najprostszych zadań, algorytm bardzo często wymaga zastosowania rozgałęzień. Do realizacji tego zadania służą instrukcje warunkowe. W

Pascalu istnieją dwie instrukcje warunkowe: instrukcja instrukcja if (jeśli) oraz instrukcja case (wyboru).

- Instrukcja if ... then ... else ...;

Wartością wyrażenia jest wartość logiczna True lub False. Jeśli wartość wyrażenia jest True, to zostanie wykonana instrukcja podana po słowie then, w przeciwnym razie następna instrukcja, a jeżeli występuje słowo else - instrukcja po słowie else.

Przykłady:

if x>0 then y:=1;

if (x>0) or (y<1) then z:=3

else

begin

z:=2;

y:=z+1

end;

Instrukcje warunkowe if mogą być zagnieżdżane, tzn. po słowach then i/lub else mogą występować kolejne instrukcje jeśli.W instrukcji zagnieżdżonej, każda jednostka else jest przyporządkowana najbliższej poprzedzającej ją jednostce then, dla której jednostka else jeszcze nie wystąpiła.

Przykłady:

if x>0 then if y>0 then z:=1;

- Instrukcja case ... of ... else ...end;

W przypadku instrukcji wyboru, wykonanie konkretnych instrukcji jest uzależnione od wartości pewnej zmiennej (selektora).Wyrażenie (selektor) musi być typu porządkowego.

Instrukcje wyboru mogą być poprzedzone jedną lub kilkoma stałymi wyboru.Poszczególne stałe wyboru oddzielane są przecinkami. Stałe wyboru oddzielane są dwukropkiem od instrukcji wyboru.

Przykład

case znak of

'A'..'Z', 'a'..'z' : Writeln('litera');

'0'..'9' : Writeln('cyfra');

'+', '-', '*', '/' : Writeln('operator');

else

Writeln('znak specjalny');

end;

- Instrukcje iteracyjne służą do wielokrotnego wykonywania pewnych sekwencji instrukcji. Instrukcje iteracyjne mogą być stosowane zamiennie, co oznacza, że praktycznie

każdą .pętlę. można zapisać za pomocą dowolnie wybranej instrukcji. Nie oznacza to jednak, że polecam taki sposób programowania. Zastosowanie tej .najwłaściwszej jest prawdziwą sztuką, a zależy przede wszystkim od sposobu myślenia programisty.

- Instrukcja for..to, for...downto Stosowana jest najczęściej dla wielokrotnego wykonania grupy instrukcji gdy znana jest liczba powtórzeń.

Parametr zmienna oraz wartość inicjująca i kończąca instrukcję muszą należeć do

jednego z typów porządkowych.

Przykłady

for i := 1 to N do Writeln(i);

for i := 1 to 10 do

for j := 1 to 10 do

begin

x := 0;

for k := 1 to 10 do

x := x + macierz_1[i,j] * macierz_2[k,j];

macierz[i,j] := x

end;

for znak:='z' downto 'a' do Writeln(znak);

- Instrukcja repeat...until Instrukcja ta służy do wykonywania obliczeń iteracyjnych ze sprawdzaniem warunku na końcu instrukcji. Instrukcje zawarte pomiędzy repeat i until sekwencyjnie wykonywane dopóki wyrażenie logiczne po słowie kluczowym until nie osiągnie wartości True. Ponieważ warunek sprawdzany jest na końcu instrukcji,instrukcje zamieszczone pomiędzy słowami kluczowymi repeat i until wykonają się zawsze przynajmniej jeden raz.

Przykłady

repeat

Readln(liczba)

until liczba=0;

repeat

Write('Wprowadź liczbę całkowitą: ');

Readln(liczba)

until (liczba >= 0) and (liczba <=9);

- Instrukcja while ...do ...; służy do opisywania iteracji ze sprawdzeniem warunku na początku instrukcji

Przykłady

while liczba <>0 do Readln(liczba);

while (liczba < 0) and (liczba >9) do

begin

Write('Wprowadź liczbę całkowitą: ');

Readln(liczba)

end;

- Instrukcja wiążąca with ... do ..;

Przykłady

with data[i] do

begin

miesiac := 1;

rok := rok + 1;

end;

PLIKI

PLIKI TEKSTOWE zapisują informacje jako ciąg znaków (kodów ASCII) . Można w nich zapisywać wielkości różnych typów oraz stosować formatowanie zapisu. Pliki te umożliwiają wyłącznie dostęp sekwencyjny do zawartych w nich danych. Oznacza to, że aby odczytać wartość określonego elementu, należy wcześniej przeczytać to co jest przed nim.

PLIKI ZDEFINIOWANE wykorzystują w zapisie reprezentację maszynową. W przypadku pliku zdefiniowanego możliwy jest zapis i odczyt wielkości wyłącznie jednego typu składowego. Pliki te są plikami o dostępie swobodnym, co oznacza, że w każdym momencie możliwy jest dostęp do dowolnego elementu pliku.

PLIKI NIEZDEFINIOWANE stosuje się w celu dostępu do fizycznych zbiorów danych zgodnie z ich wewnętrznym formatem lub w przypadku, gdy typ pliku nie jest istotny (np. podczas kasowania pliku z dysku).

W przetwarzaniu plików wyróżnia się następujące etapy:

• kojarzenie pliku z fizycznym zbiorem danych

• otwarcie pliku

• wykonanie operacji plikowych (przetwarzanie pliku)

• zamknięcie pliku

FUNKCJE I PROCEDURY OBSŁUGI DOWOLNYCH PLIKÓW

Assign(zmienna_plikowa, nazwa_zbioru_typu_łańcuchowego)

Procedura ta umożliwia skojarzenie zmiennej plikowej z fizycznym zbiorem danych o podanej ścieżce (max 79znaków) . W momencie wywołania powyższe procedury plik nie może być otwarty. Jeżeli jako drugi parametr podamy pusty łańcuch, zmienna plikowa zostanie skojarzona ze standardowymi urządzeniami wejścia i wyjścia- klawiaturą i monitorem.

Rewrite(zmienna_plikowa)

lub

Rewrite(zmienna_plikowa,rozmiar)

Procedura powoduje utworzenie nowego fizycznego zbioru danych o nazwie skojarzonej wcześniej z podaną zmienną plikową (otwarcie do zapisu). W przypadku gdy zbiór o takiej nazwie już istnieje, zostanie on usunięty a w jego miejscu zostanie utworzony nowy zbiór pusty. Zbiór po otwarciu ustawiany jest w pozycji początkowej. Druga postać wywołania procedury może być stosowana tylko w odniesieniu do plików niezdefiniowanych. W przypadku plików niezdefiniowanych, za pomocą parametru rozmiar (typu Word)można określić rozmiar tworzonych zapisów zewnętrznego zbioru danych. Pominięcie tego argumentu(parametru) oznacza przyjęcie rozmiaru domyślnego równego 128 bajtów.

Reset(zmienna_plikowa)

lub

Reset(zmienna_plikowa, rozmiar)

Procedura ta służy do otwarcia pliku skojarzonego z już istniejącym zbiorem. (Otwarcie do odczytu). Zbiór pootwarciu ustawiany jest w pozycji początkowej. Druga postać wywołania procedury może być stosowana tylkow odniesieniu do plików niezdefiniowanych.

Release- zwalnia aktywne okno z pamięci. Warto używać przy wyjściu z programu

Procedura ta usuwa ze stosu zmienną dynamiczną wskazywaną zmienną_wskaźnikową oraz wszystkie zmienne następujące po niej.

Close(zmienna_plikowa);

Procedura zamyka fizyczny zbiór danych skojarzony ze zmienną plikową.

Eof(zmienna_plikowa);

lub

Eof (gdy wywołanie dotyczy standardowego pliku wejściowego Input)

Funkcja ta przyjmuje wartość logiczną TRUE gdy plik znajduje się w pozycji przed ostatnim znakiem zbioru

(znakiem Ctrl-Z) lub gdy zbiór nie zawiera żadnych elementów. W przeciwnym wypadku ma wartość FALSE.

Erase(zmienna_plikowa)

Procedura usuwa zbiór skojarzony ze zmienną plikową. Plik ten nie może być otwarty.

Rename(zmienna_plikowa, łańcuch)

Procedura umożliwia zmianę nazwy zbioru dyskowego. Zbiorowi skojarzonemu ze zmienną plikową

nadawana jest nazwa określona przez łańcuch. Plik nie może być otwarty.

ChDir(ścieżka)

Procedura umożliwiają zmianę bieżącego katalogu na katalog i/lub napęd określony przez ścieżkę, np.:

ChDir('C:');

ChDir(A:\PROGRAMY');

GetDir(liczba, łańcuch)

Po wywołaniu tej procedury uzyskamy informacje o bieżącym katalogu w określonym napędzie.

liczba = 0 - napędem jest napęd bieżący

liczba = 1 - napęd A

liczba = 2 - napęd B, itd.

Nazwa bieżącego katalogu (dla napędu określonego liczbą) podstawiana jest pod zmienną łańcuch typu string.Dla przykładu, po wywołaniu procedury GetDir(3,katalog);

pod zmienną katalog podstawiana jest nazwa bieżącego katalogu na dysku C:

MkDir(łańcuch)

Procedura powoduje utworzenie nowego podkatalogu określonego przez łańcuch (ścieżkę nowego

podkatalogu), np.;MkDir('A:\PASCAL\DANE');

RmDir(ścieżka)

Procedura usuwa pusty podkatalog określony przez ścieżkę.

IOResult

Jest to bezparametrowa funkcja typu Word podająca, w przypadku wyłączonej kontroli systemowej warunków wejścia wyjścia, status ostatnio wykonanej operacji wejścia-wyjścia. Jeżeli podczas wykonywania operacji wejścia wyjścia nie wystąpi żaden błąd to funkcja przyjmuje wartość 0, w przeciwnym wypadku zwraca kod błędu.

FUNKCJE I PROCEDURY PRZETWARZANIA PLIKÓW TEKSTOWYCH

Append(zmienna_plikowa)

Procedura otwiera plik skojarzony ze zmienną plikową i ustawia zbiór na pozycji końcowej (otwarcie do dopisywania).

Eoln(zmienna_plikowa);

lub

Eoln (gdy wywołanie dotyczy standardowego pliku wejściowego Input)

Funkcja, której wartość logiczna jest TRUE gdy plik znajduje się w pozycji znaku końca wiersza (tj. znakuCR) lub gdy wartością funkcji Eof dla tej samej zmiennej plikowej jest TRUE. W przeciwnym wypadku wartością funkcji jest FALSE.

Flush(zmienna_plikowa)

Procedura ta powoduje dla pliku tekstowego otwartego wywołaniem procedury Rewrite lub Append wyzerowanie bufora wejścia. Przez ten bufor wprowadzane są zapisy do zewnętrznego zbioru danych.

Read(zmienna_plikowa,lista_zmiennych)

lub

Readln(zmienna_plikowa,lista_zmiennych)

Procedury te służą do czytania elementów z plików. Pierwszym parametrem tych procedur jest odpowiednia zmienna plikowa, po której następują oddzielone przecinkami nazwy czytanych zmiennych. Po każdorazowym odczytaniu wartości pojedynczej zmiennej następuje automatyczne przesunięcie wskaźnika do początku następnego elementu. W przypadku procedury Readln wskaźnik przesuwa się do początku następnego wiersza.

Write(zmienna_plikowa,lista_argumentów)

lub

Writeln(zmienna_plikowa,lista_argumentów)

Procedury powyższe umożliwają wprowadzanie elementów do plików. Podobnie jak w przypadku czytania,pierwszym parametrem tych procedur jest identyfikator odpowiedniej zmiennej plikowej, odpowiadającej otwartemu uprzednio plikowi. Wywołanie procedur powoduje zapisanie do fizycznego zbioru odpowiednich wielkości. Po każdorazowym zapisaniu wartości pojedynczej zmiennej następuje automatyczne przesunięcie

wskaźnika do początku następnego elementu. W przypadku procedury Writeln wskaźnik przesuwa się do początku następnego wiersza.

SeekEof (zmienna_plikowa);

lub

SeekEof

Funkcja ta daje takie same wyniki jak funkcja Eof, z tym że ignoruje najbliższe spacje, znaki tabulacji oraz znaki CR i LF.

SeekEoln (zmienna_plikowa);

lub

SeekEof

Funkcja ta daje takie same wyniki jak funkcja Eoln, z tym że ignoruje najbliższe spacje, znaki tabulacji oraz znaki CR i LF.

SetTextBuf(zmienna_plikowa, bufor)

lub

SetTextBuf(zmienna_plikowa, bufor, rozmiar)

Procedura ta przypisuje bufor wejścia wyjścia do danego pliku tekstowego. Bufor jest w tym przypadku dowolna zmienną. Zwiększając rozmiar bufora można uzyskać np. szybszy odczyt danych ze zbioru.

FUNKCJE I PROCEDURY DZIAŁAJĄCE WYŁĄCZNIE NA PLIKACH NIETEKSTOWYCH

FileSize(zmienna_plikowa)

Wartością funkcji jest rozmiar (LongInt) wyspecyfikowanego pliku

FilePos(zmienna_plikowa)

Wartością funkcji jest liczba całkowita typu LongInt, podająca aktualną pozycje pliku skojarzonego ze zmienną plikową .Wartość funkcji jest równa 0 jeżeli plik znajduje się w pozycji początkowej, natomiast gdy plik znajduje się w pozycji końcowej wartość ta jest równa wartości funkcji FileSize.

Seek(zmienna_plikowa, pozycja)

Procedura ta umożliwia przesunięcie aktualnego położenia pliku do elementu o podanej liczbie porządkowej,określonego parametrem pozycja typu LongInt.

Truncate(zmienna_plikowa)

Procedura usuwa z pliku skojarzonego ze zmienną plikową wszystkie elementy począwszy od aktualnej pozycji do końca pliku.

1. program pliki;

{$APPTYPE CONSOLE}

uses

SysUtils;

var f:textfile;

g:file of real;

x,y,z: real;

begin

{ TODO -oUser -cConsole Main : Insert

code here }

assignfile(g,'b.dat');

reset(g);

assignfile(f,'c.txt');

rewrite(f);

while not eof (g) do

begin

read (g,x,y,z);

writeln (f,x:5:2,' ',y:5:2,' ',z:5:3);

end;

closefile(g);

closefile(f);

end.

2. program Project2;

{$APPTYPE CONSOLE}

uses

SysUtils;

var f:textfile;

g:file of real;

x,y,z: real;

begin

{ TODO -oUser -cConsole Main : Insert

code here }

assignfile(f,'a.txt');

reset(f);

assignfile(g,'b.dat');

rewrite(g);

while not eof (f) do

begin

readln (f,x,y,z);

write (g,x,y,z);

end;

closefile(f);

closefile(g);

end.

3. program rekordy;

{$APPTYPE CONSOLE}

uses

SysUtils;

type pkt=record

nr: integer;

X,Y,Z: real;

opis: string[20];

end;

var f: textfile;

g: file of pkt;

punkty:pkt;

begin

{ TODO -oUser -cConsole Main : Insert

code here }

assignfile(f,'a.txt');

assignfile(g,'b.dat');

reset(f);

rewrite(g);

while not seekeof(f) do

begin

readln(f, punkty.nr, punkty.X, punkty.Y, punkty.Z, punkty.opis);

write(g,punkty);

end;

closefile(f);

closefile(g);

end.

4. program rekordy2;

{$APPTYPE CONSOLE}

uses

SysUtils;

type pkt=record

nr: integer;

X,Y,Z: real;

opis: string[20];

end;

var f: textfile;

g: file of pkt;

punkty:pkt;

begin

{ TODO -oUser -cConsole Main : Insert

code here }

assignfile(g,'b.dat');

assignfile(f,'c.txt');

reset(g);

rewrite(f);

while not eof(g) do

begin

read(g,punkty );

writeln(f,punkty.nr,' ', punkty.X:5:2,' ',

punkty.Y:5:2,' ', punkty.Z:5:3,' ', punkty.opis);

end;

closefile(g);

closefile(f);

end.

5.PODAJ ELEMENTY TABLICY

type tab=array[1..30,1..30] of Real;

var A:tab; j,i,k,w:byte; a:textfile;

begin

Assign(a,'a.txt');

Reset(a);

Readln(a,w,k);

For i:=1 to w do

Begin

For j:=1 to k do

Read(a,A[i,j]);

Write(A[i,j]);

End;

Readln(a);

Writeln;

End;

Closefile(a);

PLIK

const

max=20; var H:integer; dane:textfile; i:byte;

begin assignfile(dane,'dane.txt'); reset(dane);

for i:=1 to max do begin writeln ('podaj Hpkt',i); readln (H); writeln (dane,i,H);

REKORD

const

max=20; TYPE punkty=record H:real; i: byte; end;

var H:real; dane:file of punkty; i:byte;

begin assignfile(dane,'dane.txt'); reset(dane);

for i:=1 to max do

begin write ('podaj H pkt',i); read (H); pkt:Nr:=i; write (dane,i,H); end; closefile (dane);

Przykład 1

Utwórz plik tekstowy skojarzony ze zbiorem

dane.txt i zapisz do niego wartości zmienny

ch x, y, z.

var dane : Text

{ ... }

Assign (dane, 'dane.txt'); { skojarzenie zmienne

j plikowej dane ze zbiorem .dane.txt. }

Rewrite (dane); { otwarcie pliku do zapisu }

Write (dane, x, y, z); { zapisanie wartości

zmiennych x, y, z }

Close (dane); { zamknięcie pliku }

{ ... }

Przykład 2

Do istniejącego pliku tekstowego .dane.txt.

dopisz wartości zmiennych x, y, z

var dane:Text

{ ... }

Assign (dane, 'dane.txt'); { skojarzenie

zmiennej plikowej dane ze zbiorem .dane.txt. }

Append (dane); { otwarcie pliku do .

dopisywania. }

Write (dane, x, y, z); { zapisanie wartości

zmiennych x, y, z }

Close (dane); { zamknięcie pliku }

{ ... }

Przykład 3

Do pliku zdefiniowanego (plik : file of Byte)

dane.dat, zapisz 10 przypadkowych liczb

całkowitych.

var plik : file of Byte;

{ ... }

Assign (plik, 'dane.dat');

Rewrite(plik);

Randomize;

for i:=1 to 10 do

begin

x:=Random(255);

Write(plik,x);

end;

Close(plik);

{ ... }

Przykład 4

Z pliku zdefiniowanego (plik : file of Byte)

dane.dat, odczytaj n-ty element.

var plik:file of Byte;

{ ... }

Write('Podaj numer kolejny elementu :');

Readln(numer);

Assign (plik, 'dane.dat');

Reset(plik);

if numer <= FileSize(plik) then { sprawdzamy,

czy istnieje element }

begin

Seek (plik, numer-1); { numer-1, ponieważ

pierwszy element ma numer 0 }

Read (plik, liczba);

end else Write('Brak elementu ',numer);

Close (plik);

{ ... }

Przykład 5

Na końcu pliku zdefiniowanego .dane.dat.

dopisz jeden element.

var plik:file of Byte;

x : Byte;

{ ... }

Assign (plik, 'dane.dat');

Reset (plik);

Seek (plik, FileSize(plik)); { porównaj z

procedurą Append }

Write (plik, x);

Close (plik);

{ ... }

Przykład 6

Odczytaj z pliku zdefiniowanego .dane.dat.

wszystkie elementy i wypisz je na

ekranie.

var plik : file of Byte;

x:Byte;

{ ... }

Assign (plik, 'dane.dat' );

Reset (plik);

while not Eof(plik) do { dopóki nie ma

końca

zbioru }

begin

Read (plik, x);

Writeln (x)

end;

Close (plik);

{ ... }

Przykład 7

Przykład programu korzystającego z

plików

tekstowych.

program pliki_tekstowe_macierze;

const max_W = 10;

max_K = 10;

var f : Text;

opis : String;

N_wierszy,N_kolumn : Word;

macierz : Array [1..max_W,1..max_K]

of

Real;

i,j : Integer;

-procedure czytaj;

begin

Assign(f,'dane.txt');

{ Skojarzenie zmiennej plikowej f z

fizycznym

zbiorem danych dane.txt }

Reset(f);

{ Otwarcie zmiennej plikowej (pliku dane.txt)

do odczytu }

Readln(f,opis);

{ Wczytanie 1-ego wiersza pliku dane.txt i

przejście do początku następnego wiersza }

Read(f,N_wierszy,N_kolumn);

{ Wczytanie liczby wierszy i liczby kolumn

macierzy }

Readln(f);

{ Przejście do początku następnego wiersza

pliku }

for i:=1 to N_wierszy do

begin

for j:=1 to N_kolumn do Read(f,macierz[i,j]);

{ Wczytanie elementów jednego wiersza

macierzy }

Readln(f);

{ Przejście do początku wiersza następnego }

end;

Close(f);

{ Zamknięcie zmiennej plikowej f (pliku

dane.txt) }

end; { procedury czytaj }

-procedure wypisz_na_ekran;

begin

for i:=1 to N_wierszy do

begin

for j:=1 to N_kolumn do Write(macierz[i,j]:6:2);

{ Wypisanie jednego wiersza macierzy na

ekranie monitora}

Writeln;

{ Przejście do początku wiersza następnego }

end;

end; { wypisz_na_ekran}

-procedure zapisz_do_pliku;

begin

Assign(f,'wyniki.txt');

{ Skojarzenie zmiennej plikowej f z fizycznym

zbiorem danych wyniki.txt }

Rewrite(f);

{ Otwarcie zmiennej plikowej f (pliku wyniki.txt)

do zapisu }

Writeln(f,opis+' pomnozona przez 2');

{ Zapis 1-ego wiersza w pliku wyniki.txt i

przejście do początku następ. wiersza }

Write(f,N_wierszy,' ',N_kolumn);

{ Zapisanie liczby wierszy i liczby kolumn

macierzy }

Writeln(f);

{ Przejście do początku następnego wiersza }

for i:=1 to N_wierszy do

begin

for j:=1 to N_kolumn do Write(f,2*macierz[i,j]:10

:2);

{ Zapisanie jednego wiersza macierzy }

Writeln(f);

{ Przejście do wiersza następnego }

end;

Close(f);

{ Zamknięcie zmiennej plikowej f (pliku

wyniki.txt) }

end; {wypisz_do_pliku}

-procedure dopisz_do_pliku;

begin

Assign(f,'wyniki.txt');

{ Skojarzenie zmiennej plikowej f z fizycznym

zbiorem danych wyniki.txt }

Append(f);

{ Otwarcie zmiennej plikowej f (pliku wyniki.txt)

do dopisywania }

Writeln(f,opis);

{ Dopisanie wiersza do pliku wyniki.txt i

przejście do początku następnego wiersza }

Write(f,N_wierszy,' ',N_kolumn);

{ Zapisanie liczby wierszy i liczby kolumn

macierzy }

Writeln(f);

{ Przejście do początku następnego

wiersza }

for i:=1 to N_wierszy do

begin

for j:=1 to N_kolumn do Write(f,macierz

[i,j]:10:2);

{ Zapisanie jednego wiersza macierzy }

Writeln(f);

{ Przejście do wiersza następnego }

end;

Close(f);

{ Zamknięcie zmiennej plikowej f (pliku

wyniki.txt) }

end; { dopisz_do_pliku }

begin { programu }

czytaj; { wywołanie procedury czytaj }

wypisz_na_ekran; { wywołanie procedur

y wypisz_na_ekran }

zapisz_do_pliku; { wywołanie procedury

zapisz_do_plikuj }

dopisz_do_pliku; { wywołanie procedury

dopisz_do_pliku }

end. { programu }

Przykład

If (a>10) Then

b=20

c=30

End If

lub

If (a>10) Then b=20 : c=30

Przykład:

If (a>10) Then

b=20

c=30

Else

b=40

c=50

End If

lub

If (a>10) Then b=20 : c=30 Else b=40 : c=50

Reset-procedura do odczytu,otwarcie

plikow.otwiera pliki na poczatku

Rewrite-zapisac

Append-dopisac za ostatnim elem.

Close-zamykanie plikow

Eof-czytaj tak dlugo az plik się skonczy

SeekEof-koniec pliku przy najbliższych

spacjach,tabulatorach



Wyszukiwarka

Podobne podstrony:
duża sciaga
mikroekonomia duza sciaga (6 str) NKO2YKJHOMLEWLAZJUEYCFBGWB43EQ2HOFJIGHI
mikroekonomia duza sciaga (6 str), Ekonomia, ekonomia
gena duza ściąga, VI rok, Genetyka, Genetyka, Egzamin
Procesy fermentacyjne duża ściąga, Studia, Ochrona środowiska
Duza Sciaga
sciaga CNC duża
Metodyka - Ściąga Duża, AWF, Lekkoatletyka
Ściąga duża (2)
sciaga duza
zarządzanie ściąga (duża)
sciaga duza czcionka EGiB, Wycena Nieruchomości, ewidencja gruntów i budynków
sciaga duza, Studia, Mibm, semestr I, Pnom, Pnom
ŚCIAGA ZE STAŃKA duża, Politechnika Poznańska (PP), Obrabiarki CNC, Wykład

więcej podobnych podstron