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

Podstawy Programowania

Podstawy Programowania

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

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

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

Informatyka 1. Procedury i funkcje, struktura programu w Pascalu

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

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

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

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

Podstawy Programowania

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Język programowania PASCAL

Podstawy Programowania. Złożoność obliczeniowa

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};

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

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Podstawy Programowania. Złożoność obliczeniowa

Podstawy Programowania

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

Programowanie w VB Proste algorytmy sortowania

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

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

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

Algorytmy i struktury danych

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

Informatyka A. Algorytmy

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

Wstęp do programowania 2

Podstawy programowania

Programowanie w Turbo Pascal

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

Przykładowe B+ drzewo

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

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

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

Zasady Programowania Strukturalnego

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

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

Podstawy programowania

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

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 )

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

Algorytmy i struktury danych

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

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

Wprowadzenie Tablica jednowymiarowa Tablice wielowymiarowe Algorytmy Rekordy Pliki Zadania Bibliografia

Kiedy i czy konieczne?

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

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}

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

Algorytmy i struktury danych. wykład 5

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

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

Sortowanie danych. Jolanta Bachan. Podstawy programowania

Zadanie 1 Przygotuj algorytm programu - sortowanie przez wstawianie.

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

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

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

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

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

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

Algorytmy i struktury danych. wykład 1

Podstawy programowania

Programowanie Proceduralne

Informatyka 1. Wprowadzenie

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

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

Wstęp do programowania

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

Strategia "dziel i zwyciężaj"

Technologie Informatyczne Wykład VII

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

Algorytmy i struktury danych

Elementy Pascala Konstrukcja programu w Pascalu Typy danych

PODSTAWY INFORMATYKI wykład 4.

1. Język Pascal Program

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

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

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

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

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

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

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

Przydział pamięci. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

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

Metodyka i Technika Programowania 1

Programowanie RAD Delphi

Pliki. Ze względu na typ zawartych w nich danych rozróżnia się trzy podstawowe rodzaje plików:

Wprowadzenie do szablonów klas

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 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 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; 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; 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 *) 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 8 Przeszukiwanie tablic liniowe Poszukiwanie wzorca wœród elementów tablicy jednowymiarowej od elementu min do max Tab[min] = wzorzec lub min = max? min = min + 1 binarne 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 Tab[Srodek] = wzorzec lub min=max? Tab[Srodek] < wzorzec?

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 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 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? Tab[i+1] = temp Czy element j-ty jest ostatni? Tab[i+1] = Tab[i] i = i - 1 j = j + 1

Rekordy, przeszukiwanie i sortowanie tablic 12 Sortowanie drzewiaste 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 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 Sortowanie tablicy b¹belkowe j = 1 i = 1 5 2 4 6 1 3 Tab[i] > Tab[i+1]? Zamieñ Tab[i] z Tab[i+1] 2 4 5 1 3 6 2 4 1 3 5 6 i = i + 1 2 1 3 4 5 6 Czy element i-ty jest przedostatni? 1 2 3 4 5 6 1 2 3 4 5 6 j < n - 1? j = j + 1

Rekordy, przeszukiwanie i sortowanie tablic 14 Sortowanie bąbelkowe Sortowanie tablicy b¹belkowe j = 1 i = 1 Tab[i] > Tab[i+1]? i = i + 1 Czy element i-ty jest przedostatni? j < n - 1? Zamieñ Tab[i] z Tab[i+1] 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 }

Rekordy, przeszukiwanie i sortowanie tablic 15 Sortowanie szybkie Sortuj (l, p) i = l j = p x = Tab[(i + j) div 2] Szybkie sortowanie elementów l..p tablicy Sortuj (1, n) Sortowanie tablicy szybkie Tab[i] < x? i = i + 1 Tab[j] > x? j = j - 1 l p 5 2 4 6 7 8 1 3 i <= j? l < j? 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 i < p? Sortuj (i, p) 1 2 3 4 5 6 7 8

Rekordy, przeszukiwanie i sortowanie tablic 16 Sortowanie przez scalanie 5 2 4 6 7 8 1 3 podzial 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ê 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