Zobacz następne gify Grafika

Tryb GRAFICZNY jest ściśle związany z kartą graficzną, w jaką jest wyposażony komputer. Podczas inicjowania trybu graficznego należy określić właściwy dla danego sprzętu sterownik i tryb pracy ekranu. Do tego służy procedura DetectGraph, której wywołanie jest następujące:

DETECTGRAPH (sterownik, tryb)

Jeśli zmienne sterownik i tryb są zmiennymi typu Integer, to wykonanie instrukcji:

sterownik := Detect;

InitGrah(sterownik, tryb, C:\TP\BGI);

spowoduje zainicjowanie trybu graficznego właściwego dla karty graficznej, w jaką jest wyposażony zestaw komputerowy. Odpowiedni sterownik powinien znajdować się na dysku stałym C: w podkatalogu BGI katalogu TP. Zakończenie pracy programu w trybie graficznym następuje poprzez wywołanie bezparametrowej procedury CloseGraph, która powoduje usunięcie sterownika z pamięci operacyjnej ekranu i powrót ekranu do trybu sprzed zainicjowania trybu graficznego.

Zobacz następne gify następny program

Grafika

Poniższy program przedstawia zainicjowanie trybu graficznego i wyświetlenie na ekranie prostych figur geometrycznych.

Program Graf;

    Uses Crt,Graph;

    Var sterownik,tryb,i:Integer;

Begin

    Sterownik:=detect;

    InitGraph(sterownik,tryb,'C:\Tp\BGI');

    For i:=1 to 100 do

      Begin

      SetColor(12);

      Circle(i,100,i);

      Setcolor(4);

        Begin

        SetColor(13);

        Bar(500,120,100,200);

      End;

      Setcolor(9);

      Ellipse(500,100,0,360,50,i);

      SetColor(11);

      Circle(i,200,i);

      Setcolor(5);

      Ellipse(500,200,0,360,50,i);

      Begin

      Bar3D(400,200,200,400,50,TopOn);

    End;

    End;

    Delay(1000);

    CloseGraph;

End.

Zobacz następne gify następny program

Grafika

Jest to przykład prostego programu z zainicjowanym trybem graficznym.

Program proste_cwiczenia_graficzne;

    uses Graph;

    var i, d,m:integer;

begin

    d:=detect;

    Initgraph(d,m,'c:\tp\bgi');

    SetColor(yellow {14});

    Rectangle(0,0,getmaxx,getmaxy);

    for i:=1 to getmaxx do

      begin

      Setcolor(i div 25);

      circle (0,i,getmaxy);

      line (0,0,i,getmaxy);

    end;

    readln;

end.

Zobacz następne gify następny program

Grafika

Program rysujący wykresy dwóch podstawowych funkcji trygonometrycznych : y = sin x, y = cos x.

Program wykres_sin;

    Uses Dos,Crt,Graph;

    Const skalaX=100;skalaY=150;

    Var Sterownik,Tryb, x,y:integer;

Procedure Inicjacja_graf;

    Begin Sterownik:=detect;

      InitGraph(Sterownik,Tryb,'C:\TP\BGI');

    End;

Procedure RysujXY;

    Begin

    Setcolor(15);

    Line(0, GetMaxY div 2,GetMaxX, GetMaxY div 2);

    Line(GetmaxX div 2,0,GetmaxX div 2, GetMaxY);

End;

Procedure Rysujfunkcje;

    Begin

    For x:= -1 * (GetMaxX div 2) To GetMaxX div 2 Do

      Begin

      y:=Trunc (sin(x/skalaX)*skalaY);

      PutPixel ((GetMaxX div 2) + x, (GetMaxY div 2) - y, 12);

      y:=Trunc (cos(x/skalaX)*skalaY);

      PutPixel ((GetMaxX div 2) + x, (GetMaxY div 2) - y, 14);

    End;

End;

Procedure Opis;

    Begin

    SetColor(15);

    SetTextStyle(8,0,4);

    OutTextXY(190,15,'wykres funkcji');

    SetColor(12);

    OutTextXY(450,80,'y = sin x');

    SetColor(14);

    OutTextXY(100,80,'y = cos x');

End;

Begin

    Inicjacja_graf;

    RysujXY;

    Rysujfunkcje;

    Opis;

    Readln;

    CloseGraph;

End.

Zobacz następne gify następny program

Grafika

