{
  Program ilustruje strukture programu Pascalowego, niektore definicje,
  deklaracje i instrukcje

                                (C) J.Kobus Instytut Fizyki UMK 2002)
}

(*

W Pascalu dostępne są następujące znaki i symbole:
    - litery alfabetu łacińskiego: a-z, A-Z,
    - cyfry dziesiętne: 0-9,
    - odstęp (spacja),
    - symbole specjalne: + - * / = < > [ ] . , : ; ( ) <> <= >= := .. ^
                         słowa kluczowe

Mamy następujące słowa kluczowe:
      and array begin case const div do downto else end file for function
      goto if in label mod nil not of or packed procedure program record
      repeat set then to type until var while with

Symbol pascalowy: symbol specjalny, liczba bez znaku, identyfikator,
      napis, instrukcja, etykieta.

Liczba: liczba całkowita albo rzeczywista.

Identyfikator: nazwa alfanumeryczna, ciąg znaków, z których pierwszy
       jest literą, a następne (o ile występują) są literami albo
       cyframi.

Napis: ciag znaków ujętych w apostrofy.

Etykieta: liczby typu 0..9999 oraz dowolne nazwy.

Kolejne symbole mogą (czasami muszą) być oddzielone od siebie
separatorami. Separatorami są: odstęp, zmiana wiersza i komentarz.
Komentarz stanowi dowolny ciąg znaków ujęty w nawiasy klamrowe { ... }
lub nawiasy złożone z '(' i '*' oraz '*' i ')' (por. komentarz tego programu).

*)

program Pascal_to_jest_to (Input, Output); { naglowek programu }

{
Nagłowek programu składa się ze słowa kluczowego PROGRAM oraz
identyfikatora (nazwy programu). W nawiasach okrągłych mogą, ale nie
muszą wystąpić zmienne INPUT i OUTPUT, które są identyfikatorami
standardowych plików wejściowych (do wczytywania danych) i wyjściowych
(do wyprowadzania wyników). 
}

{ część bierna programu: deklaracje i definicje }

uses
 Crt;

(* biblioteka Crt jest dostępna w niektórych (rozszerzonych) implementacjach pascala
   
uses
 Crt; {Dołączenie pakietu procedur Crt, które pozwalają na wybór
       jednego z trybów znakowych, wybór koloru tekstu i jego tla,
       definiowanie okien, sprawdzanie stanu klawiatury i sterowanie
       głośnikiem. W szczególności pakiet ten zawiera następujące
       procedury: Sound, NoSound, Delay, ReadKey }
*)

{określanie typów; typ = zbiór możliwych wartości wraz
z identyfikatorem; z typem jest także związany zestaw operacji,
które można wykonywać na obiektach danego typu}

type 
   rzeczywisty_4 = single;
   rzeczywisty_6 = real;
   rzeczywisty_8 = double;
   student	 = record
{		      imie     : array[1..20] of char;}
{		      nazwisko : array[1..40] of char;}
		      imie     : string[20];
		      nazwisko : string[40];

		      nralbumu : integer;
		      rokurodz : integer;
		   end;	       
   data		 = record
		      dzien   : 1..31;
		      miesiac : 1..12;
		      rok     : 1900..2050;
		   end;	      
   
const { deklaracje używanych stałych}
   g	    = 9.81;			      
   c	    = 3.0e+8;			      
   Nmax	    = 100;			      
   inicjaly = 'aa';		      
   kropka   = '.';			      
	    
var { deklaracje }
   bool		  : boolean;                  {zmiennej boolowskiej, logicznej}
   ch		  : char;                     {zmiennej znakowej}
   i,j,k,n,reszta : integer;                  {zmiennych całkowitych}
   nrstud	  : integer;                  {zmiennych całkowitych}
   h,r,x,y,z	  : rzeczywisty_4;            {zmiennych rzeczywistych}
   A,B		  : array[1..Nmax] of real;   {tablicy jednowymiarowej o elementach
					       typu rzeczywistego}
   tytul	  : string[30];               {zmiennej łańcuchowej}
   studWFAIIS	  : array[1..100] of student; {tablicy o elementach typu rekordowego}
   data_1,data_2  : data;                     {zmiennych rekordowych}
   ffun           : text;                     {zmiennej plikowej}
   
label { deklaracje etykiet } 
   1234,5555;		     

{ część aktywna programu zawiera instrukcję złożoną begin ... end }
   
