Informatyka 1. Rekordy, przeszukiwanie i sortowanie tablic

Podobne dokumenty
Informatyka 1. Rekordy, przeszukiwanie i sortowanie tablic

Informatyka I. Wyk lad VIII. Rekordy, przeszukiwanie i sortowanie tablic

Informatyka 1. Przetwarzanie tekstów

Informatyka 1. Dokumentacja programu, moduły programowe, typy tablicowe

Informatyka 1. Wyrażenia i instrukcje, złożoność obliczeniowa

Podstawy Programowania. Obsługa błędów, przeszukiwanie i sortowanie tablic

Podstawy Programowania. Obsługa błędów, przeszukiwanie i sortowanie tablic

Podstawy Programowania

Podstawy Programowania

Informatyka 1. Procedury i funkcje, struktura programu w Pascalu

Podstawy Programowania. Obsługa błędów, przeszukiwanie i sortowanie tablic

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Informatyka 1. Złożoność obliczeniowa

Podstawy Programowania

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Informatyka 1. Wyrażenia i instrukcje cd., ręczna symulacja, operacje wejścia/wyjścia

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Język programowania PASCAL

Podstawy Programowania. Złożoność obliczeniowa

Podstawy Programowania. Złożoność obliczeniowa

Podstawy Programowania

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Wstęp do programowania. Procedury i funkcje. Piotr Chrząstowski-Wachtel

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Wstęp do programowania. Różne różności

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

Programowanie w VB Proste algorytmy sortowania

PLIKI TEKSTOWE F C E 30 0D 0A 42 6F 72 6C 61 6E 64 1A T U R B O _ P A S C A L _ 7. 0

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Algorytmy i struktury danych

Pascal. 1. Pliki tekstowe. Przykład 1.1. Zapis do pliku tekstowego

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

Wstęp do programowania 2

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

Informatyka A. Algorytmy

Podstawy programowania

Programowanie w Turbo Pascal

Przykładowe B+ drzewo

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Wstęp do programowania. Drzewa. Piotr Chrząstowski-Wachtel

2.Sprawdzanie czy podana liczba naturalna jest pierwsza Liczba pierwsza to liczba podzielna tylko przez 1 i przez siebie.

Analiza algorytmów zadania podstawowe

Wykład III PASCAL - iteracja cz, 2, - liczby losowe, - tablice

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

Zasady Programowania Strukturalnego

Wszystkie zmienne typu plikowego, z wyjątkiem Output i Input muszą być zadeklarowane w sekcji deklaracji programu, który z nich korzysta.

Podstawy programowania

2:8,7 3:9,4 / \ / \ / \ / \ 4:7,3 5:8 6:9,2 7:4

Algorytmy i struktury danych

Wstęp do programowania. Dziel i rządź. Piotr Chrząstowski-Wachtel

Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne

Definicja: Algorytmami sortowania zewnętrznego nazywamy takie algorytmy, które sortują dane umieszczone w pamięci zewnętrznej.

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Wprowadzenie Tablica jednowymiarowa Tablice wielowymiarowe Algorytmy Rekordy Pliki Zadania Bibliografia

procesów Współbieżność i synchronizacja procesów Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

Kiedy i czy konieczne?

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

Podstawy programowania

1 Wprowadzenie. program t e s t 3 ; begin. Polecenie program. Różnice między poleceniami write i writeln. writeln ( Witaj, a ) ; end.

Algorytmy i struktury danych. wykład 5

Informatyka I. Wyk lad I. Wprowadzenie. Robert Muszyński Instytut Cybernetyki Technicznej Politechnika Wroc lawska

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Tablice. TYPE identyfikator tablicy = ARRAY [Indeksl,..., Indeksn] OF Typ; Dany identyfikator_ tablicy można wykorzystać w deklaracji VAR:

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima Uwagi przed sprawdzianem nr 1.

Ada 95 #1/5 - typy. Typy skalarne. Hierarchia typów w Adzie. Typ znakowy. Typy dyskretne. Plan wykładu

Algorytmy i struktury danych. wykład 1

prowadzący dr ADRIAN HORZYK /~horzyk tel.: Konsultacje paw. D-13/325

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Wstęp do programowania. Drzewa podstawowe techniki. Piotr Chrząstowski-Wachtel

3. Podstawowe funkcje mamematyczne. ZAPOZNAĆ SIĘ!!!

Wykład IV Algorytmy metody prezentacji i zapisu Rzut oka na język PASCAL

Algorytmy i struktury danych

PASCAL Kompendium. Środowisko TURBO PASCAL Skróty klawiaturowe. Edycja kodu Pomoc spis treści. Skopiowanie zaznaczonego bloku do schowka

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Algorytmy i. Wykład 5: Drzewa. Dr inż. Paweł Kasprowski

Elementy Pascala Konstrukcja programu w Pascalu Typy danych

Złożoność obliczeniowa algorytmu ilość zasobów komputera jakiej potrzebuje dany algorytm. Pojęcie to

Programowanie Proceduralne

Wstęp do programowania

PODSTAWY INFORMATYKI wykład 4.

PLIKI. Składnia deklaracji zmiennej plikowej: file of <typ>

