Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Informatyka MZT1 Wykład 6 Iteracje while i repeat Tablice Rekordy

Podobne prezentacje


Prezentacja na temat: "Informatyka MZT1 Wykład 6 Iteracje while i repeat Tablice Rekordy"— Zapis prezentacji:

1 Informatyka MZT1 Wykład 6 Iteracje while i repeat Tablice Rekordy
Pliki

2 Matlab Pascal for i=1:1:20 instrukcje end for i:=1 to 20 do begin end;
jeszcze o "pętli" for…… - porównanie Matlab Pascal for i=1:1:20 instrukcje end for i:=1 to 20 do begin end;

3 repeat until WB ; Instrukcja repeat..until.. (powtarzaj .. aż..)
Postać: repeat ciąg instrukcji until WB ; Ciąg instrukcji wewnętrznych w instrukcji repeat..until..  jest powtarzany dopóty, dopóki wyrażenie logiczne WB posiada wartość false, zmiana na true powoduje zakończenie pętli Instrukcja powinna zmieniać warunek! x := 3 ; repeat x := x + 5 until x > 100 ; Uwaga: możliwość nieskończonej pętli !! Istnieje konieczność wykonania w instrukcji (także złożonej) takiej operacji, która wpływa na wartość wyrażenia logicznego tak, aby iteracja mogła się kiedyś skończyć.

4 Dziel liczbę 1 przez 2, wynik znowu przez 2 itd., aż osiągniesz 10-8
Program x1; var x:real; k:integer; begin x:=1; k:=0; repeat x:=x/2; k:=k+1; until x<1e-8; write('Wykonales ',k, ' operacji'); readln end.

5 while WB do Instrukcja ;
Instrukcja while..do.. (dopóki.. wykonuj..) Postać: while  WB  do  Instrukcja ; Działanie instrukcji polega na powtarzaniu wykonywania wewnętrznej instrukcji, dopóki wyrażenie logiczne WB posiada wartość true. Wartość ta jest sprawdzana każdorazowo przed wykonaniem instrukcji wewnętrznej. Uwaga: konieczność wykonania w instrukcji (także sekwencji) takiej operacji, która wpływa na wartość wyrażenia logicznego, aby iteracja mogła się kiedyś skończyć.

6 Przykłady: writeln(suma:10:3); readln end. var x:real; begin
var i, suma : integer ; begin i := 2 ; suma := 0 ; while i <= 100 do suma := suma + i ; i := i + 2 ; end ; writeln(suma:10:3); readln end. var x:real; begin Randomize; while random(100)<>5 do writeln('jeszcze nie'); end; writeln('juz');readln; end.

7 Typ tablicowy (array) dowolny: Pojęcie i opis Pojęcie:
- skończony zbiór elementów tego samego typu składowego - 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_składowych typ porządkowy (o ograniczonym zakresie): okrojony integer (np ) okrojony char wyliczeniowy boolean dowolny: prosty (integer, real itp.) strukturalny np. inna tablica,napis, rekord

8 Uwagi tablice służą do gromadzenia wielu wartości tego samego typu (nietrwałe – tylko w pamięci operacyjnej – później poznamy jak zapisywać do plików) wymiar tablicy – 1-wektor 2-prostokątna 3-przestrzenna rozmiar – w każdym wymiarze! zawartość – dowolna – także inna tablica! np. array [1..5,1..5] of array [1..2,1..2] of integer;

9 Matlab Pascal Porównanie Nie ma deklaracji zmiennej
Konieczna deklaracja M=[1 4 6; 2 9 0] Wypełnianie tablicy: - czytanie z pliku - wartości początkowe w deklaracji - w pętli M(1,1) – element M[1,1] - element

10 array[ 1..20] of array[ 1..30] of real;
fizycznie: w pamięci operacyjnej kolejne wartości typu bazowego ułożone regularnie wierszami przykłady: array[ ] of integer; array[ 1..20, 1..30] of real; array[ 1..20] of array[ 1..30] of real; może być też 30 wierszy i 20 kolumn, zależy od wizualizacji

