PARADYGMATY I JĘZYKI PROGRAMOWANIA

Podobne dokumenty
Algorytmy i struktury danych. wykład 1

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

ZASADY PROGRAMOWANIA KOMPUTERÓW

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

MATERIAŁY DO ZAJĘĆ II

zmienne stanowią abstrakcję komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np.

Wstęp do programowania. Różne różności

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Lab 9 Podstawy Programowania

Paradygmaty programowania

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

Podstawy Programowania C++

Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:

DYNAMICZNE PRZYDZIELANIE PAMIECI

Java Podstawy. Michał Bereta

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Paradygmaty programowania

Programowanie obiektowe

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Wstęp do wskaźników w języku ANSI C

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

Wstęp do programowania 2

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Podstawy programowania w języku C

Oczywiście plik musi mieć rozszerzenie *.php

Algorytmy i struktury danych

Język ludzki kod maszynowy

Podstawy Programowania

Techniki Programowania wskaźniki

Podstawy programowania skrót z wykładów:

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

KURS C/C++ WYKŁAD 6. Wskaźniki

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Podstawowe części projektu w Javie

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Algorytmy i język C++

Wykład 3 Składnia języka C# (cz. 2)

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Spis treści WSTĘP CZĘŚĆ I. PASCAL WPROWADZENIE DO PROGRAMOWANIA STRUKTURALNEGO. Rozdział 1. Wybór i instalacja kompilatora języka Pascal

Języki i metodyka programowania. Wskaźniki i tablice.

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Podstawy Programowania

Pascal - wprowadzenie

Programowanie komputerowe. Zajęcia 4

Języki i techniki programowania Ćwiczenia 2

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Wykład 1: Wskaźniki i zmienne dynamiczne

Podstawy Programowania Podstawowa składnia języka C++

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Wykład 14. Środowisko przetwarzania

Microsoft IT Academy kurs programowania

14. Elementy systemu wykonawczego

Typy danych, zmienne i tablice. Tomasz Borzyszkowski

Programowanie strukturalne i obiektowe : podręcznik do nauki zawodu technik informatyk / Adam Majczak. Gliwice, cop

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Ada 95 #1/5 - typy. Typy skalarne. Hierarchia typów w Adzie. Typ znakowy. Typy dyskretne. Plan wykładu

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Programowanie Komputerów

W języku C/C++ pomiędzy wskaźnikami a tablicami istnieje bardzo ścisły związek. Do onumerowania elementów w tablicy służą tzw. INDEKSY.

Wskaźniki. Programowanie Proceduralne 1

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Struktury, unie, formatowanie, wskaźniki

Programowanie w C++ Wykład 4. Katarzyna Grzelak. 19 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 37

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

Java Język programowania

Podstawy programowania w języku C++

Podstawy Informatyki. Wykład 6. Struktury danych

Informatyka 1. Przetwarzanie tekstów

Podstawy programowania w języku C++

Podstawy programowania 2. Temat: Wprowadzenie do wskaźników. Przygotował: mgr inż. Tomasz Michno

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Informatyka I. Wykład 4. Tablice. Dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Podstawy programowania. Podstawy C# Tablice

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

Transkrypt:

1 PARADYGMATY I JĘZYKI PROGRAMOWANIA Zmienne. Typy danych. cd.

Treść 2 Zmienne nazwa, zakresy,... Typy danych wstęp n definicje n klasyfikacja Sprawdzanie typów n równoważność n wnioskowanie typów Tablice Rekordy, warianty Napisy Wskaźniki i typy rekurencyjne

3 Tablice, rekordy itp.

Tablice 4 Jednorodne zbiory danych, indeksowane tablica(index) tablica[index] tablica[ind1][ind2],... indeksy: zależnie od języka; generalnie typ wyliczeniowy; Ada: boole owski, znakowy, wyliczeniowy położenie elementu względem elementu pierwszego jest obliczane w czasie wykonania (koszt) Rodzaje tablic (w zależności od wiązania zakresów indeksów, wiązania pamięci oraz miejsca alokacji) statyczne (statycznie ustalone zakresy indeksów i statyczna alokacja) ustalone, dynamiczne, na stosie (zakres indeksów ustalony, alokacja w czasie wykonania) dynamiczne, na stosie (zakres indeksów i alokacja ustalane są w czasie wykonania) ustalone, dynamiczne, na stercie dynamiczne, na stercie (możliwa zmiana zakresów indeksów)