Drzewa binarne. Drzewo binarne to dowolny obiekt powstały zgodnie z regułami: jest drzewem binarnym Jeśli T 0. jest drzewem binarnym Np.

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

1. Język Pascal Program

Technologie Informatyczne Wykład VII

Informatyka 1. Wprowadzenie

Opis implementacji: Implementacja przedstawia Grę w życie jako przykład prostej symulacji opartej na automatach.

Visual Basic for Application (VBA)

APROKSYMACJA. Rys. 1. Funkcja aproksymująca zbiór punktów pomiarowych (1) (2) (3) (4) (5) (6) (7) ... Zmienna y

Strategia "dziel i zwyciężaj"

Wstęp do programowania. Listy. Piotr Chrząstowski-Wachtel

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Informatyka 1. Algorytm, podstawowe notacje, typy danych i wyrażenia

Podstawy Programowania C++

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Metodyka i Technika Programowania 1

ALGORYTMY I STRUKTURY DANYCH

Transkrypt:

Informatyka 1 Wykład VIII Rekordy, przeszukiwanie i sortowanie tablic Robert Muszyński ZPCiR ICT PWr Zagadnienia: rekordy, rekordy jako argumenty procedur i funkcji, operacje na plikach z rekordami, przeszukiwanie tablic: liniowe, binarne, sortowanie tablic: przez wstawianie, drzewiaste, bąbelkowe, szybkie, przez scalanie. Copyright c 2001 2003 Robert Muszyński Niniejszy dokument zawiera materiały do wykładu na temat podstaw programowania w językach wysokiego poziomu. Jest on udostępniony pod warunkiem wykorzystania wyłącznie do własnych, prywatnych potrzeb i może być kopiowany wyłącznie w całości, razem ze stroną tytułową. Skład FoilTEX

Rekordy, przeszukiwanie i sortowanie tablic 1 Rekordy rek.pole1 rek.pole2 rek.polen Typ1 Typ2 TypN

Rekordy, przeszukiwanie i sortowanie tablic 1 Rekordy rek.pole1 rek.pole2 rek.polen Typ1 Typ2 TypN rek.pole prosta zmienna

Rekordy, przeszukiwanie i sortowanie tablic 1 Rekordy rek.pole1 rek.pole2 rek.polen Typ1 Typ2 TypN rek.pole prosta zmienna TYPE LiczbyZespolone = RECORD Re, Im : REAL; VAR X1,X2,Suma,Iloczyn: LiczbyZespolone; (***************************************************) Suma.Re := X1.Re + X2.Re; Suma.Im := X1.Im + X2.Im; Iloczyn.Re := X1.Re * X2.Re - X1.Im * X2.Im; Iloczyn.Im := X1.Re * X2.Im + X1.Im * X2.Re;

Rekordy, przeszukiwanie i sortowanie tablic 1 Rekordy rek.pole1 rek.pole2 rek.polen Typ1 Typ2 TypN rek.pole prosta zmienna TYPE LiczbyZespolone = RECORD Re, Im : REAL; VAR X1,X2,Suma,Iloczyn: LiczbyZespolone; (***************************************************) Suma.Re := X1.Re + X2.Re; Suma.Im := X1.Im + X2.Im; Iloczyn.Re := X1.Re * X2.Re - X1.Im * X2.Im; Iloczyn.Im := X1.Re * X2.Im + X1.Im * X2.Re;

Rekordy, przeszukiwanie i sortowanie tablic 1 Rekordy rek.pole1 rek.pole2 rek.polen Typ1 Typ2 TypN rek.pole prosta zmienna TYPE LiczbyZespolone = RECORD Re, Im : REAL; VAR X1,X2,Suma,Iloczyn: LiczbyZespolone; (***************************************************) Suma.Re := X1.Re + X2.Re; Suma.Im := X1.Im + X2.Im; Iloczyn.Re := X1.Re * X2.Re - X1.Im * X2.Im; Iloczyn.Im := X1.Re * X2.Im + X1.Im * X2.Re;

Rekordy, przeszukiwanie i sortowanie tablic 2 Posługiwanie się rekordami każde pole musi być podane jawnie

Rekordy, przeszukiwanie i sortowanie tablic 2 Posługiwanie się rekordami każde pole musi być podane jawnie kolejność pól w deklaracji jest nieistotna

Rekordy, przeszukiwanie i sortowanie tablic 2 Posługiwanie się rekordami każde pole musi być podane jawnie kolejność pól w deklaracji jest nieistotna możliwe jest podstawianie całych rekordów

Rekordy, przeszukiwanie i sortowanie tablic 2 Posługiwanie się rekordami każde pole musi być podane jawnie kolejność pól w deklaracji jest nieistotna możliwe jest podstawianie całych rekordów zmienne rekordowe mogą być argumentami procedur i funkcji (ale nie wartościami funkcji!!!)

Rekordy, przeszukiwanie i sortowanie tablic 2 Posługiwanie się rekordami każde pole musi być podane jawnie kolejność pól w deklaracji jest nieistotna możliwe jest podstawianie całych rekordów zmienne rekordowe mogą być argumentami procedur i funkcji (ale nie wartościami funkcji!!!) zgodność typów

