Informatyka - instrukcje, Instrukcja 10, Podstawy Informatyki - Laboratorium


Podstawy Informatyki - Laboratorium

Politechnika Świętokrzyska, Wydział Elektrotechniki, Automatyki i Informatyki

Turbo Pascal

Instrukcja laboratoryjna nr 10

Opracował: dr inż. Grzegorz Słoń

luty 2005 r.

Zmienne dynamiczne - tablica wskaźników i stos dynamiczny

  1. Dany jest zestaw informacji o n studentach: nazwisko, imię, rok urodzenia, średnia ocen. Napisać program, który umożliwi umieszczenie tych danych w pamięci komputera w taki sposób, że dostęp do nich będzie się odbywał za pośrednictwem tablicy zawierającej wskaźniki do informacji o poszczególnych osobach.

program z10_1;

uses Crt;

type TDane = record

nazwisko, imie: string[20];

rok_ur: integer;

srednia: real;

end;

TWsk = ^TDane;

TTab = array[1..100] of TWsk;

var tab: TTab;

n: integer;

{-----}

procedure Dodaj_studenta(var a:TTab; poz: integer);

begin

New(a[poz]);

with a[poz]^ do

begin

write('Nazwisko: '); HighVideo; readln(nazwisko); LowVideo;

write('Imie: '); HighVideo; readln(imie); LowVideo;

write('Rok urodzenia: '); HighVideo; readln(rok_ur); LowVideo;

write('Srednia ocen: '); HighVideo; readln(srednia); LowVideo;

end;

end;

{-----}

procedure Wprowadz_dane(var n: integer; var a: TTab);

var i: integer;

begin

write('Dane ilu osob chcesz wprowadzic?: '); readln(n);

for i:=1 to n do

begin

writeln(i,' osoba:');

Dodaj_studenta(a,i);

end;

end;

{-----}

procedure Pokaz_studenta(x:TWsk);

begin

with x^ do

begin

GoToXY(5,WhereY); write(nazwisko); GoToXY(26,WhereY);

write(imie); GoToXY(48,WhereY); write(rok_ur:4); GoToXY(55,WhereY);

writeln(srednia:5:2);

end;

end;

{-----}

procedure Wyswietl_dane(n: integer; a: TTab);

var i: integer;

begin

HighVideo;

write('Lp.'); GoToXY(5,WhereY); write('Nazwisko'); GoToXY(26,WhereY);

write('Imie'); GoToXY(47,WhereY); write('Rok ur.'); GoToXY(55,WhereY);

writeln('Srednia');

LowVideo;

for i:=1 to n do

begin

write(i:3);

Pokaz_studenta(a[i]);

end;

end;

{-----}

begin

ClrScr;

Wprowadz_dane(n,tab);

ClrScr;

writeln('Wprowadzono nastepujace dane:');

Wyswietl_dane(n,tab);

writeln; writeln('Nacisnij dowolny klawisz...');

ReadKey;

end.

  1. Uzupełnić program z punktu 1 o funkcję wyznaczającą średnią arytmetyczną ocen wszystkich wprowadzonych studentów oraz o procedurę uwalniającą pamięć zajętą przez dane studentów. Sprawdzić dostępność danych po odblokowaniu przypisanej im pamięci.

{-----}

function Sred_a(n: integer; a: TTab): real;

var s: real;

i: integer;

begin

s:=0;

for i:=1 to n do s:=s+a[i]^.srednia;

if n>0 then s:=s/n;

Sred_a:=s;

end;

{-----}

procedure Uwolnij_pamiec(n: integer; a: TTab);

var i: integer;

begin

for i:=1 to n do Dispose(a[i]);

end;

{-----}

  1. Zmodyfikować rozwiązanie zadania z punktu 1 poprzez wykorzystanie stosu dynamicznego do przechowywania danych.

program z10_2;

uses Crt;

type TDane = record

nazwisko, imie: string[20];

rok_ur: integer;

srednia: real;

end;

TWsk = ^TElement;

