Materiały pomocnicze do wykładu

Transkrypt

Materiały pomocnicze do wykładu
UNIWERSYTET
RZESZOWSKI
JĘZYKI PROGRAMOWANIA
(kody źródłowe programów
omawianych w ramach wykładu)
Dr Zbigniew Gomółka
RZESZÓW 2002-3
Zakład Elektrotechniki i Informatyki
dr Z.Gomółka, e-mail [email protected]
PODSTAWY PROGRAMOWANIA
ZDEFINIOWANIE PODSTAWOWYCH POJĘĆ
PROGRAM
przepis postępowania, z góry przyswojony przez komputer plan
działania. Mówiąc inaczej program jest realizacją algorytmu
spełniającą wymogi komunikacji z komputerem; pisany jest w
jednym z języków programowania;
JĘZYK PROGRAMOWANIA
zbiór zasad składni, instrukcji, dzięki którym powstaje kod źródłowy
programu. Procesor jest wstanie wykonywać program jedynie w
kodzie maszynowym. Jednakże tworzenie programów w tym języku
jest praktycznie niemożliwe. Dlatego programista używa języka
zrozumiałego dla człowieka, który następnie jest kompilowany bądź
interpretowany do postaci maszynowej.
Podział jęz yków programowania
strukturalne
obiektowe
Język wysokiego poziomu
język programowania, zazwyczaj o budowie blokowej, spełniający
wymagania programowania strukturalnego, lub programowania
obiektowego (C i C++ Java Pascal, Matlab, Mathematica).
Język niskiego poziomu
język programowania, w którym środki strukturalizacji kodu są
ograniczone do co najwyżej podprogramów i makroinstrukcji np.
asemblery.
Poziom języków programowania nie określa jego jakości, lecz rodzaj
zastosowań!!!
0-1
Zakład Elektrotechniki i Informatyki
dr Z.Gomółka, e-mail [email protected]
PODSTAWY PROGRAMOWANIA
TRANSLATOR
program dokonujący przekładu tekstu wyrażonego w języku
programowania na kod wynikowy. Zadaniem translatora jest
wykonanie rozbioru gramatycznego przedłożonego tekstu, aby
rozstrzygnąć, czy tekst jest poprawnym programem.
W skład każdego translatora wchodzi analizator
analizator składni oraz (najczęściej) generator kodu.
leksykalny,
KOMPILATOR
translator języka wysokiego poziomu, którego programy wynikowe mogą być
wprowadzone do pamięci i wykonane dopiero po zakończeniu tłumaczenia (w
odróżnieniu od interpretatora).
Programy wynikowe kompilatora mogą być przechowywane, łączone z innymi
programami i wielokrotnie wykonywane znacznie szybciej niż programy
interpretowane.
INTERPRETER
translator przekładający instrukcje programu na kod pośredni, który następnie
interpretuje przy każdym ich wykonaniu. Ponieważ interpreter nie tworzy przekładu
w kodzie maszynowym, lecz wykonuje instrukcje, tłumacząc je na bieżąco za
każdym
razem,
wykonanie
programu
znacznie
się
wydłuża.
Typowymi
interpreterami są systemy programowania wykorzystywane do symulacji np.
Matlab
LINKER
Program łączący (konsolidujący) biblioteki lub moduły biblioteczne z
modułami
programu
wynikowego
wyprodukowanymi
przez
kompilator; efektem działania konsolidatora jest kod w postaci
gotowej do ładowania. produkt działania programu łączącego jest
przechowywany np. w plikach exe, com, rtl, dll.
KOD ŹRÓDŁOWY
program komputerowy napisany w języku programowania. W tej
postaci jest on zrozumiały dla programisty, bez konieczności jego
uruchamiania. Kod źródłowy jest przekształcany na kod maszynowy
w procesie kompilacji programu.
0-2
Zakład Elektrotechniki i Informatyki
dr Z.Gomółka, e-mail [email protected]
PODSTAWY PROGRAMOWANIA
KOD MASZYNOWY
język zrozumiały dla procesora. Program w kodzie maszynowym
składa się z ciągu wartości binarnych, które oznaczają zarówno
instrukcje jak i dane. Postać kodu maszynowego zależy od
architektury procesora, na który dany program jest przeznaczony.
Dlatego program musi zostać skompilowany na konkretnej
maszynie, ewentualnie na systemie kompatybilnym z systemem
docelowym.
KOD WYNIKOWY
(j. ang. object code), rezultat pracy translatora (np. kompilatora),
nadający się do bezpośredniego wykonywania przez procesor albo
wymagający dalszej obróbki (np. konsolidacji).
0-3
Zakład Elektrotechniki i Informatyki
dr Z.Gomółka, e-mail [email protected]
PODSTAWY PROGRAMOWANIA
PODSTAWOWE BLOKI PROGRAMU
BLOK
DEKLARACJI
BLOK
PROGRAMU
GŁÓWNEGO
0-4
Zakład Elektrotechniki i Informatyki
dr Z.Gomółka, e-mail [email protected]
PODSTAWY PROGRAMOWANIA
PROCEDURA - PODPROGRAM
deklaracja
procedury
Wywołanie
procedury
0-5
Zakład Elektrotechniki i Informatyki
dr Z.Gomółka, e-mail [email protected]
PODSTAWY PROGRAMOWANIA
UNIT - KORZYSTANIE Z BIBLIOTEK
blok deklaracji
ciała procedur
0-6
Zakład Elektrotechniki i Informatyki
dr Z.Gomółka, e-mail [email protected]
PODSTAWY PROGRAMOWANIA
PRZEJRZYSTE PROGRAMOWANIE
• komentarze
informacje niezbędne do dalszych modyfikacji
programu.
• wcięcia akapitowe
są olbrzymim udogodnieniem dla czytającego
kod źródłowy, świadczą o dobrych nawykach
czytelnego i przyjaznego programowania.
Program ZŁ Y;
Program DOBRY;
Var
Var
s:string;
s:string; {Komentarze}
b:byte;
b:byte;
Begin
ReadLn(s);
ReadLn(s);
If s='pi' Then
If s='pi' Then
Begin
For b:=1 To 10 Do
Begin
•
Begin
Begin
For b:=1 To 10 Do
Begin
WriteLn(PI);
WriteLn(PI);
WriteLn(b);
WriteLn(b);
pisownia słów kluczowych
0-7
{ Poczatek instrukcji If }
ReadLn
A := (Punkty >= 90) AND (Punkty <= 100);
B := (Punkty >= 80) AND (Punkty < 90);
C := (Punkty >= 70) AND (Punkty < 80);
WriteLn('Znak nastepny to "',SUCC(Literki),'"');
WriteLn('Program czeka na naciśnięcie Enter ...');
ReadLn(Punkty);
WriteLn('Znak poprzedni to "',PRED(Literki),'"');
Write('Prosze podac wynik testu: ');
ReadLn(Literki);
Begin
Write('Podaj znak: ');
Begin
A, B, C, D, F :BOOLEAN;
:Integer;
Punkty
Var Literki: Char;
Var
PROGRAM Punkty_I_oceny2;
PROGRAM Przed_Po;
End.
End.
WriteLn('Roznica wynosi ', ABS(x-y):2:6);
WriteLn('Wynik porownania ', Result)
WriteLn('Program czeka na nacisniecie ENTER..');
{ Koniec instrukcji If }
WriteLn('Moze kiedys bedzie lepiej. Ocena 2');
ELSE
WriteLn('Zdales, ale tylko na 3,5')
ELSE
WriteLn('Dobrze. Twoja ocena to 4')
ELSE
WriteLn('Bardzo dobrze. Masz 4,5')
ELSE
WriteLn('Doskonale. Twoja ocena to 5')
If Punkty > 89 Then
If Punkty > 79 Then
If Punkty > 69 Then
If Punkty > 59 Then
WriteLn;
Result := ABS(x - y) < blad;
ReadLn(x, y);
Write('Podaj dwie liczby rzeczywiste: ');
Begin
Result :BOOLEAN;
x, y :Real;
Var
blad = 0.0001;
Const
PROGRAM Compare2; { Porównanie wartości rzeczywistych }
End.
WriteLn('Oto wynik porównania ', Result)
nawiasy mozna pominac. }
Result := A = B;
mniej czytelnie
ReadLn(Punkty);
{ lub
Write('Prosze podac wynik testu: ');
Result := (A = B);
Begin
Var Punkty :Integer;
PROGRAM Punkty_I_oceny1;
End.
ReadLn;
ReadLn(A, B);
Write('Podaj dwie liczby calkowite: ');
Begin
Result :BOOLEAN;
Var A, B :Integer;
PROGRAM Compare1; { Przykład do wartości boolowskich }
1
WriteLn('Program czeka na Enter..');
:Integer;
Sum := Sum + Number;
ReadLn
Var
GOTo 1000
{ restart }
WriteLn('Przepraszam, powtorz..');
Begin
:= 0;
Counter := 1;
Sum
Begin
Counter, N
:Integer;
Average, Sum, Number :Real;
If Counter <= 5 Then
Var
PROGRAM Średnia2;
Counter := Counter + 1;
1000:
Counter := 0;
Begin
End.
WriteLn('Program czeka na nacisniecie Enter..');
Counter :Integer;
WriteLn;
LABEL 1000; { deklaracja etykiety }
WriteLn('Srednia liczb = ', Average:0:2);
WriteLn('Suma liczb = ', Sum:0:2);
Average := Sum / N;
PROGRAM GoToLoop(OUTPUT);
End.
ReadLn
End;
{ ----------------------- }
WriteLn('Program czeka na nacisniecie ENTER..');
ReadLn(Number);
Write('Podaj element nr',Counter,': ');
Begin
FOR Counter := 1 To N Do
ReadLn(N);
Write('Podaj liczbe elementow: ');
Sum := 0;
Begin
N, Counter
Average, Sum, Number :Real;
Var
Program Srednia_1;
End.
{ Koniec instrukcji If }
WriteLn('Podales liczbe spoza zakresu.');
ELSE
WriteLn('Moze kiedys bedzie lepiej. Ocena 2')
ELSE If F Then
WriteLn('Zdales, ale tylko na 3,5')
ELSE If D Then
WriteLn('Dobrze. Twoja ocena to 4')
ELSE If C Then
WriteLn('Bardzo dobrze. Masz 4,5')
ELSE If B Then
WriteLn('Doskonale. Twoja ocena to 5')
If A Then
{ ----------------------------- }
ReadLn
WriteLn;
F := (Punkty < 60) AND (Punkty >= 0);
WriteLn;
{ Poczatek instrukcji If }
End;
D := (Punkty >= 60) AND (Punkty < 70);
2
Var
Counter := Counter + 1
:Real;
: LiczbyArray;
{ Poczatek petli Repeat }
Write('Podaj liczbe (lub 0, aby skończyć ): ');
WriteLn('Silnia liczby ', Numer,' to ', Silnia:0:0);
Until Licznik = Numer + 1; { Koniec petli Repeat }
Licznik := Licznik + 1;
Silnia := Silnia * Licznik;
Repeat
Licznik := 1;
Silnia := 1;
Pot := Liczby[J];
Begin
{ petla wewnetrzna }
{ zamien elementy }
If Liczby[I] > Liczby[J] Then
Begin
{ petla zewnetrzna }
{ blok opcjonalny }
FOR J := I+1 To RozMac Do
Begin
FOR I := 1 To RozMac-1 Do
{ Sortuj tablice przykład prostego sortowania}
End;
ReadLn(Liczby[I])
Begin
While Numer <> 0 Do
Begin
FOR I := 1 To RozMac Do
{ Czytaj tablice }
Begin
Write('Podaj element nr', I,': ');
{ Poczatek petli While }
Liczby
I, J , Pot : Integer;
Var
ReadLn(Numer);
Write('Podaj liczbe (lub 0, aby skonczyc ): ');
Begin
Licznik, Numer :Integer;
Silnia
Var
PROGRAM Silnia;
LiczbyArray = ARRAY[Zakres] OF Integer;
Type Zakres = 1..RozMac;
Const RozMac = 6;
End.
PROGRAM Sortowanie;
ReadLn
End.
WriteLn('Program czeka na nacisniecie Enter..');
WriteLn;
WriteLn('Srednia liczb = ', Average:0:2);
Write(ORD(Month),' ')
FOR Month := Jan To Dec Do
WriteLn;
WriteLn('Suma liczb = ', Sum:0:2);
WriteLn;
Begin
Average := Sum / N;
End;
{ Koniec petli While }
Month :(Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec);
PROGRAM Wyliczanie;
:= Sum + Number;
Sum
End.
WriteLn('Jestem tutaj !')
End;
ReadLn(Numer)
ReadLn(Number);
Write('Podaj element nr',Counter,': ');
Begin
While Counter <= N Do
ReadLn(N);
Write('Podaj liczbe elementow: ');
3
{ koniec petli wewnetrznej }
{ koniec petli zewnetrznej }
end;
Potega:= p*Potega(p,w-1);
else
if w=1 Then Potega:= p
begin
Function Potega(p: Integer; w : Integer):Integer;
Var i, j, k : Integer;
Uses unit1;
Program Test_unita;
End.
WriteLn('X=', X, CR, LF, 'Y=', Y, CR, LF, 'Z=', Z)
RaedLn(X, Y, Z);
Write('Podaj trzy liczby: ');
Begin
X, Y, Z :Integer;
Var
CR = CHR(13);
LF = CHR(10);
CONST
PROGRAM Znaki_wyprowadzanie;
End.
ReadLn
WriteLn('Program czeka na nacisniecie Enter..');
WriteLn(Liczby[I]);
FOR I := 1 To RozMac Do
WriteLn('Posortowana tablica: ');
WriteLn; { Wyswietlanie wynikow }
End;
End
End
Liczby[I] := Pot
Liczby[J] := Liczby[I];
End.
k:= silnia(k);
test(j,k);
k:=3;
j:=2;
i:=1;
Begin
4
CONST n_max=20; (* maksymalna liczba elementow *)
TYPE Dane = ARRAY [1..n_max] OF INTEGER;
VAR n : INTEGER;
Procedure test(var liczba : Integer; numer : Integer);
Function Silnia(numer : Integer): Integer;
Implementation
END;
BEGIN
FOR i:=1 TO n DO
Writeln;
Writeln;
Write (' Odczytaj elementy tablicy w kolejnosci');
Writeln;
BEGIN
i :INTEGER; { zmienna kontrolna }
VAR
PROCEDURE Odczyt_tablicy( VAR T:Dane);
(**********************************)
END;
Readln (T[i]);
End.
Write(' element nr= ',i,', T_1[ ' , i ,' ] = ');
if numer > 0 then silnia:= numer * silnia(numer-1);
End;
BEGIN
FOR i:=1 TO n DO
Begin
if numer = 0 then silnia:= 1;
Readln (n);
WriteLn('To jest zmienna lokalna=',lokal);
Write (' Podaj elementy tablicy w kolejnosci');
Writeln;
Write (' Podaj ilosc elementow (n<=20), n= ');
WriteLn('To jest zmienna przekazana przez wartość numer=',numer);
Function Silnia(numer : Integer) : Integer;
Writeln(' Wprowadzanie danych do tablicy ');
End;
BEGIN
lokal:= 3;
VAR i :INTEGER; (* zmienna kontrolna *)
WriteLn('To jest zmienna przekazana przez nazwę liczba=',liczba);
PROCEDURE Wprowadzanie( VAR T:Dane);
numer:= numer+2;
(**********************************)
Liczba:= Liczba*2;
Begin
Var lokal : Integer;
T_1 : Dane;
USES Crt;
Interface
Procedure test(var liczba : Integer; numer : Integer);
PROGRAM Sortowanie_przez_wstawianie;
Unit unit1;
5
min:=b
i, ORZEL, RESZKA, x : INTEGER;
Tak_Nie
VAR a,b, min, mniej : LONGINT;
: CHAR;
VAR
Crt;
USES
PROGRAM Rzut_moneta;
END.
UNTIL NOT (Tak_Nie='T')
Tak_Nie:=UpCase(ReadKey)
Writeln (' Jeszcze raz ?(T)ak');
Writeln;
USES Crt;
END.
REPEAT UNTIL KeyPressed
Writeln;
Odczyt_tablicy (T_1);
Sort_wstaw (T_1);
Wprowadzanie (T_1);
ClrScr;
Writeln(' Z liczb ',a ,' i ',b ,' liczba mniejsza to ',mniej);
mniej:=Mniejsza; (*Przypisanie wyniku funkcji zmiennej *)
Writeln;
ClrScr;
PROGRAM Funkcja_minimum;
(***********************************)
END;
Writeln(' Tablica uporzadkowana');
Writeln;Writeln;
END;
T[k]:=z_p; (* wstawienie danego elementu *)
END;
k:=k-1
T[k-1]:=z_p;
T[k]:=T[k-1];
BEGIN
(* przesuniecie elementow w prawo*)
BEGIN
BEGIN
(* zapamietanie elementu do wstawienia *)
REPEAT
(*************************************)
WHILE (k>1) AND (T[k-1]> T[k]) DO
END;
z_p:=T[k];
Mniejsza:=min; (* Nadanie funkcji wartosci min *)
Else min:=a;
IF a>b THEN
UNTIL a<>b;
k:=i;
BEGIN
FOR i:=2 TO n DO
Writeln;
BEGIN
Readln (b);
(*z_p- zmienna pomocnicza do zamiany elementow *)
Writeln;
Readln (a);
Write (' Podaj liczbe naturalna b= ');
Write (' Podaj liczbe naturalna a= ');
VAR
z_p :INTEGER;
Writeln (' Podaj dwie niezerowe rozne liczby naturalne:');
PROCEDURE Sort_wstaw( VAR T:Dane);
i, k :INTEGER; (* zmienna kontrolna *)
Writeln (' Wyznaczenie liczby mniejszej ');
(***********************************)
REPEAT
BEGIN
ClrScr;
{CIAŁO GŁÓWNE PROGRAMU}
: CHAR;
FUNCTION Mniejsza:LONGINT;
Tak_Nie
END;
END;
Writeln (T[i])
Write(' element nr= ',i,', T_1[ ' ,i ,' ] = ');
6
x:=23;
RESZKA:=RESZKA+1;
FOR x:=1 TO 10 DO
Writeln;
TYPE
Tak_Nie : CHAR;
(****************************)
n,k : INTEGER;
Tab : Tablica;
VAR
ch : CHAR;
y : INTEGER;
x : INTEGER;
Tablica = ARRAY [1 .. Max_el] OF INTEGER;
CONST Max_el = 100;
VAR
f : FILE OF INTEGER;
USES Crt;
Crt;
PROGRAM Kombinacja_n_po_k;
END.
ch:=Readkey;
END;
Writeln(' ',x:2,' - ', y:2);
Read(f,y);
USES
PROGRAM Zmiana_wartosci_elementu;
END.
UNTIL NOT (Tak_Nie='T')
Tak_Nie:=UpCase(ReadKey)
Writeln (' Jeszcze raz ?(T)ak');
Writeln(' Wylosowano reszke.. ', RESZKA:2,' razy');
BEGIN
Writeln(' Po zmianie wartosci na poz. 3 ');
Writeln(' Moneta rzucano ', i,' razy ');
Writeln(' Wylosowano orla.... ', ORZEL:2 ,' razy');
Seek(f,0);
Writeln(' Losowy rzut moneta ');
Write(f,x);
Seek(f,2);
ELSE
END;
Writeln;
END;
Writeln(' ',x:2,' - ', x:2);
Write(f,x);
BEGIN
FOR x:=1 TO 10 DO
Writeln(' Poz. Wartosc ');
IF x=0 THEN ORZEL:=ORZEL+1
x:=RANDOM(2);
BEGIN
FOR i:=1 TO n DO
RESZKA:=0;
ORZEL:=0;
Writeln(' Zmiana wartosci elementu');
RANDOMIZE ;
REWRITE(f);
ASSIGN(f,'plik.dok');
BEGIN
ClrScr;
ClrScr;
n=20;
REPEAT
BEGIN
CONST
7
(* dla Kombinacja *)
Writeln;
END;
ReadLn(k);
Write(' Podaj ilosc elem. podzbioru k: ');
ReadLn(n);
Write(' Podaj ilosc elementow zbioru n: ');
Writeln;
Writeln(' Wyznaczenie wszystkich kombinacji n po k');
ClrScr;
BEGIN
WHILE n<=k DO
BEGIN
(*********************************)
END;
END
Wyswietlanie(k)
ELSE
Kombinacja(a +1, Element+1)
IF a < k THEN
Tab[a] := Element;
BEGIN
FOR Element := b to n - k + a DO
BEGIN
Element : INTEGER;
VAR
PROCEDURE Kombinacja(a, b : INTEGER);
(**********************************)
END;
Writeln;
Write(Tab[Nr_elementu] : 4);
FOR Nr_elementu := 1 TO k DO
END.
REPEAT UNTIL KeyPressed;
VAR Nr_elementu :INTEGER;
(* dla Wyswietlanie *)
Kombinacja(1,1);
Writeln;
PROCEDURE Wyswietlanie(k :INTEGER);
BEGIN
IF n >= k THEN
(**********************************)
8
Data_ur :
Procedure Inicjuj;
Procedure Inicjuj;
Procedure Drukuj;
Procedure Inicjuj;
Procedure Drukuj;
Write(' Podaj Imie: ');
Readln(Imie);
STRING [12];
Writeln;
Write(' Podaj Nazwisko: ');
Readln(Nazwisko);
Write(' Podaj Imie: ');
Readln(Imie);
Write(' Podaj Miejsce urodzenia : ');
(************************)
Procedure Osoba.Drukuj;
BEGIN
Writeln(' Drukowanie zawartosci pol obiektu');
Writeln(' Nazwisko
BEGIN
Procedure Osoba.Drukuj;
END;
Readln(Data_ur);
: ',Data_ur);
Writeln(' Data urodzenia
END;
Write(' Podaj Data urodzenia: ');
: ',Imie);
Writeln(' Miejsce urodzenia : ',Miejsce_ur);
Writeln(' Imie
Readln(Miejsce_ur);
BEGIN
Readln(Data_ur);
END;
: ',Nazwisko);
Procedure Osoba.Inicjuj;
Write(' Podaj Data urodzenia: ');
Readln(Miejsce_ur);
END;
Write(' Podaj Miejsce urodzenia : ');
STRING [20];
Stanowisko
Readln(Nazwisko);
:
Wyksztalcenie :
Kadra = OBJECT(Osoba)
END;
Procedure Drukuj;
STRING [12];
STRING [20];
Write(' Podaj Nazwisko: ');
Writeln(' Wprowadzanie danych do pol obiektu');
BEGIN
Procedure Osoba.Inicjuj;
(*************************)
END;
Miejsce_ur:
Data_ur : STRING[12];
STRING [20];
Imie :
Imie, Miejsce_ur: STRING[20];
STRING [35];
Nazwisko :
Nazwisko : STRING[35];
TYPE Osoba = OBJECT
USES Crt;
USES Crt;
TYPE Osoba = OBJECT
PROGRAM Dziedziczenie_1;
PROGRAM Tworzenie_obiektu_1;
END.
ReadKey;
Osoba_1.Drukuj;
ClrScr;
ReadKey;
Osoba_1.Inicjuj;
ClrScr;
BEGIN
(**********************)
VAR Osoba_1 : Osoba;
9
: ',Imie);
: ',Nazwisko);
Readln(Dane.Nazwisko);
Write('Podaj Imie
Readln(Dane.Imie);
Write('Podaj Plec M/K ',Licznik,'-ej osoby : ');
Readln(Dane.Plec);
Writeln;
ClrScr;
WriteLn('Obiekt po zainicjowaniu przez konstruktor:');
Writeln(' Wprowadzanie danych do pol obiektu');
Osoba_1.Inicjuj;
Kierownik_1.Inicjuj;
Writeln(' Drukowanie zawartosci pol obiektu');
END.
ReadKey;
Kierownik_1.Drukuj;
END.
END;
Write('Podaj Nazwisko ',Licznik,'-ej osoby : ');
BEGIN
Osoba_1.Drukuj;
Readln(Dane.Nr_ew);
',Licznik,'-ej osoby : ');
Write('Podaj Nr_ew
(**********************)
Writeln;
BEGIN
Kierownik_1 : Kadra;
Osoba_1
VAR
',Licznik,'-ej osoby : ');
Writeln(' Stanowisko
: Osoba;
Writeln(' Dane personalne pracownikow') ;
: ',Wyksztalcenie);
: ',Stanowisko);
Writeln(' Wyksztalcenie
FOR Licznik := 1 TO 5 DO
ClrScr;
END;
BEGIN
Osoba.Drukuj;
: BYTE;
BEGIN
Licznik
: Dane_personalne;
: CHAR
(*******************)
END;
Plec
END;
Procedure Kadra.Drukuj;
Dane
VAR
Readln(Stanowisko);
Write(' Podaj Stanowisko : ');
Readln(Wyksztalcenie);
Write(' Podaj Wyksztalcenie: ');
Osoba.Inicjuj;
Nr_ew
BEGIN
: BYTE;
Nazwisko : STRING[30];
Procedure Kadra.Inicjuj;
: STRING[20];
Dane_personalne = RECORD
Imie
: ',Data_ur);
TYPE
USES Crt;
PROGRAM Dane_osobowe;
END;
Writeln(' Data urodzenia
Writeln(' Miejsce urodzenia : ',Miejsce_ur);
Writeln(' Imie
Writeln(' Nazwisko
10
BEGIN
TYPE
END;
',Licznik,'-ej osoby : ');
',Licznik,'-ej osoby : ');
END;
Write(Lista_p,Dane);
Readln(Dane.Plec);
Write('Podaj Plec M/K ',Licznik,'-ej osoby : ');
Readln(Dane.Imie);
Write('Podaj Imie
Readln(Dane.Nazwisko);
Write('Podaj Nazwisko ',Licznik,'-ej osoby : ');
Readln(Dane.Nr_ew);
Write('Podaj Nr_ew
BEGIN
END.
REPEAT UNTIL KeyPressed
Odczyt;
Zapisz;
ClrScr;
BEGIN
FOR Licznik := 1 TO 5 DO
(*********************)
ClrScr;
END;
CLOSE(Lista_p);
Writeln(' Dane personalne pracownikow') ;
REWRITE(Lista_p);
ASSIGN(Lista_p,'plik_1a.dan');
BEGIN
Writeln
Write(Dane.Imie,' ');
Write(Dane.Nazwisko,' ');
Write(Dane.Plec);
Licznik
PROCEDURE Zapisz;
: Dane_personalne;
: BYTE;
Dane
Write(Dane.Nr_ew,' ');
Read(Lista_p,Dane);
BEGIN
WHILE NOT Eof(Lista_p) DO
RESET(Lista_p);
(**********************************)
: f_plik;
Lista_p
VAR
f_plik = FILE OF Dane_personalne;
END;
: CHAR
: BYTE;
ASSIGN(Lista_p,'plik_1a.dan');
Plec
Nr_ew
Writeln(' Dane personalne pracownikow');
Writeln;
: STRING[20];
Nazwisko : STRING[30];
Imie
Writeln;
PROCEDURE Odczyt;
USES Crt;
Dane_personalne = RECORD
END;
PROGRAM Dane_osobowe2;
CLOSE(Lista_p);
11
Write ('Podaj ',n+1,' wartosci wpolczynnika a(n) ');
Write ('- od a(0) do a(',n,'):');
tekst : STRING;
i
Writeln;
var a, b, c : macierz;
Procedure wczytaj_macierz(var m : macierz; roz : Integer);
var i, j : Integer; {Indeksy do przegladania macierzy. }
begin
USES Crt;
VAR
n, i :INTEGER;
a, x, y:REAL;
Randomize;
for j:= 1 to roz do
begin
Writeln ('Obliczenie wartosci wielomianu ');
for i:= 1 to roz do
WriteLn('Wprowadzanie element˘w macierzy: ');
y:=0;
i:=0;
ClrScr;
BEGIN
Type macierz = array[1..rozmiar,1..rozmiar] of Real;
PROGRAM Wielomian;
ClrScr;
Const rozmiar = 5;
Uses Crt;
{ Program demonstrujĄcy podstawowe operacje na macierzach. }
END.
REPEAT UNTIL KeyPressed
Writeln(' Liczba malych liter ''w'' w tekscie : ',ile);
ile:=ile+1;
IF (tekst[i]='a') THEN
Program Zabawa_z_macierza;
Write ('x = ',x:5:2,', y = ',y:5:2)
ile:=0;
FOR i:=1 TO LENGTH(tekst) DO
Writeln;
Readln(tekst);
UNTIL i>n;
y:=y*x+a;
i:=i+1;
Writeln(' Wyznaczenie liczby malych liter ''a'' w tekscie');
Writeln(' Napisz tekst i nacisnij ENTER');
Readln (a);
Write ('a(',i,') = ');
REPEAT
ClrScr;
BEGIN
(*********************)
ile : INTEGER;
END.
Writeln;
VAR
Writeln;
Readln (x);
USES Crt;
: INTEGER;
Write ('Podaj wartosc x = ');
PROGRAM Obecnosc_litery_a;
Readln (n);
Write ('Podaj stopien wielomianu n = ');
Writeln;
12
o : macierz;
{ Wyzeruj elementy macierzy wynikowej. }
o[j,i]:= m[i,j];
end;
for j:= 1 to roz do
begin
end;
o[i,j]:= m[i,j]+n[i,j];
for j:= 1 to roz do
for i:= 1 to roz do
begin
var i, j : Integer; {Indeksy do przegladania macierzy. }
Procedure dodaj_macierz(var m, n, o : macierz; roz : Integer);
end;
if i= j then WriteLn('Element m[',i,',',j,']:= ',m[i,j]:2:0);
for j:= 1 to roz do
for i:= 1 to roz do
WriteLn('Wyswietlanie przekatnych macierzy: ');
begin
{ Wyzeruj elementy macierzy wynikowej. }
temp : Real;
var i, j : Integer;
function max(m : macierz; r : Integer) : Real;
end;
end;
o[i,j]:= o[i,j] + m[i,k]*n[k,j];
for k:= 1 to roz do
begin
for j:= 1 to roz do
for i:= 1 to roz do
o[i,j]:= 0;
for j:= 1 to roz do
for i:= 1 to roz do
begin
var i, j : Integer; {Indeksy do przegladania macierzy. }
var i, j, k : Integer; {Indeksy do przegladania macierzy. }
Procedure wyswietl_przekatna(var m : macierz; roz : Integer);
Procedure pomnoz_macierz(var m, n, o : macierz; roz : Integer);
end;
end;
end;
WriteLn;
m:= o;
begin
begin
Write( m[i,j]:2:0,' ');
for j:= 1 to roz do
for i:= 1 to roz do
o[i,j]:= 0;
for j:= 1 to roz do
for i:= 1 to roz do
begin
for i:= 1 to roz do
WriteLn('Wyswietlanie elementów macierzy: ');
begin
var i, j : Integer; {Indeksy do przegladania macierzy. }
Procedure wyswietl_macierz(var m : macierz; roz : Integer);
end;
temp : Real;
var i, j : Integer; {Indeksy do przegladania macierzy. }
{ReadLn(m[i,j]);}
end;
Procedure transponuj(var m : macierz; roz : Integer);
end;
WriteLn;
Write('Podaj element m[',i,',',j,']:= ',m[i,j]:2:0);
m[i,j]:= random(10);
13
{ Ciało główne programu. }
element : String[10];
i : Integer;
wsk : wskaznik_stosu;
end;
wskaznik : wskaznik_stosu;
dane : String[10];
komorka_danych = record
wskaznik_stosu = ^komorka_danych;
Dispose(w);
w:=wsk_r;
{ Demonstracja najprostszej struktury dynamicznej opartej na stosie }
wsk_r:= w^.wskaznik;
WriteLn(w^.dane);
Program Stos1;
end.
GotoXY(14,WhereY);
begin
wyswietl_przekatna(c,rozmiar);
ReadKey;
var wsk_r : wskaznik_stosu;
WriteLn('Minimum macierzy: ', min(c,rozmiar):2:0);
{ Procedura usuwajaca wierzcholek ze stosu. }
procedure ze_stosu(Var w : wskaznik_stosu);
WriteLn('Maximum macierzy: ', max(c,rozmiar):2:0);
end;
w^.wskaznik:= wsk_r;
wyswietl_macierz(c,rozmiar);
wyswietl_macierz(c,rozmiar);
w^.dane:= element;
wyswietl_macierz(b,rozmiar);
transponuj(c,rozmiar);
wsk_r:= w;
New(w);
wyswietl_macierz(a,rozmiar);
begin
var wsk_r : wskaznik_stosu;
procedure na_stos(var w : wskaznik_stosu);
var
type
Uses Crt;
elementów, z których tylko najmłodszy jest w danej chwili dostępny.}
{ Stos: to struktura danych składająca się z liniowo uporządkowanych
do nich zmiennych poprzez nazwę. }
{ W tej wersji procedury pracują w oparciu o przekazywanie
pomnoz_macierz(a,b,c,rozmiar);
dodaj_macierz(a,b,c,rozmiar);
wczytaj_macierz(b,rozmiar);
wczytaj_macierz(a,rozmiar); Delay(500);
begin
end;
min:= temp;
if m[i,j] < temp then temp:= m[i,j];
for j:= 1 to r do
for i:= 1 to r do
temp:= 0;
begin
temp : Real;
var i, j : Integer;
function min(m : macierz; r : Integer) : Real;
end;
max:= temp;
if m[i,j] > temp then temp:= m[i,j];
for j:= 1 to r do
for i:= 1 to r do
temp:= 0;
begin
14
else il_elementow:= il_elementow(wp^.wskaznik) + 1;
{ Podstawowa komórka danych. }
ReadLn(tekst);
wk^.dane:=tekst;
While wsk <> Nil do
Repeat Until KeyPressed;
do nich zmiennych poprzez nazwę. }
{ W tej wersji procedury pracują w oparciu o przekazywanie
na początku - tak samo jak w stosie. }
tylko na końcu kolejki "przed nilem", zaś usuwanie elementów tylko
{ Różni się ona od pracy stosu tym, że dołączenie elementów odbywa się
{ Program demonstrujący prace kolejki.}
Program Kolejka1;
end.
else - przesuwanie konca kolejki }
begin
if wp <> Nil then
begin
var wsk_r : wskaznik;
{ Jesli kolejka nie jest pusta to...}
procedure z_kolejki(var wp, wk : wskaznik);
end;
{ Przypadek dopisywania pierwszego el. do listy
wp:= wk else wsk_r^.wsk:= wk;
ze_stosu(wsk);
end;
if (wp = Nil) and (wsk_r = Nil) then
{ Pobieramy nastepny element danych. }
{ Pobieramy nowy wskaznik. }
Inc(i); Write(i);
wk^.wsk:= Nil;
New(wk);
WriteLn('Wyswietlam zawartosc stosu : (',il_elementow(wsk), ' element˘w)');
WriteLn('Lp. element: ');
begin
wsk_r:= wk;
begin
var wsk_r : wskaznik;
{ wp - wskaznik poczatka kolejki}
{ wk - wskaznik konca kolejki}
Writeln('Koniec budowania stosu');
end;
If element <> 'k' then na_stos(wsk);
ReadLn(element);
begin
While element <> 'k' do
procedure do_kolejki(var wp, wk : wskaznik);
wybor : Char;
wsk:= Nil;
i:= 0;
i, j : Integer;
tekst : String[10];
WriteLn('Podaj kolejne wyrazy do wstawienia na stos (k- kończy pracę programu)');
var pocz_kolejki, kon_kolejki, wsk_rob : wskaznik;
end;
wsk : wskaznik;
dane : String[10];
komorka = record
{ Wskaznik danych }
ClrScr;
begin
end;
if wp= Nil then il_elementow:= 0
begin
type wskaznik = ^komorka;
function il_elementow(wp : wskaznik_stosu) : Integer;
{ Funkcja zlicza rekurencyjnie kolejne elementy stosu. }
uses Crt;
end;
15
end
{ usuniety, to wpisz Nil na koncu }
else il_elementow:= il_elementow(wp^.wsk) + 1;
il_elementow(wp));
'2': z_kolejki(pocz_kolejki, kon_kolejki);
WriteLn('Lp: element:');
j:=0; { Wyzeruj licznik elementow kolejki. }
ClrScr;
begin
var j : Integer; {Licznik element˘w}
procedure wyswietl_kolejke(wp: wskaznik);
end.
end;
end;
'4': exit;
end;
'3': wyswietl_kolejke(pocz_kolejki);
if wk <> Nil then WriteLn(wk^.dane) else WriteLn;
WriteLn('4- Koniec programu');
Ostatni element : ');
'1': do_kolejki(pocz_kolejki, kon_kolejki);
case wybor of
ReadLn(wybor);
if wp <> Nil then WriteLn(wp^.dane) else WriteLn;
Pierwszy element : ');
wyswietl_menu(pocz_kolejki, kon_kolejki);
begin
ReadKey;
Write('3- Wy˜wietl kolejk©
Write('2- Usuä z kolejki
Liczba elementow listy :',
While wybor <> '4' do
kon_kolejki:=Nil;
WriteLn('1- Dopisz do kolejki
ClrScr;
begin
pocz_kolejki:=Nil;
{ Parametry zostaˆy przekazane przez wartosc }
ClrScr;
begin
end;
Write('Nacisnij dowolny klawisz...');
end;
wp:=wp^.wsk;
Writeln(j,'. ',wp^.dane); { Przegladanie kolejki aľ do koäca. }
Inc(j);
end;
ClrScr;
ReadKey;
{ Wyswietlanie menu }
procedure wyswietl_menu(wp, wk : wskaznik);
end;
if wp = Nil then il_elementow:= 0
begin
{ Funkcja zlicza rekurencyjnie elementy kolejki }
function il_elementow(wp : wskaznik) : Integer;
end;
Write('Nacisnij dowolny klawisz... ');
begin
}
wp:=wsk_r^.wsk;
if wp = Nil then wk:= Nil; { Jesli ostatni element zostal
if (j mod 23 = 0) and (j <> 0) then
begin
Write(wp^.dane);
Dispose(wp);
While wp <> Nil do
wsk_r:= wp;
16
Dec(eb);
ReadKey;
begin
end;
ReadLn(pesel);
Write('Podaj PESEL:
ReadLn(imie);
Write('Podaj Imię:
ReadLn(nazwisko);
');
');
Write('Podaj Nazwisko: ');
begin
with baza[eb] do
end;
end;
Write('Nacisnij dowolny klawisz...');
else
Inc(eb);
WriteLn('BAZA DANYCH JEST PUSTA !!!');
begin
WriteLn('Przekroczona maksymalna ilość elementów bazy !!!');
end
else
end
ClrScr;
begin
if eb+1 > MAX then
baza[i]:= baza[i+1];
for i:= temp to eb DO
begin
procedure dodaj_rekord;
ReadLn(temp);
Write('Podaj numer rekordu do usunięcia: ');
Until (temp in [1..eb]); { Czekaj na poprawny numer. }
wybor: Char;
Repeat
WriteLn;
eb : Integer; { Bieżący rekord bazy. }
baza : tab_osoby;
WriteLn(' ==============================');
osoba : osoby;
WriteLn(' W BAZIE JEST ',eb,' - REKORDÓW');
function StrComp(a, b: String) : Integer; forward;
Var
tab_osoby = array [1..MAX] of osoby;
begin
if eb > 0 then
pesel : Integer;
end;
ClrScr;
begin
i : Integer;
imie : String[15];
nazwisko : String[20];
Type osoby = record
var temp : Integer;
procedure usun_rekord;
NAZWA = 'BAZA.DAT';
end;
Const MAX = 10; { Maksymalna liczba elementów bazy. }
end;
Uses Crt;
Program Baza_danych;
17
{ Ustaw plik w pozycji do zapsiu od nowa...}
Write(plik, baza[i]);
for i:= 1 to eb do
Rewrite(plik);
Assign(plik,NAZWA); { Otwórz archiwum bazy...}
begin
i : Integer;
var plik : file of osoby;
procedure zapisz_baze;
end;
ReadKey;
end;
end;
end;
przestawil:= True;
baza[i+1]:= temp;
baza[i]:= baza[i+1];
temp:= baza[i];
begin
if StrComp(baza[i].nazwisko,baza[i+1].nazwisko) > 0 then
for i:= 1 to eb-1 do
przestawil:= False;
begin
while przestawil do
Write('Nacisnij dowolny klawisz...');
przestawil:= True;
end
begin
temp : osoby;
else WriteLn('BAZA DANYCH JEST PUSTA !!!');
end;
GoToXY(46, WhereY); WriteLn(baza[j].pesel);
i : Integer;
var przestawil : Boolean;
GoToXY(6, WhereY); Write(baza[j].nazwisko);
GoToXY(27, WhereY); Write(baza[j].imie);
procedure sortowanie_b;
Write(j,'.');
end;
end;
ReadKey;
ClrScr;
end;
Close(plik);
Write('Nacisnij dowolny klawisz... ');
Inc(eb);
begin
while not EoF(plik) do
eb:= 0;
Read(plik, baza[eb+1]);
PESEL:');
{ Ustaw plik w pozycji do odczytu od poczatku...}
begin
Imie:
Reset(plik);
Assign(plik,NAZWA); { Otwórz archiwum bazy...}
if (j mod 23 = 0) and (j > 0) then
begin
for j:=1 to eb do
WriteLn('Lp: Nazwisko:
begin
if eb > 0 then
begin
var plik : file of osoby;
ClrScr;
begin
end;
procedure wczytaj_baze;
}
Close(plik);
var j: Integer;
{ Wyświetl zawartość bazy.
procedure wyswietl_baze;
18
Liczba elementow bazy :',eb);
'4': Zapisz_baze;
'3': Wyswietl_baze;
'2': Usun_rekord;
'1': Dodaj_rekord;
case wybor of
ReadLn(wybor);
wyswietl_menu;
begin
While wybor <> '7' do
eb:= 0;
ClrScr;
begin
end;
WriteLn('7- Koniec programu');
WriteLn('6- Posortuj bazę -metoda bąbelkowa');
WriteLn('5- Wczytaj baze z pliku BAZA.DAT');
WriteLn('4- Zapisz baze do pliku BAZA.DAT');
WriteLn('3- Wyswietl baze');
WriteLn('2- Usun z bazy');
WriteLn('1- Dopisz do bazy
WriteLn(' ========================================= ');
WriteLn(' PROGRAM BAZA DANYCH - STRUKTURA TABLICA ');
ClrScr;
begin
{ Wyswietlanie menu. }
procedure wyswietl_menu;
end;
if a < b then StrComp:= -1;
if a = b then StrComp:= 0;
if a > b then StrComp:= 1;
begin
function StrComp(a, b: String) : Integer;
end.
end;
end;
'7': exit;
'6': Sortowanie_b;
'5': Wczytaj_baze;
19
wybor : Char;
wb : wskaznik; { Wskaźnik bieżącego położenia }
poczatek : wskaznik; { Wskaźnik początku }
{ Pobieramy nowy wskaznik.
}
end;
{ Koniec wstaw_na_koncu. }
else k^.wsk:= n;
if wp = Nil then wp:= n { Zapamietujemy pierwszy element. }
n^.wsk:= Nil;
n^.dane:= liczba;
New(n);
While k^.wsk <> Nil do k:=k^.wsk;
k:= wp;
begin
var n, k : wskaznik;
procedure wstaw_na_koncu(var wp : wskaznik; liczba : Integer);
function sz_element(wp : wskaznik; nr : Integer) : wskaznik; forward;
function il_elementow(wp : wskaznik) : Integer; forward;
var
end;
{ Wskaznik danych }
{ Podstawowa komórka danych. }
wsk : wskaznik;
dane : Integer;
komorka = record
type wskaznik = ^komorka;
{ Zamiana wartosci elementow 'p' i 'n'.}
wstaw_przed(wsk_r, liczba); { Wstawienie przed elementem. }
var wsk_r, temp : wskaznik;
procedure z_listy(var wp, wb : wskaznik);
end;
{ Wariant ze wstawieniem na koncu. }
if not (liczba = wsk_r^.dane) then {Jesli element nie powtórzony ..}
else
if wsk_r = Nil then wstaw_na_koncu(wp, liczba)
end;
wsk_r:=wsk_r^.wsk;
begin
While (wsk_r <> Nil) AND (liczba < wsk_r^.dane) do
ReadLn(liczba);
wsk_r:= wp;
begin
liczba : Integer;
var wsk_r : wskaznik;
Elementy powtarzające się nie są wstawiane.}
{ Wstawianie do listy na odpowiednie miejsce.
procedure do_listy(var wp : wskaznik);
end;
w^.dane:= liczba;
w^.wsk:= n;
end;
wsk:= w^.wsk;
{ Wstawienie po elemencie p. }
wstawic nowy element. }
dane:= w^.dane;
begin
które muszą uwzględniać istniejący porządek listy. }
uses Crt, Strings;
With n^ do
New(n);
begin
{ w wskazuje na element, przed ktory nalezy
var n : wskaznik;
procedure wstaw_przed(var w : wskaznik; liczba : Integer);
odróżnia od kolejki forma procedur dodawania i usuwania składników,
{ Lista jednokierunkowa to jedna z odmian struktury listowej, którą
miejscu można usunąć lub dołączyć składnik. }
{ Lista (liniowa) to uporządkowany zbiór składników, z którego w dowolnym
listy jednokierunkowej. }
{ Program demonstrujący działanie
Program Lista_jednokierunkowa;
20
{ Jeśli lista nie jest pusta to...}
{ Funkcja zlicza rekurencyjnie elementy listy }
end;
end;
end;
wb:= wsk_r^.wsk;
{ i przyklejam ogon listy. }
end;
WriteLn('4- Koniec programu');
WriteLn('3- Wyswietl liste');
if wp <> NIl then WriteLn(wp^.dane) else WriteLn;
{ zwalniam pamięć usuwanego elementu.. }
Write('2- Usun z listy
Poczatek listy : ');
Liczba elementow listy :',
wsk_r^.wsk:= wb^.wsk; { Rozcinam listę.. }
il_elementow(wp));
Dispose(wb);
end;
WriteLn('1- Dopisz do listy
WriteLn(' =================================== ');
wsk_r:= wsk_r^.wsk;
WriteLn(' WARIANT LISTY ZAWIERAJĄCEJ LICZBY ');
ClrScr;
begin
begin
{ w przeciwnym razie szukaj poprzednika.. }
{ Wyswietlanie menu. }
procedure wyswietl_menu(wp : wskaznik);
end;
sz_element:= wp;
end;
Inc(i);
wp:= wp^.wsk;
begin
While wsk_r^.wsk <> wb do
begin
else
end
wp:= wb;
Dispose(wp);
wb:= wp^.wsk;
begin
if wp= wb then { Jeśli to jest pierwszy element to.. }
wsk_r:= wp;
ReadKey;
ofset: ',ofs(wb^.wsk));
while (wp^.wsk <> Nil) and (i < nr) do
'
i:= 1;
wb:= sz_element(wp,nr); { Odnajdujemy wskaznik na usuwany element. }
begin
var i : Integer;
function sz_element(wp : wskaznik; nr : Integer) : wskaznik;
end;
else il_elementow:= il_elementow(wp^.wsk) + 1;
if wp = Nil then il_elementow:= 0
begin
function il_elementow(wp : wskaznik) : Integer;
Writeln('Usuwam element nr:',nr,' ',wb^.dane,' segment: ',seg(wb^.wsk),
Until (nr in [1..il_elementow(wp)]); { Czekaj na właściwy numer. }
Read(nr);
Repeat
il_elementow(wp),')');
WriteLn('Podaj numer elementu do usunięcia z przedzialu (1 - ',
ClrScr;
begin
if wp <> Nil then
begin
nr : Integer;
21
While wp <> Nil do
ofset: ',ofs(wp^.wsk));
'1': do_listy(poczatek);
procedure dodaj_pytanie(Var wsk : wskaznik_do_pytan);
wybor : Char;
case wybor of
ReadLn(wybor);
il_pyt : Integer; {Ilosc pytan zdefiniowanych w bazie}
wsk : wskaznik_do_pytan;
pytanie : pojemnik_na_pytania;
wiedza : Real;
Var
end;
wskaznik : wskaznik_do_pytan;
pytania : dane;
pojemnik_na_pytania = record
wskaznik_do_pytan = ^pojemnik_na_pytania;
end;
nr_popr : Integer;
odp : array[1..l_odp] of String;
pyt : String;
dane = record
Type
wyswietl_menu(poczatek);
begin
While wybor <> '4' do
poczatek:=Nil;
ClrScr;
begin
end;
ReadKey;
Write('Nacisnij dowolny klawisz...');
end;
wp:=wp^.wsk;
{ Przegladanie listy aż do końca.}
'
Writeln(j,'. ',wp^.dane,' segment: ',seg(wp^.wsk),
Inc(j);
end;
plik2 = 'config.txt';
{Plik do udoskonalania pracy programu}
plik1 = 'pytania.dat'; {Plik zawierajĄcy pytania i odpowiedzi}
ClrScr;
Const l_odp = 4;
Uses Crt;
przeprowadzanie testu i ocenianie}
{wpisywanie pytan i odpowiedzi, losowanie pytan
Program test; {Przyklad programu demonstrujacego dzialanie testu
end.
end;
end;
'4': exit;
'3': wyswietl(poczatek);
'2': z_listy(poczatek, wb);
ReadKey;
Write('Nacisnij dowolny klawisz... ');
begin
if (j mod 23 = 0) and (j <> 0) then
begin
}
{ Wyzeruj licznik elementow listy. }
{ Wyświetl zawartość listy.
WriteLn('Lp: element:');
j:=0;
ClrScr;
begin
var j: Integer;
procedure wyswietl(wp : wskaznik);
22
Until (nr_popr in [1..l_odp]);
WriteLn('Podaj nowe pytanie: ');
begin
with wsk^.pytania do
New(wsk);
begin
else
{Dokladamy pierwszy element}
wsk^.wskaznik:= temp;
end;
ClrScr;
ReadKey;
Write('Nacisnij dowolny klawisz... ');
begin
if (j*l_odp mod 40 = 0) then
begin
while wsk <> Nil do
23
WriteLn('======================================================================');
j:= 1;
WriteLn(' Lp: Pytania i odpowiedzi wpisane do bazy. *- odpowiedz prawidlowa');
begin
if wsk <> Nil then
ClrScr;
begin
var i, j : Integer;
{ Wyswietl zawartosc bazy pytan }
procedure wyswietl_baze_pytan(wsk : wskaznik_do_pytan);
ReadLn(nr_popr);
end;
end
wsk^.wskaznik:= Nil; {Koniec struktury pokazuje na Nil-a}
end;
end;
il_pyt:= 1;
end;
Write('Podaj numer poprawnej odpowiedzi: ', '[1..',l_odp,']:= ');
Repeat
end;
ReadLn(odp[i]);
WriteLn('Odpowiedz nr ',i,' ');
begin
for i:= 1 to l_odp do
ReadLn(pyt);
WriteLn('Podaj nowe pytanie: ');
begin
with wsk^.pytania do
il_pyt:= il_pyt+1;
New(wsk); {Utw˘rz adres wskazujĄcy na nowy pojemnik}
temp:= wsk;
Until (nr_popr in [1..l_odp]);
ReadLn(nr_popr);
begin
Write('Podaj numer poprawnej odpowiedzi: ', '[1..',l_odp,']');
if wsk <> Nil then {Jest conajmniej jeden element na stosie}
Repeat
end;
ReadLn(odp[i]);
WriteLn('Odpowiedz nr ',i,' ');
begin
for i:= 1 to l_odp do
ReadLn(pyt);
WriteLn(' ==================================================================');
WriteLn(' WPROWADZANIE KOLEJNYCH PYTAN DO PROGRAMU "TEST" -struktura stosowa');
ClrScr;
begin
pytanie : pojemnik_na_pytania;
i : Integer;
var temp : wskaznik_do_pytan;
{oraz jego odpowiedzi}
{Tutaj trafia oryginaˆ zmiennej wsk}
{ Ustaw plik w pozycji do zapisu od nowa...}
ReadLn(znak);
else
NIE: n/N ');
if (znak='t') or (znak='T') then {zastepujemy istniejacy stos}
Until (znak in ['t','T','n','N']);
Close(plik);
end
Write('TAK: t/T
Repeat
wsk:= wsk^.wskaznik;
end;
WriteLn('znajdujacych sie w pliku ', plik1,'? ');
WriteLn('Czy zastapic istniejace dane zestawem pytan ');
begin
if wsk <> Nil then
begin
znak : Char;
temp : wskaznik_do_pytan;
var plik : file of dane;
procedure wczytaj_baze(Var wsk : wskaznik_do_pytan);
end;
Write(plik, wsk^.pytania);
begin
for i:= 1 to il_pyt do
While wsk <> Nil do
Rewrite(plik);
Assign(plik,plik1); { Otworz archiwum bazy pytan...}
begin
if wsk <> Nil then
begin
i : Integer;
var plik : file of dane;
procedure zapisz_baze(wsk : wskaznik_do_pytan);
{Zwracana warto˜† funkcji}
usun_stos:= Nil; {Ten zapis musi wystĄpi† wewnĄtrz kaľdej funkcji}
end;
wsk:= temp;
end;
Dec(il_pyt);
ReadKey;
WriteLn('Brak jest pytan w bazie !!!');
Write('Nacisnij dowolny klawisz...');
temp:= wsk^.wskaznik;
Dispose(wsk);
else
while wsk<> Nil do
begin
var temp : wskaznik_do_pytan;
function usun_stos(var wsk : wskaznik_do_pytan) : wskaznik_do_pytan;
begin
{zaznaczajĄc odpowiedz poprawnĄ *}
end;
end
end;
Inc(j);
wsk:= wsk^.wskaznik;
end;
WriteLn;
if wsk^.pytania.nr_popr= i then write(' -*-');
GoToXY(27, WhereY); Write(i,'. ',wsk^.pytania.odp[i]);
ReadKey; end;
Write('Nacisnij dowolny klawisz...');
begin
WriteLn('Brak jest pytan w bazie !!!');
{Wy˜wietl tre˜† pytania}
for i:=1 to l_odp do
begin
GoToXY(6, WhereY); WriteLn(wsk^.pytania.pyt);
Write(j,'.');
24
{Jezeli zestaw nie jest pusty to zaczynamy...}
ReadKey;
while not EoF(plik) do
end;
Close(plik);
temp3:= temp1^.wskaznik
if temp1 <> Nil then
end;
Inc(i);
end;
temp1:= temp1^.wskaznik; {kolejnych element˘w stosu}
if il_pyt = 0 then wsk^.wskaznik:= Nil else wsk^.wskaznik:= temp;
Inc(il_pyt);
{temp2 jest "wartownikiem" przy odliczaniu}
{ustaw sie na pytaniu do usuniecia}
temp2:= temp1;
begin
While i<j do
{Usuwanie ze srodka lub konca wariant trudniejszy}
Read(plik, wsk^.pytania);
New(wsk);
temp:= wsk;
i:= 1;
begin
Reset(plik);
begin
end
else
Assign(plik,plik1);
Dec(il_pyt);
wsk:= temp1;
{Wczytywanie danych gdy stos jest pusty}
else
begin
Dispose(wsk);
end
temp1:= temp1^.wskaznik; {Wystarczy pos uľy† si© tylko jednĄ zmiennĄ pomocniczĄ}
begin
if j=1 then
{zwykle usuwanie glowy stosu}
Until (j in [1..il_pyt]);
ReadLn(j); {Zabezpieczenie aby pytania pochodzi y z bieľĄcego zakresu}
Write('Podaj numer pytania do usunięcia ([1..',il_pyt,']:= ');
Repeat
WriteLn;
wyswietl_baze_pytan(wsk); {Wy˜wietlamy baz© pytaä}
Write('Nacisnij dowolny klawisz...');
end;
{wersja z tzw. wartownikiem}
{kontrolowane wyjmowanie element˘w ze stosu}
temp1:= wsk; {Zapami©tujemy wsk aby nie zgubi† gˆowy stosu}
begin
if wsk<> Nil then
begin
WriteLn('Pozostawiam aktualnie wczytane dane !');
begin
else
end
Close(plik);
end;
Inc(il_pyt);
if il_pyt = 0 then wsk^.wskaznik:= Nil else wsk^.wskaznik:= temp;
Read(plik, wsk^.pytania);
New(wsk);
temp:= wsk;
begin
temp1, temp2, temp3 : wskaznik_do_pytan; {Zmienne pomocnicze umoľliwiajĄce
var i, j : Integer;
while not EoF(plik) do
Reset(plik);
end;
procedure usun_pytanie(var wsk : wskaznik_do_pytan);
{stosem z pliku}
Assign(plik,plik1);
Usun_stos(wsk);
begin
25
end;
end;
Write(i,'.');
GoToXY(6, WhereY); WriteLn(temp1^.pytania.pyt);
WriteLn('=================================');
for i:= 1 to los do
end;
Inc(j);
WriteLn(' Wylosowano nastepujace pytania: ');
temp1:= temp1^.wskaznik;
{temp2 jest "wartownikiem"}
{ustaw sie na pytaniu do usuniecia}
ocena:= (1/los)*100; {Wyliczenie w procentach warto˜ci jednego pytania.}
temp2:= temp1;
begin
While j<wynik do
{Usuwanie ze srodka lub konca}
Until (los in [1..il_pyt]);
ReadLn(los);
Write('Podaj liczbe pytan do wylosowania z przedzialu : ', '[1..',il_pyt,']');
Repeat
j:= 1;
begin
{Losowanie numer˘w pytan w zakresie 1..il_pyt}
WriteLn('==========================================');
Randomize;
end
else
ClrScr; wiedza:= 0;
Dec(los);
Dec(il_pyt);
wsk:= temp1; {gdy wylosowano pierwsze pytanie}
Dispose(wsk); {Zwykˆe usuni©cie gˆowy stosu}
temp1:= wsk^.wskaznik;
If (odp_u = wsk^.pytania.nr_popr) then wiedza:= wiedza+ocena;
Until (odp_u in [1..l_odp]);
ReadLn(odp_u);
Write('Podaj numer poprawnej odpowiedzi [1..',l_odp,']: ');
Repeat
WriteLn(' Losowanie pytan do przeprowadzenia testu.');
begin
if wsk<>Nil then {Jeľeli nie jest pusty moľna rozpoczĄ† losowanie}
begin
kopia, temp1, temp2, temp3 : wskaznik_do_pytan;
ocena : Real;
odp_u : Integer; {Numer odpowiedzi wybrany przez ucznia.}
los : Word;
var i,j,k,wynik : Integer;
losowania tych samych pytan. }
pytania usuwajac je z kopii stosu, aby uniknac wielokrotnego
if wsk^.pytania.nr_popr= k then write(' -*-');
WriteLn;
{ Procedura przeprowadzania testu losuje zadana ilosc razy
GoToXY(27, WhereY); Write(k,'. ',wsk^.pytania.odp[k]);
begin
for k:=1 to l_odp do {Wy˜wietl pytanie i dost©pne odpowiedzi}
GoToXY(6, WhereY); WriteLn(wsk^.pytania.pyt);
Write(i,'.');
{zwykle usuwanie glowy stosu}
{Zapami©tanie gˆowy stosu}
procedure przeprowadz_test(var wsk : wskaznik_do_pytan);
end;
else; {Nic nie rob- ewentualnie informuj ľe brak jest pytaä do usuwania}
end
begin
if wynik=1 then
{ Zniszcz wskaznik do wybranego pytania}
Dispose(temp1);
Dec(il_pyt);
temp1:= wsk;
wynik:= Random(los-1)+1; {Losowanie w przedziale 1-los}
begin
temp2^.wskaznik:= temp3; { Sklej oba konce}
temp3:= Nil;
else
26
'4': zapisz_baze(wsk);
Dispose(temp1);
WriteLn('4- Zapisz pytania do pliku ',plik1);
WriteLn('3- Wyswietl wszystkie pytania');
WriteLn('2- Usun pytanie');
WriteLn('1- Dopisz pytanie Liczba pytan: ',il_pyt, ' Ocena: ',wiedza:4:0,' %');
WriteLn(' =================================================== ');
WriteLn(' PROGRAM DO PRZEPROWADZANIA TESTOW - STRUKTURA STOS ');
ClrScr;
begin
{ Wyswietlanie menu. }
procedure wyswietl_menu;
end;
end;
ReadKey;
end;
end;
end.
end;
end;
exit;
usun_stos(wsk);
'7': begin
'6': przeprowadz_test(wsk);
Dec(los);
end;
'5': wczytaj_baze(wsk);
Dec(il_pyt);
{ Zniszcz wskaznik do wybranego pytania}
'3': wyswietl_baze_pytan(wsk);
'2': usun_pytanie(wsk);
'1': Dodaj_pytanie(wsk);
case wybor of
temp2^.wskaznik:= temp3; { Sklej oba konce}
temp3:= Nil;
else
temp3:= temp1^.wskaznik
wyswietl_menu;
ReadLn(wybor);
if temp1 <> Nil then
begin
if odp_u = temp1^.pytania.nr_popr then wiedza:= wiedza+ocena;
Until (odp_u in [1..l_odp]);
il_pyt:= 0; wsk:= Nil; {Zainicjowanie bazy pytan. }
While wybor <> '7' do
ReadLn(odp_u);
ClrScr;
begin
end;
WriteLn('7- Koniec programu');
WriteLn('6- Przeprowadz test');
WriteLn('5- Wczytaj pytania z pliku ',plik1);
Write('Podaj numer poprawnej odpowiedzi [1..',l_odp,']:*** ');
Repeat
end;
WriteLn;
if temp1^.pytania.nr_popr= k then write(' -*-');
GoToXY(27, WhereY); Write(k,'. ',temp1^.pytania.odp[k]);
begin
for k:=1 to l_odp do {Wy˜wietl znalezione pytanie i odpowiedzi dla niego}
27