Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

1. Język ObjectPascal - typ tablicowy (array)

Podobne prezentacje


Prezentacja na temat: "1. Język ObjectPascal - typ tablicowy (array)"— Zapis prezentacji:

1 1. Język ObjectPascal - typ tablicowy (array)
Pojęcie i opis pojęcie: - skończony zbiór elementów tego samego typu składowego - ułożonych regularnie - o położeniu (selekcji) określanym przez indeks (numer) składowej np.: wektor, macierz o składowych tego samego typu opis: array [ lista typów indeksów ] of typ bazowy (składowych) typ porządkowy (o ograniczonym zakresie): okrojony integer okrojony char wyliczeniowy boolean dowolny: prosty strukturalny (bez plików) tablica tablic, napisów, rekordów

2 fizycznie: w PaO kolejne wartości typu bazowego ułożone regularnie wierszami przykłady: array[ ] of integer; a1 a2 ... a50 array[ 1..20, 1..30] of real; array[ 1..20] of array[ 1..30] of real; a1,1 ... a20, 30

3 type dni_tyg = ( pn, wt, sr, cw, pt, sb, nd ); zakres = ; dane = array[ boolean, zakres, dni_tyg] of char;

4 uwagi: rozmiar, wymiar tablica 1, 2, 3 - wymiarowa rozmiar 20 wierszy na 30 kolumn ( 20 x 30) - dwuwymiarowa rozmiar statyczny - wyrażony typem indeksów nie mogą być wyrażenia np.: var n: integer; tab: array[ 1..10, 1.. n] of ...; dostęp bezpośredni - taki sam czas - dowolny element, określony indeksem mogą być indeksy ujemne array [ ] of real a a-1 a0

