1 Wykład 7 sortowanie BitButton format tekstu rysunki typ rekordowy
2 Algorytm polega porównywaniu kolejnych par elementów sąsiadujących i zamianie miejscami w przypadku niewłaściwej kolejności Sortowanie bąbelkowe Sortowanie N N-1 porównań Wykonujemy N przebiegów
3 1 przebieg zamiana zamiana zamiana zamiana zamiana efekt ostatniej zamiany – największy na końcu 2 przebieg zmiana zmiana zmiana przebieg zamiana zamiana przebieg zamiana N=6
4 5 przebieg zmiana przebieg operacji= (N-1)*N=6*5
5 Algorytm polega na porównywaniu kolejnych par elementów sąsiadujących, z tym, że w każdym kolejnym przebiegu liczba analizowanych par jest zmniejszana o 1 Przebiegów wykonujemy N-1 Sortowanie bąbelkowe skrócone
6 1 przebieg zamiana zamiana zamiana zamiana zamiana efekt 2 przebieg zamiana zamiana zamiana efekt 3 przebieg zamiana zamiana efekt 4 przebieg zamiana efekt 5 przebieg zamiana efekt 15 operacji
7 Algorytm polega na porównywaniu: pierwszego elementu z kolejnymi i dokonanie zamiany jeśli trzeba, drugiego elementu z kolejnymi itd., aż do porównania dwóch ostatnich elementów. N 2 (N-1) operacji Można też tak (rodzaj bąbelkowego):
8 1 przebieg zamiana zamiana zamiana najmniejszy na początku 2 przebieg zamiana 4.. więc zaczynamy od 2-go zamiana zamiana przebieg zamiana zamiana zamiana przebieg zamiana zamiana przebieg zamiana operacji
9 var k:1..N; begin Randomize; for k:=1 to N do begin tab[k]:=random(100); Stringgrid1.cells[1,k]:=IntToStr(tab[k]) end; implementation const N=10; var tab:array [1..N] of integer ; deklaracje globalne (dla wszystkich podprogramów modułu) wypełnienie losowe tablicy i StringGrida
10 var k,m:1..10; pom:integer; begin for k:=1 to N-1 do for m:=1 to N-k do if tab[m]>tab[m+1] then begin pom:=tab[m]; tab[m]:=tab[m+1]; tab[m+1]:=pom; end; for k:=1 to N do Stringgrid1.cells[2,k]:=IntToStr(tab[k]) Sortowanie bąbelkowe skrócone
11 właściwości kind - rodzaj przycisku jak Button + rysunek do wykonywania prostych, typowych poleceń dialogu obsługi aplikacji Przycisk prostego polecenia (z bitmapą) – BitBtn glyph - obrazek
12 caption: string - tytuł przycisku (z & - dla znaku skrótu) glyph - plik z rysunkiem (bmp) symbolu default: boolean - True – Enter oznacza kliknięcie cancel: boolean - True – Esc oznacza kliknięcie modalResult - rezultat przyciśnięcia: mrNonemrOkmrCancel mrAbortmrRetrymrIgnore mrYesmrNomrAll dostępny np. po zamknięciu okna lub grupy obiektów zdarzenia onClick - procedura obsługi kliknięcia uwaga wygodnie używać w GroupBox procedure TForm1.FormActivate(Sender: TObject); begin case Form2.ModalResult of mrAbort: Edit1.Text:='Abort'; end; Przykłady:sortowanie, bitbtn
13 f. strToIntDef( s: string; default: integer ): integer; - wynik konwersji lub wartość domyślna (gdy string niepoprawny) p: val( s: string; var value; var code: integer) - s value (int lub real) code 0- OK, >0 nr niepoprawnego znaku f. floatToStrF( value: extended; format: TFloatFormat; precision, digits: integer ): string; - real string + format: TFloatFormat - ffGeneral najkrótsza - ffExponent d,ddd...E dddd - ffFixed ddd,ddd... - ffNumber ddd ddd,dddd - ffCurrency ddd ddd,dd zł Funkcje konwersji tekstowo-numerycznej Znamy.... f. intToStr( value: integer ): string; - integer string f. strToInt( s: string ): integer; - string integer f. floatToStr( value: extended ): string; - real string f. strToFloat( s: string ): extended; - string real Inne…
14 RYSUNKI właściwości transparent: boolean - przeźroczystość picture - określenie pliku pochodzenia rysunku metody - dla picture - p. loadFromFile( const fileName: string ); - wpisanie z pliku - p. saveToFile( const fileName: string); - zapisanie do pliku - p. loadFromClipboardFormat - p. saveToClipboardFormat Image - mogą być umieszczane na formatkach jako osobne obiekty typu Timage - z plików typu bmp Shape – komponent rysujący prymitywny kształt Shape – typ obiektu - stRectangle, stCircle itp.. Pen - złożona właściwość opisująca kontur Brush – złożona właściwość opisująca wypełnienie
15 Typ rekordowy (record) Pojęcie i opis opis: record lista_nazw_pól: typ;... end pojęcie: - skończony zbiór elementów dowolnego typu składowego - pola - ułożonych jednowymiarowo, niejednorodnie - o położeniu (selekcji) określanym przez nazwę składowej (pola) tzw. dostęp kwalifikowany wektor nazwanych pól dowolnego typu (różnego rozmiaru) typ dowolny: prosty strukturalny (bez plików) pole tablica, napis, rekord deklaracja_jednakowych_pól;
16 przykłady: type data = record rok: ; mies: 1..12; dzien: end; fizycznie: w PaO kolejne wartości pól określonego typu var student: record nazw: string[ 20 ]; imie: array[1..2] of string[ 15 ]; data_ur: data; stypend: real end; St. Wołek - Podst. Progr. Komput.
17 jednakowe składowe selektor typu indeks dostęp bezpośredni statyczny rozmiar różne składowe selektor typu nazwa pola dostęp bezpośredni statyczny rozmiar St. Wołek - Podst. Progr. Komput. Porównanie: Uwaga: Rekord to jeden zestaw danych, jeśli więcej to tworzymy tablicę rekordów
18 Zmienne rekordowe zmienne całościowe - tylko przypisanie - typów tożsamych całościowedesygnator pola (składowa) brak:+ - * / porównania wej/wyj np: var r1, r2: record.. definicja... end ; begin r1 := r2;
19 desygnator pola (składowa) - dostęp do pola Z. p Przykłady: nazwa pola Z typu składowego użycie - w wyrażeniach lub instrukcjach, jak zmienne typu składowego var student: record nazw: string[ 20 ]; imie: array[1..2] of string[ 15 ]; data_ur: data; //wcześniej zdef. typ rekordowy stypend: real end; student.nazw student.imie student.imie[1] student.data_ur.rok student.nazw[1] student.imie[2][1] student.stypend student[1].imie student.rok nazwa zmiennej rekordowej kropka oddziela nazwę zmiennej rekordowej od nazwy pola
20 type osoba = record nazw: string[ 20 ]; imie: array[1..2] of string[ 15 ]; data_ur: data; end; var grupa: array[1..100] of osoba; //tablica rekordów !!!! grupa – typ tablicowy grupa[k] – typ rekordowy grupa[1].nazw- typ string grupa[2].imie – typ tablicowy grupa[k].imie[1] - typ string grupa[k].data_ur - typ rekordowy grupa[k].data_ur.rok – typ integer grupa[2].imie[2][5] – typ char Użycie zależne od typu: memo1.lines.add( grupa[3].nazw); osoba.nazw := 'Nowak'; edit1.text := grupa[k]. imie; if grupa[k].data_ur.rok>1970 then… type data = record rok: ; mies: 1..12; dzien: end;..bo osoba to nazwa typu