Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

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

Podobne prezentacje


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

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

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

3 repeat ciąg instrukcji until W B ; Instrukcja repeat..until.. (powtarzaj.. aż..) Postać: x := 3 ; repeat x := x + 5 until x > 100 ; Ciąg instrukcji wewnętrznych w instrukcji repeat..until.. jest powtarzany dopóty, dopóki wyrażenie logiczne W B posiada wartość false, zmiana na true powoduje zakończenie pętli Uwaga: możliwość nieskończonej pętli !! Instrukcja powinna zmieniać warunek! 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 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. Dziel liczbę 1 przez 2, wynik znowu przez 2 itd., aż osiągniesz

5 Instrukcja while..do.. (dopóki.. wykonuj..) while W B do Instrukcja ; Postać: Działanie instrukcji polega na powtarzaniu wykonywania wewnętrznej instrukcji, dopóki wyrażenie logiczne W B 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 var i, suma : integer ; begin i := 2 ; suma := 0 ; while i <= 100 do begin suma := suma + i ; i := i + 2 ; end ; writeln(suma:10:3); readln end. Przykłady: var x:real; begin Randomize; while random(100)<>5 do begin writeln('jeszcze nie'); end; writeln('juz');readln; end.

7 Typ tablicowy (array) Pojęcie i opis array [ lista_typów_indeksów ] of typ_składowych 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 typ porządkowy (o ograniczonym zakresie): okrojony integer (np ) okrojony char wyliczeniowy boolean dowolny: prosty (integer, real itp.) strukturalny np. inna tablica,napis, rekord Opis:

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 MatlabPascal Nie ma deklaracji zmiennejKonieczna 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) – elementM[1,1] - element Porównanie

10 przykłady: array[ ] of integer; fizycznie: w pamięci operacyjnej 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; 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 [ W 1,..., W n ] 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 ] ) ) indeksy wyrażenia typu zgodnego z typem indeksów zgodne co do liczby, typu i kolejności z deklaracją nazwa tablicy W typu składowego użycie - w wyrażeniach lub instrukcjach, jak zmienne typu składowego

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 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...; … Przykłady: pierwszy znak imienia KowalskiJan NowakLeszek … …

16 var osoby: array[ 1..3] of string[20] = ( 'Nowak', 'Kowalski', 'Nycz' ); wartości początkowe zmiennych tablicowych dla tablic konstrukcja typu ( (st 11, st 21,..., st n1 ), (st 12, st 22,..., st n2 ),... (st 1m, st 2m,..., st nm ) ) 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 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 opis: record lista_nazw_pól: typ;... end 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 deklaracja_pól_tego_samego_typu;

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

20 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 Porównanie: Uwaga: Rekord to jeden zestaw danych (np. dane jednego studenta), jeśli więcej to tworzymy tablicę rekordów

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

22 desygnator pola (składowa) - dostęp do pola Z. p Przykład: nazwa pola Z typu składowego użycie - w wyrażeniach lub instrukcjach, jak zmienne typu składowego 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; 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) nazwa zmiennej rekordowej

23 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… type data = record rok: ; mies: 1..12; dzien: end; TABLICE REKORDÓW

24 P odprogramy 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 Pojęcie i istota stosowania

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

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

27 Obsługa plików 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 Pojęcie i istota stosowania elementy

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

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

31 opis zmiennych plikowychtype 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) Reguły obsługi plików Kolejność operacji na plikach: 1.skojarzenie zmiennej plikowej z plikiem fizycznym 2.otwarcie pliku (do zapisu lub odczytu) 3.operacje (czytanie, zapis) 4.zamknięcie !!!

32 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) procedura: assignFile( f, W t ) - skojarzenie zmienna plikowa np.: assignFile ( grupa, ' C:\ROK_II\grupa_1.bin ' ); tekstowy opis położenia na dysku..istnieje grupa standardowych procedur i funkcji, m.in.

33 Także operacje systemu plików – np procedura erase(plik) – usunięcie pliku 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 procedura: append( f ) - otwarcie do zapisu na końcu pliku (tylko tekstowego)

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

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

36 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. Przykład: zapis do pliku tekstowego nazwa fizycznego pliku (wraz z ewentualną ścieżką dostępu)

37 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. Przykład: odczyt z pliku tekstowego

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

39 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. Przykład: Zapis do nowego pliku elementowego

40 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. Przykład: Zapis do istniejącego pliku elementowego

41 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 begin read(p1,z); // czytanie elemetu writeln(z.nazwisko:20, z.wzrost:6); end; CloseFile(p1); readln end. Przykład: Odczyt z pliku elementowego

42 Koniec


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

Podobne prezentacje


Reklamy Google