Program rysujący wykresy czterech podstawowych funkcji trygonometrycznych : y = sin x, y = cos x, y = tg x, y = ctg x.

Program funkcje;

    Uses graph;

    Const skalaX = 50;skalaY = 80;

    Var Sterownik,Tryb:integer;

    x,y: integer ;

Procedure Inicjowanie_graf;Begin

    Sterownik :=detect;

    Initgraph(Sterownik,Tryb,'c:\tp\bgi');

End;

Procedure Rysuj_osie_XY;

    Begin

    Line(0,GetMaxY div 2 ,GetMaxX,GetMaxY div 2);

    Line(GetMaxX div 2,0,GetMaxX div 2,GetMaxY);

End;

Procedure Rysuj_funkcje;

    Begin

    For x := -1 * (GetMaxX div 2) To GetMaxX div 2 Do

      Begin

      y := Trunc(sin(x/skalaX)*skalaY);

      PutPixel((GetMaxX div 2) + x ,(GetMaxY div 2) - y,5);

      y := Trunc(cos(x/skalaX)*skalaY);

      PutPixel((GetMaxX div 2) + x,(GetMaxY div 2) - y,3);

      y:=Trunc((sin(x/skalaX)/cos(x/skalaX))*skalaY);

      PutPixel((GetMaxX div 2) + x,(GetMaxY div 2) - y,2);

      If x <> 0 Then

      y:=Trunc((cos(x/skalaX)/sin(x/skalaX)) * skalaY);

      PutPixel((GetMaxX div 2) + x,(GetMaxY div 2) - y,4);

    End;

End;

Procedure Opis;

    Begin

    SetColor(15);

    SetTextStyle(8,0,4);

    OutTextXY(170,15,'wykresy funkcji');

    SetColor(5);

    OutTextXY(80,90,'y = sinx');

    SetColor(3);

    OutTextXY(420,90,'y = cosx');

    SetColor(2);

    OutTextXY(80,350,'y = tgx');

    SetColor(4);

    OutTextXY(420,350,'y = ctgx');

End;

    Begin

    Inicjowanie_graf;

    Rysuj_osie_XY;

    Rysuj_funkcje;

    Opis;

    Readln;

    CloseGraph;

End.

Zobacz następne gify następny ZEGAR

Grafika

Program animacji zegara analogowego pobierającego czas systemowy.

Program Zegar;

    Uses Crt,Dos,Graph;

    Var h,m,s,ss,start:Word;

    Sterownik,Tryb,a,b,c,i,r,x1,y1,x2,y2,cale,godzinowe:Integer; sgodz,smin,ssek,tarcza:Real;

Procedure Narysuj_Tarcze;

Begin SetColor(15);

    For b:=207 To 210 Do

      Begin

      Circle(320,240,b);

    End;

    Setcolor(10);

    For i:=214 to 220 do

      Begin

      Circle(320,240,i);

      Rectangle(100,20,540,460);

      Rectangle(98,20,542,460);

      Rectangle(95,20,545,460);

      Rectangle(93,20,547,460);

      Rectangle(90,20,550,460);

      Rectangle(88,20,552,460);

    End;

    For a:=0 To 59 Do

      Begin

      tarcza:=a*(pi/6);

      SetLineStyle(0,0,ThickWidth);

      If (a mod 5)=0 Then

        Begin

        godzinowe:=220;

        End

      Else

    Begin

      cale:=195;

      godzinowe:=220;

    End;

    x1:=Round(cos(tarcza-pi/2)*cale)+320;

    y1:=Round(sin(tarcza-pi/2)*cale)+240;

    x2:=Round(cos(tarcza-pi/2)*godzinowe)+320;

    y2:=Round(sin(tarcza-pi/2)*godzinowe)+240;

    Line(x1,y1,x2,y2);

End;

End;

Procedure Godziny;

    Var Godz:Real;

Begin

    SetColor(0);

    Line(320,240,Round(cos(sgodz-pi/2)*100)+320,Round(sin(sgodz-pi/2)*100)+240);

    SetColor(15);

    godz:=h*(pi/6)+m*(pi/360);

    sgodz:=godz;

    Line(320,240,Round(cos(godz-pi/2)*100)+320,Round(sin(godz-pi/2)*100)+240);

End;

Procedure Minuty;

    Var Min:Real;