begin
   {
   Wywołanie procedury z pakietu Crt do czyszczenia ekranu (dzialanie tej
   procedury jest równoważne działaniu polecenia dosowskiego cls)
   
   ClrScr;
   }

   {
   Możliwe operacje na wartościach całkowitych:
   +    - dodawanie,
   -    - odejmowanie,
   *    - mnożenie,
   div  - dzielenie całkowite,
   mod  - branie reszty z dzielenia całkowitego.
   
   Funkcje standardowe o wartościach całkowitych:
   abs(i)    - |x|, wartość bezwzględna,
   sqr(i)    - kwadrat wartości i, 
   succ(i)   - następnik, tj. i+1,
   pred(i)   - poprzednik, tj. i-1.  
   round(x)  - zaokrąglenie wartości rzeczywistej x do najbliższej liczby całkowitej,
   trunc(x)  - obcięcie wartości rzeczywistej x do najbliższej liczby całkowitej
               bliższej zeru
   random(i) - liczba przypadkowa (pseudolosowa) z przedziału [0..i-1] (przed jej użyciem
               musi być wołana procedura randomize) 
   
   Możliwe operacje na wartościach rzeczywistych:
   +  - dodawanie,
   -  - odejmowanie,
   *  - mnożenie,
   /  - dzielenie,
   
   Funkcje standardowe o wartościach rzeczywistych:
   abs(x)    - |x|, wartość bezwzględna,
   sqr(x)    - kwadrat wartości x,
   sqrt(x)   - pierwiastek kwadratowy,
   ln(x)     - logarytm naturalny,
   exp(x)    - funkcja wykładnicza,
   sin(x)    - funkcja sinus,
   cos(x)    - funkcja cosinus,
   arctan(x) - funkcja arcus tangens.  
   
   Argumenty powyższych funkcji mogą być typu rzeczywistego lub
   całkowitego.
   
   Liczby całkowite i rzeczywiste mogą być porównywane przy pomocy
   operatorów relacji, tj. operatorów <,>,<=,>=,<>,=.
   
   INSTRUKCJE PRZYPISANIA (PODSTAWIANIA):
   }
   ch:='!';
   i:=10;
   j:=2;
   i:=i*j+i;
   k:=i div j;
   reszta:= k mod 5;
   r:=1.3;
   x:=2.0*pi*r;
   y:=(-x+sqrt(x))/(x+r);
   z:=x+y;
   data_1.dzien:=5;
   
   nrstud:=5;
   studWFAIIS[nrstud].imie:='Adam';
   studWFAIIS[nrstud].nazwisko:='Adamowski';
   studWFAIIS[nrstud].nralbumu:=12345;
   studWFAIIS[nrstud].rokurodz:=1981;

   {
   INSTRUKCJE WEJŚCIA I WYJŚCIA
   }

   Writeln;                                    {utworzenie pustej linii}
   Writeln ('To może być dowolny ciąg znaków ... '); {wyprowadzenie napisu '...'}
   Writeln; 
   
   Write('i,j,k? ');
   Read(i,j,k);             {wczytanie z klawiatury trzech liczb całkowitych}
   Writeln(i:10,j:10,k:10); {wypisanie na ekranie monitora wartosci trzech
			    liczb całkowitych na polach o szerokośc 10
			    znaków}

   assign (ffun,'funkcja_sin.txt'); {związanie zmiennej plikowej z określonym plikiem} 
   rewrite(ffun);                   {otwarcie pliku do zapisu};
   {reset(ffun);}                   {otwarcie pliku do odczytu};
   n:=10;
   h:=pi/n;
   x:=-h;
   for k:=0 to n do
   begin
      x:=x+h;
      writeln(ffun,x:10:4,sin(x):10:4);
   end;
   close(ffun);                     {zamknięcie pliku}

   {
   INSTRUKCJA ITERACYJNA 1
   
   for var:=pierwszy to ostatni do
   instrukcja;
   
   for var:=pierwszy downto ostatni do
   instrukcja;
   }
   for k:=-5 to 5 do
      Write(k:5);
   Writeln;
   Writeln;
   
   for k:=5 downto 0 do
   begin
      Write(k:5);
      Writeln('    Turbo Pascal to jest to!');
   end;
   Writeln;
   Writeln;
   
   {
   INSTRUKCJA ITERACYJNA 2
   
   repeat
   instrukcja;
   instrukcja;
   ...
    until wyrażenie boolowskie
   }
   
   k:=-1;
   repeat             { początek instrukcji iteracyjnej 'repeat' }
      Inc(k);
      Writeln (k:5,'    Turbo Pascal to jest to!');
   until k=5;         { koniec instrukcji iteracyjnej 'repeat' }

   {Pętla 'nieskonczona': przerwanie petli przez nacisniecie Esc}
   Writeln;
   Writeln;
   Writeln ('Przerwij pętlę naciskając Esc');
   Writeln;
   k:=0;
   repeat              
      Inc(k);
      Writeln;
      Writeln (k:5,'      Pascal to jest to!');
      Writeln;
      Writeln ('Nacisnac dowolny klawisz.');
   until ReadKey=#27;  { koniec instrukcji iteracyjnej 'repeat'}
   { pętlę 'repeat ... until' można przerwać naciskając
   klawisz Esc, który w kodzie ASCII ma numer 27 }
   
   {
   INSTRUKCJA ITERACYJNA 3
   
   while  wyrazenie boolowskie do
   instrukcja;
   }
   Writeln;
   Writeln;
   n:=0;
   while n<10 do
   begin
      Inc(n);
      Write(n:5);
   end;
   Writeln;
   
   {
   INSTRUKCJA WYBORU  case ... of
   }
   Writeln;
   Writeln('Rozpoznawanie nacisniętego klawisza klawiatury: klawisz+Enter');
   Writeln('Nacisnięcie = przerywa pętlę');
   
   repeat
      readln(ch);
      case ch of
	'a'..'z': Writeln('mala litera ',ch:2);
	'A'..'Z': Writeln('duza litera ',ch:2);
	'0'..'9': Writeln('cyfra       ',ch:2);
      else	   
	 Writeln('znak specjalny');
      end	   
   until (ch='=');
   
   {
   INSTRUKCJE WARUNKOWE
   
   if wyrazenie_boolowskie
   then instrukcja;
   
   if wyrazenie_boolowskie
   then instrukcja
	else instrukcja;
   }
   Writeln;
   Writeln;
   if i=1 then goto 5555;
   
   if j=1 then Writeln ('j=1')
   else Writeln ('j<>1');
   Halt;
   
5555:
     Writeln ('zmienna boolowska bool ma wartosc true');
   Writeln;
   bool:=true;
   if bool then Writeln ('prawda: bool=true')
   else Writeln ('falsz:  bool=false');

end. {kropka oznacza koniec programu}

 


File translated from TEX by TTH, version 2.01.
On 11 Oct 2002, 19:06.