Rekordy, przeszukiwanie i sortowanie tablic 2 Posługiwanie się rekordami każde pole musi być podane jawnie kolejność pól w deklaracji jest nieistotna możliwe jest podstawianie całych rekordów zmienne rekordowe mogą być argumentami procedur i funkcji (ale nie wartościami funkcji!!!) zgodność typów rekordy z wariantami

Rekordy, przeszukiwanie i sortowanie tablic 3 Przykłady użycia rekordów TYPE KlasaOkretu= (Barka, Kuter, Tankowiec, Lodolamacz); KlasaNapedu= (Wiosla, Zagle, Para, Diesel, Atomowy); Data = RECORD Rok, Miesiac : INTEGER; Dzien : INTEGER;

Rekordy, przeszukiwanie i sortowanie tablic 3 Przykłady użycia rekordów TYPE KlasaOkretu= (Barka, Kuter, Tankowiec, Lodolamacz); KlasaNapedu= (Wiosla, Zagle, Para, Diesel, Atomowy); Data = RECORD Rok, Miesiac : INTEGER; Dzien : INTEGER; Okret = RECORD Nazwa : String; Zwodowany, Remont, Wyplynal, Oczekiwany : Data; wmorzu,zaloga : INTEGER; Klasa : KlasaOkretu; Tonaz,Dlugosc : INTEGER; Naped : KlasaNapedu;

Rekordy, przeszukiwanie i sortowanie tablic 3 Przykłady użycia rekordów TYPE KlasaOkretu= (Barka, Kuter, Tankowiec, Lodolamacz); KlasaNapedu= (Wiosla, Zagle, Para, Diesel, Atomowy); Data = RECORD Rok, Miesiac : INTEGER; Dzien : INTEGER; Okret = RECORD Nazwa : String; Zwodowany, Remont, Wyplynal, Oczekiwany : Data; wmorzu,zaloga : INTEGER; Klasa : KlasaOkretu; Tonaz,Dlugosc : INTEGER; Naped : KlasaNapedu; VAR S1, S2, S3 : Okret;

Rekordy, przeszukiwanie i sortowanie tablic 3 Przykłady użycia rekordów TYPE KlasaOkretu= (Barka, Kuter, Tankowiec, Lodolamacz); KlasaNapedu= (Wiosla, Zagle, Para, Diesel, Atomowy); Data = RECORD Rok, Miesiac : INTEGER; Dzien : INTEGER; Okret = RECORD Nazwa : String; Zwodowany, Remont, Wyplynal, Oczekiwany : Data; wmorzu,zaloga : INTEGER; Klasa : KlasaOkretu; Tonaz,Dlugosc : INTEGER; Naped : KlasaNapedu; VAR S1, S2, S3 : Okret; (***************************************************) S1.Nazwa := Moja Zocha ;

Rekordy, przeszukiwanie i sortowanie tablic 3 Przykłady użycia rekordów TYPE KlasaOkretu= (Barka, Kuter, Tankowiec, Lodolamacz); KlasaNapedu= (Wiosla, Zagle, Para, Diesel, Atomowy); Data = RECORD Rok, Miesiac : INTEGER; Dzien : INTEGER; Okret = RECORD Nazwa : String; Zwodowany, Remont, Wyplynal, Oczekiwany : Data; wmorzu,zaloga : INTEGER; Klasa : KlasaOkretu; Tonaz,Dlugosc : INTEGER; Naped : KlasaNapedu; VAR S1, S2, S3 : Okret; (***************************************************) S1.Nazwa := Moja Zocha ; S1.Klasa := Kuter; S1.Naped := Diesel;

Rekordy, przeszukiwanie i sortowanie tablic 3 Przykłady użycia rekordów TYPE KlasaOkretu= (Barka, Kuter, Tankowiec, Lodolamacz); KlasaNapedu= (Wiosla, Zagle, Para, Diesel, Atomowy); Data = RECORD Rok, Miesiac : INTEGER; Dzien : INTEGER; Okret = RECORD Nazwa : String; Zwodowany, Remont, Wyplynal, Oczekiwany : Data; wmorzu,zaloga : INTEGER; Klasa : KlasaOkretu; Tonaz,Dlugosc : INTEGER; Naped : KlasaNapedu; VAR S1, S2, S3 : Okret; (***************************************************) S1.Nazwa := Moja Zocha ; S1.Klasa := Kuter; S1.Naped := Diesel; S1.Tonaz := 50; S1.Dlugosc := 20; S1.Zaloga := 2;

Rekordy, przeszukiwanie i sortowanie tablic 3 Przykłady użycia rekordów TYPE KlasaOkretu= (Barka, Kuter, Tankowiec, Lodolamacz); KlasaNapedu= (Wiosla, Zagle, Para, Diesel, Atomowy); Data = RECORD Rok, Miesiac : INTEGER; Dzien : INTEGER; Okret = RECORD Nazwa : String; Zwodowany, Remont, Wyplynal, Oczekiwany : Data; wmorzu,zaloga : INTEGER; Klasa : KlasaOkretu; Tonaz,Dlugosc : INTEGER; Naped : KlasaNapedu; VAR S1, S2, S3 : Okret; (***************************************************) S1.Nazwa := Moja Zocha ; S1.Klasa := Kuter; S1.Naped := Diesel; S1.Tonaz := 50; S1.Dlugosc := 20; S1.Zaloga := 2; S1.Zwodowany.Rok := 1962; S1.Zwodowany.Miesiac := 4; S1.Zwodowany.Dzien := 1;