11 uwagi: wymiar, rozmiar tablica 1, 2, 3 - wymiarowa
rozmiar 20 wierszy na 30 kolumn ( 20 x 30) rozmiar statyczny - wyrażony typem indeksów nie mogą być wyrażenia np.: var n: integer; tab: array[ 1..10, 1.. n] of ...; mogą być indeksy ujemne array [ ] of real

12 Zmienne tablicowe indeksowane (składowe) całościowe

13 zmienne indeksowane (składowe) - dostęp do składowych
Z [ W1, ..., Wn ]  Wtypu 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; Użycie 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; //nadanie wartości y := 10*x[ k ] - 5.2; sin( sqrt( x[ abs( 2*k ) + 10 ] ) )

14 zmienne całościowe - tylko przypisanie - dla typów tożsamych!
brak: + - * / porównania np: var x, y: array[ 1..5] of integer ; begin y[1] := 35 ; x := y; //przepisz całą tablicę y do x ..... end

15 pierwszy znak imienia program test;
Przykłady: Kowalski Jan Nowak Leszek 1 .. 100 program test; var grupa: array[ , 1..2 ] of string[20]; begin grupa[ 1, 1] := 'Kowalski'; …. if grupa [ k, 2 ] = 'Jan' then ...; for k:= 1 to 10 do writeln( grupa[ k, 1 ] + ' ' + grupa[ k, 2 ] ); if grupa [ k, 2 ][1] = 'S' then ...; pierwszy znak imienia