5 Zmienne tablicowe całościowe indeksowane (składowe)
zmienne całościwe - tylko przypisanie - dla typów tożsamych brak: + - * / porównania wej/wyj np: var x, y: array[ ; begin x := y;

6 zmienne indeksowane (składowe) - dostęp do składowych
Z [ W1, ..., Wn ]  Ztypu składowego nazwa tablicy indeksy  wyrażenia typu zgodnego z typem indeksów zgodne co do liczby, typu i kolejności z deklaracją użycie - w wyrażeniach lub instrukcjach, jak zmienne typu składowego Przykłady: var x: array[ ] of real; x[ 1 ] - 1-szy element wektora, typu real x[ k ] - k-ty element x[ 2*k - 1 ] - element nr 2k-1 x[ 2 ] := 10.5; y := 10*x[ k ] - 5.2; floatToStr( x[ k ] ); floatToStr( sin( sqrt( x[ abs( 2*k ) + 10 ] ) ) );

7 Przykłady: type dni_tyg = ( pn, wt, sr, cw, pt, sb, nd ); var dane: array[ dni_tyg, boolean ] of real; begin dane[ pn, true ] := 10.2; memo1.lines.add( 'Wynik = ' + floatToStr( dane[ wt, k < 2 ]/1000 ) ); if dane[ sr, k =5 ] > 3E2 then ...; type opis = ( nazw, imie ); var grupa: array[ , opis ] of string[20]; begin grupa[ 1, nazw ] := 'Kowalski'; if grupa [ k, imie ] = 'Jan' then ...; for k:= 1 to 10 do memo1.lines.add( grupa[ k, nazw ] + ‘ ‘ + grupa[ k, imie ] ); if grupa [ k, nazw ][1] = 'S' then ...;

8 tablice hierarchiczne:
type dni_tyg = ( pn, wt, sr, cw, pt, sb, nd ); var x, y , z : string[10]; dane: array[ 1..10, dni_tyg ] of string[10]; grupa: array[ 1..10] of array[ dni_tyg ] of string[ 10 ]; begin dane[ k, nd ] := 'kotlety'; grupa[ k ] [ nd ] := 'pierogi'; grupa[ k, nd ] := 'pieczeń'; x := dane [ 2 ]; x := dane [ 2, 8 ]; x := grupa [ 3 ]; y := grupa [ sb ]; z := grupa [ 2 ] [ cw ] [ k ];

9 przykład 1 - wczytać nazwę miasta i wyprowadzić do memo po dwa znaki w wierszu
var miasto: string[20]; dwie_lit: string[2]; dlugosc, i: integer; begin memo1.clear; miasto := Edit1.Text ; memo1.Lines.add( miasto ); dlugosc := length( miasto ); i := 1; // początek głównej iteracji while i <= N do begin dwie_lit := miasto[i]; i := i + 1; if i <= dlugosc then dwie_lit := dwie_lit + miasto[i] else begin memo1.Lines.add( dwie_lit); // zakończenie, gdy N nieparzyste break; end; memo1.Lines.add( dwie_lit);

10 wczytać N liczb i posumować co drugą (nieparzyste indeksy)
const N = 10; var k, k_max: 1 .. N; dana: string; suma: real; x: array [ 1 .. N ] of real; begin suma := 0; memo1.clear; dana := inputbox( 'Liczby do sumowania', 'Podaj rozmiar danych (<= 10)', '10' ); k_max := strToInt( dana ); memo1.Lines.add( 'Podane ' + dana + ' liczb:' ); for k := 1 to k_max do begin dana := inputbox( 'Podawanie liczb', 'Podaj liczbę nr ' + IntToStr(k), '0,0' ); x[ k ] := StrToFloat( dana ); memo1.Lines.add( dana ); end; for k := 1 to ( k_max+1 ) div 2 do suma := suma + x[ 2*k - 1 ]; memo1.Lines.add( 'Suma nieparzystych wynosi: ' + FloatToStr( suma ) );

11 Edycja wielowierszowa TStringGrid
informacja tekstowa zorganizowana w tabelę (wiersze, kolumny) właściwości: ColCount, RowCount - liczba kolumn i wieszy FixedCols, FixedRows - liczba stałych (szarych) kolumn i wieszy Cells[nr_k, nr_w: integer]: string - zawartość komórki Rows, Cols[nr].Text - cały wiersz, kolumna (zwykły tekst) Rows, Cols[nr].ComaText - cały wiersz, kolumna (ciąg wartości) Options - opcje (np. goEditing) EditorMode: boolean - dopuszczenie edycji

12 Przykłady: StringGrid1.Cols[0].CommaText := ', 1, 2, 3, 4';
StringGrid1.Rows[0].CommaText := ', Nazwisko, Imię, kwota'; StringGrid1.Cells[1, 2]:= 'Kowalski'; StringGrid1.Cells[2, 2]:= 'Jan'; StringGrid1.Cells[3, 2]:= '123,00 zł';

13 Zadanie: liczby w wierszach
wyznaczanie sumy, średniej, liczby większych od średniej, średniej ogólnej

14 procedure TForm1.FormCreate(Sender: TObject);
const lba_kol = 8; var k: integer; begin with StringGrid1 do begin Rows[1].CommaText := ' , "12,5", -8, "100,25", +4'; Rows[2].CommaText := ' , "21,21", -10, 321, 4, "2,5", "‑56,99" '; Rows[3].CommaText := ' , 89, 140, 72, 20, -2, 55, -100'; Cols[0].CommaText := ', suma, średnia, większe'; Options := Options + [goEditing]; for k := 1 to lba_kol do Cells[k, 0] := IntToStr(k); Cells[ lba_kol+1, 0] := 'Statystyka'; end;

15 procedure TForm1.sumaClick(Sender: TObject);
const kol_wyn = 9; // numer kolumny wyników wiersz = 1; var k: integer; suma: real; dana: string; begin k := 1; suma := 0; for k := 1 to maxInt do begin // pętla nieograniczona dana := StringGrid1.Cells[k, wiersz]; if length(dana) = 0 then break; // przerwanie pętli suma := suma + StrToFloat(dana); end; // for k StringGrid1.Cells[kol_wyn, wiersz] := FloatToStr(suma); end;

16 procedure TForm1.maxClick( Sender:TObject );
const kol_wyn = 9; // numer kolumny wyników wiersz = 2; var k: integer; wart_b, max: real; begin max := StrToFloat( StringGrid1.Cells[1, wiersz] ); k := 2; repeat wart_b := StrToFloat(StringGrid1.Cells[k, wiersz]); if wart_b > max then max := wart_b; k := k+1; until length(StringGrid1.Cells[k, wiersz]) = 0; StringGrid1.Cells[kol_wyn, wiersz] := FloatToStr(max); end;

17 // liczba danych trzeciego wiersza, większych od ich średniej
procedure TForm1.wiekszeClick(Sender: TObject); const kol_wyn = 9; // numer kolumny wyników wiersz = 3; var k, lba_danych, lba_wiekszych: integer; suma, srednia: real; begin suma := 0; lba_danych := 1; with StringGrid1 do begin while length( Cells[lba_danych, wiersz] ) > 0 do begin suma := suma + StrToFloat( Cells[lba_danych, wiersz] ); inc(lba_danych); end; // while dec( lba_danych ); //pomniejszanie o 1 srednia := suma / lba_danych; lba_wiekszych := 0; for k := 1 to lba_danych do if StrToFloat( Cells[k, wiersz] ) > srednia then inc(lba_wiekszych); Cells[kol_wyn,wiersz] := IntToStr(lba_wiekszych); end; // with StringGrid1 end;

18 // średnia wszystkich danych
procedure TForm1.sredniaClick(Sender: TObject); var wrsz, kol, lba_danych: integer; suma: real; begin suma := 0; lba_danych := 0; for wrsz := 1 to 3 do begin // iteracja po wierszach kol := 1; repeat // iteracja po komórkach wierszy suma := suma + StrToFloat(StringGrid1.Cells[kol, wrsz]); inc(kol);// albo kol:= kol+1; inc(lba_danych) until length( StringGrid1.Cells[kol, wrsz] ) = 0; end; // for wrsz Edit1.Text := 'Średnia = ' + FloatToStr (suma/lba_danych); end;

19 2. Język ObjectPascal - typ rekordowy (record)
Pojęcie i opis 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) opis: record deklaracja_jednakowych_pól; . . . end dowolny: prosty strukturalny (bez plików) pole  tablica, napis, rekord lista_nazw_pól: typ;

