Strategie optymalizacji
|
|
- Sylwester Majewski
- 7 lat temu
- Przeglądów:
Transkrypt
1 Strategie optymalizacji Algorytm siłowy, algorytm brute force (z ang. "brutalna siła") opiera się na kolejnym sprawdzeniu wszystkich możliwych kombinacji rozwiązania problemu. Jest to zwykle nieoptymalna czasowo, ale najprostsza pod względem implementacji i najbardziej skuteczna metoda postępowania. Algorytm zachłanny (ang. greedy algorithm) w każdym kolejnym kroku dokonuje wyboru zachłannego, tj. optymalnego w danym momencie. Nie dla każdego problemu ten algorytm odnajduje optymalny wynik. Programowanie dynamiczne opiera się na podziale rozwiązywanego problemu na podproblemy (niekoniecznie rozłączne jak w metodzie dziel-i-rządź). Wyznacza się funkcję celu dla całego problemu na podstawie optymalnych wartości funkcji celu dla podproblemów. Rozwiązania kolejnych podproblemów prowadzi się poczynając od najmniejszego podproblemu i zapisując optymalne wartości w tablicy. Ostateczne rozwiązanie jest zawsze optymalne. Zadanie dla Ciebie: Niedawno (rok 2009) producent zupek błyskawicznych, firma Amino, ogłosiła loterię. Na opakowaniach zupek umieszczano liczby naturalne. Aby coś wygrać należało zebrać takie opakowania, z których liczby po zsumowaniu dawały wartości z zakresu od 1000 do podzielne przez 1000, a więc 1000, 2000, 3000,, Wykorzystując dane z pliku: amino.txt (przykładowy zestaw wartości liczbowych zebranych z opakowań zupek Amino) sprawdź czy udałoby się coś wygrać Tu zajmę się problemem pakowanie plecaka ( ang. knapsack problem) i rozwiążę go na trzy sposoby, wykorzystując powyższe trzy algorytmy. Mam zbiór elementów, każdy element o określonej wadze i cenie. Należy wybrać z nich taki zestaw, który będzie mieć najwyższą wartość (sumę cen) i nie przekroczy dopuszczalnej wagi plecaka. Wczytuję dane z pliku plecak.txt: dopuszczalną wagę plecaka, oraz dane elementów (wagę i cenę) do wektora. vector to klasa która odpowiada tablicy 1-wymiarowej o zmiennym rozmiarze. Elementy dołącza się na koniec vector a metodą push_back(). Odwołania do elementów - za pomocą indeksów, jak w zwykłej tablicy. Potrzebne jest #include <vector> Rozwiązanie brute-force skuteczne ale czasochłonne Dla n elementów mam m=2 n możliwych zestawów. Użyję reprezentacji binarnej kolejnych liczb i z zakresu od 0 do m-1, na przykład dla i=20 binarnie = 10100, oznacza: weź pierwszy i trzeci element. Rozważę wszystkie możliwe kombinacje elementów. Wybiorę z nich te kombinacje, których waga nie przekracza dopuszczalnej wagi i poszukam wśród nich maksymalnej wartości sumy cen. struct element { int waga, cena; ; int main() { element e; int W; vector <element> E; // pojedynczy element // dopuszczalna waga plecaka // wektor elementów, wymaga #include <vector>
2 ifstream we("plecak.txt"); // czytanie danych int x; we>>w; cout<<"dopuszczalna waga="<<w<<endl; while (we>>x){ // dopóki jest jakaś dana na wejsciu... e.waga=x; we>>e.cena; cout<<" waga="<<e.waga<<" cena="<<e.cena<<endl; E.push_back(e); // dodanie nowego elementu //na koniec wektora E we.close(); int n=e.size(); // n = liczba elementów wektora E // n elementów daje m=2 n możliwości zestawów elementów int m=1; for (int i=1; i<=n; i++) m=m*2; Reprezentacja binarna liczby dziesiętnej d wyrażona przy pomocy n cyfr binarnych string bin(int d, int n) { string s=""; while (d>0) { if (d%2==0) s="0"+s; else s="1"+s; d=d/2; while (s.length()<n) s="0"+s; return s; cout<<n<<" elementow daje "<<m<<" kombinacji upakowania\n"; cout<<"wybiorę z nich tylko te kombinacje ktore maja wage <= "<<W<<"\n\n"; int cmaxi; // max cena int wmaxi=0; // waga przy max cenie int mmaxi=0; // kombinacja elementów m która zapewnia max cenę for (int i=0; i<m; i++) { // przegląd wszystkich kombinacji elementów string b=bin(i,n); int w=0, c=0; // waga i cena bieżącej kombinacji for (int j=0; j<n; j++) { if (b[j]=='1'){ // jeżeli w reprezentacji binarnej na j-tym miejscy jest 1 to weź j-ty element w=w+e[j].waga; c=c+e[j].cena; if (w<=w) // jeżeli waga tej kombinacji nie przekracza dopuszczalnej... { cout<<bin(i,n)<<" waga="<<w<<" wartosc="<<c<<endl; if (c>cmaxi) // jeśli cena jest większa od bieżącego maksimum {cmaxi=c; wmaxi=w; mmaxi=i; cout<<"\nnajkorzystniej:\n"; cout<<bin(mmaxi,n)<<" waga="<<wmaxi<<" wartosc="<<cmaxi<<endl; system("pause"); return EXIT_SUCCESS; Rozwiązanie brute-force ma sens tylko w przypadku niewielkiej liczby elementów, inaczej czas działania algorytmu wydłuża się tak bardzo, że nie ma szans doczekać końca obliczeń.
3 Rozwiązanie zachłanne nie zawsze daje optymalny wynik Najpierw sortuję elementy według ceny w porządku malejącym. Jeszcze lepszym pomysłem byłoby posortowanie według ciężaru jednostkowego (stosunku masy do wagi) każdego elementu. Następnie biorę elementy po kolei elementy począwszy od najcenniejszego, sprawdzam czy zmieści się wagowo w plecaku i jeśli tak to go wrzucam. Powtarzam do wyczerpania elementów lub plecaka. Tu akurat wyniki są identyczne z rozwiązaniem siłowym, ale często w przypadku problemu dyskretnego (gdy elementów nie można dzielić na mniejsze części) rozwiązanie zachłanne nie daje optymalnego wyniku. struct element { int waga, cena; ; int main() { element e; vector <element> E; int W; // pojedynczy element // wektor elementów, wymaga #include <vector> // dopuszczalna waga plecaka ifstream we("plecak.txt"); // czytanie danych we>>w; cout<<"dopuszczalna waga="<<w<<endl; cout<<"\nelementy:\n"; int x; while (we>>x) { e.waga=x; we>>e.cena; cout<<"waga="<<e.waga<<" cena="<<e.cena<<endl; E.push_back(e); // dodanie elementu do wektora we.close(); int n=e.size(); // liczba elementów wektora E Sortowanie wektora D, algorytm InsertionSort : Dopóki j>0 oraz cena poprzedniego [j-1] jest mniejsza od bieżącego[j] przestawiaj elementy: [j] oraz [j-1] Wektor przykazywany jest do funkcji przez referencję void sort( vector <element> &D, int n) { for (int i=1; i<n; i++) { int j=i; while (j>0 && (D[j-1].cena<D[j].cena)) { swap(d[j-1],d[j]); j--; sort(e,n); // sortuj wektor E, n-elementowy, malejąco według ceny cout<<"\npo sortowaniu wedlug ceny: \n"; for (int i=0; i<n; i++) cout<<" waga="<<e[i].waga<<" cena="<<e[i].cena<<endl; int w=0; // bieżąca waga plecaka int c=0; // bieżąca wartość plecaka cout<<"pusty plecak\n"; int i=0; // indeks elementu przymierzanego do plecaka while ( w<w && i<n ){ if (w+e[i].waga <=W) { w=w+e[i].waga; c=c+e[i].cena; cout<<"dorzucam "<<E[i].waga<<" kg warte "<<E[i].cena<<" zl, "; cout<<"razem waga="<<w<<", cena="<<c<<endl; i++; cout<<"koniec pakowania\n\n"; system("pause"); return EXIT_SUCCESS;
4 Rozwiązanie metodą programowania dynamicznego daje zawsze optymalny wynik {w 1,, w n - wagi elementów {c 1,, c n ceny (wartości) elementów W - maksymana pojemność plecaka Rozpatruję wszystkie moŝliwe wartosci wagi plecaka od 0 do W. Kolejno próbuję umieszczać elementy, poczynając od pierwszego elementu i najmniejszej moŝliwej pojemności plecaka. Patrzę co się zmieści i co będzie więcej warte. A(i,j) - wartość optymalnie wypełnionego plecaka o wadze j przedmiotami, których indeksy mieszczą się między 1 a i. A(0,j) = 0 A(i,j) = max { cj + S(i - wj ) : wj <= i A(n,W) będzie rozwiązaniem problemu największą moŝliwą wartością plecaka. for(j = 0; j <= W; j++) W[j] = 0; for(i = 1; i< n; i++) { for(j = 0; j <= W; j++) { // zerowanie górnego wiersza tabeli // (wartość plecaka o pojemności j gdy nie zawiera Ŝadnego elementu) // próbujemy dorzucić i-ty element do plecaka o pojemnosci j // dla wszystkich moŝliwych pojemności plecaka if( w[i] <= j ) // jezeli waga i-tego elementu nie przekracza j { // wybierz wiekszą wartość z dwóch moŝliwości: // dotychczasowej wartości plecaka bez i-tego elementu (z poprz. wiersza), lub // (wartość plecaka z poprz. wiersza lŝejszego o w i ) + wartość c i i-tego elem. A[i,j] = max( A[i-1,j], A[i-1,j - w[i]] + c[i]); 10 zł z poprzedniego wiersza tej samej kolumny czy wartość z poprzedniego wiersza 2 kolumny w lewo(o 2 kg mniej ) 10 zł + cena elementu z tego wiersza 1 zł = 11 zł? oczywiście 11 zł wszystkie możliwe wartości wagi plecaka od 0 do 15 kg i\j waga cena chleb tu się 0 9-kilowy 0 0 chleb 0 nie 0 zmieści cola tu się 0 nie zmieści 0 0 ani 0 chleb 0 ani 0 cola sól tu 1 się zmieści 1 1 sól mąka ryż zł z poprzedniego wiersza tej samej kolumny czy wartość z poprzedniego wiersza 5 kolumn w lewo(o 5 kg mniej ) 10 zł + cena elementu z tego wiersza 2 zł = 12 zł? oczywiście 12 zł wynik Tabela A ij przechowuje jedynie łączną wartość optymalnie spakowanego plecaka. Aby móc pokazać zestaw rzeczy składajacych sie na optymalnie spakowany plecak, najwygodniej jest zbudować drugą tabelę: Bij, która przechowywać będzie informację o elementach pakowanych do plecaka: Bij=1 jeśli element i został zapakowany do plecaka o pojemności j, lub Bij=0 jeśli nie został zapakowany.
5 struct element { int waga,cena; ; int main( ) { vector <element> E; element e = {0,0; // dodaję na początku wektora element zerowy pusty E.push_back(e); // aby ułatwić zapis indeksowania elementów: od 1 do n int W; // dopuszczalna waga plecaka int n=0; // liczba elementów ifstream we("plecak.txt"); // czytanie danych we>>w; cout<<"dopuszczalna waga="<<w<<endl; while (we>>e.waga) { we>>e.cena; E.push_back(e); n++; cout<<"element nr "<<n<<" waga="<<e.waga<<" cena="<<e.cena<<endl; we.close(); // przygotowanie do pakowania... vector < vector<int> > A, B; // wektory dwuwymiarowe [i][j] o rozmiarach i=<0,n>, j=<0,w> // A[i][j] - optymalne wartości plecaka o wadze j z wyborem elementow od 1 do i // B[i][j] - informacja czy i-element jest "wzięty" do j-plecaka: 1 czy odrzucony: 0 for (int i=0; i<=n; i++) { // wypełniam wstępnie wektory A i B elementami o wartościach 0 A.push_back(vector<int>()); B.push_back(vector<int>()); for (int j=0; j<=w; j++) { A[i].push_back(0); B[i].push_back(0); cout<<"\npakujemy...\n"; // pakowanie for (int i=1; i<=n; i++) { for (int j=1;j<=w; j++) { if (E[i].waga>j) A[i][j]=A[i-1][j]; // jezeli waga elementu przekracza pojemność plecaka // to pozostaw plecak nie zmieniony (przepisz wartość z poprzedniego wiersza) else { int jp=j-e[i].waga; // waga j pomniejszona o wagę i-tego elementu int ap=a[i-1][jp]+e[i].cena; // wartość plecaka o tej_pomniejszonej wadze + cena i_tego elementu if (ap>a[i-1][j]) { // jeŝeli warto dołoŝyc ten element... A[i][j]=ap; // to umieść w tablicy Aij nową większą wartość plecaka B[i][j]=1; // i odnotuj to w tabeli "wziętych" elementów else { A[i][j]=A[i-1][j]; // pozostaw plecak niezmieniony (przepisz wartość z poprzedniego wiersza) B[i][j]=0; // i nie notuj elementu w tabeli "wziętych" elementów for (int j=0;j<=w; j++) { cout.width(3); cout<<a[i][j]<<" "; cout<<"\nnajwieksza wartosc plecaka = "<<A[n][W]<<endl<<endl; // tu jest rozwiązanie for (int i=1; i<=n; i++) { for (int j=0;j<=w; j++) cout<<b[i][j]<<" "; // wyświetlam jeszcze zawartość wektora B
6 cout<<"\nnalezy zapakowac elementy o numerach: "; int k=w; // plecak ma wagę W // lista zapakowanych elementów for (int i=n; i>0; i--) { // zaczynam od n-tego wiersza i W-tej kolumny wektora B ij if (B[i][k]==1) { // jeśli jest 1 cout<<i<<" "; // to znaczy Ŝe i-ty element jest zapakowany k=k-e[i].waga; // zmniejszam wagę plecaka o wagę tego elementu if (k<1) {break; // nastepnego elementu szukam w wierszu i-1 i kolumnie k system("pause"); return EXIT_SUCCESS; Inne problemy, które można próbować rozwiązać powyższymi metodami: Problem kasjera/bankomatu wypłacenie określonej kwoty pieniędzy: Dysponujesz nominałami: 1zł, 2 zł, 5 zł, 10 zł, 20 zł, 50 zł, każdy nominał w nieograniczonej ilości. Napisz program który pobiera z klawiatury wartość żądanej kwoty, a następnie wypłaca ją przy pomocy minimalnej liczby monet/banknotów. Załadunek (z arkusza maturalnego) Na rampie magazynu znajdują się paczki o różnych masach. Ładowanie paczek na naczepę tir-a musi być prowadzone w sposób następujący: z rampy do samochodu wkładane są paczki od najcięższej do najlżejszej; załadunek naczepy zostaje przerwany, gdy dołożenie kolejnej paczki spowodowałoby, że średnia arytmetyczna masy załadowanych na naczepę paczek będzie mniejsza od granicznej wartości D lub została już osiągnięta maksymalna liczba paczek M, które zmieszczą się na naczepie, lub załadowano wszystkie paczki. Napisz program który pobiera dane: D: wartość graniczna dodatnia liczba całkowita, M: maksymalna liczba paczek, które zmieszczą się na naczepie dodatnia liczba całkowita, N: liczba paczek wystawionych na rampę dodatnia liczba całkowita, We[1...N]: tablica zawierająca masy paczek dodatnie, różne liczby całkowite. zaś oblicza i zwraca liczbę paczek załadowanych na naczepę.
Temat: Algorytmy zachłanne
Temat: Algorytmy zachłanne Algorytm zachłanny ( ang. greedy algorithm) wykonuje zawsze działanie, które wydaje się w danej chwili najkorzystniejsze. Wybiera zatem lokalnie optymalną możliwość w nadziei,
Wykład 3. Metoda dziel i zwyciężaj
Wykład 3 Metoda dziel i zwyciężaj 1 Wprowadzenie Technika konstrukcji algorytmów dziel i zwyciężaj. przykładowe problemy: Wypełnianie planszy Poszukiwanie (binarne) Sortowanie (sortowanie przez łączenie
Algorytm selekcji Hoare a. Łukasz Miemus
Algorytm selekcji Hoare a Łukasz Miemus 1 lutego 2006 Rozdział 1 O algorytmie 1.1 Problem Mamy tablicę A[N] różnych elementów i zmienną int K, takie że 1 K N. Oczekiwane rozwiązanie to określenie K-tego
Algorytmy i struktury danych.
Algorytmy i struktury danych. Wykład 4 Krzysztof M. Ocetkiewicz Krzysztof.Ocetkiewicz@eti.pg.gda.pl Katedra Algorytmów i Modelowania Systemów, WETI, PG Problem plecakowy mamy plecak o określonej pojemności
Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott
Struktury danych i złożoność obliczeniowa Wykład 2. Prof. dr hab. inż. Jan Magott Metody konstrukcji algorytmów: Siłowa (ang. brute force), Dziel i zwyciężaj (ang. divide-and-conquer), Zachłanna (ang.
Programowanie dynamiczne
Programowanie dynamiczne Patryk Żywica 5 maja 2008 1 Spis treści 1 Problem wydawania reszty 3 1.1 Sformułowanie problemu...................... 3 1.2 Algorytm.............................. 3 1.2.1 Prosty
Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:
5 Tablice Tablica jest zestawem obiektów (zmiennych) tego samego typu, do których można się odwołać za pomocą wspólnej nazwy. Obiekty składowe tablicy noszą nazwę elementów tablicy. Dostęp do nich jest
TEORETYCZNE PODSTAWY INFORMATYKI
1 TEORETYCZNE PODSTAWY INFORMATYKI WFAiS UJ, Informatyka Stosowana I rok studiów, I stopień Wykład 2 2 Problemy algorytmiczne Klasy problemów algorytmicznych Liczby Fibonacciego Przeszukiwanie tablic Największy
Programowanie i struktury danych
Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne
Algorytmy i struktury danych. Co dziś? Tytułem przypomnienia metoda dziel i zwyciężaj. Wykład VIII Elementarne techniki algorytmiczne
Algorytmy i struktury danych Wykład VIII Elementarne techniki algorytmiczne Co dziś? Algorytmy zachłanne (greedyalgorithms) 2 Tytułem przypomnienia metoda dziel i zwyciężaj. Problem można podzielić na
Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119
Tablice Tablica to struktura danych, która może przechowywać wiele wartości tego samego typu. Na przykład tablica może zawierać: 10 wartości typu int opisujących liczbę studentów przyjętych na kierunek
Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy
1 Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com
Strategia "dziel i zwyciężaj"
Strategia "dziel i zwyciężaj" W tej metodzie problem dzielony jest na kilka mniejszych podproblemów podobnych do początkowego problemu. Problemy te rozwiązywane są rekurencyjnie, a następnie rozwiązania
Zmienne i struktury dynamiczne
Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest
Część 4 życie programu
1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 9. Karol Tarnowski A-1 p.
Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy Wykład 9 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Zasada dziel i zwyciężaj Przykłady znajdowanie
EGZAMIN MATURALNY Z INFORMATYKI
Miejsce na naklejkę z kodem szkoły dysleksja MIN-R1A1P-073 EGZAMIN MATURALNY Z INFORMATYKI POZIOM ROZSZERZONY CZĘŚĆ I Czas pracy 90 minut CZERWIEC ROK 2007 Instrukcja dla zdającego 1. Sprawdź, czy arkusz
INFORMATYKA POZIOM ROZSZERZONY CZĘŚĆ I PRZYKŁADOWY ZESTAW ZADAŃ. Czas pracy 90 minut
Miejsce na naklejkę z kodem szkoły OKE JAWORZNO CKE INFORMATYKA POZIOM ROZSZERZONY MARZEC ROK 2008 CZĘŚĆ I PRZYKŁADOWY ZESTAW ZADAŃ Czas pracy 90 minut Instrukcja dla zdającego 1. Sprawdź, czy arkusz egzaminacyjny
1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.
Zadania do wykonania Rozwiązując poniższe zadania użyj pętlę for. 1. apisz program, który przesuwa w prawo o dwie pozycje zawartość tablicy 10-cio elementowej liczb całkowitych tzn. element t[i] dla i=2,..,9
Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.
Przygotować program tworzący tablicę dwuwymiarową zawierającą zestawy 10 2, 10 4, 10 6 liczb losowych zmiennoprzecinkowych. Korzystając z funkcji bibliotecznych uporządkować zawartość każdego (a) wiersza
Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady
Pętle i tablice. Spotkanie 3 Dr inż. Dariusz JĘDRZEJCZYK Pętle: for, while, do while Tablice Przykłady 11/26/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Pętla w największym uproszczeniu służy
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
I. Podstawy języka C powtórka
I. Podstawy języka C powtórka Zadanie 1. Utwórz zmienne a = 730 (typu int), b = 106 (typu long long), c = 123.45 (typu double) Wypisz następujące komunikaty: Dane sa liczby: a = 730, b = 106 i c = 123.45.
Analiza algorytmów zadania podstawowe
Analiza algorytmów zadania podstawowe Zadanie 1 Zliczanie Zliczaj(n) 1 r 0 2 for i 1 to n 1 3 do for j i + 1 to n 4 do for k 1 to j 5 do r r + 1 6 return r 0 Jaka wartość zostanie zwrócona przez powyższą
Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char
Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od
8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.
8. Wektory Przykłady 8.1. Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. Uwaga! Kod poniżej. To zadanie można rozwiązać przy użyciu wiedzy
WHILE (wyrażenie) instrukcja;
INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while
MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata
MACIERZE Sobiesiak Łukasz Wilczyńska Małgorzata Podstawowe pojęcia dotyczące macierzy Nie bez przyczyny zaczynamy od pojęcia macierzy, które jest niezwykle przydatne we wszystkich zastosowaniach, obliczeniach
Matematyka dyskretna - wykład - część Podstawowe algorytmy kombinatoryczne
A. Permutacja losowa Matematyka dyskretna - wykład - część 2 9. Podstawowe algorytmy kombinatoryczne Załóżmy, że mamy tablice p złożoną z n liczb (ponumerowanych od 0 do n 1). Aby wygenerować losową permutację
Wstęp do programowania
Wstęp do programowania Algorytmy zachłanne, programowanie dynamiczne Paweł Daniluk Wydział Fizyki Jesień 2014 P. Daniluk(Wydział Fizyki) WP w. IX Jesień 2014 1 / 26 Algorytmy zachłanne Strategia polegająca
Wstęp do programowania
Wstęp do programowania Algorytmy zachłanne, algoritme Dijkstry Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. XI Jesień 2013 1 / 25 Algorytmy zachłanne Strategia polegająca na
Programowanie dynamiczne
Programowanie dynamiczne Programowanie rekurencyjne: ZALETY: - prostota - naturalność sformułowania WADY: - trudność w oszacowaniu zasobów (czasu i pamięci) potrzebnych do realizacji Czy jest możliwe wykorzystanie
tablica: dane_liczbowe
TABLICE W JĘZYKU C/C++ tablica: dane_liczbowe float dane_liczbowe[5]; dane_liczbowe[0]=12.5; dane_liczbowe[1]=-0.2; dane_liczbowe[2]= 8.0;... 12.5-0.2 8.0...... 0 1 2 3 4 indeksy/numery elementów Tablica
1,3,4,2,3,4,0,1,4,5,0. Wówczas największa suma trzech kolejnych liczb (zaznaczone na czerwono) wynosi:
Program 20 Napisać następujące funkcje: funkcję pobierającą (z klawiatury) zawartość tablicy liczb całkowitych podanej jako parametr, o długości podanej jako parametr; funkcję wypisującą zawartość tablicy
Podejście zachłanne, a programowanie dynamiczne
Podejście zachłanne, a programowanie dynamiczne Algorytm zachłanny pobiera po kolei elementy danych, za każdym razem wybierając taki, który wydaje się najlepszy w zakresie spełniania pewnych kryteriów
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
typy złożone- tablice wielowymiarowe, struktury Wykład 6 Deklarowanie wskaźników nazwa_typu * nazwa_wskaznika; WSKAŹNIKI: PRZYPOMNIENIE Przypisywanie wskaźnikom wartości double * pn = &zmienna_typu_double;
Temat: Technika zachłanna. Przykłady zastosowania. Własno wyboru zachłannego i optymalnej podstruktury.
Temat: Technika zachłanna. Przykłady zastosowania. Własno wyboru zachłannego i optymalnej podstruktury. Algorytm zachłanny ( ang. greedy algorithm) wykonuje zawsze działanie, które wydaje si w danej chwili
Ćwiczenie 3 Programowanie dynamiczne
Ćwiczenie 3 Programowanie dynamiczne [źródło: Wprowadzenie do algorytmów, T.H. Cormen, Ch.E. Leiserson, R.L.Rivest, Wyd. Naukowo-Techniczne Warszawa, 2001; ZłoŜoność obliczeniowa problemów kombinatorycznych,
TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;
Ogólna postać definicji tablicy: TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ; np. int tablica [ 10 ]; // 10-cio elementowa tablica liczb całkowitych char tekst
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;
1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Algorytm. a programowanie -
Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik
WHILE (wyrażenie) instrukcja;
INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while
Programowanie - wykład 4
Programowanie - wykład 4 Filip Sośnicki Wydział Fizyki Uniwersytet Warszawski 20.03.2019 Przypomnienie Prosty program liczący i wyświeltający wartość silni dla wprowadzonej z klawiatury liczby: 1 # include
a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] 3-2 5 8 12-4 -26 12 45-76
. p. 1 Algorytmem nazywa się poddający się interpretacji skończony zbiór instrukcji wykonania zadania mającego określony stan końcowy dla każdego zestawu danych wejściowych W algorytmach mogą występować
Wstęp do programowania
Wstęp do programowania Algorytmy na tablicach Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 1 / 23 Dwadzieścia pytań Zasady 1 Osoba 1 wymyśla hasło z ustalonej
WYKŁAD 9. Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c. Tomasz Zieliński
WYKŁAD 9 Algorytmy sortowania elementów zbioru (tablic) Programy: c4_1.c... c4_3.c Tomasz Zieliński /* Przyklad 4.1 - SORTOWANIE TABLIC - metoda najprostsza */ #include #define ROZMIAR 11 void
Algorytmy i str ruktury danych. Metody algorytmiczne. Bartman Jacek
Algorytmy i str ruktury danych Metody algorytmiczne Bartman Jacek jbartman@univ.rzeszow.pl Metody algorytmiczne - wprowadzenia Znamy strukturę algorytmów Trudność tkwi natomiast w podaniu metod służących
Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;
Programowanie C++ Zadanie 1 Napisz program do obliczenia sumy i iloczynu ciągu liczb zakooczonego liczbą zero. Zakładamy, że ciąg zawiera co najmniej jedną liczbę (założenie to jest konieczne przy obliczeniu
Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz
Ćwiczenie 3 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania Zofia Kruczkiewicz Zakres Podstawowe algorytmy przetwarzania tablic (wypełnianie, porównywanie elementów,
Proste programy w C++ zadania
Proste programy w C++ zadania Zbiór zadao do samodzielnego rozwiązania stanowiący powtórzenie materiału. Podstawy C++ Budowa programu w C++ Dyrektywy preprocesora Usunięcie dublujących się nazw Częśd główna
Sortowanie przez wstawianie Insertion Sort
Sortowanie przez wstawianie Insertion Sort Algorytm sortowania przez wstawianie można porównać do sposobu układania kart pobieranych z talii. Najpierw bierzemy pierwszą kartę. Następnie pobieramy kolejne,
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
Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40
Programowanie w C++ Wykład 7 Katarzyna Grzelak 23 kwietnia 2018 K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40 Standard Template Library (STL) K.Grzelak (Wykład 7) Programowanie w C++ 2 / 40 C++ Templates
Zadania język C++ Zad. 1. Napisz program wczytujący z klawiatury wiek dwóch studentów i wypisujący informację o tym, który z nich jest starszy.
Zadania język C++ Zad. 1 Napisz program wczytujący z klawiatury wiek dwóch studentów i wypisujący informację o tym, który z nich jest starszy. (Być moŝe są w tym samym wieku. Zrób w programie warunek,
Tablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic:
Tablice TEORIA Tablica to ciąg obiektów tego samego typu, które zajmują ciągły obszar w pamięci. Dzięki stosowaniu tablic, zamiast nazywania każdej z np. stu zmiennych osobno możemy zabudować tablicę 100-elementową,
Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.
Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python. Pliki z rozwiązaniami projektu (wszystkie polecenia
Wstęp do programowania
wykład 6 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Losowanie liczb całkowitych Dostępne biblioteki Najprostsze losowanie liczb całkowitych można wykonać za pomocą funkcji
Programowanie dynamiczne i algorytmy zachłanne
Programowanie dynamiczne i algorytmy zachłanne Tomasz Głowacki tglowacki@cs.put.poznan.pl Zajęcia finansowane z projektu "Rozwój i doskonalenie kształcenia na Politechnice Poznańskiej w zakresie technologii
Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1
Tablice i struktury czyli złożone typy danych. Programowanie Proceduralne 1 Tablica przechowuje elementy tego samego typu struktura jednorodna, homogeniczna Elementy identyfikowane liczbami (indeksem).
Programowanie dynamiczne cz. 2
Programowanie dynamiczne cz. 2 Wykład 7 16 kwietnia 2019 (Wykład 7) Programowanie dynamiczne cz. 2 16 kwietnia 2019 1 / 19 Outline 1 Mnożenie ciągu macierzy Konstruowanie optymalnego rozwiązania 2 Podstawy
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
Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )
SORTOWANIE 1 SORTOWANIE Proces ustawiania zbioru elementów w określonym porządku. Stosuje się w celu ułatwienia późniejszego wyszukiwania elementów sortowanego zbioru. 2 Definicja Ciąg wejściowy: a 1,
Wstęp do programowania
Wieczorowe Studia Licencjackie Wrocław, 28.11.2006 Wstęp do programowania Wykład nr 9 (w oparciu o notatki K. Lorysia z modyfikacjami) Sortowanie szybkie (Quicksort) Sortowanie przez scalanie opierało
Zadanie 1. Doskonała inaczej (6 pkt) Poniższy algorytm wyznacza wszystkie dzielniki liczby naturalnej n 1, mniejsze od n.
2 Egzamin maturalny z informatyki Zadanie 1. Doskonała inaczej (6 pkt) Poniższy algorytm wyznacza wszystkie dzielniki liczby naturalnej n 1, mniejsze od n. Specyfikacja algorytmu: Dane: liczba naturalna
Wskaźniki. Programowanie Proceduralne 1
Wskaźniki Programowanie Proceduralne 1 Adresy zmiennych Sterta 1 #include 2 3 int a = 2 ; 4 5 int main ( ) 6 { 7 int b = 3 ; 8 9 printf ( " adres zmiennej a %p\n", &a ) ; 10 printf ( " adres
// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.
Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy
Inteligencja obliczeniowa Laboratorium 2: Algorytmy genetyczne
Inteligencja obliczeniowa Laboratorium 2: Algorytmy genetyczne Zadanie 1 W problemie plecakowym pytamy, jakie przedmioty wziąć do plecaka o ograniczonej objętości, by ich wartość była najwyższa. Załóżmy,
Schemat programowania dynamicznego (ang. dynamic programming)
Schemat programowania dynamicznego (ang. dynamic programming) Jest jedną z metod rozwiązywania problemów optymalizacyjnych. Jej twórcą (1957) był amerykański matematyk Richard Ernest Bellman. Schemat ten
Języki i paradygmaty programowania 1 studia stacjonarne 2018/19. Lab 9. Tablice liczbowe cd,. Operacje na tablicach o dwóch indeksach.
Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 9. Tablice liczbowe cd,. Operacje na tablicach o dwóch indeksach. 1. Dynamiczna alokacja pamięci dla tablic wielowymiarowych - Przykładowa
Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk
Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, Materiał
Algorytmy zachłanne. dr inż. Urszula Gałązka
Algorytmy zachłanne dr inż. Urszula Gałązka Algorytm zachłanny O Dokonuje wyboru, który w danej chwili wydaje się najkorzystniejszy. O Mówimy, że jest to wybór lokalnie optymalny O W rzeczywistości nie
Wykład 6. Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym
1 Wykład 6 Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym ELIMINACJA GAUSSA Z WYBOREM CZĘŚCIOWYM ELEMENTÓW PODSTAWOWYCH 2 Przy pomocy klasycznego algorytmu eliminacji
Transponowanie macierzy Mnożenie macierzy Potęgowanie macierzy Wyznacznik macierzy
Transponowanie macierzy Mnożenie macierzy Potęgowanie macierzy Wyznacznik macierzy Problem Transponować macierz A m n na A T n m. Operacja transponowania macierzy polega na zamianie wierszy w kolumny i
Algorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Metoda Dziel i zwyciężaj. Problem Sortowania, cd. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 2 Bożena Woźna-Szcześniak (AJD) Algorytmy
Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43
Programowanie w C++ Wykład 6 Katarzyna Grzelak 1 kwietnia 2019 K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
4. Funkcje. Przykłady
4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni
INFORMATYKA WYBRANE ALGORYTMY OPTYMALIZACYJNE KRYPTOLOGIA.
INFORMATYKA WYBRANE ALGORYTMY OPTYMALIZACYJNE KRYPTOLOGIA http://www.infoceram.agh.edu.pl Klasy metod algorytmicznych Metoda TOP-DOWN (zstępująca, analityczna) Metoda BOTTOM-UP (wstępująca, syntetyczna)
Czas pracy: 60 minut
EGZAMIN MATURALNY OD ROKU SZKOLNEGO 2014/2015 INFORMATYKA POZIOM ROZSZERZONY ARKUSZ I PRZYKŁADOWY ZESTAW ZADAŃ DLA OSÓB SŁABOSŁYSZĄCYCH (A3) WYBRANE:... (środowisko)... (kompilator)... (program użytkowy)
if (wyrażenie ) instrukcja
if (wyrażenie ) instrukcja Jeśli wartość wyrażenia jest różna od zera, to jest wykonywana instrukcja, jeśli wartość wyrażenia jest równa 0, to dana instrukcja nie jest wykonywana Wyrażenie testowe podajemy
Kolokwium ze wstępu do informatyki, I rok Mat. (Ściśle tajne przed godz. 10 : grudnia 2005.)
Kolokwium ze wstępu do informatyki, I rok Mat. (Ściśle tajne przed godz. 10 : 15 1 grudnia 005.) 1. Program w C 1 zawiera deklaracje 1 void P1 ( int a, int b) { int i ; 3 for ( i =0;i
Algorytmy decyzyjne będące alternatywą dla sieci neuronowych
Algorytmy decyzyjne będące alternatywą dla sieci neuronowych Piotr Dalka Przykładowe algorytmy decyzyjne Sztuczne sieci neuronowe Algorytm k najbliższych sąsiadów Kaskada klasyfikatorów AdaBoost Naiwny
INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki
INFORMATYKA Z MERMIDONEM Programowanie Moduł 5 / Notatki Projekt współfinansowany ze środków Unii Europejskiej w ramach Europejskiego Funduszu Społecznego. Realizator projektu: Opracowano w ramach projektu
Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz
Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania Zofia Kruczkiewicz Zakres Funkcje przetwarzające teksty (biblioteka ) - tworzenie własnych
Język C++ wykład VIII
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,
Projektowanie i analiza algorytmów
POLITECHNIKA KRAKOWSKA - WIEiK KATEDRA AUTOMATYKI i TECHNIK INFORMACYJNYCH Projektowanie i analiza algorytmów www.pk.edu.pl/~zk/piaa_hp.html Wykładowca: dr inż. Zbigniew Kokosiński zk@pk.edu.pl Wykład
Algorytmy i Struktury Danych, 2. ćwiczenia
Algorytmy i Struktury Danych, 2. ćwiczenia 2015-10-09 Spis treści 1 Szybkie potęgowanie 1 2 Liczby Fibonacciego 2 3 Dowód, że n 1 porównań jest potrzebne do znajdowania minimum 2 4 Optymalny algorytm do
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
EGZAMIN MATURALNY Z INFORMATYKI POZIOM PODSTAWOWY MAJ 2014 CZĘŚĆ I WYBRANE: Czas pracy: 75 minut. Liczba punktów do uzyskania: 20 WPISUJE ZDAJĄCY
Arkusz zawiera informacje prawnie chronione do momentu rozpoczęcia egzaminu. Układ graficzny CKE 2013 KOD WPISUJE ZDAJĄCY PESEL Miejsce na naklejkę z kodem EGZAMIN MATURALNY Z INFORMATYKI POZIOM PODSTAWOWY
Język C, tablice i funkcje (laboratorium)
Język C, tablice i funkcje (laboratorium) Opracował: Tomasz Mączka (tmaczka@kia.prz.edu.pl) Wstęp (tablice) Tablica to uporządkowany ciąg elementów tego samego typu, zajmujących ciągły obszar pamięci.
Wstęp do programowania
Wstęp do programowania Programowanie dynamiczne Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk(Wydział Fizyki) WP w. X Jesień 2013 1 / 21 Dziel i zwyciężaj przypomnienie 1 Podział problemu na 2 lub
> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki
> C++ dynamiczna alokacja/rezerwacja/przydział pamięci Dane: Iwona Polak iwona.polak@us.edu.pl Uniwersytet Śląski Instytut Informatyki 1429536600 > Dzisiejsze zajęcia sponsorują słówka: new oraz delete
Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni. Wykład 3. Karol Tarnowski A-1 p.
Programowanie proceduralne INP001210WL rok akademicki 2017/18 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji (1) Co to jest algorytm? Zapis algorytmów Algorytmy
PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI STYCZEŃ POZIOM ROZSZERZONY Część I
Organizatorzy: Uniwersytet Mikołaja Kopernika w Toruniu Wydział Matematyki i Informatyki, Oddział Kujawsko-Pomorski Polskiego Towarzystwa Informatycznego, Ośrodek Doskonalenia Nauczycieli w Poznaniu, Centrum
Zestaw 1-1 Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.cpp)!!!
Zestaw 1-1 1. Napisz program pobierający od użytkownika liczbę całkowitą R (R>1) i liczbę rzeczywistą dodatnią S, a następnie informujący ile kolejnych liczb z ciągu 1, R-1, R 2-2, R 3-3, R 4-4, należy
Lab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
Sortowanie Shella Shell Sort
Sortowanie Shella Shell Sort W latach 50-tych ubiegłego wieku informatyk Donald Shell zauważył, iż algorytm sortowania przez wstawianie pracuje bardzo efektywnie w przypadku gdy zbiór jest w dużym stopniu
n, m : int; S, a, b : double. Gdy wartości sumy składowej nie można obliczyć, to przyjąć Sij = 1.03 Dla obliczenia Sij zdefiniować funkcję.
Zadania-6 1 Opracować program obliczający wartość sumy: S n m ai bj i 1 j 1 ln( bi j a) n, m : int; S, a, b : double Gdy wartości sumy składowej nie można obliczyć, to przyjąć Sij = 103 Dla obliczenia
Wstęp do programowania
wykład 7 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2016/2017 Losowanie liczb całkowitych Dostępne biblioteki Najprostsze losowanie liczb całkowitych można wykonać za pomocą funkcji