TElement = record

d: TDane;

w: TWsk;

end;

var P: TWsk;

n: integer;

{-----}

procedure Wprowadz_studenta(var x: TDane);

begin

with x do

begin

write('Nazwisko: '); HighVideo; readln(nazwisko); LowVideo;

write('Imie: '); HighVideo; readln(imie); LowVideo;

write('Rok urodzenia: '); HighVideo; readln(rok_ur); LowVideo;

write('Srednia ocen: '); HighVideo; readln(srednia); LowVideo;

end;

end;

{-----}

procedure Na_stos(var P: TWsk; x: TDane);

var Q: TWsk;

begin

New(Q);

Q^.d:=x; Q^.w:=P;

P:=Q;

end;

{-----}

procedure Wprowadz_dane(var P: TWsk);

var i,n: integer;

x: TDane;

begin

P:=NIL;

write('Dane ilu osob chcesz wprowadzic?: '); readln(n);

for i:=1 to n do

begin

writeln(i,' osoba:');

Wprowadz_studenta(x);

Na_stos(P,x);

end;

end;

{-----}

procedure Usun_ze_stosu(var P: TWsk; var x: TDane);

var Q: TWsk;

begin

Q:=P;

x:=P^.d;

P:=P^.w;

Dispose(Q);

end;

{-----}

procedure Pokaz_studenta(x:TDane);

begin

with x do

begin

GoToXY(5,WhereY); write(nazwisko); GoToXY(26,WhereY);

write(imie); GoToXY(48,WhereY); write(rok_ur:4); GoToXY(55,WhereY);

writeln(srednia:5:2);

end;

end;

{-----}

procedure Usun_stos(var P: TWsk);

var x: TDane;

i: integer;

begin

i:=0;

HighVideo;

write('Lp.'); GoToXY(5,WhereY); write('Nazwisko'); GoToXY(26,WhereY);

write('Imie'); GoToXY(47,WhereY); write('Rok ur.'); GoToXY(55,WhereY);

writeln('Srednia');

LowVideo;

while P<>NIL do

begin

i:=i+1;

write(i:3);

Usun_ze_stosu(P,x);

Pokaz_studenta(x);

end;

end;

{-----}

begin

ClrScr;

Wprowadz_dane(P);

ClrScr;

writeln('Wprowadzono nastepujace dane:');

Usun_stos(P);

writeln; writeln('Nacisnij dowolny klawisz...');

ReadKey;

end.

  1. Uzupełnić program z punktu 3 o procedurę wyświetlającą zawartość stosu bez jego likwidacji.

{-----}

procedure Wyswietl_stos(P: TWsk);

var x: TDane;

i: integer;

begin

i:=0;

HighVideo;

write('Lp.'); GoToXY(5,WhereY); write('Nazwisko'); GoToXY(26,WhereY);

write('Imie'); GoToXY(47,WhereY); write('Rok ur.'); GoToXY(55,WhereY);

writeln('Srednia');

LowVideo;

while P<>NIL do

begin

i:=i+1;

write(i:3);

x:=P^.d; P:=P^.w;

Pokaz_studenta(x);

end;

end;

{-----}

  1. Uzupełnić program z punktu 4 o procedury lub funkcje wykonujące następujące operacje:

    1. wyznaczenie średniej arytmetycznej ocen wszystkich wprowadzonych studentów;

    2. znalezienie osób: najstarszej i najmłodszej;

    3. zapisanie zawartości stosu do pliku o nazwie oceny.dat;

    4. umożliwienie pobrania danych z pliku o nazwie oceny.dat, umieszczenia ich na stosie, a następnie dodania do stosu danych n nowych osób;

    5. znalezienie na stosie osób o podanym nazwisku i wyświetlenie ich danych na ekranie
      (w przypadku braku takich osób powinien się pojawić stosowany komunikat).

str. 4/4 Turbo Pascal - Instrukcja nr 10

Turbo Pascal - Instrukcja nr 10 str. 3/4



Wyszukiwarka