Begin

    SetColor(0);

    Line(320,240,Round(cos(smin-pi/2)*175)+320,Round(sin(smin-pi/2)*175)+240);

    SetColor(15);

    min:=m*(pi/30)+s*(pi/1800);

    smin:=min;

    Line(320,240,Round(cos(min-pi/2)*175)+320,Round(sin(min-pi/2)*175)+240);

End;

Procedure Sekundy;

    Var Sek:Real;

Begin

    SetColor(0);

    Line(320,240,Round(cos(ssek-pi/2)*175)+320,Round(sin(ssek-pi/2)*175)+240);

    SetColor(12);

    sek:=s*(pi/30);

    ssek:=sek;

    Line(320,240,Round(cos(sek-pi/2)*175)+320,Round(sin(sek-pi/2)*175)+240);

End;

Procedure Napis;

    Begin

    SetColor(12);

    SetTextStyle(8,0,4);

    OutTextXY(245,140,'KALITKA');

    OutTextXY(299,55,'XII');

    OutTextXY(302,390,'VI');

    OutTextXY(130,215,'IX');

    OutTextXY(475,215,'III');

End;

Begin

Sterownik:=Detect;

InitGraph(Sterownik,Tryb,'c:\tp\bgi');

Narysuj_Tarcze;

Repeat

GetTime(h,m,s,ss);

If s<>start Then

    Begin

    Napis;

    Godziny;

    Minuty;

    Sekundy;

    start:=s;

End;

Until KeyPressed;

End.

Zobacz następne gify Moduły

Grafika

Program animacji zegara analogowego pobierającego czas systemowy.

Program Zegar;

    Uses Crt,Dos,Graph;

      Var h,m,s,ss,start:Word;

        Sterownik,Tryb,a,b,i,x1,y1,x2,y2,cale,godzinowe:Integer;

        sgodz,smin,ssek,tarcza:Real;

      Procedure Tlo;

      var i:integer;

        Begin

        Setcolor(9);

        For i:=0 to 460 do

        Begin

        Rectangle(95,40,545,i);

      End;

    End;

Procedure Narysuj_Tarcze;

Begin

Setcolor(0);

Circle(320,240,207);

For b:=1 to 195 do

Begin

Circle(320,240,b);

End;

For a:=0 To 59 Do

Begin

tarcza:=a*(pi/30);

If (a mod 5)=0 Then

Begin

godzinowe:=210;

End

Else

Begin

cale:=195;

godzinowe:=205;

End;

x1:=Round(cos(tarcza-pi/2)*cale)+320;

y1:=Round(sin(tarcza-pi/2)*cale)+240;

x2:=Round(cos(tarcza-pi/2)*godzinowe)+320;

y2:=Round(sin(tarcza-pi/2)*godzinowe)+240;

Line(x1,y1,x2,y2);

SetLineStyle(0,0,ThickWidth);

Setcolor(15);

End;

End;

Procedure Godziny;

Var Godz:Real;

    Begin

    SetColor(0);

    Line(320,240,Round(cos(sgodz-pi/2)*100)+320,Round(sin(sgodz-pi/2)*100)+240);

    SetColor(15);

    godz:=h*(pi/6)+m*(pi/360);

    sgodz:=godz;

    Line(320,240,Round(cos(godz-pi/2)*100)+320,Round(sin(godz-pi/2)*100)+240);

End;

Procedure Minuty;

Var Min:Real;

Begin

SetColor(0);

Line(320,240,Round(cos(smin-pi/2)*165)+320,Round(sin(smin-pi/2)*165)+240);

SetColor(15);

min:=m*(pi/30)+s*(pi/1800);

smin:=min;

Line(320,240,Round(cos(min-pi/2)*165)+320,Round(sin(min-pi/2)*165)+240);

End;

Procedure Sekundy;

Var Sek:Real;

Begin

SetColor(0);

Line(320,240,Round(cos(ssek-pi/2)*175)+320,Round(sin(ssek-pi/2)*175)+240);

SetColor(15);

sek:=s*(pi/30);

ssek:=sek;

Line(320,240,Round(cos(sek-pi/2)*175)+320,Round(sin(sek-pi/2)*175)+240);

End;

Procedure Napis;

Begin

SetColor(15);

SetTextStyle(8,0,4);

OutTextXY(298,50,'12');

OutTextXY(400,73,'1');

OutTextXY(215,73,'11');

OutTextXY(165,138,'10');

OutTextXY(225,360,'7');

OutTextXY(460,138,'2');

OutTextXY(310,390,'6');

OutTextXY(400,360,'5');