Rekordy, przeszukiwanie i sortowanie tablic 3 Przykłady użycia rekordów TYPE KlasaOkretu= (Barka, Kuter, Tankowiec, Lodolamacz); KlasaNapedu= (Wiosla, Zagle, Para, Diesel, Atomowy); Data = RECORD Rok, Miesiac : INTEGER; Dzien : INTEGER; Okret = RECORD Nazwa : String; Zwodowany, Remont, Wyplynal, Oczekiwany : Data; wmorzu,zaloga : INTEGER; Klasa : KlasaOkretu; Tonaz,Dlugosc : INTEGER; Naped : KlasaNapedu; VAR S1, S2, S3 : Okret; (***************************************************) S1.Nazwa := Moja Zocha ; S1.Klasa := Kuter; S1.Naped := Diesel; S1.Tonaz := 50; S1.Dlugosc := 20; S1.Zaloga := 2; S1.Zwodowany.Rok := 1962; S1.Zwodowany.Miesiac := 4; S1.Zwodowany.Dzien := 1; S1.Wyplynal := S1.Zwodowany;

Rekordy, przeszukiwanie i sortowanie tablic 3 Przykłady użycia rekordów TYPE KlasaOkretu= (Barka, Kuter, Tankowiec, Lodolamacz); KlasaNapedu= (Wiosla, Zagle, Para, Diesel, Atomowy); Data = RECORD Rok, Miesiac : INTEGER; Dzien : INTEGER; Okret = RECORD Nazwa : String; Zwodowany, Remont, Wyplynal, Oczekiwany : Data; wmorzu,zaloga : INTEGER; Klasa : KlasaOkretu; Tonaz,Dlugosc : INTEGER; Naped : KlasaNapedu; VAR S1, S2, S3 : Okret; (***************************************************) S1.Nazwa := Moja Zocha ; S1.Klasa := Kuter; S1.Naped := Diesel; S1.Tonaz := 50; S1.Dlugosc := 20; S1.Zaloga := 2; S1.Zwodowany.Rok := 1962; S1.Zwodowany.Miesiac := 4; S1.Zwodowany.Dzien := 1; S1.Wyplynal := S1.Zwodowany; S2 := S1;

Rekordy, przeszukiwanie i sortowanie tablic 4 TYPE Napis = RECORD Tekst : String; Dlugosc : INTEGER;

Rekordy, przeszukiwanie i sortowanie tablic 4 TYPE Napis = RECORD Tekst : String; Dlugosc : INTEGER; Data = RECORD Rok, Miesiac, Dzien : INTEGER;

Rekordy, przeszukiwanie i sortowanie tablic 4 TYPE Napis = RECORD Tekst : String; Dlugosc : INTEGER; Data = RECORD Rok, Miesiac, Dzien : INTEGER; Osoba = RECORD Imie, Nazwisko, MiejsceUrodzenia : Napis; DataUrodzenia : Data; LiczbaDzieci : INTEGER; ImionaDzieci : ARRAY [1..20] OF Napis; Wyksztalcenie : (brak, podstawowe, srednie, wyzsze);

Rekordy, przeszukiwanie i sortowanie tablic 4 TYPE Napis = RECORD Tekst : String; Dlugosc : INTEGER; Data = RECORD Rok, Miesiac, Dzien : INTEGER; Osoba = RECORD Imie, Nazwisko, MiejsceUrodzenia : Napis; DataUrodzenia : Data; LiczbaDzieci : INTEGER; ImionaDzieci : ARRAY [1..20] OF Napis; Wyksztalcenie : (brak, podstawowe, srednie, wyzsze); VAR StaryZawislak : Osoba; Kartoteka : ARRAY [1..1000] OF Osoba;

Rekordy, przeszukiwanie i sortowanie tablic 4 TYPE Napis = RECORD Tekst : String; Dlugosc : INTEGER; Data = RECORD Rok, Miesiac, Dzien : INTEGER; Osoba = RECORD Imie, Nazwisko, MiejsceUrodzenia : Napis; DataUrodzenia : Data; LiczbaDzieci : INTEGER; ImionaDzieci : ARRAY [1..20] OF Napis; Wyksztalcenie : (brak, podstawowe, srednie, wyzsze); VAR StaryZawislak : Osoba; Kartoteka : ARRAY [1..1000] OF Osoba; (***************************************************) StaryZawislak.Wyksztalcenie := srednie;

Rekordy, przeszukiwanie i sortowanie tablic 4 TYPE Napis = RECORD Tekst : String; Dlugosc : INTEGER; Data = RECORD Rok, Miesiac, Dzien : INTEGER; Osoba = RECORD Imie, Nazwisko, MiejsceUrodzenia : Napis; DataUrodzenia : Data; LiczbaDzieci : INTEGER; ImionaDzieci : ARRAY [1..20] OF Napis; Wyksztalcenie : (brak, podstawowe, srednie, wyzsze); VAR StaryZawislak : Osoba; Kartoteka : ARRAY [1..1000] OF Osoba; (***************************************************) StaryZawislak.Wyksztalcenie := srednie; StaryZawislak.Imie.Tekst := Pawel ; StaryZawislak.Imie.Dlugosc := 5;