20 w PaO kolejne wartości pól określonego typu
xxx fizycznie: w PaO kolejne wartości pól określonego typu przykłady: type data = record rok: ; mies: 1..12; dzien: 1..31 end; 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. St. Wołek - Podst. Progr. Komput. St. Wołek - Podst. Progr. Komput.

21 selektor typu nazwa pola dostęp bezpośredni statyczny rozmiar
Porównanie: 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.

22 Zmienne rekordowe całościowe desygnator pola (składowa)
zmienne całościowe - tylko przypisanie - typów tożsamych brak: + - * / porównania wej/wyj np: var r1, r2: record ... end ; begin r1 := r2;

23 Z . pole  Ztypu składowego
desygnator pola (składowa) - dostęp do pola Z . pole  Ztypu składowego nazwa rekordu użycie - w wyrażeniach lub instrukcjach, jak zmienne typu składowego Przykłady: 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 var student: record nazw: string[ 20 ]; imie: array[1..2] of string[ 15 ]; data_ur: data; stypend: real end;

24 type osoba = record nazw: string[ 20 ]; imie: array[1..2] of string[ 15 ]; data_ur: data; end; var grupa: array[1..100] of osoba; grupa[1].nazw grupa[k].imie[1] grupa[k].data_ur.rok grupa.imie[2] grupa[k].data grupa[2].rok memo1.lines.add( grupa[3].nazw) grupa grupa[k] grupa[k].data_ur grupa.osoba grupa.data_ur[k] osoba.nazw := 'Nowak' edit1.text := grupa[k]. imie;

25 Instrukcja wiążąca - with
dotyczy tylko zmiennych rekordowych, obiektowych upraszcza zapis opis: with lista_zmiennych_rekordowych do J najczęściej begin . . . end można używać nazw pól bez określenia rekordu przykład: student.nazw :=’Kowalski’; student.imie[1] := ’Jan’; student.data_ur.rok := ’1988’ student.stypendium := ’420,00’; with student do begin nazw :=’Kowalski’; imie[1] := ’Jan’; data_ur.rok := ’1988’ stypendium := ’420,00’; end;