OutTextXY(450,300,'4');

OutTextXY(175,300,'8');

OutTextXY(145,215,'9');

OutTextXY(470,215,'3');

End;

Begin

Sterownik:=Detect;

InitGraph(Sterownik,Tryb,'c:\tp\bgi');

Tlo;

Narysuj_Tarcze;

Repeat

GetTime(h,m,s,ss);

If s<>start Then

Begin

Napis;

Godziny;

Minuty;

Sekundy;

start:=s;

End;

Until KeyPressed;

End.

powrót do głównego menu

Zobacz następne gify Przykładowa baza danych

Moduły z przykładowym zastosowaniem

Moduły są służą przede wszystkim do grupowania procedur i funkcji w biblioteki, a także do dzielenia dużych programów na powiązane logicznie części. Po zadeklarowaniu modułu w danym programie dostępna jest każda procedura i funkcja zdefiniowana w danym module., jak również zadeklarowane w nim stałe, typy i zmienne. Uruchomienie skompilowanego programu zawierającego deklaracje modułu wymaga, aby moduł taki był również wcześniej skompilowany.

Ogólna postać modułu jest następująca:

UNIT nazwa modułu;

część opisowa modułu

część implementacyjna

część inicjująca.

powrót do głównego menu

W programie, w którym zadeklarowano pewien moduł, można opisać elementy o takich samych identyfikatorach, jak elementy zdefiniowane w części opisowej tego modułu. Opisy występujące w programie są nadrzędne w stosunku do definicji występujących w części opisowej modułu.

Moduł do programu.

Unit Moj;

Interface

    Uses Crt;

Procedure WriteXY(x,y:byte;s:string);

Procedure WriteLnXY(x,y:byte;s:string);

Procedure Ramka1(x1,y1,x2,y2:byte);

Procedure Ramka2(x1,y1,x2,y2:byte);

Procedure Linia1Poz(x1,x2,y:byte);

Procedure Linia1Pion(y1,y2,x:byte);

Procedure Linia2Poz(x1,x2,y:byte);

Procedure Linia2Pion(y1,y2,x:byte);

Implementation