Rekordy, przeszukiwanie i sortowanie tablic 4 TYPE Napis = RECORD Tekst : String; Dlugosc : INTEGER; Data = RECORD Rok, Miesiac, Dzien : INTEGER; Osoba = RECORD Imie, Nazwisko, MiejsceUrodzenia : Napis; DataUrodzenia : Data; LiczbaDzieci : INTEGER; ImionaDzieci : ARRAY [1..20] OF Napis; Wyksztalcenie : (brak, podstawowe, srednie, wyzsze); VAR StaryZawislak : Osoba; Kartoteka : ARRAY [1..1000] OF Osoba; (***************************************************) StaryZawislak.Wyksztalcenie := srednie; StaryZawislak.Imie.Tekst := Pawel ; StaryZawislak.Imie.Dlugosc := 5; StaryZawislak.Nazwisko.Tekst := Zawislak ; StaryZawislak.Nazwisko.Dlugosc := Dlugosc(StaryZawislak.Nazwisko.Tekst);

Rekordy, przeszukiwanie i sortowanie tablic 4 TYPE Napis = RECORD Tekst : String; Dlugosc : INTEGER; Data = RECORD Rok, Miesiac, Dzien : INTEGER; Osoba = RECORD Imie, Nazwisko, MiejsceUrodzenia : Napis; DataUrodzenia : Data; LiczbaDzieci : INTEGER; ImionaDzieci : ARRAY [1..20] OF Napis; Wyksztalcenie : (brak, podstawowe, srednie, wyzsze); VAR StaryZawislak : Osoba; Kartoteka : ARRAY [1..1000] OF Osoba; (***************************************************) StaryZawislak.Wyksztalcenie := srednie; StaryZawislak.Imie.Tekst := Pawel ; StaryZawislak.Imie.Dlugosc := 5; StaryZawislak.Nazwisko.Tekst := Zawislak ; StaryZawislak.Nazwisko.Dlugosc := Dlugosc(StaryZawislak.Nazwisko.Tekst); StaryZawislak.ImionaDzieci[1].Tekst := Balbina ; {...}

Rekordy, przeszukiwanie i sortowanie tablic 4 TYPE Napis = RECORD Tekst : String; Dlugosc : INTEGER; Data = RECORD Rok, Miesiac, Dzien : INTEGER; Osoba = RECORD Imie, Nazwisko, MiejsceUrodzenia : Napis; DataUrodzenia : Data; LiczbaDzieci : INTEGER; ImionaDzieci : ARRAY [1..20] OF Napis; Wyksztalcenie : (brak, podstawowe, srednie, wyzsze); VAR StaryZawislak : Osoba; Kartoteka : ARRAY [1..1000] OF Osoba; (***************************************************) StaryZawislak.Wyksztalcenie := srednie; StaryZawislak.Imie.Tekst := Pawel ; StaryZawislak.Imie.Dlugosc := 5; StaryZawislak.Nazwisko.Tekst := Zawislak ; StaryZawislak.Nazwisko.Dlugosc := Dlugosc(StaryZawislak.Nazwisko.Tekst); StaryZawislak.ImionaDzieci[1].Tekst := Balbina ; {...} Kartoteka[1].Nazwisko.Tekst := Nowak ;

Rekordy, przeszukiwanie i sortowanie tablic 4 TYPE Napis = RECORD Tekst : String; Dlugosc : INTEGER; Data = RECORD Rok, Miesiac, Dzien : INTEGER; Osoba = RECORD Imie, Nazwisko, MiejsceUrodzenia : Napis; DataUrodzenia : Data; LiczbaDzieci : INTEGER; ImionaDzieci : ARRAY [1..20] OF Napis; Wyksztalcenie : (brak, podstawowe, srednie, wyzsze); VAR StaryZawislak : Osoba; Kartoteka : ARRAY [1..1000] OF Osoba; (***************************************************) StaryZawislak.Wyksztalcenie := srednie; StaryZawislak.Imie.Tekst := Pawel ; StaryZawislak.Imie.Dlugosc := 5; StaryZawislak.Nazwisko.Tekst := Zawislak ; StaryZawislak.Nazwisko.Dlugosc := Dlugosc(StaryZawislak.Nazwisko.Tekst); StaryZawislak.ImionaDzieci[1].Tekst := Balbina ; {...} Kartoteka[1].Nazwisko.Tekst := Nowak ; Kartoteka[7] := StaryZawislak;

