Wykład 1 Informatyka II MPZI2 sem.letni. Tablice Tablice deklarujemy array [ lista typów indeksów ] of typ bazowy (składowych) np. var t1,t2:array [1..5,

Slides:



Advertisements
Podobne prezentacje
Funkcje w PHP ABK.
Advertisements

Katarzyna Szafrańska kl. II ti
Sortowanie przez scalanie
C++ wykład 2 ( ) Klasy i obiekty.
Język C/C++ Funkcje.
PASCAL (3) dr Anna Kwiatkowska.
typy całkowite (całkowitoliczbowe)
PROGRAMOWANIE STRUKTURALNE
PROGRAMOWANIE STRUKTURALNE
OBJECT PASCAL Marzena Szałas.
ZŁOŻONOŚĆ OBLICZENIOWA
Materiały do zajęć z przedmiotu: Narzędzia i języki programowania Programowanie w języku PASCAL Część 7: Procedury i funkcje © Jan Kaczmarek.
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.
Rekursja Copyright, 2004 © Jerzy R. Nawrocki Teoretyczne podstawy informatyki.
Podstawy informatyki Wirtotechnologia – Wskaźniki i referencje
Podstawy informatyki Rekurencja i rekurencja Grupa: 1A
Kurs Pascala – spis treści
Tablice Informatyka Cele lekcji: Wiadomości: Uczeń potrafi:
Pakiety i ATD 1 Definicja. Pakietem albo jednostką programową nazywamy grupę logicznie powiązanych elementów, które mogą być typami, podtypami, obiektami.
Ogólne jednostki programowe 1
Tablice jednowymiarowe 1
Typy prywatne 1 Typy prywatne W Adzie typy prywatne (private types) służą do bezpiecznego udostępniania danych zdefiniowanych w pakiecie, z którego korzysta.
Wykład 2 struktura programu elementy języka typy zmienne
Wprowadzenie do programowania w języku Turbo Pascal
Typy wyrażenia, schematy blokowe, writeln, readln, if, pętle
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 WYKŁAD 2
Programowanie w języku Fortran 95
AWK Zastosowania Informatyki Wykład 1 Copyright, 2003 © Adam Czajka.
Podstawy programowania
Programowanie strukturalne i obiektowe
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.
Algorytmy z przykładami w Turbo Pascal 7.0
Struktura programu w Turbo Pascalu.
© A. Jędryczkowski – 2006 r. © A. Jędryczkowski – 2006 r.
TABLICE C++.
Wyrażenia w Turbo Pascalu.
Procedury i funkcje.
Definicja pliku tekstowego Operacje wykonywane na plikach tekstowych
Wykład 5 – typy – stałe – tablice – elementy grafiki.
1. Język ObjectPascal - typ tablicowy (array)
Podstawy programowania
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.
Podstawy programowania w języku C i C++
Zbiory i rekordy mgr inż. Agata Pacek. Deklaracja typu zbiorowego (określa ilość elementów w zbiorze) type biegi=set of 0..6; Definiowanie zmiennej typu.
Podstawy informatyki 2013/2014
Informatyka MPZI Wykład 4 Podprogramy Pliki Typ zbiorowy Rekurencja.
Informatyka MZT1 Wykład 6 Iteracje while i repeat Tablice Rekordy
MOiPP Matlab Sortowanie Obliczenia symboliczne - Symbolic ToolBox
Wykład 10 typ zbiorowy rekurencja.
1 Wykład 7 sortowanie BitButton format tekstu rysunki typ rekordowy.
Ogólna struktura programu w TP
Informatyka 2 MPDI Wykład 9 Delphi tablice, rekordy.
MOiPP Matlab Przykłady metod obliczeniowych Obliczenia symboliczne
Informatyka MPDI2 Wykład 10 DELPHI cd. - zmienne tablicowe,
PWSW Mechatronika Wykład 7 Matlab cd.
Podsumowanie wiedzy MPDI2 sem.3 INFORMATYKA. tworzenie nowego pliku i katalogu, nawigacja po katalogach, listowanie zawartości katalogu, zmiana nazw,
Wykład 11 Informatyka MPDI Podprogramy Zmienne typu zbiorowego Rekurencja Typ obiektowy Zmienne dynamiczne.
Wykład 2 Programowanie obiektowe. Programowanie obiektowe wymaga dobrego zrozumienia działania funkcji definiowanych przez użytkownika, w ten sposób będziemy.
Informatyka Transport Matlab c.d. Macierze cd. Wykresy graficzne
P ASCAL Definicje, deklaracje, podstawowe instrukcje 1.
Czym jest PHP? ● Językiem programowania przeznaczonym do tworzenia i generowania dynamicznych stron WWW. Działa po stronie serwera: Klient Żądanie strony.
Dane, zmienne, instrukcje
Zapis prezentacji:

Wykład 1 Informatyka II MPZI2 sem.letni

Tablice Tablice deklarujemy array [ lista typów indeksów ] of typ bazowy (składowych) np. var t1,t2:array [1..5, 1..6] of real;

const osoby: array[ 1..3] of string[20] = ( 'Nowak', 'Kowalski', 'Nycz' ); Nadanie wartości początkowych zmiennym tablicowym  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) ); albo zmienna (zmiennym można w programie zmienić wartości a stałym NIE):

