sprawozdanie programowanie lab5 fin

Politechnika Świętokrzyska w Kielcach Wydział Elektrotechniki, Automatyki i Informatyki
Laboratorium Podstaw Programowania 2
Lab. nr 5

Data wykonania ćwiczenia :

11.04.2012

1.Przemysław Wolski
  1. Wstęp teoretyczny

Jednokierunkowa lista liniowa (ang. singly linked list) jest abstrakcyjną strukturą danych, która może przechowywać elementy zarówno w sposób uporządkowany, jak

i nieuporządkowany. Elementy można dodawać i usuwać z listy w dowolnym jej miejscu. Czas wykonania tych operacji jest stały i niezależny od liczby elementów

w liście1, natomiast czas wyszukania elementu jest proporcjonalny do liczby elementów w niej umieszczonych.

Wyżej została przedstawiona procedura wstawiająca element do listy.

A poniżej procedura usuwająca element z listy. A pod nią kolejno procedury tworzącą, usuwającą i wyświetlającą.

2. Wstęp teoretyczny

Zadanie 1.

Zaprojektuj słownik, czyli dynamiczną strukturę danych, która podczas dopisywania elementów organizuje je od razu w porządku alfabetycznym. Elementami słownika niech będą słowa.

program lab5zad1;

uses crt;

type

wskaznik=^element;

element=record

dana:string;

nast:wskaznik;

end;

var

qw:wskaznik;

s:string;

i,n:integer;

procedure insert_node(var f:wskaznik; a:string);

var

prev,p,nowy:wskaznik;

begin

new(nowy);

nowy^.dana:=a;

nowy^.nast:=nil;

if f^.dana > a then

begin

nowy^.nast:=f;

f:=nowy;

exit;

end;

p:=f;

while (p^.dana <= a) do

begin

prev:=p;

p:=p^.nast;

if p=nil then

begin

prev^.nast:=nowy;

exit;

end;

end;

nowy^.nast:=prev^.nast;

prev^.nast:=nowy;

end;

procedure delete_node(var f:wskaznik; a:string);

var

x,poprz,pom:wskaznik;

begin

if f^.dana=a then

begin

pom:=f^.nast;

dispose(f);

f:=pom;

exit;

end;

x:=f;

repeat

poprz:=x;

x:=x^.nast;

until (x=nil) or (x^.dana=a);

if x=nil then exit;

poprz^.nast:=x^.nast;

dispose(x);

end;

procedure create(var f:wskaznik; a:string);

var

nowy:wskaznik;

begin

if f=nil then

begin

new(nowy);

nowy^.nast:=nil;

nowy^.dana:=a;

f:=nowy;

end

else

insert_node(f,a);

end;

procedure remove(var f:wskaznik);

var

pom:wskaznik;

begin

while f<> nil do

begin

pom:=f^.nast;

dispose(f);

f:=pom;

end;

end;

procedure show(f:wskaznik);

begin

while f <> nil do

begin

write(f^.dana:3,' ');

f:=f^.nast;

end;

writeln;

end;

begin

clrscr;

create(qw,s);

show(qw);

writeln('Ile slow chcesz dodac ?');

readln(n);

for i:=1 to n do begin

writeln('Wpisz liczbe');

readln(s);

insert_node(qw,s);

show(qw);

end;

writeln('Efekt:');

for i:=1 to n do begin

show(qw);

remove(qw);

end;

readln;

end.

Posłużenie się typem rekordowym do zdefiniowania typu pojedynczego elementu listy.

Procedura umieszczająca nowy element w liście jednokierunkowej.

Procedura usuwająca element z listy jednokierunkowej.

Procedura tworząca listę jednokierunkową, tylko wtedy jeśli nie istnieje pierwszy element.

Procedura usuwająca cała listę jednokierunkową.

Procedura wyświetlająca listę jednokierunkową na ekranie.

Stworzenie listy.

Wyświetlenie jej.

Wprowadzamy ile mamy zamiar wprowadzić słów do listy.

Podajemy poszczególne elementy.

