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

Podobne dokumenty
Informatyka 1. Rekordy, przeszukiwanie i sortowanie tablic

Informatyka 1. Rekordy, przeszukiwanie i sortowanie tablic

Informatyka I. Wyk lad II Algorytm, podstawowe notacje, typy danych i wyrażenia

Informatyka 1. Przetwarzanie tekstów

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

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

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

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

OPERACJE NA PLIKACH. Podstawowe pojęcia:

ź Ż ń ź ń Ś

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

ĄĄ

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

Ą ń Ę Ę ź Ę Ę Ę ź Ż ź Ę ń ń ć Ę ź Ż

Ę Ę ź Ę Ą ć ć Ę Ą ć Ą Ę ć Ę Ę ć

Język programowania PASCAL

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

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

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

Ż ś

Ą ń ź ż ż Ś ż ć Ś Ó ń ń

ó ó ó ó ó ó ń ó ó ó ó ń ó ó ń ń ó ó ó Ś ń ó ń ó ó ó

Ś Ń ć Ę Ą Ę Ś Ń Ó

ź Ś Ż Ę Ś

Ę ń Ó ć ć Ó Ó

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

Ó Ń Ś Ą Ś Ń Ś Ś

Ą Ś Ń Ś Ą Ś Ń

Ó Ź ż ć Ą ż ż ć Ę ź Ą ż ż ż ż ż

ż ć ć ż Ś ż ż ć ć ć ż ż

Ó Ż ć ć ć ć ć ć ć Ę ć ć ć

Ś Ś

Ć ź Ś Ż ź Ę Ś


ć ć ć ć ć ć ć ć ć ć ź

Ą Ę Ń Ą ń Ń ń ń Ą ń

Ł Ł Ą Ą Ą Ą Ą Ą Ś Ą Ń

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

Poniżej 14 r.ż. 1 (0,5%) 1 (0,9%) r.ż. 11 (6,0%) 21 (18,9%) r.ż. 59 (32,2%) 44 (39,6%) r.ż. 38 (20,8%) 15 (13,5%) Powyżej 25 r.ż.

ć Ę Ż ć ć ć Ż Ź

Ć ą ć ą ą ć ś ń ć śćś ń ć ć ść ż ą ś ż ż ą ń ż ż ą ś Ę ą ą ś ą ż ą ż ą ś ć ą ż ś ś ś ż ż ń ż Ć ś ż ą ś ś ś ć ś ą ą ś ą ś ś ą ż ż

ń ć ć ć ć ć ć ć ń ć Ę ź ć ź ź ź ć ć ń

Informatyka 1. Procedury i funkcje, struktura programu w Pascalu

Ó Ł ź ź ź ć ć

Algorytmy i struktury danych

Ł ś ś ń ń ś

Ś ź

ć Ń ż ć ŚĆ

ć Ż ń ń Ó Ż ń ń ń ż ń Ż ż Ż ń ń ć ń ń ń Ż ń ż ń ń Ś

ń ń ś ń ę ę Ś ę Ż ę ę ś ń ę ż ń ęś ę ż ń ń Ą Ę ś ś ś ż Ż ś Ś ś ę ś Ś

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

ń ź ź ń ń ź ć Ń ń Ż ń

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

ó Ć Ó Ż Ó ó Ó Ę Ź Ź Ź Ź ó

ż ć ć ż ż ż ż ź ć ż ć ż ż ź ż ć ż ź ż ć ź ż ż ź ć ż ż ć ż

ć Ś

Ę ż Ó Ł Ść ą ą ą Ą ć ż ą ż ń ą ć ż ć Ę ą ż ą ą ż ą ź ą ń ą ń ą ą ż ć

Ą Ó Ź Ą Ź Ź

Ż ć ć Ż ź ć ć ż ć ż ć Ż ć Ą ń Ż ć Ę

ż ż Ę Ę Ą Ó

Ś ź Ś Ś

Ść ć Ż ć Ż Ś ć ż ń ż Ż ć Ś Ż ń

Ą Ś Ó

ó ą ę ó ó Ż ć ó ó ó ę Ó ó ą ć ę ó ą ę ż Ó Ń ą ą ę ó Ę ó Ą ć ę ó ą ą ę ó

Podstawy programowania

ć ć Ą Ź Ż Ą Ż ć Ą Ż Ź

Ń Ń ć ć Ł Ć Ń ć Ę

Ż Ń Ś Ł Ó Ś ń Ż ń ć Ż ć ń ź Ż ć ć ć ń ń ć Ż Ż ć

Wstęp do programowania 2

ń ę ńń ń


ń ń ć ń ć ń ć ń ń ć ń Ę ń ć Ż ń Ó Ś ć Ó Ś ń ć

Ż Ą ź ź ź ź

ń ż ń ń Ą ń ż ż ń ż ż ż Ż ń Ą ń

ź ć

Ż Ż Ł

ś ś Ż ś Ń Ń Ę Ł ć ś Ł

Ł Ś Ś Ó ń

ń ć Ł Ą

Ł Ę Ż Ą Ęć Ń Ń Ł Ę