Procedure WriteXY;

    Begin

    GotoXY(x,y);

    Write(s);

    End;

    Procedure WriteLnXY;

    Begin

    GotoXY(x,y);

    WriteLn(s);

    End;

    Procedure Linia1Poz(x1,x2,y:byte);

    var a:byte;

    begin

    for a:=x1 to x2 do

    begin

    WriteXY(a,y,#196);

    end;

    end;

    Procedure Linia1Pion(y1,y2,x:byte);

    var a:byte;

    begin

    for a:=y1 to y2 do

    begin

    WriteXY(x,a,#179);

    end;

    end;

    Procedure Linia2Poz(x1,x2,y:byte);

    var a:byte;

    begin

    for a:=x1 to x2 do

    begin

    WriteXY(a,y,#205);

    end;

    end;

    Procedure Linia2Pion(y1,y2,x:byte);

    var a:byte;

    begin

    for a:=y1 to y2 do

    begin

    WriteXY(x,a,#186);

    end;

    end;

    Procedure Ramka1;

    Begin

    Textcolor(4);

    WriteXY(x1,y1,#218); {218}

    WriteXY(x2,y1,#191); {191}

    WriteXY(x1,y2,#192);

    WriteXY(x2,y2,#217);

    Linia1Poz(x1+1,x2-1,y1);

    Linia1Poz(x1+1,x2-1,y2);

    Linia1Pion(y1+1,y2-1,x1);

    Linia1Pion(y1+1,y2-1,x2);

    End;

    Procedure Ramka2;

    Begin

    Textcolor(1);

    WriteXY(x1,y1,#201 );

    WriteXY(x2,y1,#187);

    WriteXY(x1,y2,#200);

    WriteXY(x2,y2,#188);

    Linia2Poz(x1+1,x2-1,y1);

    Linia2Poz(x1+1,x2-1,y2);

    Linia2Pion(y1+1,y2-1,x1);

    Linia2Pion(y1+1,y2-1,x2);

    End;

Begin

ClrScr;

Textcolor(14);

End.

powrót do głównego menu

Na koniec programu

Przykładowy program z wykorzystaniem swojego modułu zadeklarowanego w części deklaracyjnej do utworzenia bazy danych.

Program ksiegarnia_biblioteka_dziennik;

Uses Crt,Dos,Moj;

Type Dane_osobowe = Record

Nazwisko:string[30];

Imie:string[30];

numer:Byte;

data:Word;

End;

Var Plik:File of Dane_osobowe;

Osoba:Dane_osobowe;

rekord:Integer;

Tekst,Tytul:String;

g,m,sek,ss:Word;

r,mi,d,nrdn:Word;

Procedure Otworz_Plik(nazwa:string);

Begin

Assign(Plik,nazwa);

{$I-}

Reset(Plik); {otwiera istniejący - nadpisuje}

{$I+}

If IOResult <>0 then Rewrite(Plik); {tworzy nowy -usuwa istniejący}

End;

Procedure Przegladanie;

Var znak,znak1:Char;

lancuch:String;

procedure Ekran;

Begin

GetDir(0,lancuch); {uzyskujemy inf. o bieżącym skorowidzu:0=bierz,1=a}

Textcolor(3);

Write(lancuch,'\BIBL.DAT');

GotoXY(1,25);

Textcolor(10);

Write('PgDown-nastepny, PgUp-poprzedni, Home-pierwszy, End-ostatni, Esc-koniec');

End;

Procedure Wypisz;

Begin

If rekord < 0 Then rekord:=0;

If rekord > FileSize(Plik)-1 Then rekord:=FileSize(Plik)-1;

Seek(Plik,rekord);

Read(Plik,osoba);

TextBackground(4);

Ramka1(4,6,77,21);

Textcolor(14);

Window(10,8,70,20);

TextBackground(0);

ClrScr;

GoToXY(2,1);

Write('Nazwisko ');

GoToXY(2,2);

Write('Imie ');

GoToXY(2,3);

Write('Nr ksiazki ');

GotoXY(2,12);

Write(d,' ',mi,' ',r,' o godz.',g,'.',m,'.',sek);

GoToXY(15,1);

Write(Osoba.Nazwisko);

GoToXY(15,2);

Write(Osoba.Imie);

GoToXY(15,3);

Write(Osoba.Numer);

GotoXY(28,12);

GetDate(r,mi,d,nrdn);

GetTime(g,m,sek,ss);

Write(d,' ',mi,' ',r,' o godz.',g,'.',m,'.',sek);

Window(1,1,80,25);

GoToXY(70,1);

Write(rekord+1,'/',FileSize(Plik));

End;

Begin {przegladanie}

ClrScr;

Textcolor(2);

Seek(Plik,0);

Ekran;

rekord:=0;

Wypisz;

Repeat

znak1:=ReadKey;

If znak1=#0 Then

Case ReadKey of

#73 : Dec(rekord);

#81 : Inc(rekord);

#71 : rekord:=0;

#79 : rekord:=(FileSize(Plik));

End;

Wypisz;

Until znak1=#27

End;

Procedure Wpisywanie;

Var g,m,sek,ss:Word;

r,mi,d,nrdn:Word;

Begin

ClrScr;

Textcolor(14);

Seek(Plik,FileSize(Plik));

Repeat

WriteLn;

WriteLn;

Write('Podaj NAZWISKO : ');

ReadLn(Osoba.nazwisko);

If Osoba.nazwisko <> ''then

Begin

Write('Podaj IMIĘ : ');

Readln(Osoba.imie);

Write('Podaj NR kasety : ');

ReadLn(Osoba.numer);

WriteLn('Data rejestracji: ');

GetDate(r,mi,d,nrdn);

GetTime(g,m,sek,ss);

Write(d,' ',mi,' ',r,' o godz.',g,'.',m,'.',sek);

Write(Plik,osoba);

End;

Until osoba.nazwisko='';

End;

Procedure Menu;

Var znak:Char;

Begin

ClrScr;

Repeat

ClrScr;

GotoXY(33,6);

Textcolor(11);

WriteLn(' M E N U');

GotoXY(29,10);

Textcolor(14);

WriteLn('W - Wpisywanie klienta ');

GotoXY(29,12);

Textcolor(2);

WriteLn('P - Przeglądanie listy klientów ');

GotoXY(29,17);

Textcolor(4);

WriteLn(' K - Koniec pracy');

Repeat

znak:=Upcase(readkey);

Until znak in ['W','P','K'];

Case znak of

'P':przegladanie;

'W':wpisywanie;

End;

Until znak='K';

End;

Begin

ClrScr;

Otworz_Plik('bib.dat');

ClrScr;

Menu;

End.

powrót do głównego menu