Dodawanie do listy poszczególnych elementów.

Wypisywanie ich na bierząco.

Wyświetlenie efekty działania programu

Usuniecie listy.

Zadanie 2.

Napisz procedurę Odwroc(var l:lista) odwracającą listę l.

program lab5zad2;

type

wskaznik=^element;

element=record

liczba:Integer;

nast:wskaznik;

end;

var

poczatek:wskaznik;

kolejny:wskaznik;

poprzedni:wskaznik;

tmp:wskaznik;

p:pointer;

i:Integer;

procedure wypeln;

begin

mark(p);

poczatek:=nil;

new(poczatek);

poczatek^.liczba:=1;

poczatek^.nast:=nil;

kolejny:=poczatek;

for i:=2 to 10 do

begin

new(kolejny^.nast);

kolejny:=kolejny^.nast;

kolejny^.liczba:=i;

kolejny^.nast:=nil;

end;

end;

procedure przed_odwroc;

begin

writeln('Przed odwroceniem:');

kolejny:=poczatek;

while kolejny <> nil do

begin

write(kolejny^.liczba:3);

kolejny:=kolejny^.nast

end;

writeln;

poprzedni:=nil;

kolejny:=poczatek;

while kolejny <> nil do

begin

tmp:=kolejny^.nast;

kolejny^.nast:=poprzedni;

poprzedni:=kolejny;

kolejny:=tmp;

end;

poczatek:=poprzedni;

end;

procedure odwroc;

begin

writeln('Po odwroceniu:');

kolejny:=poczatek;

while kolejny <> nil do

begin

write(kolejny^.liczba:3);

kolejny:=kolejny^.nast

end;

writeln;

release(p);

readln;

end;

begin

writeln('Dostepna pamiec: ',MemAvail);

wypeln;

przed_odwroc;

odwroc;

writeln('Dostepna pamiec: ',MemAvail);

readln;

end.

Posłuzenie się typem rekordowym do zdefiniowania typu pojedynczego elementy listy jednokierunkowej.

Procedura wypełniająca listę kolejnymi wartościami od 1 do 10.

Procedura prezentująca listę przed odwróceniem znajdujących się w niej wartości.

Procedura odwracająca wartości w liście jednokierunkowej.

Sprawdzenie dostępnej pamięci.

Wywołanie procedur...

Sprawdzenie dostępnej pamięci.

Zadanie 3.

Napisz funkcję Scal(l1,l2:lista):lista scalającą dwie posortowane niemalejąco listy l1 i l2, tak aby wynikowa lista również była posortowana niemalejąco.

program lab5zad1;

uses crt;

type

wskaznik=^element;

element=record

dana:string;

nast:wskaznik;

end;

var

qw,qw2:wskaznik;

s,d:string;

i,n,m:integer;

procedure insert_node(var f:wskaznik; a:string);

var

prev,p,nowy:wskaznik;

begin

new(nowy);

nowy^.dana:=a;

nowy^.nast:=nil;

if f^.dana > a then

begin

nowy^.nast:=f;

f:=nowy;

exit;

end;

p:=f;

while (p^.dana <= a) do

begin

prev:=p;

p:=p^.nast;

if p=nil then

begin

prev^.nast:=nowy;

exit;

end;

end;

nowy^.nast:=prev^.nast;

prev^.nast:=nowy;

end;

procedure create(var f:wskaznik; a:string);

var

nowy:wskaznik;

begin

if f=nil then

begin

new(nowy);

nowy^.nast:=nil;

nowy^.dana:=a;

f:=nowy;

end

else

insert_node(f,a);

end;

procedure remove(var f:wskaznik);

var

pom:wskaznik;

begin

while f<> nil do

begin

pom:=f^.nast;

dispose(f);

f:=pom;

end;

end;

procedure show(f:wskaznik);

begin

while f <> nil do

begin

write(f^.dana:3,' ');

f:=f^.nast;

end;

writeln;

end;

function scalenie(l1,l2:wskaznik):wskaznik;

var

tmp,ac:wskaznik; begin