Ę Ł ź Ś ź ź ź

ć ż Ż Ż Ą Ż Ż Ż

ć

ń ż ś

ż ń ń ź ź ź

Ł Ś Ę Ł Ś Ś Ś Ą ń ń Ó

ć ć ź Ń Ś ŚĆ ź

Ó Ą ź ć Ę Ń Ę

ć ć

ż ó ś Ą ć ó ó ó ś ś ś ó ś Ł ś

Ę Ł Ź Ł

ć ć Ę Ó Ś ż ż Ś ż ż ż Ęć ż ć ć ż ż

ć ę ę ć ę Ś ę Ń ę ź ę ę ę Ś ę ę ę Ó Ł Ł Ę Ą ę

ń ń ń ż ć Ł ż ż ń ż Ą ń Ż ż

Ł ć Ś ć Ś ć ć Ę ź ć ć

Ó Ó Ę ź

ź Ś ć ć

ź Ł Ą Ż Ń Ń Ś Ń ć

Ł Ł Ę Ż ź

Transkrypt:

Informatyka I Wyk lad VIII Rekordy, przeszukiwanie i sortowanie tablic Zagadnienia: rekordy, rekordy jako argumenty procedur i funkcji, operacje na plikach z rekordami, przeszukiwanie tablic: liniowe, binarne, sortowanie tablic: przez wstawianie, drzewiaste, babelkowe, szybkie, przez scalanie.

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; Pos lugiwanie si e rekordami każde pole musi być podane jawnie kolejność pól w deklaracji jest nieistotna możliwe jest podstawianie ca lych rekordów zmienne rekordowe moga być argumentami procedur i funkcji (ale nie wartościami funkcji!!!) rekordy z wariantami 1

Przyk lady użycia rekordów TYPE Data = RECORD Rok : INTEGER; Miesiac : INTEGER; Dzien : INTEGER; KlasaOkretu= (Barka, Kuter, Tankowiec, Kontenerowiec, Lodolamacz, Holownik, Strazacki, Wojskowy); KlasaNapedu= (Wiosla, Zagle, Para, Diesel, Atomowy); Okret = RECORD Nazwa : String20; Zwodowany : Data; OstatniRemont : Data; Wyplynal : Data; 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; 2

TYPE String = PACKED ARRAY [1..80] OF CHAR; Napis = RECORD Tekst : String; Dlugosc : INTEGER; Data = RECORD Rok : INTEGER; Miesiac : INTEGER; Dzien : INTEGER; Osoba = RECORD Imie, Nazwisko : Napis; DataUrodzenia : Data; MiejsceUrodzenia : Napis; 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; 3

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 *) RoznicaDat := (d2.rok - d1.rok) * 365 + (d2.miesiac - d1.miesiac) * 30 + (d2.dzien - d1.dzien) (* RoznicaDat *) PROCEDURE PobierzDate(VAR d: Data; s: String20); (* Procedura pyta uzytkownika o date wyswietlajac poda-*) (* ne pytanie; wymusza legalna date w latach 1900-2030.*) 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} WITH S1 DO PobierzDate(Zwodowany, zwodowania okretu ); PobierzDate(OstatniRemont, ostatniego remontu ); PobierzDate(Wyplynal, wyplyniecia z portu ); PobierzDate(Oczekiwany, oczekiwanego powrotu ); wmorzu := RoznicaDat(Wyplynal,Dzis); 4

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 NOsoby := NOsoby + 1; READ(Dane,Rodzina[NOsoby]); {WRITE(...) przy REWRITE} {...} END. 5

Przeszukiwanie tablic liniowe! #"%$&'(*)%+, -#. /0 1#23%4!576 8#9: ; <>=@?%ABC!D!E@FGIH JK%L!M@N>O PQIR#S TU V#WXZYI[I\ ]^_a` b*c jlknm o%prq sltvuxwyzn{} #~ ƒ r ˆ x Š# œ #ž d egfih ŒŽ 7 7 7 š binarne _=`badcfebg@h ikj1lfm n oprqts6udv wkxzy6{b }t~ 1 t dƒ6 r ˆt bš ŒŽ + 6 b 1 r r + f 1š zœ+ Žž Ÿb t 1 t d : ª «b z±!"$#&%(')+*, -&. ÆÈÇ3É ÊÌËÍÎÏÐÑSÒÓ á]â ã Ô Õ Ö ÌØÙÚÛÜÝÞàß /1032 46587:9 ;=<(>@?ACBEDGFIHKJ1L M N O P QSR T=U(VCW1XZY []\ ^ ²1³3 3µ 8 : ¹ º3»r¼(½ ¾E 1À(ÁKÂ1à ÄfÅ ärå1æ çrè1é 6

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 min i max*) (* Zwraca jej index lub domysl gdy nie znaleziona *) VAR znaleziony: BOOLEAN; znaleziony := FALSE; WHILE ((NOT znaleziony) AND (min <= max)) DO Przeszukiwanie binarne FUNCTION Przeszukaj2(tab: Wartosci; Klucz: INTEGER; min,max,domysl:integer): INTEGER; (* Wyszukuje wartosc Klucz w sortowanej tablicy tab *) (* pomiedzy indeksami min i max, *) (* Zwraca jej index lub domysl gdy nie znaleziona *) VAR znaleziony: BOOLEAN; srodek: INTEGER; znaleziony := FALSE; WHILE ((NOT znaleziony) AND (min <= max)) DO 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 IF znaleziony THEN Przeszukaj2 := srodek ELSE Przeszukaj2 := domysl { Przeszukaj2 } 7