program p2; uses SysUtils; 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)); begin writeln (wyniki[1,1]:10:2); //wypisze wartość 3.00 readln; end. Przykład:

type tab = array [1..2, 1..5] of real; var t1, t2 : tab; wie,kol: integer; begin write ('Podaj element 1,1:'); readln(t1[1,1]); //itp. // najczęściej operacje w pętli zagnieżdżanej jeśli tablica 2-wymiarowa for wie:=1 to 2 do for kol:= 1 to 5 do t1[wie, kol] :=1; //wyświetlenie na ekranie też w pętli zagnieżdżanej for wie:=1 to 2 do begin for kol:= 1 to 5 do write(t1[wie, kol]); writeln; end; readln; end. Przykłady operacji tablicowych

Zadanie: w wektorze zsumować co drugi element (nieparzyste indeksy) const N=12; type zakres = 1..N; var k: zakres; suma: real; x: array [ 1.. N ] of real = ( 3, 4, 4.5, 5, 2, 3.5, 5.0, 4.5, 5.0, 4, 3.5, 2) ; begin suma := 0; for k := 1 to N do if (k mod 2) = 1 then suma := suma + x [k]; writeln ( suma :10:3) ; readln end. for k := 1 to ( N+1 ) div 2 do suma := suma + x [ 2*k - 1 ]; albo można tak: zastanowić się!

Pamiętajmy: Nie ma gotowych operacji macierzowych (mnożenie, obliczanie wyznacznika, znajdowanie macierzy odwrotnej itp.), trzeba samemu stworzyć algorytm lub posiadać odpowiednie biblioteki z gotowymi podprogramami Przykładowo mnożenie tablic: program mn24; var t1:array[1..2, 1..4] of real = ((1,2,4,-1),(0, -1, 8, 1)); t2 :array[1..4,1..2] of real = ((1,1.1),(4,-2.0),(0, -1),(-3,-2.5)); wyn: array[1..2,1..2] of real; i:1..4; begin // obliczanie elementu 1,1 wyn[1,1]:=0; for i:=1 to 4 do wyn[1,1]:= wyn[1,1]+ t1[1,i]*t2[i,1]; writeln(wyn[1, 1]:10:2); readln; end