Rekordy, przeszukiwanie i sortowanie tablic 4 TYPE Napis = RECORD Tekst : String; Dlugosc : INTEGER; Data = RECORD Rok, Miesiac, Dzien : INTEGER; Osoba = RECORD Imie, Nazwisko, MiejsceUrodzenia : Napis; DataUrodzenia : Data; LiczbaDzieci : INTEGER; ImionaDzieci : ARRAY [1..20] OF Napis; Wyksztalcenie : (brak, podstawowe, srednie, wyzsze); VAR StaryZawislak : Osoba; Kartoteka : ARRAY [1..1000] OF Osoba; (***************************************************) StaryZawislak.Wyksztalcenie := srednie; StaryZawislak.Imie.Tekst := Pawel ; StaryZawislak.Imie.Dlugosc := 5; StaryZawislak.Nazwisko.Tekst := Zawislak ; StaryZawislak.Nazwisko.Dlugosc := Dlugosc(StaryZawislak.Nazwisko.Tekst); StaryZawislak.ImionaDzieci[1].Tekst := Balbina ; {...} Kartoteka[1].Nazwisko.Tekst := Nowak ; Kartoteka[7] := StaryZawislak; Kartoteka[1].DataUrodzenia := Kartoteka[7].DataUrodzenia;

Rekordy, przeszukiwanie i sortowanie tablic 5 FUNCTION RoznicaDat(d1, d2: Data): INTEGER; (* Funkcja oblicza PRZYBLIZONA ilosc dni miedzy datami *) (* d1 a d2 w dniach. Jesli d1>d2 to wynik jest ujemny *) BEGIN RoznicaDat := (d2.rok - d1.rok) * 365 + (d2.miesiac - d1.miesiac) * 30 + (d2.dzien - d1.dzien) (* RoznicaDat *)

Rekordy, przeszukiwanie i sortowanie tablic 5 FUNCTION RoznicaDat(d1, d2: Data): INTEGER; (* Funkcja oblicza PRZYBLIZONA ilosc dni miedzy datami *) (* d1 a d2 w dniach. Jesli d1>d2 to wynik jest ujemny *) BEGIN RoznicaDat := (d2.rok - d1.rok) * 365 + (d2.miesiac - d1.miesiac) * 30 + (d2.dzien - d1.dzien) (* RoznicaDat *) PROCEDURE PobierzDate(VAR d: Data; s: String); (* Procedura pyta uzytkownika o date wyswietlajac poda-*) (* ne pytanie; wymusza legalna date w latach 1900-2030.*) BEGIN WRITELN( Prosze podac date,s); WITH d DO REPEAT WRITELN( Rok: ); READLN(Rok); UNTIL (Rok >= 1900) AND (Rok <= 2030); WITH d DO REPEAT WRITELN( Miesiac: ); READLN(Miesiac); UNTIL (Miesiac >= 1) AND (Miesiac <= 12); WITH d DO REPEAT WRITELN( Dzien: ); READLN(d.Dzien); UNTIL (Dzien >= 1) AND (Dzien <= 31); {PobierzDate}

Rekordy, przeszukiwanie i sortowanie tablic 6 WITH S1 DO BEGIN PobierzDate(Zwodowany, zwodowania okretu ); PobierzDate(OstatniRemont, ostatniego remontu ); PobierzDate(Wyplynal, wyplyniecia z portu ); PobierzDate(Oczekiwany, oczekiwanego powrotu ); wmorzu := RoznicaDat(Wyplynal,Dzis);

Rekordy, przeszukiwanie i sortowanie tablic 7 Wczytywanie rekordów z pliku PROGRAM rodzina (INPUT,OUTPUT,Dane); CONST Max_Osob = 200; TYPE Osoba = RECORD ImieiNazwisko : String30; PESEL : INTEGER; DataUrodzenia : Data; {...} TabOsob = ARRAY [1..Max_Osob] OF Osoba; VAR NOsoby : INTEGER; Rodzina : TabOsob; Dane : FILE OF Osoba; (***************************************************) RESET(Dane); {pomijamy kwestie nazwy pliku} NOsoby := 0; WHILE (NOT EOF(Dane)) AND (NOsoby < Max_Osob) DO BEGIN NOsoby := NOsoby + 1; READ(Dane,Rodzina[NOsoby]); {WRITE(...) przy REWRITE} {...} END.

Rekordy, przeszukiwanie i sortowanie tablic 7 Wczytywanie rekordów z pliku PROGRAM rodzina (INPUT,OUTPUT,Dane); CONST Max_Osob = 200; TYPE Osoba = RECORD ImieiNazwisko : String30; PESEL : INTEGER; DataUrodzenia : Data; {...} TabOsob = ARRAY [1..Max_Osob] OF Osoba; VAR NOsoby : INTEGER; Rodzina : TabOsob; Dane : FILE OF Osoba; (***************************************************) RESET(Dane); {pomijamy kwestie nazwy pliku} NOsoby := 0; WHILE (NOT EOF(Dane)) AND (NOsoby < Max_Osob) DO BEGIN NOsoby := NOsoby + 1; READ(Dane,Rodzina[NOsoby]); {WRITE(...) przy REWRITE} {...} END.