przez wstawianie Sortowanie przez proste wstawianie przez wstawianie po lówkowe przez wybieranie drzewiaste przez zamian e babelkowe szybkie przez scalanie 8

Rekordy, przeszukiwanie i sortowanie tablic Sortowanie przez proste wstawianie! "# $%&('*)!+,.-(/ 012 3 PQSR TVUXWZY8[Z\ ]X^`_ adb cdbegfih «.±8²³Ḱµ º¹¼»K½¼¾ ÀÁÂ*ÃļŠÆ.Ç ÈKÉ ÊËÌÍÏÎÐ Ñ ÒÓÕÔ Ö 9;:< =>?@BADCFEBG H IKJMLON žÿ j kl`mdn o(pqrss tù vdw x yz {;}i~ é ê ë Û ÜÝ`ÞDß àâá;ãä8åvæxçzè! " # ( K Fƒ F Fˆ; KŠD Œ Ž O š Oœ ؼÙÚ 4 5(687 B * ª 9

- Rekordy, przeszukiwanie i sortowanie tablic Sortowanie drzewiaste "! 78 9:;=</>'? @)A BDCEFG H I/J KMLN OPQRTSU V'WXZY'[ \ ]^=_`)acbd efghcikjlm n'opq'r sutv=wzxy z{ 6}k~ ) ƒ ˆŠ Œ" Ž= ) ) c /šœ ž'ÿc = ) Z 'ª«) ±³² )µ4 )¹º» #$ %'&)(+*,-/.0 ', ( ) * + 1 24365!"#$&% 10

Rekordy, przeszukiwanie i sortowanie tablic Sortowanie babelkowe "! 46587 #%$&%'( )+*,- jk8l }E~E v ƒw ˆ ešz SŒ ZŽ 9;:=<?> @ACBED=FHGJI K LNM OPHQSR T;UWV e monqpr8s Wš œ ž ŸE v ª J«o ± ² ³o µ S o¹ º» ¼ gzhi #! " tvunwyx1z{ ced f XZY[ \]_^`ba. /1032 11

Sortowanie babelkowe "! 46587 jk8l }E~E v ƒw ˆ ešz SŒ e monqpr8s Wš œ ž ŸE v ª J«o ± ² ³o µ S o¹ º» ¼ gzhi ZŽ #%$&%'( )+*,- 9;:=<?> @ACBED=FHGJI K LNM OPHQSR T;UWV PROCEDURE BubbleSort(VAR Tab : Wartosci; min, max : INTEGER); VAR i, j: INTEGER; 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 } tvunwyx1z{ ced f XZY[ \]_^`ba. /1032 12

Rekordy, przeszukiwanie i sortowanie tablic ̹kº¼» ½ ¾IÀ ÁT ÃÄÆÅÇ È\É :<;>=?@>A BDCDEGFIHKJMLONPRQTSVUIW XZY\[! " #%$'& ( ) *,+-. / 0 132 Sortowanie szybkie ; <>=@?A +-,/.10324/5!6 7 8:9! "$#&%'(&) * cd e fg h\ikjl mno ]^>_`ba prq s z{ } ~ \ k ƒ tvurvrwyx rˆ Ì á 4 Š \Œy Ž, I D I Z GšI œmž ŸKZ G I < >ª«± V² ³rµy ÊrË Í ÎÐÏ Ñ ÒÓÔ â ãvä åçæ èvéoê ë%ìîí ÕrÖ Ø ÙZÚ<Û ÜÝÞ ï ðiñ òtó ôõæö ø\ù ßrà 57698 13

< J I H E F G A # Rekordy, przeszukiwanie i sortowanie tablic Sortowanie przez scalanie NPORQTSVUXWVY "! 8:9;<= >?A@BCD E F"GIHKJML(N5O P Q"RSTU(V #$ %&('*)+",-./0 1 Z\[^]`_ba cbd egf^h`ibj kml W:XYKZ[ \^]`_a(b^c dkef ghkï jklm n oqpsrqtkuqvwyxz{ }~K ƒ" ^ ˆ ŠqŒ Ž s ( š qœ žÿ!" : " K ª"«±²³ µ ¹"º»½¼¾ KÀÁ ÂÃÄÅÆÇ ÈÉÊË Ì ÍqÎ 2 35476 $ % & ' ( ) * + nporqmsutwv^xuy zp{} b~ w w? @ = > BDC, / -. 2 3 0 1 } } š D œÿž ª «±}² ³u šµ` ¹»º ¼ ½š¾ À Á Â}Ã Ä Å Æ Ç ƒ VˆŠ V Œ Ž KML 4 9 5 6 : ; 7 8 14