26 przykład: To samo dotyczy składowych (właściwości , metody) obiektów
StringGrid1.Rows[1].CommaText := ' , "12,5", -8, "100,25", +4'; StringGrid1.Rows[2].CommaText := ' , "21,21", -10, 321, 4, "2,5", "‑56,99" '; StringGrid1.Cols[0].CommaText := ', suma, średnia, większe'; for k := 1 to 10 do StringGrid1.Cells[k, 0] := IntToStr(k); with StringGrid1 do begin Rows[1].CommaText := ' , "12,5", -8, "100,25", +4'; Rows[2].CommaText := ' , "21,21", -10, 321, 4, "2,5", "‑56,99" '; Cols[0].CommaText := ', suma, średnia, większe'; for k := 1 to 10 do Cells[k, 0] := IntToStr(k); end;

27 Przykład – sortowanie - w polu StringGrid dane o osobach
- wprowadzamy do wektora rekordów - porządkujemy - wynik w drugim StringGrid

28 Elementy globalne: const max = 10; // ograniczenie liczności danych
type stud = record nazw,imie: string[10]; styp: real; end; var lba_danych: 1..max; x: array[1..max] of stud;

29 Operacje początkowe: procedure TForm1.FormCreate(Sender: TObject);
var k: integer; begin with StringGrid1 do begin Options := Options + [goEditing]; ColCount := 4; RowCount := max; Rows[0].CommaText := 'L.p.," nazwisko"," imię",stypendium'; Rows[1].CommaText := '1,Nowak,Jan,132,00'; Rows[2].CommaText := '2,Bęben,Teresa,399,50'; Rows[3].CommaText := '3,Zając,Mateusz,212,00'; Rows[4].CommaText := '4,Kowalski,Adam,502,10'; end; with StringGrid2 do begin for k := 1 to max - 1 do Cells[0, k] := IntToStr(k);

30 Kopiowanie do wektora rekordów:
procedure TForm1.zapamietajClick(Sender: TObject); var k, m: 1.. max; begin for k := 1 to max - 1 do with x[k],StringGrid1 do begin nazw := Cells[1, k]; if nazw = '' then break; imie := Cells[2, k]; styp := strtofloat(Cells[3, k]); lba_danych := k; end;

31 Porządkowanie wg stypendium:
procedure TForm1.wg_stypClick(Sender: TObject); var k, m: 1.. max; pom: stud; begin for k := 1 to lba_danych - 1 do // porządkowanie for m := k to lba_danych do if x[m].styp > x[k].styp then pom := x[m]; x[m] := x[k]; x[k] := pom end; for k := 1 to lba_danych do // pokazanie wyniku with StringGrid2 do begin Cells[1, k] := x[k].nazw; Cells[2, k] := x[k].imie; Cells[3, k] := FloatToStr(x[k].styp);

32 Porządkowanie wg nazwisk:
procedure TForm1.wg_nazwiskClick(Sender: TObject); var k, m: 1.. max; pom: stud; begin for k := 1 to lba_danych - 1 do for m := k to lba_danych do if x[m].nazw < x[k].nazw then pom := x[m]; x[m] := x[k]; x[k] := pom end; for k := 1 to lba_danych do with StringGrid2 do begin Cells[1, k] := x[k].nazw; Cells[2, k] := x[k].imie; Cells[3, k] := FloatToStr(x[k].styp);

33 3. Język ObjectPascal - pliki
Pojęcie i istota stosowania składowe takiego samego dowolnego typu - prostego, strukturalnego - nie pliki dostęp sekwencyjny - operacje np.: czytaj pierwszy | czytaj następny zapisz na początku | zapisz na końcu rozmiar dynamiczny wewnętrzny wskaźnik elementu bieżącego fizycznie - PaZ: dysk, dyskietka, CD-ROM, taśma (streamer)