Przykład: Tablice 5 Operacje na tablicach w Fortranie 95 dodawanie, odejmowanie (a±b), całe tablice! transpozycja (transpose) mnożenie tablic (mulfply(a,b)) krojenie tablic wyznacznik (det(a)) odwracanie (1/a, inverse) Python (numeracja od 0) wektor = [3, 4, 1, 5, 6]; tablica = [[1,2],3,[5,4,7],[1,2,3],56]; Perl (numeracja od zera) @lista[1..5]=@lista2[3,4,5,6,7]; Ruby (numeracja od zera) list=[2, 4, 5, 6, 7]; list.slice(2,2) zwraca [5,6]

Adresy elementów 6 Tablice 1 wymiarowe; Tablice 2 wymiarowe; Tablice wielowymiarowe; REALIZACJA w pamięci: C, C++: wierszowa Fortran: kolumnowa Organizacja efektywnych pętli for()/do Napisać formuły dla adresów elementów tablicy dwuwymiarowej A[K,L] w Fortranie i C++. Np. dla tablicy 1- o wymiarowej lista[]: adres(lista[k]) = adres(lista[indeks_dolny]) + ( (k- indeks_dolny)*rozmiar_elementu;

Tablice a pamięć 7 pamięć ciągła wskaźniki do wierszy opcja w C wiersze mogą być składane w dowolnym miejscu pamięci wygodne dla dużych tablic wygodne dla tablic o różnej długości wierszy wymagana dodatkowa pamięć dla wskaźników

Row- pointers 8 p o n i e d z i a l e k w t o r e k s r o d a c z w a r t e k p i a t e k s o b o t a n i e d z i e l a p o n i e d z i a l e k / w t o r e k / s r o d a / c z w a r t e k / p i a t e k / s o b o t a n i e d z i e l a wskaźniki char tydzien[10] ={ poniedzialek, wtorek, sroda, czwartek, piatek, sobota }; char *tydzien[10] ={ poniedzialek, wtorek, sroda, czwartek, piatek, sobota };

Tablice asocjacyjne 9 nieuporządkowane kolekcje danych, indeksowane za pomocą kluczy; pary (klucz, wartość); Przykład, Perl: %x=( ja => 200, ty =>234, my =>10); $( oni )=765; Wygodne w wielu sytuacjach Często nazywane haszami (ang. hash) Najczęściej w językach interpretowanych

Rekordy 10 rekord = najczęściej niejednorodny zbiór danych; poszczególne elementy identyfikowane są nazwą C, C++, C#: struct Przykład. Ada. type Dane_osobowe is record Imie: String (1..20); Imie_drugie: String Nazwisko: String (1..10); end record; type Dane_pracownika is record Pracownik: Dane_osobowe; stawka_godzinowa: float; end record; Zatrudniony: Dane_pracownika;

Rekordy 11 operacje na rekordach Przykład. COBOL: Rekordy INPUT-RECORD i OUTPUT-RECORD; możliwe polecenie: MOVE CORRESPONDING INPUT-RECORD TO OUTPUT-RECORD adres pola w rekordzie liczony jest względem adresu rekordu Kiedy rekordy są tego samego typu?

Rekordy 12 Pascal type dwa_znaki = packed_ array [1..2]; type element = record symbol : dwa_znaki; liczba_atomowa : integer; masa_atomowa : real; metal : Boolean end; Dostęp Pascal var srebro : element; srebro.symbol: = Ag ; l_atomow = masa / srebro.masa_atomowa; (+ Rekordy ) C (struktura) C struct element { char symbol[2]; int liczba_atomowa; double masa_atomowa; _Bool metal; }; element srebro; srebro.symbol = Ag ; l_atomow = masa / srebro.masa_atomowa;

Rekordy, pamięć 13 Pascal., r. zwykły 4 bajty = 32 bity Pascal, r. packed symbol liczba_atomowa masa_atomowa symbol liczba_ atomowa masa_atomowa metal metal dziury ew. reorganizacja w celu zminimalizowania zajętości pamieci

Rekordy wariantowe 14 Rekordy wariantowe wywodzą się z Algolu 68 Fortran integer i real r logical b equivalence (i, r, b) pola i, r, b nie będą używane w tym samym czasie Rekord wariantowy jest podobny do unii w języku C W Pascalu zintegrowano unie i rekordy

Rekordy wariantowe 15 Pascal type dwa_znaki= packed_ array [1..2]; long_string : packed array [1..200] of char; string_ptr : ^long_string; type element = record symbol: dwa_znaki; liczba_atomowa : integer; masa_atomowa: real; metal: Boolean; case w_naturze: Boolean of true: ( miejsce:string_ptr; abundancja`; real; ); false : ( czas_zycia : real; ) end; C struct element { char symbol[2]; int liczba_atomowa; double masa_atomowa; _Bool metal; _Bool w_naturze; union { struct { char *miejsce; double abundancja; } info; double czas_zycia; } pola_dodane; } srebro; Ponieważ unia nie jest częścią struct wprowadzono dwa dotatkowe poziomy nazw. Pole trzecie to wciąż srebro.masa_atomowa, ale dostęp do pola miejsce odbywa się przez srebro.pola_dodane.info.miejsce

Rekordy a unie 16 Algol 68 union (int, real, bool) uirb # uirb może być typu int, real lub boolean uirb := 1 # integer uirb := 12.34 # real W celu pobrania elementu należy przygotowac specjalną instrukcję case: case uirb is (int i) : print(i) (real r) : print(r) (bool b) : print(b) esac Wielkości w nawiasach, w instrukcji case, są nazwami wartości zawartych w unii. Ukryty znacznik (typu) zmieniany jest niejawnie; dotyczy unii.

Rekordy a unie 17 Znaczone rekordy w Pascal- u type tag = (is_int, is_real, is_bool) var uirb : record case which : tag of is_int : (i : integer); is_real : (r : real); is_bool : (b : Boolean) end; Problemy. Znacznik w Pascal- u może być zmieniony jawnie zwykłą instrukcją przypisania (nie jak w Algolu) uirb.which:=is_real; uirb.r:=3.00; uirb.which:=is_int; write(uirb.i); (* błąd*)

Rekordy a unie 18 Jest jeszcze gorzej bo pole znacznika (tag) rekordu jest opcjonalne var uirb : record case tag of is_int : (i : integer); is_real : (r : real); is_bool : (b : Boolean) end; uirb.r = 3.0; writeln(uirb.i); (* źle! *)

Krotki 19 Krotka jest podobna do rekordu, ale dane zawarte w krotce nie są nazwane tak jak pola rekordu; sa indeksowane Python niezmienialne (immutable) krotki krotka = (3, 6, kot, 56 ); x = krotka[3]; // 56 łączenie: + ML val krotka = (3, 6, banan, 56 ); dostęp do elementu pierwszego: #1(krotka); F# let krotka = (7, 5, 1); let a, b, c = krotka; // a jest 7, c jest 1

Listy 20 LISP pierwszy (A B C D), (A (B C) D) - listy operacje podstawowe: (CAR (A B C D)) zwraca A (CDR (A B C D)) zwraca (B C D) łączenie: (CONS A (A B C))zwraca (A A B C) Podobnie: Scheme, ML; Python, Haskell: przetwarzanie list np. (kwadraty liczb nieparzystych): [x*x for x in range(10) if x%2 == 1]

Unie 21 C, C++, Ada, F# C, C++ - nie jest wspomagane sprawdzania typów Ada: unie wariantowe (wcześniej: Algol 68) F# type intreal = IntVal of int RealVal of float; Tutaj intreal jest typem unii, a IntVal i RealVal konstruktorami; piszemy np. let ira = IntVal 20; let irb = RealVal 3.1415;

Wskaźniki 22 Zmienne typu wskaźnikowego (pointer) mają zakres wartości adresów pamięci plus nil. Służą do pośredniego adresowania (programowanie w asemblerze) oraz pozwalają zarządzać pamięcią dynamiczną (sterta, heap). Wiele języków (Fortran 77, Java; różne powody) nie używa wskaźników; dereferencja, wyłuskanie = pobranie wartości z obszaru wskazywanego Wygodne przy budowie strukturalnych typów danych (listy wiązane, drzewa, grafy,...)

Wskaźniki wyłuskanie wartości 23 8873 320 Anonimowa zmienna dynamiczna wsk 8873 Jeśli wsk jest zmienną wskaźnikowa o wartości 8873 i adres 8873 zawiera 320 to przypisanie: j j = *wsk wstawi do j 320.

Wskaźniki 24 C, C++: jeśli zmienna wskaźnikowa p wskazuje na rekord, a polem rekordu jest np. imie to wartość pola można pobrać przez (*p).imie lub stosując operator ->: p->imie; operacje new, delete arytmetyka (wsk wskaźnik, indeks integer): wsk + indeks; *(wsk+1); *(wsk+indeks); wsk[indeks]; Problem wiszących wskaźników; wycieki pamięci; zgubione zmienne na stercie

Wskaźniki 25 Model referencyjny (przez referencję) A:=B oznacza, że A wskazuje na to samo na co wskazuje B języki funkcyjne (ML, Clu, Smalltalk) Model wartości (przez wartość) przypisanie A := B oznacza przepisanie wartości ze zmiennej A do zmiennej B C, Pascal, Ada Mieszane modele Java: jeśli A, B są zmiennymi typu wbudowanego przez wartość; dla typów zdefiniowanych przez użytkownika przez referencję.

Wskaźniki i struktury 26 ML (referencyjny) datatype chrtree = empty node of char * chrtree * chr_tree Lisp (#\R (#\X ()()) (#\Y (#\Z ()()) (#\W ()()))) model referencyjny, bez statycznego typowania R Pascal () type chr_tree_ptr = ^chr_tree chr_tree = record left, right : chr_tree_ptr; val : char end; X Z Y W

Wskaźniki i struktury 27 Ada type chr_tree; type chr_tree_ptr is access chr_tree; type chr_tree is record left, right : chr_tree_ptr; val : character; end record; C struct chr_tree { struct chr_tree *left, *right; char val; }; X Z R Y W

Wskaźniki i struktury 28 Rezerwacja pamięci: Pascal new(my_ptr); Ada my_ptr := new chr_tree; C my_ptr = (struct chr_tree *) malloc(sizeof(struct chr_tree)) funkcja malloc nie jest wbudowana (biblioteka) Java, C++, C# my_ptr = new chr_tree(lista_arg);

Wskaźniki 29 Dostęp Pascal my_ptr^.val := X ; C (*my_ptr).val = X ; lub my_ptr->val= X ; Ada T : chr_tree; P: chr_tree;... T.val := X ; P.val := Y ; Lisp. Dostęp przez wbudowane funkcje cons, car, cdr

Zarządzanie stertą 30 sprzątanie równe obszary (pojedyncze komórki) n licznik referencji n garbage collecfon n zaznaczenie wszystkich obszarów jako nieużytków; n sprawdzenie wskaźników programu i odznaczenie używanych obszarów n zwolnienie wciąż zaznaczonych nieużytków różne obszary więcej problemów

Referencje 31 W odróżnieniu od wskaźnika, który odnosi się do adresu pamięci, referencja wskazuje obiekt lub wartość w pamięci (nie można wykonywać działań arytmetycznych na referencjach); obiekty wskazywane referencyjnie są niejawnie wyłuskiwane. C++ referencja jest stałym wskaźnikiem; musi być inicjowana adresem zmiennej w chwili jej definiowania i nie może być zmieniana niejawne dereferencje w funkcjach pozwalają na tworzenie bardziej przejrzystych kodów (wskaźniki wymagają jawnych dereferencji co zmniejsza czytelność programów)

Zbiory 32 Nieuporządkowane kolekcje dowolnej liczby wartości wspólnego typu (Pascal, operacje: suma, przecięcie, różnica) Realizacja: wektor bitów o długości równej liczbie różnych wartości typu bazowego. Np. dla znaków ASCII 128 bitów = 16 bajtów (0 oznacza przynależność elementu do zbioru, 1 brak w zbiorze). Model nie pracuje dla typów bazowych dużej mocy. (Jak długi musi być wektor bitów dla typu 32- integer, 64- integer?) Lepsza realizacja: tablice assocjacyjne (hash)

Literatura 33 Sebesta, Rozdział 6 Sco, Rozdzial 7

za tydzień...!? 34