program mn24; const N=2; M=4; var t1:array[1..N, 1..M] of real = ((1,2,4,-1),(0, -1, 8, 1)); t2 :array[1..M,1..N] of real= ((1,1.1),(4,-2.0),(0, -1),(-3,-2.5)); wyn: array[1..N,1..N] of real; wie,kol, i:1..4; begin //potrójna pętla! for wie:=1 to N do for kol:=1 to N do for i:=1 to M do wyn[wie,kol]:= wyn[wie,kol]+ t1[wie,i]*t2[i,kol]; //wyswietlenie wyniku for wie:=1 to N do begin for kol:= 1 to N do write(wyn[wie, kol]:10:2); //wypisanie wiersza writeln; //zmiana wiersza end; readln; end. Całość:

... begin //potrójna pętla! for wie:=1 to N do begin for kol:=1 to N do begin //utworzenie elementu for i:=1 to M do wyn[wie,kol]:= wyn[wie,kol]+ t1[wie,i]*t2[i,kol]; // i od razu wyświetlenie write(wyn[wie, kol]:10:2); end; writeln; end; readln; end. Można wyświetlać wyniki od razu po utworzeniu elementu

Algorytm polega porównywaniu kolejnych par elementów sąsiadujących i zamianie miejscami w przypadku niewłaściwej kolejności Sortowanie bąbelkowe Sortowanie N N-1 porównań Wykonujemy N przebiegów

1 przebieg zamiana zamiana zamiana zamiana zamiana efekt ostatniej zamiany – największy na końcu 2 przebieg zmiana zmiana zmiana przebieg zamiana zamiana przebieg zamiana N=6 zauważamy nadmiarowe porównania

5 przebieg zmiana przebieg operacji= (N-1)*N=6*5

Algorytm polega na porównywaniu kolejnych par elementów sąsiadujących, z tym, że w każdym kolejnym przebiegu liczba analizowanych par jest zmniejszana o 1 Przebiegów wykonujemy N-1 Sortowanie bąbelkowe skrócone

1 przebieg zamiana zamiana zamiana zamiana zamiana efekt 2 przebieg zamiana zamiana zamiana efekt 3 przebieg zamiana zamiana efekt 4 przebieg zamiana efekt 5 przebieg zamiana efekt 15 operacji

Algorytm polega na porównywaniu: pierwszego elementu z kolejnymi i dokonanie zamiany jeśli trzeba, drugiego elementu z kolejnymi itd., aż do porównania dwóch ostatnich elementów. N 2 (N-1) operacji Można też tak (rodzaj sortowania bąbelkowego):

1 przebieg zamiana zamiana zamiana najmniejszy na początku 2 przebieg zamiana 4.. więc zaczynamy od 2-go zamiana zamiana przebieg zamiana zamiana zamiana przebieg zamiana zamiana przebieg zamiana operacji

const N=10; var tab:array [1..N] of integer ; var k,m:1..N; pom,lop:integer; begin //wypełnienie losowe tablicy 1-wymiarowej Randomize; for k:=1 to N dotab[k]:=random(100); //sortowanie for k:=1 to N do for m:=1 to N-1 do begin lop:=lop+1; if tab[m]>tab[m+1] then begin pom:=tab[m]; tab[m]:=tab[m+1]; tab[m+1]:=pom; end; //wypisanie wyniku for k:= 1 to N do write(tab[k]:6); writeln;writeln(lop); readln; end. Bąbelkowe lop=90

const N=10; var tab:array [1..N] of integer ; var k,m:1..N; pom,lop:integer; begin //wypełnienie losowe tablicy 1-wymiarowej Randomize; for k:=1 to N dotab[k]:=random(100); //sortowanie for k:=1 to N-1 do for m:=1 to N-k do begin lop:=lop+1; if tab[m]>tab[m+1] then begin pom:=tab[m]; tab[m]:=tab[m+1]; tab[m+1]:=pom; end; //wypisanie wyniku for k:= 1 to N do write(tab[k]:6); writeln;writeln(lop); readln; end. Bąbelkowe skrócone różnice! lop=45 szybsze

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;

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

 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 potrzebujemy analizy większej liczby to tworzymy tablicę rekordów

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;

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

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; // zmienna rekordowa pomocnicza 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

 jednakowe składowe  selektor typu indeks  różne składowe  selektorem jest nazwa pola