34 istotne cechy Opis typu plikowego Zmienne plikowe
- gromadzenie dużej ilości informacji - w sposób trwały - przenoszenie danych między programami | komputerami Opis typu plikowego textFile (text) - plik tekstowy file of Tb - plik elementowy ( binarny, zdefiniowany ) o składowych typu Tb Zmienne plikowe deklaracja: var lista_nazw_zmiennych: Tp; Tp - jest nazwą lub opisem typu plikowego są zmienne całościowe - reprezentują cały plik są operacje (procedury, funkcje) dotyczące: - całych plików - składowych pliku - korzystają ze zmiennych odpowiadających składowym plików

35 Przykład: type osoba = record nazw: string[ 20 ];
imie: array[1..2] of string[ 15 ]; data_ur: data; pensja: real end; dwa_napisy = arrray[1..2] of string[15]; var oceny: file of real; nazwiska: file of string[20]; zaloga: file of osoba; adresy: file of dwa_napisy; wyniki: textFile;

36 Reguły obsługi plików operacje na treści pliku (składowe):
opis zmiennych plikowych type osoba = .....; var f: file of osoba; skojarzenie - f  ’d:\ścieżka\plik’ otwarcie pliku f do - zapisu - odczytu operacje - zapis | odczyt zamknięcie pliku f operacje dla całych plików (jak operacje DOS-u) usunięcie pliku f zmiana położenia (nazwy) kopiowanie zmiana atrybutu

37 p: assignFile( f, Wt ) - skojarzenie
zmienna plikowa tekstowy opis położenia na dysku np.: assignFile( grupa, 'C:\ROK_II\grupa_1.pdf ' ); p: reset( f ) - otwarcie do odczytu - plik staje się aktywny - wskaźnik na początku pliku - gdy plik nie istnieje  błąd wykonania p: rewrite( f ) - otwarcie do zapisu - gdy plik nie istniał  jest tworzony - gdy plik istniał  jest zerowany - wskaźnik na początku pliku (końcu pustego) p: closeFile( f ) - zamknięcie pliku f: eof( f ) - badanie końca pliku (end of file) true - wskaźnik po ostatniej wartości (na końcu) false - wskaźnik w środku

38 Okienka wyboru pliku do otwarcia lub zapisu openDialog, saveDialog
karta Dialogs biblioteki komponentów VCL standardowe okna dialogu - wybór pliku do otwarcia lub zapisu komponenty niewidzialne, - funkcja execute, - wynik typu logicznego: - true, gdy użytkownik kliknął na zakończenie przycisk Otwórz lub Zapisz - false, gdy użyto przycisku Anuluj. właściwości title: string - treść tytułu w pasku tytułowym okna filter: string - wzorzec przeglądanych plików, np. ’*.txt’ fileName: string - dysk + ścieżka + nazwa wybranego pliku działa na wej. oraz po wyj.

