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

Slides:



Advertisements
Podobne prezentacje
Systemy czasu rzeczywistego
Advertisements

Katarzyna Szafrańska kl. II ti
PRAM.
Podstawy informatyki Informatyka Stosowana Zajęcia nr 2
Programowanie w języku Visual Basic
Wykład 06 Metody Analizy Programów System Hoare
Algorytmy – zapis struktur programowania
Programowanie I Rekurencja.
27/09/ Języki programowania 1 Piotr Górczyński Pętle.
PROGRAMOWANIE STRUKTURALNE
Współprogramy III Ten wykład ma na celu pokazanie kolejnej ciekawej możliwości, którą oferują współprogramy. Wspólprogramy reprezentujące wyrażenia regularne.
ZŁOŻONOŚĆ OBLICZENIOWA
Turbo pascal – instrukcje warunkowe, iteracyjne,…
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 8: Wykorzystanie procedur i funkcji © Jan Kaczmarek.
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 6: Tablice, rekordy, zbiory.
Instrukcje Instrukcja : definicja obliczenia i określenie sposobu wykonania tego obliczenia. Program : ciąg instrukcji wykonywanych kolejno od pierwszej.
Systemy czasu rzeczywistego Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do.
Rekurencja Copyright, 2000 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Imperatywne modele obliczeń Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do.
Rekurencja Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do informatyki Wykład.
Imperatywne modele obliczeń Copyright, 2003 © Jerzy R. Nawrocki Teoretyczne podstawy.
Programowanie imperatywne i granice obliczalności Copyright, 2004 © Jerzy R. Nawrocki
Rekursja Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki.
Podstawy informatyki Wirtotechnologia Grupa: 1A Wydział Inżynierii Metali i Informatyki Przemysłowej Wydział Odlewnictwa Akademia Górniczo – Hutnicza im.
Podstawy informatyki Informatyka stosowana Prowadzący: Grzegorz Smyk
Komunikacja z arkuszem. Iteracje. Funkcje.
Wykład 2 struktura programu elementy języka typy zmienne
Dr Anna Kwiatkowska Instytut Informatyki
PASCAL (2) dr Anna Kwiatkowska.
Wprowadzenie do programowania w języku Turbo Pascal
Semafory.
KOMPUTEROWE WSPOMAGANIE PRAC BADAWCZYCH FORTRAN 90/95 – cz II Adam FIC INSTYTUT TECHNIKI CIEPLEJ.
Podprogramy.
Typy złożone, case, stałe. Typ zbiorowy type typ_zb = set of typ_podstawowy; Typem podstawowym może być tylko typ porządkowy. Typem podstawowym może być
PROGRAMOWANIE STRUKTURALNE
Schemat Hornera Mgr inż. Michał Szucki.
Słowa kluczowe oraz nazwy obiektów i klas rozpoczynaj od dużej litery np. Loop, Dim, FileStream Rozpoczynaj nazwę zmiennej od małej litery stosując styl.
Podstawy programowania
PASCAL pętla WHILE.
Pliki tekstowe. Operacje na plikach. mgr inż. Agata Pacek.
Andrzej Jędryczkowski Nie da się napisać większego programu bez podziału go na części zwane podprogramami. Podprogram to wyróżniona część programu.
Funkcje w Pascalu Przypomnienie wiadomości o procedurach Prowadzący: Anna Kaleta Piotr Chojnacki.
Metodyka nauczania Informatyki
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
Wyrażenia w Turbo Pascalu.
Algorytmy i struktury danych
Procedury i funkcje.
Wykład 5 – typy – stałe – tablice – elementy grafiki.
PHP: warunki, pętle, switch, break, continue
Pliki Pojęcie i rodzaje plików Definicja typu plikowego Operacje wykonywane na plikach elementowych.
Pliki tekstowe – A. Jędryczkowski © 2007 Turbo Pascal umożliwia wykorzystanie w programach plików tekstowych. Pliki takie zawierają informację niezakodowaną
1 Wykład 8 Podprogramy. 2 Pojęcie i istota stosowania dzielenie programu na części (logicznie spójne) - nazwane - niezależne od pozostałych części - z.
Programowanie strukturalne i obiektowe
Programowanie strukturalne i obiektowe
Instrukcje iteracyjne
Instrukcja warunkowa i wyboru
Wykład 10 typ zbiorowy rekurencja.
Składnia pętli do … while do instrukcja while (wyrażenie); gdzie: instrukcja – instrukcja pojedyncza lub blok instrukcji wyrażenie – wyrażenie przyjmujące.
Ogólna struktura programu w TP
Algorytmika Iteracje autor: Tadeusz Lachawiec.
Wykład 6 Informatyka MPDI 3 semestr JavaScript cd.
Iteracje w C# Informatyka Cele lekcji: Wiadomości: Uczeń potrafi:
Programowanie imperatywne i język C Copyright, 2007 © Jerzy R. Nawrocki Wstęp do.
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Rozdział IV Wyrażenia proceduralne algorytmów Grzegorz Gacek Patryk Gajewski.
Pętle – instrukcje powtórzeń
Instrukcje warunkowe w php. Pętla FOR Czasem zachodzi potrzeba wykonania jakiejś czynności określoną ilość razy. Z pomocą przychodzi jedna z najczęściej.
P ASCAL Definicje, deklaracje, podstawowe instrukcje 1.
Strumienie, Wczytywanie, Zapisywanie, Operacje na plikach
Dane, zmienne, instrukcje
Zapis prezentacji:

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

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;

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ć.

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.

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ć.

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.

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. 1..10) okrojony char wyliczeniowy boolean dowolny: prosty (integer, real itp.) strukturalny np. inna tablica,napis, rekord

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;

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

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[ 1..50 ] 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

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 [ -10 .. 0 ] of real

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

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[ 1..100 ] 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 ] - 5.2 ) )

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

pierwszy znak imienia program test; Przykłady: Kowalski Jan Nowak Leszek … 1 .. 100 1 2 program test; var grupa: array[ 1..100, 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

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

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 [ 1 .. 12 ] 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

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;

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: 1900 .. 2100; 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.

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

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;

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;

imie: array[1..2] of string[ 15 ]; data_ur: data; end; TABLICE REKORDÓW type data = record rok: 1900 .. 2100; 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…

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

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

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ą

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

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.

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

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;

!!! 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

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

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

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

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!

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)

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.

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

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.

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.

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.

Koniec