Algorytmy i Struktury Danych.
|
|
- Sabina Wieczorek
- 6 lat temu
- Przeglądów:
Transkrypt
1 Algorytmy i Struktury Danych. Podstawowe struktury danych. Wykład na podstawie ksiażki Roberta Sedgewicka i Kevina Wayne: Algorithms. Furth Edition. Princeton University dr hab. Bożena Woźna-Szcześniak Jan Długosz University, Poland Wykład 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 1 / 76
2 Plan Motywacja Motto Abstarkcyjne struktury danych Liniowe struktury danych Struktury danych modyfikuja świat, w którym realizowany jest algorytm, usprawniaja działanie, ułatwiaja zrozumienie algorytmu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 2 / 76
3 Motywacja Do tej pory zajmowaliśmy się tylko jednym typem struktur danych: tablicami (jedno-i wielowymiarowymi). Ich długość się nie zmienia, czyli jest to statyczna struktura danych. Statyczność oznacza, że albo konieczna wielkość tablicy jest znana z góry, albo tracimy ogromna ilość pamięci. W wielu przypadkach chcemy mieć dynamiczna strukturę danych, której długość zmienia się zgodnie z potrzebami. Dlatego też potrzebujemy struktury, która pozwala na przechowywanie elementów w fizycznie różnym porzadku Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 3 / 76
4 Struktury danych Struktury danych, sa zaawansowanymi pojemnikami na dane, które gromadza je i układaja w odpowiedni sposób. Różnorodność struktury danych jest ogromna, a dla każdej znaleziono wiele zastosowań oraz interesujacych algorytmów. Struktury danych stosuje się do przetwarzania informacji zgromadzonych w innych strukturach. Struktury danych sa fundamentalnym narzędziem programisty i ich znajomość jest niezbędna. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 4 / 76
5 programy = algorytmy + struktury danych Uczac się algorytmiki nie wolno zapomnieć o strukturach danych!!! Informatyk szwajcarski, profesor Niklaus Wirth (twórca języka Pascal i Modula-2). Źródło:https: //pl.wikipedia.org/wiki/ Niklaus_Wirth Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 5 / 76
6 Abstrakcyjna struktura danych a struktura danych Abstrakcyjna struktura danych (ASD), to zbiór danych elementarnych wraz z dobrze zdefiniowanym na nich zbiorem operacji. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 6 / 76
7 Abstrakcyjna struktura danych a struktura danych Abstrakcyjna struktura danych (ASD), to zbiór danych elementarnych wraz z dobrze zdefiniowanym na nich zbiorem operacji. Różnica pomiędzy struktura danych a abstrakcyjna struktura danych: Struktura danych jest pewna implementacja konkretnej abstrakcyjnej struktury danych przeznaczonej do pracy na konkretnym komputerze (chodzi o jego architekturę) i systemie operacyjnym. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 6 / 76
8 Abstarkcyjne struktury danych Liniowe abstrakcyjne struktury danych: Stos Kolejka Listy: jednokierunkowe listy niecykliczne, dwukierunkowe listy niecykliczne, jednokierunkowe listy cykliczne (pierścienie jednokierunkowe), dwukierunkowe listy cykliczne (pierścienie dwukierunkowe). Tablice haszujace Drzewiaste struktury danych Drzewa poszukiwań binarnych Kopce Drzewa AVL Drzewa Czerwono-Czarne... Grafy Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 7 / 76
9 Stos Stos (ang pushdown stack, lub stack)jest struktura liniowo uporzadkowanych danych, z których tylko ostatni element, zwany wierzchołkiem lub szczytem stosu, jest w danym momencie dostępny. Cecha charakterystyczna stosujest to, że dane sa zapisywane i pobierane metoda Last-In-First-Out (LIFO) (pierwszy wchodzi, ostatni wychodzi) tj.: nowe elementy odkładamy tylko na szczyt stosu, usuwamy jedynie szczyt stosu (czyli element ostatnio dodany). Działanie stosu jest często porównywane do stosu talerzy: nie można usunać talerza znajdujacego się na dnie stosu nie usuwajac wcześniej wszystkich innych. nie można także dodać nowego talerza gdzieś indziej, niż na sama górę. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 8 / 76
10 Stos - operacje Niech S = (d 1, d 2,..., d n ) oznacza stos, wtedy: Odkładanie elementu na stos: push(s, d) = (d, d 1, d 2,..., d n ) Pobieranie elementu ze stosu: pop(s) = (d 2,..., d n ), o ile n > 1 Pobieranie elementu ze szczytu stosu bez jego usuwania: peek(s) = d 1 Sprawdzanie niepustości stosu: isempty(s) wtw., gdy n = 0 Pop i Push d 1 Szczyt stosu d 2 d 3 d 4 d 5 NULL Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 9 / 76
11 Stos liczb całkowitych kod Java I import java.util.nosuchelementexception; import java.util.scanner; public class Stos { private Node top; // szczyt stosu private int n; // rozmiar stosu // klasa pomocnicza private static class Node { private int item; private Node next; //Inicjalizuje pusty stos public Stos() { top = null; n = 0; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 10 / 76
12 Stos liczb całkowitych kod Java II //Zwraca true, gdy stos jest pusty. public boolean isempty() { return top == null; //Zwraca liczbe elementow w stosie. public int size() { return n; //Dodaje element do stosu. public void push(int item) { Node oldtop = top; top = new Node(); top.item = item; top.next = oldtop; n++; //Usuwa i zwraca szczyt stosu Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 11 / 76
13 Stos liczb całkowitych kod Java III public int pop() { if (isempty()) throw new NoSuchElementException("Stos pusty"); int item = top.item; // element do zwrotu top = top.next; n--; return item; // usuwa szczyt stosu // zwraca zachowany element //zwraca szczyt stosu, ale go nie usuwa public int peek() { if (isempty()) throw new NoSuchElementException("Stos pusty"); return top.item; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 12 / 76
14 Zastosowanie stosu - postać binarna danej liczby całkowitej I // zalezy od klasy Stos public class Binarna { public static void main(string[] args) { Stos stack = new Stos(); Scanner in = new Scanner(System.in); System.out.println("Podaj liczbe"); int n = in.nextint(); int m = n; while (n > 0) { stack.push(n % 2); n = n / 2; System.out.println("Postac binarna "+m+": "); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 13 / 76
15 Zastosowanie stosu - postać binarna danej liczby całkowitej II while (!stack.isempty()) System.out.print(stack.pop()); System.out.println(); in.close(); $ java Stos Podaj liczbę 9 Postac binarna liczby: Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 14 / 76
16 Zastosowanie stosu I Odwracanie danych Poniższa klasa Reverse odwraca kolejność liczb całkowitych wprowadzanych ze standardowego wejścia, bez konieczności wcześniejszego określania ich liczby. // zalezna od klasy Stos import java.util.scanner; public class Reverse { public static void main(string[] args) { Stos stack = new Stos(); Scanner in = new Scanner(System.in); System.out.println("Podaj dana!= 0"); int n = in.nextint(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 15 / 76
17 Zastosowanie stosu II while (n!=0){ stack.push(n); n = in.nextint(); while (!stack.isempty()){ System.out.print( stack.pop() + " "); System.out.println(); in.close(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 16 / 76
18 Zastosowanie stosu III.../stos-java$ javac Reverse.java Stos.java.../stos-java$ java Reverse Podaj dane!= Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 17 / 76
19 Stos liczb typu double kod Java I import java.util.nosuchelementexception; import java.util.scanner; public class StosDouble { private Node top; private int n; private static class Node { private double item; private Node next; public StosDouble() { top = null; n = 0; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 18 / 76
20 Stos liczb typu double kod Java II public boolean isempty() { return top == null; public int size() { return n; public void push(double item) { Node oldtop = top; top = new Node(); top.item = item; top.next = oldtop; n++; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 19 / 76
21 Stos liczb typu double kod Java III public double pop() { if (isempty()) throw new NoSuchElementException("Stos pusty"); double item = top.item; top = top.next; n--; return item; public double peek() { if (isempty()) throw new NoSuchElementException("Stos pusty"); return top.item; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 20 / 76
22 Stos łańcuchów znaków kod Java I import java.util.nosuchelementexception; import java.util.scanner; public class StosStringow { private Node top; private int n; // klasa pomocnicza private static class Node { private String item; private Node next; public StosStringow() { top = null; n = 0; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 21 / 76
23 Stos łańcuchów znaków kod Java II public boolean isempty() { return top == null; public int size() { return n; public void push(string item) { Node oldtop = top; top = new Node(); top.item = item; top.next = oldtop; n++; public String pop() { Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 22 / 76
24 Stos łańcuchów znaków kod Java III if (isempty()) throw new NoSuchElementException( "Stos pusty"); String item = top.item; top = top.next; n--; return item; public String peek() { if (isempty()) throw new NoSuchElementException( "Stos pusty"); return top.item; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 23 / 76
25 Obliczanie wyrażeń arytmetycznych Definicja rekurencyjna Wyrażenie arytmetyczne jest albo liczba albo lewym nawiasem, po którym następuje wyrażenie arytmetyczne, po którym następuje operator, po którym następuje kolejne wyrażenie arytmetyczne, po którym następuje prawy nawias. Powyższa definicja dla uproszczenia dotyczy tylko w pełni nawiasowanych wyrażeń arytmetycznych, które precyzyjnie określaja, które operatory maja zastosowanie do których argumentów. Przykłady w pełni nawiasowanych wyrażeń arytmetycznych w postaci infiksowej ( ( ) / 2 ) ( ( 1 + sqrt ( 5.0 ) ) / 2.0 ) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 24 / 76
26 Algorytm Dijkstry z dwoma stosami do obliczania wyrażeń arytmetycznych w postaci infiksowej I Najprostszy algorytm przeznaczony do obliczania wyrażeń arytmetycznych w postaci infiksowej został opracowany przez E. W. Dijkstrę w latach 60. XX wieku i wykorzystuje dwa stosy: jeden dla operandów i jeden dla operatorów. Założenia pokazanego rozwiazania Dla uproszczenia obsługiwane sa tylko następujace operatory binarne: mnożenia ( ), dodawania(+), odejmowania( ), dzielenie(/), oraz potęgowanie(ˆ) i operator pierwiastka kwadratowego sqrt, który przyjmuje tylko jeden argument. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 25 / 76
27 Algorytm Dijkstry z dwoma stosami do obliczania wyrażeń arytmetycznych w postaci infiksowej II Idea algorytmu Wyrażenie składa się z nawiasów, operatorów i argumentów (liczb). Przechodzac od lewej do prawej i biorac te elementy pojedynczo, manipulujemy stosami według czterech możliwych przypadków, w następujacy sposób: Odłóż operandy (argumenty) na stos operandów. Odłóż operatory na stos operatorów. Ignoruj lewe nawiasy. Po napotkaniu prawego nawiasu, zdejmij operator, zdejmij wymagana liczbę argumentów i odłóż na stos operandów obliczony wynik. Po przetworzeniu końcowego prawego nawiasu na stosie operandów znajduje się tylko jedna wartość, która jest wartościa obliczanego wyrażenia. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 26 / 76
28 Algorytm Dijkstry z dwoma stosami - kod w Javie I // zalezy od klasy StosDouble.java i // od klasy StosStringow.java public class Dijkstra2StackAlgorithm { public static void main(string[] args) { StosStringow operator = new StosStringow(); StosDouble val = new StosDouble(); String str = "( ( 1 + sqrt ( 5.0 ) ) / 2.0 )"; String[] tokens = str.split(" "); for (String s : tokens) { if (s.equals("(")) ; else if (s.equals("+")) operator.push(s); else if (s.equals("-")) operator.push(s); else if (s.equals("*")) operator.push(s); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 27 / 76
29 Algorytm Dijkstry z dwoma stosami - kod w Javie II else if (s.equals("/")) operator.push(s); else if (s.equals("^")) operator.push(s); else if (s.equals("sqrt")) operator.push(s); else if (s.equals(")")) { String op = operator.pop(); double v = val.pop(); if (op.equals("+")) v = val.pop() + v; else if (op.equals("-")) v = val.pop() - v; else if (op.equals("*")) v = val.pop() * v; else if (op.equals("/")) v = val.pop() / v; else if (op.equals("^")) v = Math.pow(val. pop(), v); else if (op.equals("sqrt")) v=math.sqrt(v); val.push(v); else val.push(double.parsedouble(s)); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 28 / 76
30 Algorytm Dijkstry z dwoma stosami - kod w Javie III System.out.println(val.pop()); Przykłady wykonania $java Dijkstra2StackAlgorithm ( 1 + ( ( ) * ( 4 * 5 ) ) ) $java Dijkstra2StackAlgorithm ( ( 1 + sqrt ( 5.0 ) ) / 2.0 ) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 29 / 76
31 Notacja Prefiksowa lub Postfiksowa I Dwie najbardziej znane alternatywy do infiksowego zapisu wyrażenia arytmetycznego, to beznawiasowa notacja: prefiksowa operator jest pisany przed jego operandami. postfiksowa operator jest pisany po jego operandach. Prefiksowa reprezentacja wyrażenia arytmetycznego nazywana jest notację polska, gdyż opracował ja polski logik Jan Łukasiewicz w latach 20-tych XX wieku. Postfiksowa reprezentacja wyrażenia arytmetycznego nazywana jest odwrotna notacja polska(onp, ang. Reverse Polish Notation RPN), gdyż została opracowana przez australijskiego naukowca Charlesa Hamblina jako odwrócenie notacji polskiej na potrzeby zastosowań informatycznych. Zaleta odwrotnej notacji polskiej jest to, że priorytety operatora moga być reprezentowane przez kolejność ich występowania nie potrzeba nawiasów, aby reprezentować wyrażenie RPN Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 30 / 76
32 Notacja Prefiksowa lub Postfiksowa II Odwrotna notacja polska jest powszechnie stosowana w kompilatorach języków wysokiego poziomu do obliczania wartości wyrażeń arytmetycznych. Przykłady: Notacja infiksowa ONP ( ) ( 3 + ( 2 * 5 ) ) * + ( ( ( ( ) * 5 ) - 7 ) / 6 ) * 7-6 / ( 2 * ( ) ) * ( ( ) * ( ( 5-2 ) ^2 ) ) ^* ( 4 / ( ( 3-1) ^( 2 * 3 ) ) ) * ^/ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 31 / 76
33 Zamiana postaci infiksowej wyrażenia w pełni nawiasowanego do postaci ONP kod Java I import java.util.scanner; public class InfixToPostfix { public static void main(string[] args) { StosStringow stack = new StosStringow (); Scanner in = new Scanner(System.in); System.out.print("Podaj wyrazenie "); System.out.print("arytmetyczne zakonczone"); System.out.println(" q "); String s = in.next(); while (!s.equals("q")) { s = in.next(); if (s.equals("+")) stack.push(s); else if (s.equals("-")) stack.push(s); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 32 / 76
34 Zamiana postaci infiksowej wyrażenia w pełni nawiasowanego do postaci ONP kod Java II else if (s.equals("*")) stack.push(s); else if (s.equals("/")) stack.push(s); else if (s.equals(")")) System.out.print(stack.pop() + " "); else if (s.equals("(")) System.out.print(""); else System.out.print(s + " "); System.out.println(); in.close(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 33 / 76
35 Zamiana postaci infiksowej wyrażenia w pełni nawiasowanego do postaci ONP kod Java III $ java InfixToPostfix Podaj wyrażenie arytmetyczne zakonczone q ( ( x + ( 3 * z ) ) - ( ( 2 * 3 ) / k ) ) q x 3 z * * k / - q $ java InfixToPostfix Podaj wyrażenie arytmetyczne zakonczone q ( 2 + ( ( ) * ( 5 * 6 ) ) ) q * * + q Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 34 / 76
36 Postać infiks na postać postfix (ONP) I Badane wyrażenie: ((x + (3 z)) ((2 3)/k)) Wynikowe wyrażenie zapisane w ONP: x 3 z * * k / - Krok Wejście Stos Wyjście 1 ( 2 ( 3 x x ( * +* 8 z +* z 9 ) + * Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 35 / 76
37 Postać infiks na postać postfix (ONP) II ((x + (3 z)) ((2 3)/k)) 9 ) ( 12 ( * -* * 3 16 ) - * 17 / -/ 18 k -/ k 19 ) - / 20 ) - Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 36 / 76
38 Przekształcanie wyrażeń arytmetycznych na ONP 1 Analizuj wyrażenie po jednym elemencie (stałej, zmiennej lub ograniczniku). 2 Jeśli element jest stała lub nazwa zmiennej, przekaż go na wyjście. 3 Jeśli element jest operatorem, to: (a) jeśli priorytet badanego operatora jest wyższy od priorytetu operatora zajmujacego szczyt stosu lub jeśli stos jest pusty - dopisz go na stos; (b) jeśli na szczycie stosu znajduje się operator o wyższym lub równym priorytecie - odczytaj ze stosu i prześlij na wyjście wszystkie operatory o priorytecie wyższym badź równym, aż do wystapienia na szczycie stosu operatora o priorytecie niższym od priorytetu operatora nadchodzacego z wejścia; element badany dopisz na stos; 4 Jeśli element jest nawiasem, to: (a) jeśli trafiłeś na nawias otwierajacy, dopisz go na stos; (b) jeśli trafiłeś na nawias zamykajacy: zdejmij wszystkie operatory ze stosu i przekaż je na wyjście, aż do trafienia na nawias otwierajacy; nawiasów nie wypisuj na wyjście. 5 Jeśli badane wyrażenie nie zostało wyczerpane - wróć do punktu pierwszego; 6 Jeśli badane wyrażenie zostało wyczerpane, odczytaj wszystkie operatory ze stosu i przekaż je na wyjście automatu. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 37 / 76
39 Przekształcanie wyrażeń na ONP Badane wyrażenie: x + 3 z 2 3/k Krok Wejście Stos Wyjście 1 x x * +* 5 z +* z * * -* 9 3 -* 3 10 / -/ * 11 k -/ k 12 /- Wyrażenie zapisane w ONP: x3z +23 k/ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 38 / 76
40 Przekształcanie wyrażeń na ONP Badane wyrażenie: (15 3)ˆ(3 + 2) 6/3 Krok Wejście Stos Wyjście 1 ( ( 2 15 ( (- 4 3 (- 3 5 ) - 6 ^ ^ 7 ( ^( 8 3 ^( ^( ^( ) ^ + 12 * * ^ 13 6 * 6 14 / / * 15 3 / 3/ Wyrażenie zapisane w ONP: ˆ6 3/ Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 39 / 76
41 Algorytm obliczania wartości wyrażenia w ONP 1 Analizuj wyrażenie po jednym elemencie (stałej, zmiennej lub ograniczniku). 2 Jeśli element ten jest: 1 stała lub nazwa zmiennej dopisz go na stos; 2 operatorem zdejmij ze stosu właściwa dla danego operatora ilość argumentów, wykonaj na nich obliczenia, a uzyskany wynik dopisz na stos; 3 Jeśli badane wyrażenie nie zostało wyczerpane - wróć do punktu pierwszego; 4 Jeśli badane wyrażenie zostało wyczerpane - wartość znajdujaca się na stosie to wynik obliczeń. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 40 / 76
42 Obliczania wartości wyrażenia w ONP kod Java I import java.util.scanner; public class EvaluatePostfix { public static void main(string[] args) { StosD stack = new StosD(); Scanner in = new Scanner(System.in); System.out.println("Podaj wyrazenie arytmetyczne w ONP zakonczone q "); String s = in.next(); Double a, b; while (!s.equals("q")) { if (s.equals("+")) stack.push(stack.pop() + stack.pop()); else if (s.equals("-")) { a = stack.pop() ; b = stack.pop(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 41 / 76
43 Obliczania wartości wyrażenia w ONP kod Java II stack.push(b - a); else if (s.equals("*")) stack.push(stack.pop() * stack.pop()); else if (s.equals("/")) { a = stack.pop() ; b = stack.pop(); stack.push(b / a); else stack.push(double.parsedouble(s)); s = in.next(); System.out.println(stack.pop()); in.close(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 42 / 76
44 Obliczania wartości wyrażenia w ONP kod Java III $ java EvaluatePostfix Podaj wyrażenie arytmetyczne w ONP zakończone q 6 3 / * q 14.0 $ java EvaluatePostfix Podaj wyrażenie arytmetyczne w ONP zakończone q * q 27 $ java InfixToPostfix Podaj wyrażenie arytmetyczne zakonczone q ( ( 2 * ( 10-2 ) ) + ( 8 / 2 ) ) q * 8 2 / + q $ java EvaluatePostfix Podaj wyrażenie arytmetyczne w ONP zakończone q * 8 2 / + q 20.0 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 43 / 76
45 Algorytm obliczania wartości wyrażenia w ONP - przykład Badane wyrażenie: 6 3 / * Krok Wejście Operacja Stos / 6/ * 2*7 14 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 44 / 76
46 Stos jako typ generyczny I import java.util.nosuchelementexception; import java.util.scanner; public class Stack<Item> { private Node<Item> first; private int n; // prywatna klasa pomocnicza private static class Node<Item> { private Item item; private Node<Item> next; //Inicjalizacja pustego stosu. public Stack() { first = null; n = 0; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 45 / 76
47 Stos jako typ generyczny II // Zwraca true, gdy stos jest pusty public boolean isempty() { return first == null; //Zwraca liczbe elementow na stosie. public int size() { return n; // Dodaje element do stosu public void push(item item) { Node<Item> oldfirst = first; first = new Node<Item>(); first.item = item; first.next = oldfirst; n++; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 46 / 76
48 Stos jako typ generyczny III //Usuwa element ze stosu public Item pop() { if (isempty()) throw new NoSuchElementException("Stos pusty"); Item item = first.item; first = first.next; n--; return item; //Zwraca szczyt stosu, ale go nie usuwa public Item peek() { if (isempty()) throw new NoSuchElementException("Stos pusty"); return first.item; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 47 / 76
49 Stos jako typ generyczny IV public static void main(string[] args) { Scanner in = new Scanner(System.in); Stack<Integer> stacki = new Stack<Integer>(); System.out.println("Podaj liczbe"); Integer n = in.nextint(); Integer m=n; while (n > 0) { stacki.push(n % 2); n = n / 2; System.out.println("Reprezentacja binarna liczby : "+m); while (!stacki.isempty()){ System.out.print(stackI.pop()); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 48 / 76
50 Stos jako typ generyczny V System.out.println(); in.close(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 49 / 76
51 Stos - implementacja tablicowa, założenia Wykorzystuje tablicę A złożona z n elementów A[i], gdzie n jest maksymalna liczba spodziewanych elementów. Operacje polegaja na manipulacji indeksami tablicy. top[s] numer ostatniego elementu wstawionego do stosu. Stos składa się z elementów S[1],..., S[top[S]]. S[1] jest elementem na dnie stosu. S[top[S]] jest elementem na szczycie stosu. Jeżeli top[s] = 0, to stos jest pusty. Do sprawdzenia, czy stos jest pusty używana jest operacja Stack Empty. Próba zdjęcia elementu ze stosu sygnalizowana jest błędem niedomiaru. Jeżeli top[s] jest większe niż ustalony z góry rozmiar tablicy, to stos jest przepełniony. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 50 / 76
52 Stos - implementacja tablicowa Push(S, x) 1: if top[s] = length[s] then 2: error przepełnienie 3: end if 4: top[s] = top[s] + 1 5: S[top[S]] = x Kierunek top wstawiania Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 51 / 76
53 Stos - implementacja tablicowa Stack-Empty(S) 1: if top[s] = 0 then 2: return true 3: else 4: return false 5: end if Pop(S) 1: if Stack-Empty(S) then 2: error niedomiar 3: end if 4: top[s] = top[s] 1 5: return S[top[S] + 1] Kierunek top wstawiania Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 52 / 76
54 Stos - implementacja tablicowa I import java.util.nosuchelementexception; import java.util.scanner; import java.util.arrays; public class ArrayStack<Item> { private Item [] a; private int N; //Inicjalizacja pustego stosu. public ArrayStack(int size) { // a = new Item[size]; nie jest dozwolone // potrzebne jest rzutowanie /*generuje ostrzezenie: *Note: ArrayStack.java uses unchecked or unsafe operations. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 53 / 76
55 Stos - implementacja tablicowa II *Note: Recompile with -Xlint:unchecked for details. *ale mozna je zignorowac*/ a = (Item[]) new Object[size]; // Zwraca true, gdy stos jest pusty public boolean isempty() { return N == 0 ; //Zwraca liczbe elementow na stosie. public int size() { return N; // Dodaje element do stosu public void push(item item) { if (N >= a.length) throw new NoSuchElementException("Stos pelny"); a[n++] = item; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 54 / 76
56 Stos - implementacja tablicowa III //Usuwa element ze stosu public Item pop() { if (isempty()) throw new NoSuchElementException("Stos pusty"); Item item = a[--n]; // pozwala na zapobieganie wyciekom poamieci a[n] = null; return item; //Zwraca szczyt stosu, ale go nie usuwa public Item peek() { if (isempty()) throw new NoSuchElementException("Stos pusty"); return a[n]; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 55 / 76
57 Stos - implementacja tablicowa IV public static void main(string[] args) { ArrayStack<Integer> s = new ArrayStack<Integer >(32); int i=0; while (i < 32) { s.push(i); i++; while (!s.isempty()){ System.out.print(s.pop()+" "); System.out.println(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 56 / 76
58 Kolejka Kolejka FIFO (First In First Out) jest struktura liniowo uporzadkowanych danych, w której dołaczać nowe dane można jedynie na koniec, a usuwać z poczatku. Procedura usunięcia danych z końca kolejki jest taka sama, jak w przypadku stosu, z ta różnica, że usuwamy dane od poczatku a nie od końca. Działanie na kolejce jest intuicyjnie jasne, gdy skojarzymy ja z kolejka ludzi np. w sklepie. Każdy nowy klient staje na jej końcu, obsługa odbywa się jedynie na poczatku. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 57 / 76
59 Kolejka - operacje Niech K = (d 1, d 2,..., d n ) oznacza kolejkę, wtedy: Wstawianie elementu do kolejki: enqueuq(k, d) = (d 1, d 2,..., d n, d) Pobieranie elementu z kolejki: dequeuq(k ) = (d 2,..., d n ), o ile n > 1 Obsługiwanie pierwszego elementu z kolejki bez jego usuwania : first(k ) = d 1 Sprawdzanie niepustości kolejki: empty(k ) wtw., gdy n = 0 Poczatek kolejki d 1 d 2 d 3 d 4 d 5 Koniec kolejki Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 58 / 76
60 Kolejka - implementacja tablicowa n 1 elementowa kolejka jest impelementowana za pomoca n-elementowej tablicy Q, tj. Q = Q[0]...Q[n 1]. Atrybut head[q] wskazuje na głowę, czyli poczatek kolejki. Atrybut tail[q] wyznacza następna wolna pozycję, na która można wstawić nowy element. Poczatkowo head[q] = tail[q] = 0. Elementy kolejki znjduja się na pozycjach: head[q], head[q] + 1,..., tail[q] 1. Zakładmy, że tablica jest cykliczna, tzn. że pozycja o numerze 0 jest bezpośrednim następnikiem pozycji n 1. Jeżeli head[q] = tail[q], to kolejka jest pusta. Jeżeli head[q] = (tail[q] + 1) mod length(q), to kolejka jest pełna. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 59 / 76
61 Kolejka - implementacja tablicowa Enqueue(Q, x) 1: if head[q] = (tail[q] + 1) mod length(q) then 2: error Kolejka pełna 3: end if 4: Q[tail[Q]] = x 5: if tail[q] = length[q] then 6: tail[q] = 1 7: else 8: tail[q] = tail[q] + 1 9: end if tail head Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 60 / 76
62 Kolejka - implementacja tablicowa Dequeue(Q) 1: if head[q] = tail[q] then 2: error Kolejka pusta 3: end if 4: x = Q[head[Q]] 5: if head[q] = length[q] then 6: head[q] = 1 {Założenie o cykliczności 7: else 8: head[q] = head[q] + 1 9: end if 10: return x tail head Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 61 / 76
63 Kolejka - implementacja tablicowa I import java.util.nosuchelementexception; import java.util.scanner; import java.util.arrays; public class ArrayQueue<Item> { private Item [] a; private int N; // liczba elementow w kolejce private int head; // poczatek kolejki private int tail; // koniec kolejki //Inicjalizacja pustej kolejki. public ArrayQueue(int size) { a = (Item[]) new Object[size]; head = tail = 0; N = 0; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 62 / 76
64 Kolejka - implementacja tablicowa II // Zwraca true, gdy kolejka jest pusta public boolean isempty() { return N==0 ; //Zwraca liczbe elementow w kolejce. public int size() { return N; // Dodaje element do stosu public void enqueue(item item) { if (head == (tail+1)%a.length) throw new NoSuchElementException("Kelejka pelna"); a[tail++] = item; if (tail == a.length) tail=0; N++; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 63 / 76
65 Kolejka - implementacja tablicowa III //Usuwa element z kolejki public Item dequeue() { if (isempty()) throw new NoSuchElementException("Kolejka pusta"); Item item = a[head]; a[head++]=null; // kontrola wycieku pamieci if(head >= a.length) head=0; N--; return item; //Zwraca poczatek kolejki, ale go nie usuwa public Item peek() { if (isempty()) throw new NoSuchElementException("Kolejka pusta"); return a[head]; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 64 / 76
66 Kolejka - implementacja tablicowa IV public static void main(string[] args) { ArrayQueue<Integer> s = new ArrayQueue<Integer >(32); int i=0, j = 0; while (i < 31) s.enqueue(i++); System.out.println("Elementy obsluzone: "); while (j < 10){ System.out.print(s.dequeue() + " "); j++; System.out.println(); j = 0; while (j < 8) { s.enqueue(2*j); j++; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 65 / 76
67 Kolejka - implementacja tablicowa V System.out.println("Elementow w kolejce: " + s.size()); System.out.println("Elementy obsluzone: "); while (!s.isempty()){ System.out.print(s.dequeue() + " "); System.out.println(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 66 / 76
68 Kolejka - implementacja tablicowa VI $ java ArrayQueue Elementy obsluzone: Elementow w kolejce: 29 Elementy obsluzone: Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 67 / 76
69 Problem Józefa Flawiusza Nazwa nawiazuje do postaci Józefa Flawiusza, rzymsko-żydowskiego historyka żyjacego w I wieku n.e. Miał on zostać wraz z grupa powstańców otoczony w jaskini w trakcie oblężenia Jotopaty. Żołnierze woleli samobójstwo od pojmania, a że żydowskie prawo religijne zabrania odbierania sobie życia, zdecydowali się losować, kto zabije poprzednio wylosowanego, tak długo, dopóki nie pozostanie jeden, który będzie musiał się zabić sam. Gdy, zrzadzeniem losu, przy życiu pozostali Flawiusz wraz z jednym z towarzyszy, zdecydowali się oni poddać Rzymianom. Sformułowanie: Problem_Józefa_Flawiusza W ogólnej wersji problem brzmi następujaco: w okręgu ustawiamy n obiektów, następnie eliminujemy co k-ty obiekt, tak długo, aż zostanie tylko jeden. Należy wskazać obiekt, który pozostanie. Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 68 / 76
70 Rozwiazanie problemu Józefa Flawiusza I public class Josephus { public static void main(string[] args) { int n = Integer.parseInt(args[0]); int k = Integer.parseInt(args[1]); ArrayQueue<Integer> queue = new ArrayQueue< Integer>(n+1); for (int i = 0; i < n; i++) queue.enqueue(i); while (!queue.isempty()) { for (int i = 0; i < k-1; i++) queue.enqueue(queue.dequeue()); System.out.print(queue.dequeue() + " "); System.out.println(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 69 / 76
71 Rozwiazanie problemu Józefa Flawiusza II $ java Josephus Pierwszym, który przekształcił tę historię w problem matematyczny, miał być szesnastowieczny francuski matematyk Claude Gaspard Bachet de Méziriac. Według niego, ustawieni w okrag żołnierze mieli eliminować co trzeciego spośród siebie i że było ich 41. $ java Josephus Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 70 / 76
72 Kolejka dynamiczna implementacja generyczna I import java.util.nosuchelementexception; import java.util.scanner; public class Queue<Item> { private Node<Item> first; // glowa kolejki private Node<Item> last; // ogon kolejki private int n; // liczba elementow w kolejce // helper linked list class private static class Node<Item> { private Item item; private Node<Item> next; //Inicjalizacja pustej kolejki. public Queue() { first = null; last = null; n = 0; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 71 / 76
73 Kolejka dynamiczna implementacja generyczna II // Zwraca true, gdy kolejka jest pusta public boolean isempty() { return first == null; //Zwraca liczbe elementow w kolejce. public int size() { return n; //Zwraca poczatek kolejki, ale go nie usuwa public Item peek() { if (isempty()) throw new NoSuchElementException("Kolejka pusta"); return first.item; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 72 / 76
74 Kolejka dynamiczna implementacja generyczna III // Dodaje element do kolejki public void enqueue(item item) { Node<Item> oldlast = last; last = new Node<Item>(); last.item = item; last.next = null; if (isempty()) first = last; else oldlast.next = last; n++; //Usuwa element z kolejki public Item dequeue() { if (isempty()) throw new NoSuchElementException("Kolejka pusta"); Item item = first.item; first = first.next; Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 73 / 76
75 Kolejka dynamiczna implementacja generyczna IV n--; if (isempty()) last = null; return item; public static void main(string[] args) { Queue<String> queue = new Queue<String>(); System.out.println("Podaj ciag znakow zakonczony q"); Scanner in = new Scanner(System.in); String item = in.next(); while (!item.equals("q")) { if (!item.equals("-")) queue.enqueue( item); else if (!queue.isempty()) System.out.print(queue.dequeue() + " "); item = in.next(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 74 / 76
76 Kolejka dynamiczna implementacja generyczna V System.out.println("(" + queue.size() + " sa w kolejce)"); in.close(); $ java Queue Podaj ciąg znaków zakończony q ala ma kota - psa q ala (3 sa w kolejce) Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 75 / 76
77 Rozwiazanie problemu Józefa Flawiusza public class Josephus { public static void main(string[] args) { int n = Integer.parseInt(args[0]); int k = Integer.parseInt(args[1]); Queue<Integer> queue = new Queue<Integer>(); for (int i = 0; i < n; i++) queue.enqueue(i); while (!queue.isempty()) { for (int i = 0; i < k-1; i++) queue.enqueue(queue.dequeue()); System.out.print(queue.dequeue() + " "); System.out.println(); Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 6 76 / 76
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Podstawowe struktury danych dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Abstrakcyjne struktury danych dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 5 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Liniowe struktury danych. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 4 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Podstawowe struktury danych, cd. Wykład na podstawie ksiażki Roberta Sedgewicka i Kevina Wayne: Algorithms. Furth Edition. Princeton University dr hab. Bożena Woźna-Szcześniak
Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)
Algorytmy i struktury danych Wykład 3: Stosy, kolejki i listy Dr inż. Paweł Kasprowski pawel@kasprowski.pl Kolejki FIFO First In First Out (kolejka) LIFO Last In First Out (stos) Stos (stack) Dostęp jedynie
Struktury danych: stos, kolejka, lista, drzewo
Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja
Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)
Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013
Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:
Struktura danych Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych: rekord tablica lista stos kolejka drzewo i jego odmiany (np. drzewo
Struktura danych. Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych:
Struktura danych Sposób uporządkowania informacji w komputerze. Na strukturach danych operują algorytmy. Przykładowe struktury danych: rekord tablica lista stos kolejka drzewo i jego odmiany (np. drzewo
Algorytmy i Struktury Danych
Algorytmy i Struktury Danych Kopce Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 11 1 / 69 Plan wykładu
Metody getter https://www.python-course.eu/python3_object_oriented_programming.php 0_class http://interactivepython.org/runestone/static/pythonds/index.html https://www.cs.auckland.ac.nz/compsci105s1c/lectures/
E S - uniwersum struktury stosu
Temat: Struktura stosu i kolejki Struktura danych to system relacyjny r I r i i I U,, gdzie U to uniwersum systemu, a i i - zbiór relacji (operacji na strukturze danych). Uniwersum systemu to zbiór typów
Wykład 3. Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy
Wykład 3 Złożoność i realizowalność algorytmów Elementarne struktury danych: stosy, kolejki, listy Dynamiczne struktury danych Lista jest to liniowo uporządkowany zbiór elementów, z których dowolny element
2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych
2. Tablice Tablica to struktura danych przechowująca elementy jednego typu (jednorodna). Dostęp do poszczególnych elementów składowych jest możliwy za pomocą indeksów. Rozróżniamy następujące typy tablic:
Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303
Wykład 9 J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303 stos i operacje na stosie odwrotna notacja polska języki oparte na ONP przykłady programów J. Cichoń, P. Kobylański Wstęp
Podstawy informatyki 2. Podstawy informatyki 2. Wykład nr 2 ( ) Plan wykładu nr 2. Politechnika Białostocka. - Wydział Elektryczny
Wykład nr 2 2/6 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne Rok akademicki 2006/2007 Plan wykładu nr 2 Argumenty funkcji main Dynamiczne struktury danych
Notacja RPN. 28 kwietnia wyliczanie i transformacja wyrażeń. Opis został przygotowany przez: Bogdana Kreczmera.
1 wyliczanie i transformacja wyrażeń (wersja skrócona) Opis został przygotowany przez: Bogdana Kreczmera 28 kwietnia 2002 Strona 1 z 68 Zakład Podstaw Cybernetyki i Robotyki - trochę historii...............
Dynamiczne struktury danych
Dynamiczne struktury danych 391 Dynamiczne struktury danych Przez dynamiczne struktury danych rozumiemy proste i złożone struktury danych, którym pamięć jest przydzielana i zwalniana na żądanie w trakcie
Podstawy programowania obiektowego
Podstawy programowania obiektowego Technologie internetowe Wykład 5 Program wykładu Podejście obiektowe kontra strukturalne do tworzenie programu Pojęcie klasy i obiektu Składowe klasy: pola i metody Tworzenie
Odwrotna Notacja Polska
Odwrotna Notacja Polska Odwrotna Notacja Polska w skrócie ONP) jest sposobem zapisu wyrażeń arytmetycznych. Znak wykonywanej operacji umieszczany jest po operandach, argumentach tzw. zapis postfiksowy).
Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych
Algorytmy i Struktury Danych Wykład IV Sortowania cd. Elementarne struktury danych 1 Co dziś? Dolna granica sortowań Mediany i statystyki pozycyjne Warstwa implementacji Warstwa abstrakcji #tablice #listy
Podstawowe algorytmy i ich implementacje w C. Wykład 9
Wstęp do programowania 1 Podstawowe algorytmy i ich implementacje w C Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Element minimalny i maksymalny zbioru Element minimalny
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Liniowe struktury danych - Lista Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 5 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych.
Programowanie, algorytmy i struktury danych
1/44 Programowanie, algorytmy i struktury danych materiały do wykładu: http://cez.wipb.pl/moodle/ email: m.tabedzki@pb.edu.pl strona: http://aragorn.pb.bialystok.pl/~tabedzki/ Marek Tabędzki Wymagania
Wykład 4: Klasy i Metody
Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to
Dynamiczne struktury danych
Listy Zbiór dynamiczny Zbiór dynamiczny to zbiór wartości pochodzących z pewnego określonego uniwersum, którego zawartość zmienia się w trakcie działania programu. Elementy zbioru dynamicznego musimy co
Wykład 4. Klasa List Kolejki Stosy Słowniki
Wykład 4 Klasa List Kolejki Stosy Słowniki Klasa List Poważną niedogodnością tablic jako kolekcji danych jest fakt, że muszą one mieć stały rozmiar. Programista musi wiedzieć z góry ile miejsca powinien
Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika.
Temat: Liniowe uporzdkowane struktury danych: stos, kolejka. Specyfikacja, przykładowe implementacje i zastosowania. Struktura słownika. 1. Pojcie struktury danych Nieformalnie Struktura danych (ang. data
Metody Metody, parametry, zwracanie wartości
Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca
Abstrakcyjne struktury danych w praktyce
Abstrakcyjne struktury danych w praktyce Wykład 13 7.4 notacja polska A.Szepietowski Matematyka dyskretna rozdział.8 stos kompilacja rozłączna szablony funkcji Przypomnienie Drzewo binarne wyrażenia arytmetycznego
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Cel zajęć. Celem zajęć jest zapoznanie się ze sposobem działania popularnych kolekcji. Wprowadzenie teoretyczne. Rozważana w ramach niniejszych
Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016
Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa
Lista, Stos, Kolejka, Tablica Asocjacyjna
Lista, Stos, Kolejka, Tablica Asocjacyjna Listy Lista zbiór elementów tego samego typu może dynamicznie zmieniać rozmiar, pozwala na dostęp do poszczególnych elementów Typowo dwie implementacje: tablicowa,
Podstawy informatyki 2
Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia stacjonarne Rok akademicki 2006/2007 Wykład nr 2 (07.03.2007) Wykład nr 2 2/46 Plan wykładu nr 2 Argumenty funkcji main
Algorytmy i Struktury Danych
Algorytmy i Struktury Danych Drzewa poszukiwań binarnych dr hab. Bożena Woźna-Szcześniak Jan Długosz University, Poland Wykład 8 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych Wykład 8 1 /
Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych
Wykład 6_ Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych Abstrakcyjny typ danych Klient korzystający z abstrakcyjnego typu danych: o ma do dyspozycji jedynie
JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak
JAVA Wstęp do programowania w języku obiektowym Bibliografia: JAVA Szkoła programowania, D. Trajkowska Ćwiczenia praktyczne JAVA. Wydanie III,M. Lis Platforma JSE: Opracował: Andrzej Nowak JSE (Java Standard
Struktury danych (I): kolejka, stos itp.
Letnie Warsztaty Matematyczno-Informatyczne Algorytmy i struktury danych Struktury danych (I): kolejka, stos itp. Struktury danych (I): kolejka, stos itp. Struktura danych stanowi sposób uporządkowania
Programowanie i struktury danych 1 / 44
Programowanie i struktury danych 1 / 44 Lista dwukierunkowa Lista dwukierunkowa to liniowa struktura danych skªadaj ca si z ci gu elementów, z których ka»dy pami ta swojego nast pnika i poprzednika. Operacje
Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja
1 struktura, kolekcja Kiedy potrzebne Duża liczba danych takiego samego typu tablice a jak nieznana liczba elementów? dane zawierające wartości różnego typu (osoba: pesel, nazwisko, rok urodzenia, pracuje/niepracuje,
Programowanie obiektowe
Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04 Cel zajęć. Celem zajęć jest zapoznanie się ze sposobem działania popularnych. Wprowadzenie teoretyczne. Rozważana w ramach niniejszych zajęć
Programowanie w języku Java. Kolekcje
Programowanie w języku Java Kolekcje Definicja Kolekcja to obiekt, który grupuje elementy danych (inne obiekty) i pozwala traktować je jak jeden zestaw danych, umożliwiając jednocześnie wykonywanie na
TRANSLACJA I TRANSLATORY
TRANSLACJA I TRANSLATORY Języki programowania niskiego czy też wysokiego poziomu mają na zadanie przetworzyć ogół algorytmów w nich zapisanych na taką postać aby maszyna cyfrowa była w stanie je wykonać
Dynamiczny przydział pamięci (język C) Dynamiczne struktury danych. Sortowanie. Klasyfikacja algorytmów sortowania. Algorytmy sortowania
Rok akademicki 2010/2011, Wykład nr 4 2/50 Plan wykładu nr 4 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2010/2011
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Liniowe struktury danych - Lista uporzadkowana. Wartownicy. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 6 Bożena Woźna-Szcześniak (AJD)
Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)
Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Kontenery - - wektor vector - - lista list - - kolejka queue - - stos stack Kontener asocjacyjny map 2016-01-08 Bazy danych-1 W5 1 Kontenery W programowaniu
Stos LIFO Last In First Out
Stos LIFO Last In First Out Operacje: push - dodanie elementu na stos pop - usunięcie elementu ze stosu empty - sprawdzenie, czy stos jest pusty size - zwrócenie liczby elementów na stosie value (peek)
Odczyt danych z klawiatury Operatory w Javie
Odczyt danych z klawiatury Operatory w Javie Operatory W Javie występują następujące typy operatorów: Arytmetyczne. Inkrementacji/Dekrementacji Przypisania. Porównania. Bitowe. Logiczne. Pozostałe. Operacje
Wykład 6. Dynamiczne struktury danych
Wykład 6 Dynamiczne struktury danych 1 Plan wykładu Ø Wprowadzenie Ø Popularne dynamiczne struktury danych (ADT) Ø stosy, kolejki, listy opis abstrakcyjny Ø Listy liniowe Ø Implementacja tablicowa stosu
Kurs programowania. Wykład 9. Wojciech Macyna
Wykład 9 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista czy
Wybrane algorytmy tablicowe
Wybrane algorytmy tablicowe Algorytmy i struktury danych Wykład 2. Rok akademicki: 2009/2010 Sortowanie przez wybieranie for (int i = 0; i < liczby.length - 1; i++) k = i; for (int j = i; j < liczby.length;
Wstęp do programowania
Wstęp do programowania Stosy, kolejki, drzewa Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. VII Jesień 2013 1 / 25 Listy Lista jest uporządkowanym zbiorem elementów. W Pythonie
Programowanie obiektowe
Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych
Platformy Programistyczne Podstawy języka Java
Platformy Programistyczne Podstawy języka Java Agata Migalska 6 maja 2014 Plan wykładu 1 Sztuka wysławiania się w języku Java 2 Cały świat jest obiektem 3 Kolekcje 4 Zmienne i metody statyczne 5 Słowo
Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1
PODSTAWOWE ELEMENTY JĘZYKA JAVA WYRAŻENIA, OPERATORY, INSTRUKCJE 1. Operatory arytmetyczne +, -, /,*, % Przykład 1 programu z interfejsem konsolowym public class Lab2_1 // Tworzy generator liczb losowych,
Podstawowe struktury danych
Podstawowe struktury danych 1) Listy Lista to skończony ciąg elementów: q=[x 1, x 2,..., x n ]. Skrajne elementy x 1 i x n nazywamy końcami listy, a wielkość q = n długością (rozmiarem) listy. Szczególnym
Programowanie i struktury danych
Programowanie i struktury danych 1 / 19 Dynamiczne struktury danych Dynamiczną strukturą danych nazywamy taka strukturę danych, której rozmiar, a więc liczba przechowywanych w niej danych, może się dowolnie
Algorytmy z powrotami. Algorytm minimax
Algorytmy z powrotami. Algorytm minimax Algorytmy i struktury danych. Wykład 7. Rok akademicki: 2010/2011 Algorytm z powrotami rozwiązanie problemu budowane jest w kolejnych krokach, po stwierdzeniu (w
Ogólne wiadomości o grafach
Ogólne wiadomości o grafach Algorytmy i struktury danych Wykład 5. Rok akademicki: / Pojęcie grafu Graf zbiór wierzchołków połączonych za pomocą krawędzi. Podstawowe rodzaje grafów: grafy nieskierowane,
Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska
1 Przykład wyliczania wyrażeń arytmetycznych Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Copyright
Programowanie Proceduralne
Programowanie Proceduralne Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 1 Bożena Woźna-Szcześniak (AJD) Programowanie Proceduralne Wykład 1 1 / 59 Cel wykładów z programowania
Składnia rachunku predykatów pierwszego rzędu
Początek Gramatyka Kwantyfikatory Poprawność Logika obliczeniowa Instytut Informatyki Początek Gramatyka Kwantyfikatory Poprawność Plan wykładu 1 Na (dobry) początek Zrozumieć słowa Oswoić znaki 2 Gramatyka
Programowanie - instrukcje sterujące
Instytut Informatyki Uniwersytetu Śląskiego Laborki środowisko NetBeans, tworzenie nowego projektu; okno projekty; główne okno programu; package - budowanie paczek z klas; public class JavaApplication
Podstawy i języki programowania
Podstawy i języki programowania Laboratorium 2 - wprowadzenie do zmiennych mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 23 października 2017 1 / 26 mgr inż. Krzysztof Szwarc Podstawy i
Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018
Informatyka I Klasy i obiekty. Podstawy programowania obiektowego dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Plan wykładu Pojęcie klasy Deklaracja klasy Pola i metody klasy
dr inż. Paweł Myszkowski Wykład nr 11 ( )
dr inż. Paweł Myszkowski Politechnika Białostocka Wydział Elektryczny Elektronika i Telekomunikacja, semestr II, studia stacjonarne I stopnia Rok akademicki 2015/2016 Wykład nr 11 (11.05.2016) Plan prezentacji:
INFORMATYKA. Podstawy programowania w języku C. (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra
INFORMATYKA Podstawy programowania w języku C (Wykład) Copyright (C) 2005 by Sergiusz Sienkowski IME Zielona Góra INFORMATYKA Temat: Struktury dynamiczne Wykład 7 Struktury dynamiczne lista jednokierunkowa,
Kompilacja javac prog.java powoduje wyprodukowanie kilku plików o rozszerzeniu.class, m.in. Main.class wykonanie: java Main
Język obiektowy Wykład 13 Programowanie obiektowe z lotu ptaka, str 1 James Gosling, Mike Sheridan, Patrick Naughton Sun Microsystems 1995(20latmłodszyodC) C jest językiem proceduralnym Java jest językiem
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]
1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie
Wykład 5: Więcej o Klasach i Metodach
Wykład 5: Więcej o Klasach i Metodach Przeciążanie Metod Klasa posiada dwie lub więcej metod o tej samej nazwie ale różnych deklaracjach parametrów. Java używa liczby i typów argumentów by ustalić którą
Listy, kolejki, stosy
Listy, kolejki, stosy abc Lista O Struktura danych składa się z węzłów, gdzie mamy informacje (dane) i wskaźniki do następnych węzłów. Zajmuje tyle miejsca w pamięci ile mamy węzłów O Gdzie można wykorzystać:
Marcin Matusiak i Łukasz Stasiak
Marcin Matusiak i Łukasz Stasiak Lista jest sekwencyjną strukturą danych, która składa się z ciągu elementów tego samego typu. Dostęp do elementów listy jest sekwencyjny tzn. z danego elementu listy możemy
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Grafy dr hab. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych. Wykład 9 1 / 20
Informatyka 2. Wykład nr 5 ( ) Plan wykładu nr 5. Politechnika Białostocka. - Wydział Elektryczny. Odwrotna notacja polska.
Rok akademicki 008/009, Wykład nr 5 /6 Plan wykładu nr 5 Informatyka Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia (zaoczne) Rok akademicki
Informatyka 2. Wykład nr 5 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc
Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia (zaoczne) Rok akademicki 2008/2009 Wykład nr 5 (22.11.2008) Rok akademicki 2008/2009,
Podstawy Programowania C++
Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:
JAVA W SUPER EXPRESOWEJ PIGUŁCE
JAVA W SUPER EXPRESOWEJ PIGUŁCE Obiekt Obiekty programowe to zbiór własności i zachowań (zmiennych i metod). Podobnie jak w świecie rzeczywistym obiekty posiadają swój stan i zachowanie. Komunikat Wszystkie
Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17
Wskaźniki Przemysław Gawroński D-10, p. 234 Wykład 2 8 marca 2019 (Wykład 2) Wskaźniki 8 marca 2019 1 / 17 Outline 1 Wskaźniki 2 Tablice a wskaźniki 3 Dynamiczna alokacja pamięci (Wykład 2) Wskaźniki 8
Języki i metody programowania Java Lab1 https://docs.oracle.com/javase/tutorial/ Zofia Kruczkiewicz
Języki i metody programowania Java Lab1 https://docs.oracle.com/javase/tutorial/ Zofia Kruczkiewicz Zadanie 1. Wykonanie projektu Java SE w środowisku Netbeans- File/New Project W formularzu New Project
ZASADY PROGRAMOWANIA KOMPUTERÓW
POLITECHNIKA WARSZAWSKA Instytut Automatyki i i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW Język Język programowania: C/C++ Środowisko programistyczne: C++Builder 6 Wykład 9.. Wskaźniki i i zmienne dynamiczne.
Pascal - wprowadzenie
Pascal - wprowadzenie Ogólne informacje o specyfice języka i budowaniu programów Filip Jarmuszczak kl. III c Historia Pascal dawniej jeden z najpopularniejszych języków programowania, uniwersalny, wysokiego
Struktury. Przykład W8_1
Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla
Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak
Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego
Java Collections Framework
Java Collections Framework Co to jest Java Collections Framework JCF Zunifikowana architektura do reprezentacji i manipulacji kolekcjami danych. Składa się z: Interfejsów Definuje abstrakcyjne typy możliwych
KOLEJKA (QUEUE) (lista fifo first in, first out)
KOLEJKA (QUEUE) (lista fifo first in, first out) Kolejki są listami, których elementy można wstawiać z jednego końca (rear-tył) a usuwać z drugiego (front - przód). Operacje: 1. MAKENULL(Q) czyni kolejkę
Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki
Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu
Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).
Zarządzanie pamięcią Pamięć: stos i sterta Statyczny i dynamiczny przydział pamięci Funkcje ANSI C do zarządzania pamięcią Przykłady: Dynamiczna tablica jednowymiarowa Dynamiczna tablica dwuwymiarowa 154
Języki i metody programowania Java INF302W Wykład 2 (część 1)
Języki i metody programowania Java INF302W Wykład 2 (część 1) Autor Dr inż. Zofia Kruczkiewicz Autor: Zofia Kruczkiewicz, Języki i metody programowania Java, wykład 2, część 1 1 Struktura wykładu 1. Identyfikacja
2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne
Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie
Wykład 8: Obsługa Wyjątków
Wykład 8: Obsługa Wyjątków Wyjątki Wyjątek to sytuacja nienormalna, która pojawia się w trakcie wykonania programu. W językach bez obsługi wyjątków, błędy są wykrywane i obsługiwane ręcznie, zwykle przez
Struktury Danych i Złożoność Obliczeniowa
Struktury Danych i Złożoność Obliczeniowa Zajęcia 1 Podstawowe struktury danych Tablica Najprostsza metoda przechowywania serii danych, zalety: prostota, wady: musimy wiedzieć, ile elementów chcemy przechowywać
Język ludzki kod maszynowy
Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza
JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.
JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod
Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna
Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02
METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się
Tablice i łańcuchy znakowe jako obiektowe typy danych. dr Jarosław Skaruz
Tablice i łańcuchy znakowe jako obiektowe typy danych dr Jarosław Skaruz http://jareks.ii.uph.edu.pl jaroslaw@skaruz.com O czym będzie? Klasy String, StringBuffer, StringBuilder Tablice jednowymiarowe
C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów
Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów
Wprowadzenie do języka Java
WSNHiD, Programowanie 2 Lab. 1 [ część 1 ] Wprowadzenie do języka Java Wprowadzenie Język programowania Java jest obiektowym językiem programowania. Powstał w 1995 i od tej pory był intensywnie rozwijany.
Polimorfizm, metody wirtualne i klasy abstrakcyjne
Programowanie obiektowe Polimorfizm, metody wirtualne i klasy abstrakcyjne Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski pwr.wroc.pl Polimorfizm,