39 Przykład 1 - operacji wybrania pliku i usunięcia :
procedure TForm1.Button1Click(Sender: TObject); var plik: textFile; begin openDialog1.title := 'Usuwanie pliku'; openDialog1.filter := 'Delphi(*.pas, *.dpr)|*.pas;*.dpr'; if openDialog1.execute then assignFile( plik, openDialog1.fileName ); try reset( plik ); if messageDlg( 'Usunąć ' + openDialog1.fileName + '?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then closeFile( plik ); erase( plik); end; except on eInOutError do messageDlg( 'Błąd operacji wej/wyj pliku.', mtError, [mbOk], 0 );

40 Obsługa plików tekstowych
opis typu plikowego textFile assignFile, reset, rewrite, closeFile czytanie z pliku - read( zmienna_plikowa, Z1, Z2,... Zn) - readln( zmienna_plikowa, Z1, Z2,... Zn) gdzie - zmienne typu składowego: integer, real, char, string skąd - czytane z pliku do zmiennych w PaO - dla integer, real, string - konwersja - gdy eof = true  błąd odczytu - każdy odczyt  przesunięcie wskaźnika

41 Przykład 2 – Plik tekstowy – czytanie
procedure TForm1.Otw_plikClick(Sender: TObject); var pl_wej: TextFile; nazwa_pl, wiersz: String; begin openDialog1.title := 'Plik do edycji'; openDialog1.filter := 'Delhi(*.pas, *.dpr)|*.pas;*.dpr'; if OpenDialog1.Execute then begin nazwa_pl := OpenDialog1.FileName; AssignFile( pl_wej, nazwa_pl ); Reset( pl_wej ); while not Eof( pl_wej ) do begin Readln( pl_wej, wiersz ); Richedit1.Lines.Add( wiersz ); end; CloseFile( pl_wej ); Form1.Caption := 'Edycja pliku [ ' + nazwa_pl + ' ]';

42 zapis do pliku - write( zmienna_plikowa, W1, W2,... Wn) - writeln( zmienna_plikowa, W1, W2,... Wn) co - wyrażenia typu składowego gdzie Wi - wyrażenia typu: integer, real, char, string, array of char, TStrings + format wyniku :m :m:n dopisywać można tylko na końcu pliku - jest tak po rewrite - gdy po reset  trzeba przewinąć na koniec zapis ustawia wskaźnik na końcu

43 Przykład 3A – Plik tekstowy – zapis jako
procedure TForm1.Zap_jakoClick(Sender: TObject); var pl_wyj: TextFile; nazwa_pl: String; begin SaveDialog1.title := 'Plik do zapisu'; SaveDialog1.filter := 'tekst ASCII|*.txt'; if SaveDialog1.Execute then begin nazwa_pl := SaveDialog1.FileName; AssignFile( pl_wyj, nazwa_pl ); // nowy Rewrite( pl_wyj ); Writeln( pl_wyj , Memo1.Text ); // przepisywanie CloseFile( pl_wyj ); Form1.Caption := 'Edycja pliku [ ' + nazwa_pl + ' ]'; end;

44 Obsługa plików binarnych
opis typu plikowego file of Tb - Tb jest typem bazowym deklaracja, skojarzenie, otwarcie i zamknięcie - jak dla plików tekstowych operacje edycyjne: czytanie z pliku - read( zmienna_plikowa, Z1, Z2,... Zn ) Zi - nazwy zmiennych typu bazowego zapis do pliku write( zmienna_plikowa, W1, W2,... Wn ) Wi - wyrażenia typu bazowego Przykład: var student: osoba; f: file of osoba; begin assign( f, '....' ); reset( f ); read( f, student )

45 Przykład 4: var student, rob: osoba; f1, f2: file of osoba; begin
assignFile( f1, '....' ); with student do begin nazw := 'Kowalski'; imie := 'Jan'; end; // with rewrite( f1 ); write ( f1, student ); // zapis do nowego reset( f2 ); while not eof( f2) do read( f2, rob ); // przewijanie write ( f2, student ); // zapis na koniec

46 3. Język ObjectPascal - podprogramy
Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z określonym sposobem wymiany informacji z innymi częściami (przekazywanie danych) Podprogram begin end przekazanie danych korzyści: - krótszy zapis źródłowy - efektywniejsze wykorzystanie PaO (mniej) - czytelność - łatwiejsze uruchamianie i testowanie - tworzenie bibliotek i korzystanie Program wywołanie podprogramu zwrot wyników

47 definiowanie procedury funkcje
xxx procedury funkcje różnice - sposób definiowania - funkcja przyjmuje wartość - procedura nie - sposób wywołania nagłówek:    procedure nazwa_proc ( sekw._deklaracji_parametrów_formalnych );    function nazwa_fun ( sekw._dekl._param._formal. ): nazwa_typu_wartości;  lista_nazw_parametrów_formalnych: nazwa_typu  var lista_nazw_parametrów_ formalnych : nazwa_typu  var lista_nazw_parametrów_ formalnych mechanizm przekazywania danych

48 wywołanie procedura - instrukcja wywołania:
xxx wywołanie procedura - instrukcja wywołania: nazwa_procedury( lista_argumentów_aktualnych ); funkcja - w wyrażeniu (jako składniku instrukcji):    nazwa_funkcji( lista_argumentów_aktualnych ); Uwagi: argumenty aktualne zgodne z parametrami formalnymi: - co do liczby - co do typu - co do kolejności - względem mechanizmu zakres widoczności zmiennych

49 Przekazywanie danych z/do podprogramu
przez wartość - parametr formalny bez var - jest zmienną lokalną - wartość początkowa w momencie wywołania - argument aktualny - wyrażenie typu zgodnego - przekazywanie danych tylko na wejściu do podprogramu przez zmienną (adres) - określonego typu (referencyjnie) - parametr formalny z var - faktycznie nie dane lecz adres argumentu aktualnego - argument aktualny - zmienna tego samego typu - przekazywanie danych na wejściu i na wyjściu

50 Uwagi: parametry formalne opcjonalne - pomijamy "( )"
xxx parametry formalne opcjonalne - pomijamy "( )" obiekty lokalne opcjonalne typ parametru formalnego - dowolny (plik tylko przez zmienną) - nazwa typu (nie opis) - także tylko string (bez rozmiaru) typ wartości funkcji - tylko prosty lub string (bez rozmiaru) - nazwa typu (nie opis) dla definicji funkcji musi być w części akcyjnej nadanie wartości funkcji nazwa_funkcji := Wtypu_zgodnego ze środka podprogramu (procedury|funkcji) można "wychodzić" instrukcją exit

51 Przykład A procedure TForm1.Button1Click(Sender: TObject); begin
xxx Przykład A procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Font.Name := 'New Courier'; Memo1.Lines.Append( ' ' ); Memo1.Lines.Append( '| |' ); Memo1.Lines.Append( '| DELPHI |' ); Memo1.Lines.Append( ' ' ); end;

52 Przykład B: procedure TForm1.Button2Click(Sender: TObject);
xxx Przykład B: procedure TForm1.Button2Click(Sender: TObject); procedure linia_poz; begin Memo1.Lines.Append( ' ' ); end; procedure linia_pion; Memo1.Lines.Append( '| |' ); linia_poz; linia_pion; Memo1.Lines.Append( '| DELPHI |' );

53 Przykład C: procedure TForm1.Button3Click(Sender: TObject);
xxx Przykład C: procedure TForm1.Button3Click(Sender: TObject); procedure linia_poz; begin Memo1.Lines.Append( ' ' ); end; procedure linia_pion ( N: integer ); var k: integer; for k := 1 to N do Memo1.Lines.Append( '| |' ); begin linia_poz; linia_pion ( 2 ); Memo1.Lines.Append( '| DELPHI |' ); end;

54 Przykład_D - wykres funkcji
xxx Przykład_D - wykres funkcji var i: integer; function fun( k: integer): real; begin if k <= 10 then fun := 2*k else fun := *(k-1) end; Memo1.Font.Name := 'Courier'; for i:= 1 to 20 do Memo1.Lines.Append( format('%3d %10.1f',[i, fun(i)] )); Przykłady - wykr_fun.pas

55 Przykład_E – funkcja średnia harmoniczna:
Program do wyznaczenia średnich harmonicznych ciągu 3 różnych N liczb,\ wczytywanych z klawiatury: zdefiniować 3- elementowy wektor rekordów o dwóch polach: wartość N – typu integer, wartość średniej harmonicznej N – typu real, zdefiniować funkcję wyznaczania średniej : parametrem ma być N, wartością – średnia harmoniczna N, wypełnić i wyświetlić wartości wektora rekordów.

56 Przykład_F – fun wekt: Program wyznaczenia średniej arytmetycznej dla 3 ciągów 4 liczb całkowitych, wczytywanych z klawiatury: zdefiniować 3- elementowy wektor rekordów o dwóch polach: - wektor 4-elementowego ciągu wejściowego – o składowych typu integer, - wartość średnia w ciągu – typu real, zdefiniować funkcję do wyznaczania średniej: - parametr 4-elementowy wektor wejściowy, - wartość – średnia arytmetyczna danych wejściowych – typu real, wypełnić i wyświetlić wartości wektora rekordów.


Pobierz ppt "1. Język ObjectPascal - typ tablicowy (array)"

Podobne prezentacje


Reklamy Google