Rekordy, przeszukiwanie i sortowanie tablic 7 Wczytywanie rekordów z pliku PROGRAM rodzina (INPUT,OUTPUT,Dane); CONST Max_Osob = 200; TYPE Osoba = RECORD ImieiNazwisko : String30; PESEL : INTEGER; DataUrodzenia : Data; {...} TabOsob = ARRAY [1..Max_Osob] OF Osoba; VAR NOsoby : INTEGER; Rodzina : TabOsob; Dane : FILE OF Osoba; (***************************************************) RESET(Dane); {pomijamy kwestie nazwy pliku} NOsoby := 0; WHILE (NOT EOF(Dane)) AND (NOsoby < Max_Osob) DO BEGIN NOsoby := NOsoby + 1; READ(Dane,Rodzina[NOsoby]); {WRITE(...) przy REWRITE} {...} END.

Rekordy, przeszukiwanie i sortowanie tablic 8 Przeszukiwanie tablic liniowe START Poszukiwanie wzorca wœród elementów tablicy jednowymiarowej od elementu min do max Tab[min] = wzorzec lub min = max? Tak STOP Nie min = min + 1

Rekordy, przeszukiwanie i sortowanie tablic 8 Przeszukiwanie tablic liniowe START Poszukiwanie wzorca wœród elementów tablicy jednowymiarowej od elementu min do max Tab[min] = wzorzec lub min = max? Tak STOP Nie min = min + 1 binarne START Poszukiwanie wzorca wœród elementów tablicy jednowymiarowej od elementu min do max Srodek = (min + max) div 2 max = Srodek - 1 min = Srodek + 1 Nie Tab[Srodek] = wzorzec lub min=max? Nie Tab[Srodek] < wzorzec? Tak Tak STOP

Rekordy, przeszukiwanie i sortowanie tablic 9 Przeszukiwanie liniowe CONST MaxWartosci = 30; TYPE Wartosci = ARRAY[1..MaxWartosci] OF INTEGER; FUNCTION Przeszukaj(tab: Wartosci; Klucz: INTEGER; min,max,domysl:integer):integer; (* Wyszukuje wartosc Klucz w tablicy *) (* pomiedzy indeksami min i max *) (* Zwraca jej index lub domysl gdy nie znaleziona *) VAR znaleziony: BOOLEAN; BEGIN znaleziony := FALSE; WHILE ((NOT znaleziony) AND (min <= max)) DO BEGIN IF Porownanie(tab[min],Klucz) THEN znaleziony := TRUE ELSE min := min + 1 IF znaleziony THEN Przeszukaj := min ELSE Przeszukaj := domysl { Przeszukaj }

Rekordy, przeszukiwanie i sortowanie tablic 9 Przeszukiwanie liniowe CONST MaxWartosci = 30; TYPE Wartosci = ARRAY[1..MaxWartosci] OF INTEGER; FUNCTION Przeszukaj(tab: Wartosci; Klucz: INTEGER; min,max,domysl:integer):integer; (* Wyszukuje wartosc Klucz w tablicy *) (* pomiedzy indeksami min i max *) (* Zwraca jej index lub domysl gdy nie znaleziona *) VAR znaleziony: BOOLEAN; Przeszukiwanie binarne (*... POSORTOWANEJ *) BEGIN znaleziony := FALSE; WHILE ((NOT znaleziony) AND (min <= max)) DO BEGIN IF Porownanie(tab[min],Klucz) THEN znaleziony := TRUE ELSE min := min + 1 IF znaleziony THEN Przeszukaj := min ELSE Przeszukaj := domysl { Przeszukaj } srodek := (min + max) div 2; CASE Porownanie(tab[srodek],Klucz) OF 0: znaleziony := TRUE -1: max := srodek - 1 1: min := srodek + 1 END

Rekordy, przeszukiwanie i sortowanie tablic 10 przez wstawianie Sortowanie

Rekordy, przeszukiwanie i sortowanie tablic 10 przez wstawianie Sortowanie przez proste wstawianie przez wstawianie połówkowe

Rekordy, przeszukiwanie i sortowanie tablic 10 przez wstawianie Sortowanie przez proste wstawianie przez wstawianie połówkowe przez wybieranie

Rekordy, przeszukiwanie i sortowanie tablic 10 przez wstawianie Sortowanie przez proste wstawianie przez wstawianie połówkowe przez wybieranie drzewiaste

Rekordy, przeszukiwanie i sortowanie tablic 10 przez wstawianie Sortowanie przez proste wstawianie przez wstawianie połówkowe przez wybieranie drzewiaste przez zamianę

Rekordy, przeszukiwanie i sortowanie tablic 10 przez wstawianie Sortowanie przez proste wstawianie przez wstawianie połówkowe przez wybieranie drzewiaste przez zamianę bąbelkowe

Rekordy, przeszukiwanie i sortowanie tablic 10 przez wstawianie Sortowanie przez proste wstawianie przez wstawianie połówkowe przez wybieranie drzewiaste przez zamianę bąbelkowe szybkie

Rekordy, przeszukiwanie i sortowanie tablic 10 przez wstawianie Sortowanie przez proste wstawianie przez wstawianie połówkowe przez wybieranie drzewiaste przez zamianę bąbelkowe szybkie przez scalanie

Rekordy, przeszukiwanie i sortowanie tablic 11 Sortowanie przez proste wstawianie

