Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

1 1. Język ObjectPascal - typ tablicowy (array) Pojęcie i opis opis: array [ lista typów indeksów ] of typ bazowy (składowych) pojęcie: - skończony zbiór.

Podobne prezentacje


Prezentacja na temat: "1 1. Język ObjectPascal - typ tablicowy (array) Pojęcie i opis opis: array [ lista typów indeksów ] of typ bazowy (składowych) pojęcie: - skończony zbiór."— Zapis prezentacji:

1

2 1 1. Język ObjectPascal - typ tablicowy (array) Pojęcie i opis opis: array [ lista typów indeksów ] of typ bazowy (składowych) 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 typ porządkowy (o ograniczonym zakresie): okrojony integer okrojony char wyliczeniowy boolean dowolny: prosty strukturalny (bez plików) tablica tablic, napisów, rekordów

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

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

5 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 a 0

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

7 6 zmienne indeksowane (składowe) - dostęp do składowych Z [ W 1,..., W n ] 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 ] ) ) ); indeksy wyrażenia typu zgodnego z typem indeksów zgodne co do liczby, typu i kolejności z deklaracją nazwa tablicy Z typu składowego użycie - w wyrażeniach lub instrukcjach, jak zmienne typu składowego

8 7 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...; typeopis = ( nazw, imie ); vargrupa: 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...; Przykłady:

9 8 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 ]; tablice hierarchiczne:

10 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); i := i + 1; end;

11 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 ) ); end;

12 11 Edycja wielowierszowa TStringGrid właściwości: informacja tekstowa zorganizowana w tabelę (wiersze, kolumny) 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

13 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ł';

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

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

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

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

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

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

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

21 20 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.

22 21 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:

23 22 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... end ; begin r1 := r2;

24 23 desygnator pola (składowa) - dostęp do pola Z. pole Przykłady: nazwa rekordu 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; 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

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

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

27 26 przykład: 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; 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);

31 30 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; Kopiowanie do wektora rekordów:

32 31 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 begin 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); end; Porządkowanie wg stypendium:

33 32 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 begin 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); end; Porządkowanie wg nazwisk:

34 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)

35 34 istotne cechy textFile (text)- plik tekstowy file of T b - plik elementowy ( binarny, zdefiniowany ) o składowych typu T b Opis typu plikowego deklaracja: var lista_nazw_zmiennych: T p ; T p - 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 Zmienne plikowe - gromadzenie dużej ilości informacji - w sposób trwały - przenoszenie danych między programami | komputerami

36 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]; varoceny: file of real; nazwiska: file of string[20]; zaloga: file of osoba; adresy: file of dwa_napisy; wyniki: textFile;

37 36 opis zmiennych plikowychtype 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 Reguły obsługi plików operacje na treści pliku (składowe): operacje dla całych plików (jak operacje DOS-u) usunięcie pliku f zmiana położenia (nazwy) kopiowanie zmiana atrybutu

38 37 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 p: assignFile( f, W t ) - skojarzenie zmienna plikowa np.: assignFile( grupa, 'C:\ROK_II\grupa_1.pdf ' ); tekstowy opis położenia na dysku

39 38 Okienka wyboru pliku do otwarcia lub zapisu openDialog, saveDialog karta Dialogs biblioteki komponentów VCL 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. 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.

40 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 begin assignFile( plik, openDialog1.fileName ); try reset( plik ); if messageDlg( 'Usunąć ' + openDialog1.fileName + '?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin closeFile( plik ); erase( plik); end; except on eInOutError do messageDlg( 'Błąd operacji wej/wyj pliku.', mtError, [mbOk], 0 ); end;

41 40 Obsługa plików tekstowych opis typu plikowego textFile czytanie z pliku - read( zmienna_plikowa, Z 1, Z 2,... Z n ) - readln( zmienna_plikowa, Z 1, Z 2,... Z n ) skąd gdzie - zmienne typu składowego: integer, real, char, string - 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 assignFile, reset, rewrite, closeFile

42 41 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 + ' ]'; end; Przykład 2 – Plik tekstowy – czytanie

43 42 zapis do pliku W i - 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 gdzie co - wyrażenia typu składowego - write( zmienna_plikowa, W 1, W 2,... W n ) - writeln( zmienna_plikowa, W 1, W 2,... W n )

44 43 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; Przykład 3A – Plik tekstowy – zapis jako

45 44 Obsługa plików binarnych opis typu plikowego file of T b - T b jest typem bazowym deklaracja, skojarzenie, otwarcie i zamknięcie - jak dla plików tekstowych operacje edycyjne: czytanie z pliku - read( zmienna_plikowa, Z 1, Z 2,... Z n ) Z i - nazwy zmiennych typu bazowego zapis do pliku - write( zmienna_plikowa, W 1, W 2,... W n ) W i - wyrażenia typu bazowego Przykład: var student: osoba; f: file of osoba; begin assign( f, '....' ); reset( f ); read( f, student )

46 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

47 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) 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 Podprogram begin end przekazanie danych zwrot wyników

48 47 definiowanie różnice - sposób definiowania - funkcja przyjmuje wartość - procedura nie - sposób wywołania proceduryfunkcje 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

49 48 wywołanie procedura - instrukcja wywołania: nazwa_procedury( 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 funkcja - w wyrażeniu (jako składniku instrukcji): nazwa_funkcji( lista_argumentów_aktualnych );

50 49 Przekazywanie danych z/do podprogramu - 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 przez wartość

51 50 Uwagi: 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 := W typu_zgodnego ze środka podprogramu (procedury|funkcji) można "wychodzić" instrukcją exit

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

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

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

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

56 55 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. Przykład_E – funkcja średnia harmoniczna:

57 56 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. Przykład_F – fun wekt: Program wyznaczenia średniej arytmetycznej dla 3 ciągów 4 liczb całkowitych, wczytywanych z klawiatury:


Pobierz ppt "1 1. Język ObjectPascal - typ tablicowy (array) Pojęcie i opis opis: array [ lista typów indeksów ] of typ bazowy (składowych) pojęcie: - skończony zbiór."

Podobne prezentacje


Reklamy Google