new(tmp);

tmp^.nast:=nil; ac:=tmp;

while (l1 <> nil) and (l2 <> nil) do

if l1^.dana < l2^.dana then begin

ac^.nast:=l1;

ac:=ac^.nast;

l1:=l1^.nast;

end else

if l1^.dana > l2^.dana then begin

ac^.nast:=l2;

ac:=ac^.nast;

l2:=l2^.nast;

end else begin

ac^.nast:=l1;

ac:=ac^.nast;

l1:=l1^.nast;

ac^.nast:=l2;

ac:=ac^.nast;

l2:=l2^.nast;

end; if l1 = nil then

ac^.nast:=l2

else ac^.nast:=l1;

scalenie:=tmp^.nast;

dispose(tmp);

end;

begin

clrscr;

create(qw,s);

create(qw2,d);

show(qw);

show(qw2);

writeln('Ile slow chcesz dodac do 1 listy ?');

readln(n);

for i:=1 to n do begin

writeln('Wpisz slowo');

readln(s);

insert_node(qw,s);

show(qw);

end;

writeln('Ile slow chcesz dodac do 2 listy ?');

readln(m);

for i:=1 to m do begin

writeln('Wpisz slowo');

readln(d);

insert_node(qw2,d);

show(qw2);

end;

writeln('Efekt:');

writeln('Poszczegolne listy przed operacja: ');

show(qw);

show(qw2);

scalenie(qw,qw2);

writeln('Po operacji ');

show(qw);

remove(qw);

remove(qw2);

readln;

end.

Posłużenie się typem rekordowym służącym do zdefiniowania typu pojedynczego elementu kolejki.

Procedura dodająca element do listy jednokierunkowej.

Procedura tworząca pierwszy element listy , ale tylko wtedy kiedy go nie ma.

Procedura usuwająca całą listę.

Procedura wypisująca na ekran cała listę.

Funkcja scalająca 2 listy .

Zapisanie wyniku w 1 lub w 2 liscie.

Stworzenie 1 listy.

Stworzenie 2 listy

Wypisanie na ekran elementów 1 listy.

Wypisanie na ekran elementów 2 listy.

Podajemy ilośc słów które chcemy podać do 1 listy.

Wpisujemy poszczególne słowa.

Dodajemy do kolejki.

Wypisujemy na ekran na bierząco.

Podajemy ilośc słów które chcemy podać do 2 listy.

Wpisujemy poszczególne słowa.

Dodajemy do kolejki.

Wypisujemy na ekran na bierząco.

Wypisanie efektu pracy programu.

Wypisanie listy 1 i 2 przed scaleniem.

Scalnie.

Wypisanie scalonych juz list 1 i 2.

Usuniecie listy 1.

Usuniecie listy 2.

3. Wnioski

No więc lista jednokierunkowa to lista "struktur danych typu record" przy czym każda zawiera wskaźnik do następnego elementu. W liście jednokierunkowej poruszamy się od początku do końca lub od końca do początku listy.


Wyszukiwarka

Podobne podstrony:
sprawozdanie programowanie lab20 fin
sprawozdanie programowanie lab4 fin
sprawozdanie programowanie lab11 fin
sprawozdanie programowanie lab3
sprawozdanie programowanie lab1
8 zalacznik 5 sprawozdawczosc w programach EUWT i EISiP
Sprawozdanie-aktywa,pasywa fin-RF-01
sprawozdanie programoweanie lab7 fin2
sprawozdanie programowanie lab2
sprawozdanie programowanie lab3 fin2
sprawozdanie programowanie lab9 fin2
sprawozdanie programowanie lab4
sprawozdanie programowanie lab8
Sprawozdanie z Programowania wsp¢ˆbie¾nego doc
lab5 Nowy Dokument programu Microsoft Office Word
Sprawozdanie ze znajomości programu symulacyjnego NF & S, metalurgia i odlewnictwo
G312A-K04-P5, Studia PŚK informatyka, Semestr 5, semestr 5, SI 2, Sprawozdanie lab5

więcej podobnych podstron