var student: record nazw: string[ 20 ]; imie: array[1..2] of string[ 15 ]; data_ur: data; stypend: real end; var t1:array [1..5, 1..6] of real; Zmienna tablicowa Zmienna rekordowa Deklaracje (opis) zmiennych

Użycie w części wykonawczej programu tablicat1[5, 6] rekord student.nazwisko student.imie[1] student.data_ur.rok w zależności od typu indeks (-y) nazwa pola

var grupa: array[1..100] of osoba; //tablica rekordów !!!! type data = record rok: ; mies: 1..12; dzien: end; osoba = record nazw: string[ 20 ]; imie: array[1..2] of string[ 15 ]; data_ur: data; end; TABLICE REKORDÓW

Instrukcja wiążąca - with  dotyczy tylko zmiennych rekordowych (obiektowych)  upraszcza zapis !! with lista_zmiennych_rekordowych do instrukcja; najczęściej begin... end można tu używać nazw pól bez specyfikowania zmiennej rekordowej przykład: student.nazw :=’Kowalski’; student.imie[1] := ’Jan’; student.data_ur.rok := 1988; student.stypendium := ; with student do begin nazw :=’Kowalski’; imie[1] := ’Jan’; data_ur.rok := 1988; stypendium := 420,00; end; Opis:

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 z nich Pojęcie i istota stosowania

Definiowanie  różnice - sposób definiowania - funkcja przyjmuje wartość a procedura nie - sposób wywołania procedury nagłówek: procedure nazwa_proc (deklaracje_parametrów_formalnych ); function nazwa_fun ( deklaracje_param._formal. ): typ_wartości ; lista_nazw_parametrów_formalnych: nazwa_typu var lista_nazw_parametrów_ formalnych : nazwa_typu elementy listy oddzielane ; mechanizm przekazywania danych funkcje

Czyli... - musimy zdefiniować sposób otrzymywania przez podprogram danych i ewentualny zwrot wyników oraz operacje wykonawcze podprogramu podprogram dane wyniki

function nazwa (parametry formalne): typ funkcji ; definicje, deklaracje lokalne begin.... nazwa := wyrażenie ; //albo result:=wyrażenie end ; procedure nazwa (parametry formalne) ; definicje, deklaracje begin.... instrukcje.... end ; Definicje funkcji i procedury danewynik dane i ewentualne wyniki

Wywołanie (wykonanie) procedura – osobna instrukcja wykonania: nazwa_procedury( lista_parametrów_aktualnych ); Uwagi: parametry aktualne zgodne z parametrami formalnymi: - co do liczby - co do typu - co do kolejności funkcja – najczęściej w wyrażeniu (jako składniku instrukcji): nazwa_funkcji( lista_parametrów_aktualnych ); ale może być też osobną instrukcją, gdy nie zależy nam na zwracanej wartości parametry oddzielane przecinkami,

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

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 wyjściu (czyli w większości przypadków zwrot wyniku lub wyników) - ale może być także na wejściu  przez wartość

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) ; readln; end; definicja procedury Przykład

procedure srednia (liczba1, liczba2 : real ; var wynik : real) ; begin wynik := (liczba1 + liczba2)/2 ; end ; {koniec definicji procedury} var a, b, c:real; begin a:=2; b:=3; srednia (6.7, 2*a, c) ; {trzeci parametr aktualny musi być zmienną} writeln(c)) ; {c jest równe (6.7+2*2)/2=5.35} srednia (a, b, c) ; writeln(c) ; {c jest równe (2+3)/2=2.5} srednia (a, c, c) ; writeln(c) ; {c jest równe (2+2.5)/2=2.25} srednia (c, b, a) ; writeln(a) ; {a jest równe (2.25+3)/2= end. Przykład procedury obliczającej średnią arytmetyczną parametry formalne parametry aktualne var !! Program proc;