16 dla tablic konstrukcja typu ( (st11, st21,..., stn1 ),
wartości początkowe zmiennych tablicowych dla tablic konstrukcja typu ( (st11, st21,..., stn1 ), (st12, st22,..., stn2 ), . . . (st1m, st2m,..., stnm) ) var osoby: array[ 1..3] of string[20] = ( 'Nowak', 'Kowalski', 'Nycz' ); var wyniki: array[ 1..3, 1..4] of real = ( ( 3, 4, 4.5, 5), ( 2, 3.5, 5.0, 4.5), (5.0, 4, 3.5, 2) )

17 reszta z dzielenia przez 2 = 1
Przykład: Zsumować co drugie elementy tablicy (nieparzyste indeksy) var k, k_max: 1..12; dana: string; suma: real; x: array [ ] of real= ( 3, 4, 4.5, 5, 2, 3.5, 5.0, 4.5, 5.0, 4, 3.5, 2); begin k_max := 12; suma := 0; for k := 1 to k_max do if k div 2 =1 then suma := suma + x [ k ]; writeln ( suma :10:3) ; readln end. reszta z dzielenia przez 2 = 1

18 Typ rekordowy (record)
Pojęcie i opis pojęcie: - skończony zbiór elementów dowolnego typu składowego tak zwane pola - ułożone jednowymiarowo - 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 lub strukturalny (bez plików) pole może być tablicą, napisem, innym rekordem opis: record lista_nazw_pól: typ; . . . end deklaracja_pól_tego_samego_typu;

19 w PaO kolejne wartości pól określonego typu
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.

20 Porównanie: jednakowe składowe selektor typu indeks dostęp bezpośredni statyczny rozmiar różne składowe selektorem jest nazwa pola dostęp bezpośredni statyczny rozmiar Uwaga: Rekord to jeden zestaw danych (np. dane jednego studenta), jeśli więcej to tworzymy tablicę rekordów

21 Zmienne rekordowe całościowe desygnator pola (składowa)
zmienne całościowe - tylko przypisanie - typów tożsamych! brak: + - * / porównania wejścia/wyjścia – można tylko składową (pole) np: var r1, r2: record ..definicja... end ; begin r1 := r2;

22 Z . p  Ztypu składowego desygnator pola (składowa) - dostęp do pola
nazwa zmiennej rekordowej nazwa pola użycie - w wyrażeniach lub instrukcjach, jak zmienne typu składowego Przykład: student.nazw (nazwisko) student.stypend student.imie (tablica) student.data_ur.dzien student.data_ur.rok student.imie[1] (1-sze imię) student.imie[2][1] (1-sza litera 2-go imienia) type data= record dzien, miesiac, rok:integer end; var student: record nazw: string[ 20 ]; imie: array[1..2] of string[ 15 ]; data_ur: data;//zdef. typ rekordowy stypend: real end;

23 imie: array[1..2] of string[ 15 ]; data_ur: data; end;
TABLICE REKORDÓW type data = record rok: ; mies: 1..12; dzien: 1..31 end; 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 !!!! os1:osoba; grupa – zmienna typu tablicowego grupa[k] – typu rekordowego grupa[1].nazw - typu string grupa[2].imie – typu tablicowego grupa[k].imie[1] - typu string grupa[k].data_ur - typu rekordowego grupa[k].data_ur.rok – typu integer grupa[2].imie[2][5] – typu char Użycie zależne od typu: writeln( grupa[3].nazw); os1.nazw := 'Nowak'; grupa[50]:=os1; os1:= grupa[51]; writeln (grupa[k]. imie[1]); writeln(length(grupa[30].nazw)) if grupa[k].data_ur.rok>1970 then…

24 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

25 Przykład funkcji obliczającej średnią arytmetyczną
Definicja lokalna funkcji program p1; parametry formalne typ wyniku function srednia (x1, x2 : real): real ; begin result := (x1 + x2)/2 ; //albo srednia:= (x1 + x2)/2 ; end ; {koniec definicji funkcji} var a, b, c:real; begin a:=2; writeln(srednia (6.7, 2*a)) ; readln; end. wymagana zgodność argumentów w definicji i przy wykonaniu co do: liczby kolejności typu parametry aktualne

26 Przykład wykonanie procedury jest osobną instrukcją program x;
procedure alfa(x1,x2:real; var wynik:real); begin wynik:=x1-x2; end; var w:real; //dodatkowa zmienna alfa(5,2,w); writeln(w) ; alfa(4,2,w); alfa(w,2,w); writeln(w) ;//przemyśleć co wypisze readln; definicja procedury wykonanie procedury jest osobną instrukcją

27 Obsługa plików elementy 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 brak selektora (adresacji) rozmiar dynamiczny istnieje wewnętrzny wskaźnik elementu bieżącego, automatycznie modyfikowany po każdej operacji odczyt | zapis fizycznie - w pamięci zewnętrznej: dysk, dyskietka, CD-ROM, - znakowe urządzenia wej/wyj: (monitor), drukarka

28 Uwagi: Po otwarciu do odczytu wskaźnik ustawia się na początku pliku, każdy odczyt lub zapis przesuwa wskaźnik o jedną pozycję. Otwarcie nowego (nieistniejącego) pliku powoduje utworzenie pustego pliku, jeśli plik istniał jego zawartość zostaje usunięta, Można sprawdzić czy wskaźnik jest na końcu pliku Można przewinąć wskaźnik na początek – jeśli wtedy stwierdzimy, że jesteśmy na końcu pliku to plik jest pusty, Zapis nowego elementu zalecany tylko na końcu pliku (w środku można ale zmienimy (nadpiszemy) wartość elementu). Dopisanie „w środku” pliku wykonuje się przez etapowe przepisywanie do innego pliku.

29 textFile - plik tekstowy czyli file of string
Istotne cechy - gromadzenie dużej ilości informacji w sposób trwały - przenoszenie danych między programami | komputerami Dwa podstawowe typy plikowe textFile - plik tekstowy czyli file of string file of Tb - plik elementowy ( binarny, zdefiniowany ) o składowych typu Tb Wprowadza się tzw. zmienne plikowe służące do komunikowania programu z plikami fizycznymi

30 Przykłady deklaracji zmiennych plikowych:
type osoba = record nazw: string[ 20 ]; imie: array[1..2] of string[ 15 ]; data_ur: data; pensja: real end; dwa_napisy = array[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;

31 !!! Kolejność operacji na plikach:
Reguły obsługi plików opis zmiennych plikowych type osoba = .....; var grupa: file of osoba; skojarzenie - f  ’d:\ścieżka\plik’ otwarcie pliku f do - zapisu - odczytu - dodawania (tylko tekstowe) operacje - zapis | odczyt zamknięcie pliku f usunięcie pliku f | zmiana położenia (nazwy) Kolejność operacji na plikach: !!! skojarzenie zmiennej plikowej z plikiem fizycznym otwarcie pliku (do zapisu lub odczytu) operacje (czytanie, zapis) zamknięcie

32 ..istnieje grupa standardowych procedur i funkcji, m.in.
procedura: assignFile( f, Wt ) - skojarzenie zmienna plikowa tekstowy opis położenia na dysku np.: assignFile( grupa, ' C:\ROK_II\grupa_1.bin ' ); procedura : reset( f ) - otwarcie do odczytu /zapisu (zastępowanie) - jeśli plik istnieje!!! - plik staje się aktywny - wskaźnik na początku pliku - gdy plik nie istnieje  błąd wykonania procedura : 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)

33 Także operacje systemu plików – np procedura
procedura: append( f ) - otwarcie do zapisu na końcu pliku (tylko tekstowego) procedura : closeFile( f ) - zamknięcie pliku - dopisuje zawartość bufora do pliku, zwalnia go - powinno odbyć przed zakończeniem programu funkcja: eof( f ) - badanie końca pliku (end of file) - wartość logiczna: true - wskaźnik po ostatniej wartości (na końcu) false - wskaźnik w środku Także operacje systemu plików – np procedura erase(plik) – usunięcie pliku

34 Procedura zapisu do pliku !!
Plik tekstowy write(zmienna_plikowa, lista_elementów); kursor pozostaje w wierszu writeln(zmienna_plikowa, lista_elementów); kursor pisze i zmienia wiersz Plik elementowy write(zmienna_plikowa, składowa); //tylko jedna! Tak było jeśli chcieliśmy wyświetlać na konsoli writeln(lista_elementów);

35 Procedura odczytu z pliku !!
Plik tekstowy read(zmienna_plikowa, lista_elementów); ew. następne czytanie w tym samym wierszu readln(zmienna_plikowa, lista_elementów); czytanie i zmiana wiersza Plik elementowy read(zmienna_plikowa, składowa); //tylko jedna!

36 Przykład: zapis do pliku tekstowego
program test; var p1:TextFile; z:string; begin z:='Jakis dowolny tekst'; Assignfile(p1,'a.txt'); rewrite(p1); //otwarcie pliku do zapisu writeln(p1,z); //zapis do pliku CloseFile(p1); end. nazwa fizycznego pliku (wraz z ewentualną ścieżką dostępu)

37 Przykład: odczyt z pliku tekstowego
program test; var p1:TextFile; z:string; begin Assignfile(p1,'a.txt'); reset(p1); readln(p1,z); //czytanie z pliku do zmiennej z CloseFile(p1); writeln(z); //wypisanie na ekranie readln end.

38 Jeśli więcej wierszy w pliku i nie wiemy ile, zwykle stosuje się konstrukcję
program test; var p1:TextFile; z:string; begin Assignfile(p1,'a.txt'); reset(p1); while not eof(p1) do readln(p1,z); //czytanie z pliku do zmiennej writeln(z); //wypisanie na ekranie end; CloseFile(p1); readln end. dopóki nie ma końca pliku wykonuj...

39 Przykład: Zapis do nowego pliku elementowego
program test; type osoba= record nazwisko:string[20]; wzrost:integer; end var p1:file of osoba; z:osoba; begin Assignfile(p1,'spis.bin'); rewrite(p1); z.nazwisko:='Kowalski'; z.wzrost := 180; write(p1,z); //wpisanie elementu do pliku CloseFile(p1); readln end.

40 Przykład: Zapis do istniejącego pliku elementowego
program test; type osoba= record nazwisko:string[20]; wzrost:integer; end var p1:file of osoba; z:osoba; begin Assignfile(p1,'spis.bin'); reset(p1); while not eof(p1) do read(p1,z); // czytanie do końca z.nazwisko:='Nowak'; z.wzrost := 190; write(p1,z); //wpisanie elementu do pliku CloseFile(p1); readln end.

41 Przykład: Odczyt z pliku elementowego
program test; type osoba= record nazwisko:string[20]; wzrost:integer; end var p1:file of osoba; z:osoba; begin Assignfile(p1,'spis.bin'); reset(p1); while not eof(p1) do read(p1,z); // czytanie elemetu writeln(z.nazwisko:20, z.wzrost:6); end; CloseFile(p1); readln end.

42 Koniec


Pobierz ppt "Informatyka MZT1 Wykład 6 Iteracje while i repeat Tablice Rekordy"

Podobne prezentacje


Reklamy Google