Rekordy, przeszukiwanie i sortowanie tablic 11 Sortowanie przez proste wstawianie START Sortowanie tablicy przez wstawianie j = 2 temp = Tab[j] i = j - 1 Wstaw Tab[j] w posortowany ci¹g Tab[1..j-1] 5 2 4 6 1 3 2 5 4 6 1 3 2 4 5 6 1 3 2 4 5 6 1 3 1 2 4 5 6 3 1 2 3 4 5 6 Tab[i] > temp i i > 0? Nie Tab[i+1] = temp Czy element j-ty jest ostatni? Tak STOP Tak Tab[i+1] = Tab[i] i = i - 1 Nie j = j + 1

Rekordy, przeszukiwanie i sortowanie tablic 12 Sortowanie drzewiaste START Sortowanie tablicy drzewiaste Przekszta³æ tablicê w drzewo binarne ObejdŸ drzewo w porz¹dku "najpierw w lewo" i wypisz ka dy element przy okazji drugich jego odwiedzin STOP

Rekordy, przeszukiwanie i sortowanie tablic 12 Sortowanie drzewiaste START Przekszta³æ tablicê w drzewo binarne Sortowanie tablicy drzewiaste krok I 5 2 4 6 1 3 5 ObejdŸ drzewo w porz¹dku "najpierw w lewo" i wypisz ka dy element przy okazji drugich jego odwiedzin 1 2 4 6 STOP 3 krok II 5 2 1 1 1 2 4 3 3 3 4 4 2 5 6 6 6 5

Rekordy, przeszukiwanie i sortowanie tablic 12 Sortowanie drzewiaste START Przekszta³æ tablicê w drzewo binarne Sortowanie tablicy drzewiaste krok I 5 2 4 6 1 3 5 ObejdŸ drzewo w porz¹dku "najpierw w lewo" i wypisz ka dy element przy okazji drugich jego odwiedzin 1 2 4 6 STOP 3 krok II 5 2 1 1 1 2 4 3 3 3 4 4 2 5 6 6 6 5

Rekordy, przeszukiwanie i sortowanie tablic 13 Sortowanie bąbelkowe START Sortowanie tablicy b¹belkowe j = 1 i = 1 5 2 4 6 1 3 Tab[i] > Tab[i+1]? Tak Zamieñ Tab[i] z Tab[i+1] 2 4 5 1 3 6 Nie 2 4 1 3 5 6 i = i + 1 2 1 3 4 5 6 Czy element i-ty jest przedostatni? Tak Nie 1 2 3 4 5 6 1 2 3 4 5 6 j < n - 1? Tak j = j + 1 Nie STOP

Rekordy, przeszukiwanie i sortowanie tablic 14 Sortowanie bąbelkowe START Sortowanie tablicy b¹belkowe j = 1 i = 1 Tab[i] > Tab[i+1]? Nie i = i + 1 Czy element i-ty jest przedostatni? Tak j < n - 1? Nie Tak Nie Zamieñ Tab[i] z Tab[i+1] Tak j = j + 1 PROCEDURE BubbleSort(VAR Tab : Wartosci; min, max : INTEGER); VAR i, j: INTEGER; BEGIN FOR j := min TO (max - 1) DO FOR i := min TO (max - 1) DO IF Tab[i] > Tab[i+1] THEN Zamien(Tab[i], Tab[i+1]) { BubbleSort } STOP

Rekordy, przeszukiwanie i sortowanie tablic 15 Sortowanie szybkie START Sortuj (l, p) i = l j = p x = Tab[(i + j) div 2] Szybkie sortowanie elementów l..p tablicy START Sortuj (1, n) Sortowanie tablicy szybkie Tab[i] < x? Tak i = i + 1 STOP Nie Tab[j] > x? Tak j = j - 1 l p Nie 5 2 4 6 7 8 1 3 i <= j? Nie l < j? Tak Tak Zamieñ Tab[i] z Tab[j] i = i + 1; j = j - 1 Sortuj (l, j) 5 j i 2 4 3 1 8 7 6 Nie i < p? Tak Sortuj (i, p) 1 2 3 4 5 6 7 8 Nie STOP

Rekordy, przeszukiwanie i sortowanie tablic 16 Sortowanie przez scalanie 5 2 4 6 7 8 1 3 podzial START Podziel tablicê na dwie czêœci Sortowanie tablicy przez scalanie 5 2 4 6 7 8 1 3 podzial podzial 5 2 4 6 7 8 1 3 Posortuj otrzymane tablice u ywaj¹c rekurencyjnie sortowania przez scalanie............ Po³¹cz postortowane tablice w posortowan¹ tablicê STOP 2 5 4 6 7 8 1 3 5 scalenie 2 4 6 8 7 scalenie 3 1 2 4 5 6 1 3 7 8 rekurencyjne wywo³anie sortowania przez scalanie 6 5 4 scalenie 2 1 3 7 8 1 2 3 4 5 6 7 8

Rekordy, przeszukiwanie i sortowanie tablic 17 Rekordy Posługiwanie się rekordami Przykłady użycia rekordów Wczytywanie rekordów z pliku Przeszukiwanie tablic Sortowanie Sortowanie przez proste wstawianie Sortowanie drzewiaste Sortowanie bąbelkowe Sortowanie szybkie Sortowanie przez scalanie Indeks