Transponowanie macierzy Mnożenie macierzy Potęgowanie macierzy Wyznacznik macierzy

Wielkość: px
Rozpocząć pokaz od strony:

Download "Transponowanie macierzy Mnożenie macierzy Potęgowanie macierzy Wyznacznik macierzy"

Transkrypt

1

2 Transponowanie macierzy Mnożenie macierzy Potęgowanie macierzy Wyznacznik macierzy

3 Problem Transponować macierz A m n na A T n m. Operacja transponowania macierzy polega na zamianie wierszy w kolumny i kolumn w wiersze. Operację transponowania oznaczamy literką T. Ponieważ kolumny i wiersze wymieniają się wzajemnie, macierz transponowana posiada n wierszy i m kolumn. Przykład: =

4 Wejście m liczba wierszy macierzy, m N n liczba kolumn macierzy, n N A macierz do transponowania o m wierszach i n kolumnach, A R B macierz wynikowa o n wierszach i m kolumnach, B R Wyjście: Macierz B = A T Elementy pomocnicze: i w indeks wierszowy macierzy, i w N i k indeks kolumnowy macierzy, i k N Lista kroków: K01: Dla i w = 1,2,...,m wykonuj K02...K03 K02: Dla i k = 1,2,...,n wykonuj K03 K03: B[i k,i w ] A[i w,i k ] K04: Zakończ

5 Program generuje losowe liczby m i n (od 2 do 8). Następnie tworzy macierz A m n oraz macierz B n m. Macierz A jest wypełniana losowymi liczbami z zakresu od -99 do 99, wyświetlana i transponowana w macierzy B. Na koniec program wyświetla zawartość macierzy B.

6 #include <iostream> #include <iomanip> #include <cstdlib> #include <time.h> using namespace std; int main() int **A,**B,n,m,iw,ik; srand((unsigned)time(null)); // losujemy wymiary macierzy m = rand() % 7 + 2; n = rand() % 7 + 2; // tworzymy tablicę wskaźników A = new int * [m]; B = new int * [n]; // tworzymy tablice wierszy for(iw = 0; iw < m; iw++) A[iw] = new int[n]; for(iw = 0; iw < n; iw++) B[iw] = new int[m]; // wypełniamy macierz A losowymi liczbami for(iw = 0; iw < m; iw++) for(ik = 0; ik < n; ik++) A[iw][ik] = rand() % ; // wyświetlamy macierz A cout << "m = " << m << endl << "n = " << n << endl << endl << "Matrix A:" << endl; for(iw = 0; iw < m; iw++) for(ik = 0; ik < n; ik++) cout << setw(5) << A[iw][ik]; cout << endl; // transponujemy macierz A w B for(iw = 0; iw < m; iw++) for(ik = 0; ik < n; ik++) B[ik][iw] = A[iw][ik]; // wyświetlamy macierz wynikową cout << endl << "Matrix B = AT:" << endl; for(iw = 0; iw < n; iw++) for(ik = 0; ik < m; ik++) cout << setw(5) << B[iw][ik]; cout << endl; // koniec, zwalniamy pamięć zajętą przez macierze for(iw = 0; iw < m; iw++) delete [] A[iw]; for(iw = 0; iw < n; iw++) delete [] B[iw]; delete [] A; delete [] B; return 0;

7 Problem: Transponować macierz kwadratową A n n w miejscu. Podany powyżej algorytm transponowania macierzy wymaga dodatkowej pamięci. Jeśli macierz jest kwadratowa, to możemy transponować ją w miejscu. zamieniając miejscami elementy kolumn i wierszy. Zasada jest następująca: Załóżmy, iż mamy transponować poniższą macierz stopnia 4:

8 Zwróć uwagę, iż dla macierzy kwadratowej główna przekątna pozostaje bez zmian po transponowaniu. Elementy leżące na głównej przekątnej nie musimy przemieszczać. W pierwszym kroku wymienimy zatem elementy pierwszej kolumny i pierwszego wiersza z pominięciem elementu 1, który leży właśnie na głównej przekątnej:

9 Po wykonaniu tej operacji pierwsza kolumna i pierwszy wiersz macierzy są gotowe. Nie będziemy ich już zmieniać. W drugim kroku wykonujemy identyczną operację, lecz na pozostałej części macierzy, tzn. z pominięciem pierwszego wiersza i pierwszej kolumny:

10 W efekcie dwa pierwsze wiersze i dwie pierwsze kolumny macierzy są gotowe. Operację kontynuujemy z pozostałą częścią macierzy: Operacja jest zakończona, ponieważ pozostała część macierzy jest już macierzą jednoelementową (zawiera tylko element 16), a transpozycja macierzy jednoelementowej jest tożsamościowa.

11 Wejście n stopień macierzy, n N A kwadratowa macierz do transponowania stopnia n, A R Wyjście: Macierz A = AT Elementy pomocnicze: i,j indeksy, i,j N t tymczasowe miejsce przechowywania elementu macierzy, t R Lista kroków: K01: Dla i = 1,2,...,n - 1 wykonuj K02...K05 K02: Dla j = i + 1,i + 2,...,n wykonuj K03...K05 K03: t A[i,j] K04: A[i,j] A[j,i] K05: A[j,i] t K06: Zakończ

12 Program generuje losowy stopień macierzy n (od 2 do 8). Następnie tworzy macierz kwadratową A n n, którą wypełnia losowymi liczbami z zakresu od -99 do 99. Macierz A zostaje wyświetlona i transponowana. Na koniec program wyświetla ponownie zawartość macierzy A.

13 #include <iostream> #include <iomanip> #include <cstdlib> #include <time.h> using namespace std; main() int **A,n,i,j,t; srand((unsigned)time(null)); // losujemy stopień macierzy n = rand() % 7 + 2; // tworzymy tablicę wskaźników A = new int * [n]; // tworzymy tablice wierszy A[i] = new int[n]; // wypełniamy macierz A losowymi liczbami for(j = 0; j < n; j++) A[i][j] = rand() % ; cout << "n = " << n << endl << endl << "Matrix A:" << endl; for(j = 0; j < n; j++) cout << setw(5) << A[i][j]; cout << endl; // transponujemy macierz A for(i = 0; i < n - 1; i++) for(j = i + 1; j < n; j++) t = A[i][j]; A[i][j] = A[j][i]; A[j][i] = t; // wyświetlamy macierz A cout << endl << "Matrix AT:" << endl; for(j = 0; j < n; j++) cout << setw(5) << A[i][j]; cout << endl; // koniec, zwalniamy pamięć zajętą przez macierz delete [] A[i]; delete [] A; // wyświetlamy macierz A

14 Problem: Znaleźć wynik mnożenia macierzy A m n przez macierz B n p. Aby zrozumieć zasadę mnożenia dwóch macierzy, zastosujemy prosty schemat postępowania. Załóżmy, iż mamy macierz A 3 4 i B 4 5 o następującej zawartości: A 3 x 4 = A 4 x5 =

15 Wynikiem mnożenia dwóch macierzy jest nowa macierz, która posiada tyle wierszy, ile wierszy miała macierz A oraz tyle kolumn, ile kolumn miała macierz B. W naszym przypadku macierz ta będzie posiadała rozmiar 3 5, ponieważ macierz A posiada 3 wiersze, a macierz B posiada 5 kolumn. Zatem: A m n B n p = C m p Oznaczmy tę macierz jako C 3 5. Po lewej stronie macierzy C umieszczamy macierz A, natomiast macierz B umieszczamy ponad macierzą C. Obliczamy element c 1,1 jako sumę iloczynów kolejnych elementów wiersza 1 macierzy A przez elementy kolumny 1 macierzy B: ?????????????? c 1,1 = (1 4) + (2 3) + (3 8) + (4 5) = = 54

16 Wynika z tego fakt, iż macierz A musi posiadać w wierszu tyle samo elementów, co macierz B w kolumnie. Zatem rozmiary tych macierzy nie mogą być dowolne, lecz muszą spełniać prosty warunek: A m n, B n p Podobnie obliczamy element c 1,2 jako sumę iloczynów kolejnych elementów wiersza 1 macierzy A przez elementy kolumny 2 macierzy B: ????????????? c 1,2 = (1 3) + (2 4) + (3 9) + (4 4) = = 54

17 Operację tę kontynuujemy aż do wyliczenia wszystkich elementów w wierszu 1 macierzy C: ?????????? c 1,3 = (1 2) + (2 5) + (3 8) + (4 3) = = 48 c 1,4 = (1 1) + (2 6) + (3 7) + (4 2) = = 42 c 1,5 = (1 2) + (2 7) + (3 6) + (4 1) = = 38

18 Po wyliczeniu wiersza 1 macierzy C rozpoczynamy obliczanie elementów wiersza 2. Działania wykonujemy wg tego samego schematu sumujemy iloczyny kolejnych elementów wiersza macierzy A przez kolejne elementy kolumny macierzy B ????? c 2,1 = (5 4) + (6 3) + (7 8) + (8 5) = = 134 c 2,2 = (5 3) + (6 4) + (7 9) + (8 4) = = 134 c 2,3 = (5 2) + (6 5) + (7 8) + (8 3) = = 120 c 2,4 = (5 1) + (6 6) + (7 7) + (8 2) = = 106 c 2,5 = (5 2) + (6 7) + (7 6) + (8 1) = = 102

19 Na koniec wyliczamy ostatni wiersz macierzy C według tego samego schematu postępowania: c 3,1 = (9 4) + (8 3) + (7 8) + (6 5) = = 146 c 3,2 = (9 3) + (8 4) + (7 9) + (6 4) = = 146 c 3,3 = (9 2) + (8 5) + (7 8) + (6 3) = = 132 c 3,4 = (9 1) + (8 6) + (7 7) + (6 2) = = 118 c 3,5 = (9 2) + (8 7) + (7 6) + (6 1) = = 122

20 Rachunek skończony. Możemy zapisać: Χ =

21 Wejście m,n,p rozmiary macierzy, m,n,p N A macierz o rozmiarze m n, A R B macierz o rozmiarze n p, B R C macierz o rozmiarze m p, C R Wyjście: Macierz C = A B Elementy pomocnicze: i,j,k indeksy elementów macierzy, i,j,k N s suma częściowa, s R Lista kroków: K01: Dla i = 1,2,...,m wykonuj K02...K06 K02: Dla j = 1,2,...,p wykonuj K03...K06 K03: s 0 ; zerujemy sumę częściową K04: Dla k = 1,2,...,n wykonuj K05 ; obliczamy sumę iloczynów K05: s s + A[i,k] B[k,j] K06: C[i,j] s ; sumę umieszczamy w elemencie macierzy wynikowej K07: Zakończ

22 // Mnożenie macierzy // Data: // (C)2012 mgr Jerzy Wałaszek // #include <iostream> #include <iomanip> using namespace std; int main() int **A,**B,**C,m,n,p,i,j,k,s; // odczytujemy wymiary macierzy cin >> m >> n >> p; // tworzymy macierze o odpowiednich rozmiarach A = new int * [m]; B = new int * [n]; C = new int * [m]; for(i = 0; i < m; i++) A[i] = new int[n]; C[i] = new int[p]; B[i] = new int[p]; // odczytujemy dane dla macierzy A for(i = 0; i < m; i++) for(j = 0; j < n; j ++) cin >> A[i][j]; // odczytujemy dane dla macierzy B for(j = 0; j < p; j++) cin >> B[i][j]; cout << endl; // mnożymy macierz A przez B i wynik umieszczamy w C for(i = 0; i < m; i++) for(j = 0; j < p; j++) s = 0; for(k = 0; k < n; k++) s += A[i][k] * B[k][j]; C[i][j] = s; // wyprowadzamy wynik mnożenia w C cout << "C = A x B:\n"; for(i = 0; i < m; i++) for(j = 0; j < p; j++) cout << setw(6) << C[i][j]; cout << endl; // zwalniamy pamięć zajętą przez macierze for(i = 0; i < m; i++) delete [] A[i]; delete [] C[i]; delete [] B[i]; delete [] A; delete [] B; delete [] C; return 0;

23 Problem: Obliczyć k-tą potęgę A n n. Rozwiązanie nr 1: Zdefiniujmy następujące operacje: A 0 = I (macierz jednostkowa) A 1 = A A 2 = A A A 3 = A A A A k = A A... A (k - 1 mnożeń) Pierwszy algorytm będzie algorytmem naiwnym, który wykonuje k-1 mnożeń macierzy A.

24 Wejście n stopień macierzy, n N, n > 0 A potęgowana macierz, A R k wykładnik potęgowy, k N, k 0 Wyjście: A zawiera k-tą potęgę wejściowej macierzy A. Elementy pomocnicze: W macierz pomocnicza, przechowuje wyniki częściowe mnożenia, W R P macierz pomocnicza, przechowuje A, P R i do sterowania pętlą, i N Lista kroków: K01: Jeśli k > 0, to idź do K04 K02: Ustaw macierz jednostkową w A ;A0 = I K03: Zakończ K04: Jeśli k = 1, to zakończ ; A1 = A K05: P A ; zapamiętaj oryginalną macierz A K06: Dla i = 2,3,..., k wykonuj K07...K08 K07: W P A ; wykonaj mnożenie K08: A W ; w A wynik mnożenia (i potęgowania) K09: Zakończ

25 // Potęgowanie macierzy // Data: // (C)2012 mgr Jerzy Wałaszek // #include <iostream> #include <iomanip> using namespace std; // procedura mnożenia macierzy // C = A x B // void mnoz(int n, double ** A, double ** B, double ** C) int i,j,k; double s; for(j = 0; j < n; j++) s = 0; for(k = 0; k < n; k++) s += A[i][k] * B[k][j]; C[i][j] = s; // procedura przepisuje macierz A do macierzy B // void przepisz(int n, double ** A, double ** B) int i,j; for(j = 0; j < n; j++) B[i][j] = A[i][j]; // procedura ustawia w macierzy A macierz jednostkową // void jednostkowa(int n, double ** A) int i,j; for(j = 0; j < n; j++) A[i][j] = 0; A[i][i] = 1; // procedura wylicza potęgę k-tą macierzy A // void potega(int k, int n, double ** A) double ** P, ** W; int i; if(!k) jednostkowa(n,a); else if(k > 1) // tworzymy macierze pomocnicze P i W P = new double * [n]; W = new double * [n]; P[i] = new double[n]; W[i] = new double[n]; // macierz A zapamiętujemy w P przepisz(n,a,p); // w pętli wykonujemy kolejne mnożenia - wynik zawsze w A for(i = 2; i <= k; i++) mnoz(n,p,a,w); // W <- P x A przepisz(n,w,a); // A <- P x A // usuwamy macierze P i W delete [] P[i]; delete [] W[i]; delete [] P; delete [] W; //*** PROGRAM GŁÓWNY *** // int main() double ** A; int n,i,j,k; cout << fixed << setprecision(2); // wczytujemy wykładnik k oraz stopień macierzy n cin >> k >> n; // tworzymy macierz dynamiczną i wczytujemy dane wierszami A = new double * [n]; A[i] = new double[n]; for(j = 0; j < n; j++) cin >> A[i][j]; // obliczamy k-tą potęgę A potega(k,n,a); // wyświetlamy wyniki cout << endl; for(j = 0; j < n; j++) cout << setw(10) << A[i][j] << " "; cout << endl; // usuwamy macierz A delete [] A[i]; delete [] A; return 0;

26 Rozwiązanie nr 2: Zauważmy następującą własność mnożenia macierzy: An+m = An Am Dalej: A2 = A A A4 = A2 A2 A8 = A4 A4... Jak widzimy, potęgi o wykładnikach będących potęgami liczby 2 możemy łatwo otrzymywać mnożąc macierz przez siebie. Idea nowego algorytmu potęgowania przedstawię na prostym przykładzie. Załóżmy, iż chcemy obliczyć A13. Zatem k = 13. Możemy zapisać: A13 = A8+4+1 = A8 A4 A Zwróć uwagę, iż mnożymy przez siebie macierze, które są potęgami pierwotnej macierzy A o wykładnikach równych 8, 4 i 1. Na takie liczby rozkłada się 13. Takie potęgi bardzo łatwo otrzymać. Potrzebujemy 3 mnożeń do wyliczenia wszystkich niezbędnych potęg macierzy A. Aby ostatecznie otrzymać A13, potrzebne są jeszcze dwa dodatkowe mnożenia, czyli w sumie 5 mnożeń. Poprzedni algorytm doszedłby do tego samego wyniku po wykonaniu aż 12 mnożeń. Przy większych potęgach zysk jest jeszcze większy.

27 Wykładnika k wcale nie musimy rozbijać na potęgi liczby 2. W pamięci komputera k jest przechowywane w postaci binarnej. Wystarczy testować stan odpowiednich bitów k: kolejne potęgi liczby 2 = bity k = numery pozycji bitów kolejnych = Zasada pracy algorytmu jest następująca: W macierzy wyniku W ustawiamy macierz jednostkową. Dopóki k jest większe od zera, testujemy najmłodszy bit k i jeśli ma on wartość 1, to wykonujemy mnożenie W = W A. Bity k przesuwamy o 1 w prawo, aby pozbyć się testowanego bitu. Jeśli po tej operacji k ma wartość 0, to potęgowanie jest zakończone i przerywamy pętlę. W przeciwnym razie macierz A podnosimy do kwadratu: A = A A i pętlę kontynuujemy. Gdy pętla się zakończy, przepisujemy macierz W do A.

28 Wejście n stopień macierzy, n N, n > 0 A potęgowana macierz, A R k wykładnik potęgowy, k N, k 0 Wyjście: A zawiera k-tą potęgę wejściowej macierzy A. Elementy pomocnicze: W macierz pomocnicza, tworzony jest w niej wynik potęgowania, W R P macierz pomocnicza, P R Lista kroków: K01: Ustaw macierz jednostkową w W K02: Dopóki k > 0, wykonuj K03...K09 ; w pętli obliczamy k-tą potęgę A K03: Jeśli k and 1 = 0, to idź do K06 ; testujemy kolejne bity k K04 P W A ; jeśli bit jest ustawiony, to do W dołączamy A K05: W P K06: k k shr 1 ; przesuwamy w prawo bity k K07: Jeśli k = 0, to idź do K10 K08: P A A ; wyznaczamy kolejny kwadrat A K09 A P K10: A W ; wynik do A K11: Zakończ

29 // procedura wylicza potęgę k-tą macierzy A // void potega(int k, int n, double ** A) double ** P, ** W; int i; // Szybkie potęgowanie macierzy // Data: // (C)2012 mgr Jerzy Wałaszek // #include <iostream> #include <iomanip> using namespace std; // procedura mnożenia macierzy // C = A x B // void mnoz(int n, double ** A, double ** B, double ** C) int i,j,k; double s; for(j = 0; j < n; j++) s = 0; for(k = 0; k < n; k++) s += A[i][k] * B[k][j]; C[i][j] = s; // procedura przepisuje macierz A do macierzy B // void przepisz(int n, double ** A, double ** B) int i,j; for(j = 0; j < n; j++) B[i][j] = A[i][j]; // procedura ustawia w macierzy A macierz jednostkową // void jednostkowa(int n, double ** A) int i,j; for(j = 0; j < n; j++) A[i][j] = 0; A[i][i] = 1; // tworzymy macierze W i P W = new double * [n]; P = new double * [n]; W[i] = new double[n]; P[i] = new double[n]; // w macierzy W ustawiamy macierz jednostkową jednostkowa(n,w); // w pętli obliczamy potęgę macierzy A w W while(k) if(k & 1) // testujemy najmłodszy bit k mnoz(n,w,a,p); // jeśli ustawiony, to przepisz(n,p,w); // W = W x A k >>= 1; // przesuwamy bity k w prawo if(!k) break; // jeśli brak bitów 1, przerywamy mnoz(n,a,a,p); // A = A x A przepisz(n,p,a); // wynik potęgowania wraca do macierzy A przepisz(n,w,a); // usuwamy macierze W i P delete [] W[i]; delete [] P[i]; delete [] W; delete [] P; //*** PROGRAM GŁÓWNY *** // int main() double ** A; int n,i,j,k; cout << fixed << setprecision(2); // wczytujemy wykładnik k oraz stopień macierzy n cin >> k >> n; // tworzymy macierz dynamiczną i wczytujemy dane wierszami A = new double * [n]; A[i] = new double[n]; for(j = 0; j < n; j++) cin >> A[i][j]; // obliczamy k-tą potęgę A potega(k,n,a); // wyświetlamy wyniki cout << endl; for(j = 0; j < n; j++) cout << setw(10) << A[i][j] << " "; cout << endl; // usuwamy macierz A delete [] A[i]; delete [] A; return 0;

30 Problem: Obliczyć wyznacznik macierzy kwadratowej A n n za pomocą rozwinięcia Laplace'a. Wyznacznik (ang. determinant oznaczany det) jest liczbą, która została skojarzona z daną macierzą kwadratową A. Rozwinięcie Laplace'a pozwala w sposób rekurencyjny policzyć wyznacznik dowolnej macierzy kwadratowej. Wzór jest następujący: A macierz kwadratowa o rozmiarze n, której wyznacznik liczymy i ustalony wiersz macierzy A, wg którego dokonujemy rozwinięcia Laplace'a j kolejne numery kolumn w macierzy A ai,j element macierzy A leżący w i-tym wierszu i j-tej kolumnie Mi,j minor elementu ai,j - jest to wyznacznik macierzy powstałej z A po usunięciu z niej i-tego wiersza i j-tej kolumny

31 Powyższy wzór jest rekurencyjny, ponieważ występuje w nim Minor, który sam jest wyznacznikiem, a zatem obliczamy go za pomocą tego samego wzoru. Dla przykładu obliczmy wyznacznik macierzy: Jako wiersz rozwinięcia wybierzemy pierwszy wiersz zawierający elementy 1, 2 i 3. Dla każdego z tych elementów musimy wyznaczyć minory. Najpierw wyznaczmy macierze minorowe:

32 Obliczamy wyznaczniki M. Rozwijamy je wg pierwszego wiersza. Minory macierzy o rozmiarze 2 są macierzami jednoelementowymi. Wyznacznik macierzy jednoelementowej jest równy temu elementowi: M1,1 = (-1) (-1) M1,1 = (-1) (-1)3 28 M1,1 = M1,1 = -18 M1,2 = (-1) (-1) M1,2 = (-1) (-1)3 12 M1,2 = M1,2 = 0 M1,3 = (-1) (-1) M1,3 = (-1) (-1)3 15 M1,3 = M1,3 = 27

33 Mając policzone wartości minorów, możemy przystąpić do wyznaczenia wyznacznika macierzy A: det A = (-1) M 1,1 + (-1) M 1,2 + (-1) M 1,3 det A = (-1) 2 M 1,1 + (-1) 3 2M 1,2 + (-1) 4 3M 1,3 det A = M 1,1-2M 1,2 + 3M 1,3 det A = det A = 63 Możemy już przystąpić do wstępnego określenia algorytmu. Wyznacznik macierzy A n n obliczamy następująco: Jeśli n = 1, to wyznacznik macierzy jest równy wartości elementu tej macierzy, czyli: det A 1 1 = det [ a 1 ] = a 1

34 Dla n > 1 wybieramy dowolny wiersz lub kolumnę (najlepiej taki, w którym jest najwięcej zer). Następnie każdy wyraz tego wiersza lub kolumny przemnażamy przez wyznacznik macierzy, która powstaje przez usunięcie wiersza i kolumny z mnożonym wyrazem (wyznacznik ten obliczamy rekurencyjnie tą samą metodą). Jeśli suma numeru wiersza i kolumny mnożonego wyrazu jest nieparzysta, to otrzymany iloczyn mnożymy dodatkowo przez -1. Wyliczone iloczyny sumujemy otrzymując wartość wyznacznika. Klasa złożoności obliczeniowej podanej metody jest równa O(n!). Dokonajmy prostej analizy. Wyznacznik wyliczamy mnożąc kolejne wyrazy wiersza (lub kolumny) przez wartości wyznaczników niższego poziomu i sumując otrzymane iloczyny (dochodzi jeszcze ewentualna zmiana znaku). Zatem dla wyznacznika n-tego poziomu musimy wyliczyć n wyznaczników poziomu (n-1). Czyli: ilość mnożeń = n ilość mnożeń dla wyznacznika poziomu n - 1 ilość dodawań = n ilość dodawań dla wyznacznika poziomu n (n - 1) dodawań iloczynów

35 W poniższej tabeli wyliczyliśmy ilości mnożeń i dodawań dla kilku kolejnych wartości n. Złożoność obliczeniowa operacji wyliczania wyznacznika macierzy n Ilość dodawań ilość mnożeń 1 d 1 = 0 m 1 = 0 2 d 2 = 1 = 2d m 2 = 2 3 d 3 = 5 = 3d m 3 = 6 = 3m 2 4 d 4 = 23 = 4d m 4 = 24 = 4m 3 5 d 5 = 119 = 5d m 5 = 120 = 5m 4 Widać wyraźnie, iż od wartości n = 2 ilość mnożeń jest równa n!, a ilość dodawań jest równa n! - 1. Prowadzi to do bardzo szybkiego wzrostu czasu wykonania algorytmu. Pozostaje drobna kwestia techniczna. W algorytmie obliczamy wyznaczniki macierzy, które powstają przez usunięcie z macierzy głównej wiersza i kolumny z elementem mnożącym. Aby uniknąć kopiowania elementów, do algorytmu wyliczającego wyznacznik będziemy przekazywali wektor numerów kolumn, w którym umieścimy kolejne numery kolumn zawarte w tej podmacierzy oraz numer pierwszego wiersza. Na przykład w poniższej macierzy chcemy wyliczyć wyznacznik wg elementu a1,3:

36 podmacierz wektor kolumn 1 a 1,1 a 1,2 a 1, a 1,4 2 a 2,1 a 2,2 a a 2,1 a 2,2 a 2,3 2,4 a 2,4 3 a 3,1 a 3,2 a 3,4 3 a 3,1 a 3,2 a 3,3 numer wiersza = 2 a 3,4 4 a 4,1 a 4,2 a 4,4 4 a 4,1 a 4,2 a 4,3 a 4,4 Dane te jednoznacznie określą podmacierz, której wyznacznik należy wyliczyć. Zwróć uwagę, iż wektor kolumn zawiera tyle elementów, ile wynosi stopień wyznacznika. Numer wiersza zawsze będzie numerem o 1 większym od wiersza zawierającego mnożony przez wyznacznik element. Do elementów podmacierzy będziemy się odwoływać zawsze poprzez wektor kolumn.

37 Wejście n określa stopień wyznacznika do obliczenia. n N w określa numer wiersza, w którym rozpoczyna się podmacierz. w N WK wektor kolumn. Zawiera numery kolumn z macierzy głównej, które zawiera podmacierz. WK zawiera tyle numerów kolumn, ile wynosi stopień wyznacznika. Elementy N i są numerowane od 0. A macierz, której wyznacznik liczymy. Wiersze i kolumny są numerowane od zera. A R Wyjście: Wynik działania funkcji det(n,w,wk,a) jest wartością wyznacznika Elementy pomocnicze: i,j,k zmienne pomocnicze dla pętli i,j,k N m mnożnik iloczynu wyrazu macierzy przez wyznacznik podmacierzy. Przyjmuje na przemian wartości 1 oraz (-1), m C. KK wektor kolumn umożliwiający rekurencyjne przekazywanie numerów kolumn podmacierzy, dla których liczone są wyznaczniki. Elementami wektora kolumn są liczby całkowite. Elementy C i są numerowane od zera. Wektor KK ma o jeden element mniej niż wektor WK otrzymany na wejściu. s zlicza sumę iloczynów wyrazów wiersza przez wyznaczniki niższych stopni. s R

38 Lista kroków: Funkcja rekurencyjna det(n,w,wk,a): Parametrami funkcji są: n stopień podmacierzy przekazywane przez wartość w bieżący wiersz macierzy głównej, w którym rozpoczyna się podmacierz przekazywane przez wartość WK wektor kolumn o n elementach przekazanie przez referencję A macierz podstawowa przekazanie przez referencję K01: Jeśli n = 1, to zakończ z wynikiem A[w][WK[0]] ; sprawdzamy zakończenie rekurencji zwracamy wynik funkcji K02: Utwórz wektor KK o n-1 elementach ; tworzymy tablicę dynamiczną K03: s 0 ; przygotowujemy się do sumowania iloczynów wyrazów przez minory K04: m 1 ; mnożnik (-1)i+j K05: Dla i = 0,1,...,n - 1 wykonuj K06...K12 ; rozpoczynamy pętlę obliczającą rekurencyjnie rozwinięcie Laplace'a K06: k 0 ; przygotowujemy wektor kolumn dla wywołania rekurencyjnego K07: Dla j = 0,1,...,n - 2 wykonuj K08...K10 K08: Jeśli k = i, to k k + 1 ; pomijamy kolumnę z bieżącym wyrazem K09: KK[j] WK[k] ; przepisujemy kolumny z WK do KK pomijając bieżącą K10: k k + 1 K11: s s + m A[w][WK[i]] det(n - 1, w + 1, KK, A) ; wywołanie rekurencyjne K12: m (- m) ; następny mnożnik (-1)i+j K13: Usuń wektor KK ; tablica dynamiczna przestaje być potrzebna, zwalniamy pamięć K12: Zakończ z wynikiem s ; wynik funkcji

39 // Wyznacznik wg rekurencyjnego rozwinięcia Laplace'a // Data : // (C)2012 mgr Jerzy Wałaszek // #include <iostream> #include <iomanip> using namespace std; // Rekurencyjna funkcja obliczająca rozwinięcie Laplace'a // double det(int n, int w, int * WK, double ** A) int i,j,k,m, * KK; double s; if(n == 1) return A[w][WK[0]]; else // sprawdzamy warunek zakończenia rekurencji // macierz 1 x 1, wyznacznik równy elementowi //*** PROGRAM GŁÓWNY *** // int main() int n,i,j; // stopień macierzy int * WK; // wektor kolumn double ** A; // macierz cout << fixed << setprecision(4); cin >> n; A = new double * [n]; A[i] = new double[n]; for(j = 0; j < n; j++) cin >> A[i][j]; // odczytujemy stopień macierzy // tworzymy macierz wskaźników // tworzymy wiersz // czytamy wiersz macierzy KK = new int[n - 1]; // tworzymy dynamiczny wektor kolumn WK = new int[n]; // tworzymy wiersz kolumn s = 0; m = 1; // zerujemy wartość rozwinięcia // początkowy mnożnik WK[i] = i; // wypełniamy go numerami kolumn // pętla obliczająca rozwinięcie k = 0; // tworzymy wektor kolumn dla rekurencji for(j = 0; j < n - 1; j++) // ma on o 1 kolumnę mniej niż WK if(k == i) k++; // pomijamy bieżącą kolumnę KK[j] = WK[k++]; // pozostałe kolumny przenosimy do KK s += m * A[w][WK[i]] * det(n - 1,w + 1, KK, A); cout << endl; cout << det(n, 0, WK, A) << endl; // obliczamy i wyświetlamy wyznacznik delete [] WK; // usuwamy tablice dynamiczne delete [] A[i]; delete [] A; m = -m; // kolejny mnożnik delete [] KK; return s; // usuwamy zbędną już tablicę dynamiczną // ustalamy wartość funkcji

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

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

Bardziej szczegółowo

Liczby całkowite i rzeczywiste

Liczby całkowite i rzeczywiste Wykład 4(20 marzec 2014r.) Liczby całkowite i rzeczywiste Paulina Rogowiecka Klaudia Kamińska Adrianna Znyk 1 Spis treści: Czynniki pierwsze metoda próbnych dzieleń Pierwszość liczby naturalnej algorytmy

Bardziej szczegółowo

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy

Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy Uniwersytet Kazimierza Wielkiego w Bydgoszczy Zespół Szkół nr 5 Mistrzostwa Sportowego XV Liceum Ogólnokształcące w Bydgoszczy Matematyka, królowa nauk Edycja X - etap 2 Bydgoszcz, 16 kwietnia 2011 Fordoński

Bardziej szczegółowo

(3 kwiecień 2014) Marika Pankowska Kamila Pietrzak

(3 kwiecień 2014) Marika Pankowska Kamila Pietrzak (3 kwiecień 2014) Marika Pankowska Kamila Pietrzak Wyszukiwanie liniowe (ang. linear search), zwane również sekwencyjnym (ang. sequential search) polega na przeglądaniu kolejnych elementów zbioru Z. Jeśli

Bardziej szczegółowo

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

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;

Bardziej szczegółowo

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne 1 Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion,

Bardziej szczegółowo

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

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

Bardziej szczegółowo

r. Tablice podstawowe operacje na tablicach

r. Tablice podstawowe operacje na tablicach 27.03.2014r. Tablice podstawowe operacje na tablicach Tablica - definicja Tablica (ang. array) lub wektor (ang. vector) jest złożoną strukturą danych (ang. compound data structure) zbudowaną z ciągu elementów

Bardziej szczegółowo

Programowanie - wykład 4

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

Bardziej szczegółowo

O podstawowych operacjach na tablicach. Mateusz Ziółkowski, MBiU II

O podstawowych operacjach na tablicach. Mateusz Ziółkowski, MBiU II Wykład Ⅴ O podstawowych operacjach na tablicach Mateusz Ziółkowski, MBiU II Czym są tablice? Tablica (ang. array) to zespół równorzędnych zmiennych, posiadających wspólną nazwę. Jego poszczególne elementy

Bardziej szczegółowo

Anna Sobocińska Sylwia Piwońska

Anna Sobocińska Sylwia Piwońska Anna Sobocińska Sylwia Piwońska Problem Wyszukiwanie liniowe W n-elementowym zbiorze Z wyszukać element posiadający pożądane własności. Wyszukiwanie liniowe (ang. linear search), zwane również sekwencyjnym

Bardziej szczegółowo

5. Rozwiązywanie układów równań liniowych

5. Rozwiązywanie układów równań liniowych 5. Rozwiązywanie układów równań liniowych Wprowadzenie (5.1) Układ n równań z n niewiadomymi: a 11 +a 12 x 2 +...+a 1n x n =a 10, a 21 +a 22 x 2 +...+a 2n x n =a 20,..., a n1 +a n2 x 2 +...+a nn x n =a

Bardziej szczegółowo

Macierze. Rozdział Działania na macierzach

Macierze. Rozdział Działania na macierzach Rozdział 5 Macierze Funkcję, która każdej parze liczb naturalnych (i, j) (i 1,..., n; j 1,..., m) przyporządkowuje dokładnie jedną liczbę a ij F, gdzie F R lub F C, nazywamy macierzą (rzeczywistą, gdy

Bardziej szczegółowo

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Algorytmika i programowanie Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Tablice Tablica jest zbiorem elementów tego samego typu. Każdy element jest identyfikowany (numer

Bardziej szczegółowo

15. Macierze. Definicja Macierzy. Definicja Delty Kroneckera. Definicja Macierzy Kwadratowej. Definicja Macierzy Jednostkowej

15. Macierze. Definicja Macierzy. Definicja Delty Kroneckera. Definicja Macierzy Kwadratowej. Definicja Macierzy Jednostkowej 15. Macierze Definicja Macierzy. Dla danego ciała F i dla danych m, n IN funkcję A : {1,...,m} {1,...,n} F nazywamy macierzą m n ( macierzą o m wierszach i n kolumnach) o wyrazach z F. Wartość A(i, j)

Bardziej szczegółowo

Macierzowe algorytmy równoległe

Macierzowe algorytmy równoległe Macierzowe algorytmy równoległe Zanim przedstawimy te algorytmy zapoznajmy się z metodami dekompozycji macierzy, możemy wyróżnić dwa sposoby dekompozycji macierzy: Dekompozycja paskowa - kolumnowa, wierszowa

Bardziej szczegółowo

Wykład 5. Metoda eliminacji Gaussa

Wykład 5. Metoda eliminacji Gaussa 1 Wykład 5 Metoda eliminacji Gaussa Rozwiązywanie układów równań liniowych Układ równań liniowych może mieć dokładnie jedno rozwiązanie, nieskończenie wiele rozwiązań lub nie mieć rozwiązania. Metody dokładne

Bardziej szczegółowo

Rozdział 5. Macierze. a 11 a a 1m a 21 a a 2m... a n1 a n2... a nm

Rozdział 5. Macierze. a 11 a a 1m a 21 a a 2m... a n1 a n2... a nm Rozdział 5 Macierze Funkcję, która każdej parze liczb naturalnych (i,j) (i = 1,,n;j = 1,,m) przyporządkowuje dokładnie jedną liczbę a ij F, gdzie F = R lub F = C, nazywamy macierzą (rzeczywistą, gdy F

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015 POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015 Język programowania: Środowisko programistyczne: C/C++ Qt Wykład 4 : Napisy. Tablice dwuwymiarowe. Formaty

Bardziej szczegółowo

Definicja macierzy Typy i właściwości macierzy Działania na macierzach Wyznacznik macierzy Macierz odwrotna Normy macierzy RACHUNEK MACIERZOWY

Definicja macierzy Typy i właściwości macierzy Działania na macierzach Wyznacznik macierzy Macierz odwrotna Normy macierzy RACHUNEK MACIERZOWY Transport, studia niestacjonarne I stopnia, semestr I Instytut L-5, Wydział Inżynierii Lądowej, Politechnika Krakowska Adam Wosatko Ewa Pabisek Czym jest macierz? Definicja Macierzą A nazywamy funkcję

Bardziej szczegółowo

Metody i analiza danych

Metody i analiza danych 2015/2016 Metody i analiza danych Macierze Laboratorium komputerowe 2 Anna Kiełbus Zakres tematyczny 1. Funkcje wspomagające konstruowanie macierzy 2. Dostęp do elementów macierzy. 3. Działania na macierzach

Bardziej szczegółowo

Programowanie i struktury danych

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

Bardziej szczegółowo

wagi cyfry 7 5 8 2 pozycje 3 2 1 0

wagi cyfry 7 5 8 2 pozycje 3 2 1 0 Wartość liczby pozycyjnej System dziesiętny W rozdziale opiszemy pozycyjne systemy liczbowe. Wiedza ta znakomicie ułatwi nam zrozumienie sposobu przechowywania liczb w pamięci komputerów. Na pierwszy ogień

Bardziej szczegółowo

Sortowanie przez wstawianie Insertion Sort

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,

Bardziej szczegółowo

Wstęp do Informatyki

Wstęp do Informatyki Wstęp do Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 11 1 / 52 Pętla for # i n c l u d e

Bardziej szczegółowo

Ekoenergetyka Matematyka 1. Wykład 3.

Ekoenergetyka Matematyka 1. Wykład 3. Ekoenergetyka Matematyka Wykład 3 MACIERZE Macierzą wymiaru n m, gdzie nm, nazywamy prostokątną tablicę złożoną z n wierszy i m kolumn: a a2 a j am a2 a22 a2 j a2m [ a ] nm A ai ai 2 a aim - i-ty wiersz

Bardziej szczegółowo

Wykład 6. Metoda eliminacji Gaussa: Eliminacja z wyborem częściowym Eliminacja z wyborem pełnym

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

Bardziej szczegółowo

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

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

Bardziej szczegółowo

Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:

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

Bardziej szczegółowo

Programowanie obiektowe W3

Programowanie obiektowe W3 Programowanie obiektowe W3 Przegląd typów strukturalnych w C++ : tablice statyczne i dynamiczne Dr hab. inż. Lucyna Leniowska, prof. UR Zakład Mechatroniki, Automatyki i Optoelektroniki Typy złożone: tablice

Bardziej szczegółowo

Zmienne i struktury dynamiczne

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

Bardziej szczegółowo

RACHUNEK MACIERZOWY. METODY OBLICZENIOWE Budownictwo, studia I stopnia, semestr 6. Instytut L-5, Wydział Inżynierii Lądowej, Politechnika Krakowska

RACHUNEK MACIERZOWY. METODY OBLICZENIOWE Budownictwo, studia I stopnia, semestr 6. Instytut L-5, Wydział Inżynierii Lądowej, Politechnika Krakowska RACHUNEK MACIERZOWY METODY OBLICZENIOWE Budownictwo, studia I stopnia, semestr 6 Instytut L-5, Wydział Inżynierii Lądowej, Politechnika Krakowska Ewa Pabisek Czym jest macierz? Definicja Macierzą A nazywamy

Bardziej szczegółowo

WYKŁAD 3 (13 MARZEC 2014) LICZBY CAŁKOWITE I RZECZYWISTE. Bartosz Łakomy i Dariusz Dobiesz

WYKŁAD 3 (13 MARZEC 2014) LICZBY CAŁKOWITE I RZECZYWISTE. Bartosz Łakomy i Dariusz Dobiesz WYKŁAD 3 (13 MARZEC 2014) LICZBY CAŁKOWITE I RZECZYWISTE Bartosz Łakomy i Dariusz Dobiesz SPIS TREŚCI: Liczby parzyste i nieparzyste Liczby podzielne lub niepodzielne przez zadane podzielniki NWD algorytm

Bardziej szczegółowo

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Zajęcia nr 2 Programowanie strukturalne dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Pętla while #include using namespace std; int main ()

Bardziej szczegółowo

MACIERZE I WYZNACZNIKI

MACIERZE I WYZNACZNIKI Wykłady z matematyki inżynierskiej IMiF UTP 07 MACIERZ DEFINICJA. Macierza o m wierszach i n kolumnach nazywamy przyporza dkowanie każdej uporza dkowanej parze liczb naturalnych (i, j), gdzie 1 i m, 1

Bardziej szczegółowo

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz

Bardziej szczegółowo

Programowanie dynamiczne

Programowanie dynamiczne Programowanie dynamiczne Ciąg Fibonacciego fib(0)=1 fib(1)=1 fib(n)=fib(n-1)+fib(n-2), gdzie n 2 Elementy tego ciągu stanowią liczby naturalne tworzące ciąg o takiej własności, że kolejny wyraz (z wyjątkiem

Bardziej szczegółowo

PODSTAWY AUTOMATYKI. MATLAB - komputerowe środowisko obliczeń naukowoinżynierskich - podstawowe operacje na liczbach i macierzach.

PODSTAWY AUTOMATYKI. MATLAB - komputerowe środowisko obliczeń naukowoinżynierskich - podstawowe operacje na liczbach i macierzach. WYDZIAŁ ELEKTROTECHNIKI I AUTOMATYKI Katedra Inżynierii Systemów Sterowania PODSTAWY AUTOMATYKI MATLAB - komputerowe środowisko obliczeń naukowoinżynierskich - podstawowe operacje na liczbach i macierzach.

Bardziej szczegółowo

O MACIERZACH I UKŁADACH RÓWNAŃ

O MACIERZACH I UKŁADACH RÓWNAŃ O MACIERZACH I UKŁADACH RÓWNAŃ Problem Jak rozwiązać podany układ równań? 2x + 5y 8z = 8 4x + 3y z = 2x + 3y 5z = 7 x + 8y 7z = Definicja Równanie postaci a x + a 2 x 2 + + a n x n = b gdzie a, a 2, a

Bardziej szczegółowo

1 Macierze i wyznaczniki

1 Macierze i wyznaczniki 1 Macierze i wyznaczniki 11 Definicje, twierdzenia, wzory 1 Macierzą rzeczywistą (zespoloną) wymiaru m n, gdzie m N oraz n N, nazywamy prostokątną tablicę złożoną z mn liczb rzeczywistych (zespolonych)

Bardziej szczegółowo

PROBLEM. Znaleźć rozkład liczby p > 1. na iloczyn czynników pierwszych.

PROBLEM. Znaleźć rozkład liczby p > 1. na iloczyn czynników pierwszych. PROBLEM Znaleźć rozkład liczby p > 1. na iloczyn czynników pierwszych. Postawiony problem posiada bardzo duże znaczenie w wielu dziedzinach informatyki szczególnie w kryptografii. Na dzień dzisiejszy nie

Bardziej szczegółowo

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy

Bardziej szczegółowo

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

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

Bardziej szczegółowo

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze...

; B = Wykonaj poniższe obliczenia: Mnożenia, transpozycje etc wykonuję programem i przepisuję wyniki. Mam nadzieję, że umiesz mnożyć macierze... Tekst na niebiesko jest komentarzem lub treścią zadania. Zadanie. Dane są macierze: A D 0 ; E 0 0 0 ; B 0 5 ; C Wykonaj poniższe obliczenia: 0 4 5 Mnożenia, transpozycje etc wykonuję programem i przepisuję

Bardziej szczegółowo

Zaawansowane algorytmy i struktury danych

Zaawansowane algorytmy i struktury danych Zaawansowane algorytmy i struktury danych u dr Barbary Marszał-Paszek Opracowanie pytań praktycznych z egzaminów. Strona 1 z 12 Pytania praktyczne z kolokwium zaliczeniowego z 19 czerwca 2014 (studia dzienne)

Bardziej szczegółowo

Wprowadzenie do Scilab: macierze

Wprowadzenie do Scilab: macierze Wprowadzenie do Scilab: macierze Narzędzia Informatyki Magdalena Deckert Izabela Szczęch Barbara Wołyńska Bartłomiej Prędki Politechnika Poznańska Instytut Informatyki Agenda Definiowanie macierzy Funkcje

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Podstawy Programowania

Podstawy Programowania Podstawy Programowania Monika Wrzosek Instytut Matematyki Uniwersytet Gdański Matematyka 2017/18 Monika Wrzosek (IM UG) Podstawy Programowania 1 / 119 Sprawy organizacyjne E-mail: mwrzosek@mat.ug.edu.pl

Bardziej szczegółowo

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja Opis zagadnieo 1-3 Iteracja, rekurencja i ich realizacja Iteracja Iteracja to czynnośd powtarzania (najczęściej wielokrotnego) tej samej instrukcji (albo wielu instrukcji) w pętli. Mianem iteracji określa

Bardziej szczegółowo

3. Macierze i Układy Równań Liniowych

3. Macierze i Układy Równań Liniowych 3. Macierze i Układy Równań Liniowych Rozważamy równanie macierzowe z końcówki ostatniego wykładu ( ) 3 1 X = 4 1 ( ) 2 5 Podstawiając X = ( ) x y i wymnażając, otrzymujemy układ 2 równań liniowych 3x

Bardziej szczegółowo

Krótkie wprowadzenie do macierzy i wyznaczników

Krótkie wprowadzenie do macierzy i wyznaczników Radosław Marczuk Krótkie wprowadzenie do macierzy i wyznaczników 12 listopada 2005 1. Macierze Macierzą nazywamy układ liczb(rzeczywistych, bądź zespolonych), funkcji, innych macierzy w postaci: A a 11

Bardziej szczegółowo

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną) 1 Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną) Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion,

Bardziej szczegółowo

Programowanie dynamiczne

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

Bardziej szczegółowo

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

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

1 Układy równań liniowych

1 Układy równań liniowych II Metoda Gaussa-Jordana Na wykładzie zajmujemy się układami równań liniowych, pojawi się też po raz pierwszy macierz Formalną (i porządną) teorią macierzy zajmiemy się na kolejnych wykładach Na razie

Bardziej szczegółowo

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

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Programowanie w C++ Wykład 2 Katarzyna Grzelak 5 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41 Reprezentacje liczb w komputerze K.Grzelak (Wykład 1) Programowanie w C++ 2 / 41 Reprezentacje

Bardziej szczegółowo

Wstęp do programowania

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

Bardziej szczegółowo

do instrukcja while (wyrażenie);

do instrukcja while (wyrażenie); Instrukcje pętli -ćwiczenia Instrukcja while Pętla while (póki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo, jak długo zaczynające pętlę wyrażenie pozostaje prawdziwe. while ( wyrażenie

Bardziej szczegółowo

Część 4 życie programu

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ęść

Bardziej szczegółowo

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa

Wieczorowe Studia Licencjackie Wrocław, Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Wieczorowe Studia Licencjackie Wrocław, 7.11.2006 Wstęp do programowania Wykład nr 6 (w oparciu o notatki K. Lorysia, z modyfikacjami) Sito Eratostenesa Zaprezentujemy teraz algorytm na wyznaczanie wszystkich

Bardziej szczegółowo

Zestaw 12- Macierz odwrotna, układy równań liniowych

Zestaw 12- Macierz odwrotna, układy równań liniowych Zestaw - Macierz odwrotna, układy równań liniowych Przykładowe zadania z rozwiązaniami Załóżmy, że macierz jest macierzą kwadratową stopnia n. Mówimy, że macierz tego samego wymiaru jest macierzą odwrotną

Bardziej szczegółowo

Tablice są typem pochodnym. Poniżej mamy przykłady deklaracji różnych tablic:

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ą,

Bardziej szczegółowo

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

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

Bardziej szczegółowo

Wykład 7 Macierze i wyznaczniki

Wykład 7 Macierze i wyznaczniki Wykład 7 Macierze i wyznaczniki Andrzej Sładek sladek@ux2mathusedupl Instytut Matematyki, Uniwersytet Śląski w Katowicach Andrzej Sładek (Instytut Matematyki, Uniwersytet Śląski Wykład w Katowicach) 7

Bardziej szczegółowo

Analiza algorytmów zadania podstawowe

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ą

Bardziej szczegółowo

0 + 0 = 0, = 1, = 1, = 0.

0 + 0 = 0, = 1, = 1, = 0. 5 Kody liniowe Jak już wiemy, w celu przesłania zakodowanego tekstu dzielimy go na bloki i do każdego z bloków dodajemy tak zwane bity sprawdzające. Bity te są w ścisłej zależności z bitami informacyjnymi,

Bardziej szczegółowo

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

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4 Dr inż. Dariusz JĘDRZEJCZYK Wskaźniki Dynamiczna alokacja pamięci Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Wskaźnik to

Bardziej szczegółowo

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

1 Wskaźniki. 1.1 Główne zastosowania wskaźników 1 Wskaźniki Wskaźnik (ang. pointer) jest obiektem (zmienną) przechowującym adres pamięci. Definiowanie wskaźników: typ *nazwa wskaznika; np.: int *wsk na x;, double *xxx;, char *znak;. Aby można było pracować

Bardziej szczegółowo

tablica: dane_liczbowe

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

Bardziej szczegółowo

Układy równań liniowych. Krzysztof Patan

Układy równań liniowych. Krzysztof Patan Układy równań liniowych Krzysztof Patan Motywacje Zagadnienie kluczowe dla przetwarzania numerycznego Wiele innych zadań redukuje się do problemu rozwiązania układu równań liniowych, często o bardzo dużych

Bardziej szczegółowo

Kontrola przebiegu programu

Kontrola przebiegu programu Kontrola przebiegu programu Wykład 9 Instrukcje sterujące: pętle rozgałęzienia skoki PRZYPOMINAJKA Zadanie : Zaprojektuj rekurencyjny przepis na wyznaczenie największej takiej liczby m, że 2 m jest podzielnikiem

Bardziej szczegółowo

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem.

Struktura programu. Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. Struktura programu Projekty złożone składają się zwykłe z różnych plików. Zawartość każdego pliku programista wyznacza zgodnie z jego przeznaczeniem. W ostatnich latach najbardziej używanym stylem oprogramowania

Bardziej szczegółowo

2. Układy równań liniowych

2. Układy równań liniowych 2. Układy równań liniowych Grzegorz Kosiorowski Uniwersytet Ekonomiczny w Krakowie zima 2017/2018 rzegorz Kosiorowski (Uniwersytet Ekonomiczny w Krakowie) 2. Układy równań liniowych zima 2017/2018 1 /

Bardziej szczegółowo

5. Rekurencja. Przykłady

5. Rekurencja. Przykłady 5. Rekurencja Uwaga! W tym rozdziale nie są omówione żadne nowe konstrukcje języka C++. Omówiona jest za to technika wykorzystująca funkcje, która pozwala na rozwiązanie pewnych nowych rodzajów zadań.

Bardziej szczegółowo

Podstawy algorytmiki i programowania - wykład 6 Sortowanie- algorytmy

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

Bardziej szczegółowo

Podstawy algorytmiki i programowania - wykład 1 Tablice powtórzenie Tablice znaków Tablice dwuwymiarowe

Podstawy algorytmiki i programowania - wykład 1 Tablice powtórzenie Tablice znaków Tablice dwuwymiarowe Podstawy algorytmiki i programowania - wykład 1 Tablice powtórzenie Tablice znaków Tablice dwuwymiarowe Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie

Bardziej szczegółowo

Rekurencja. Przygotowała: Agnieszka Reiter

Rekurencja. Przygotowała: Agnieszka Reiter Rekurencja Przygotowała: Agnieszka Reiter Definicja Charakterystyczną cechą funkcji (procedury) rekurencyjnej jest to, że wywołuje ona samą siebie. Drugą cechą rekursji jest jej dziedzina, którą mogą być

Bardziej szczegółowo

Rozwiązywanie układów równań liniowych

Rozwiązywanie układów równań liniowych Rozwiązywanie układów równań liniowych Marcin Orchel 1 Wstęp Jeśli znamy macierz odwrotną A 1, to możęmy znaleźć rozwiązanie układu Ax = b w wyniku mnożenia x = A 1 b (1) 1.1 Metoda eliminacji Gaussa Pierwszy

Bardziej szczegółowo

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej 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, rok

Bardziej szczegółowo

Wstęp do programowania. Wykład 1

Wstęp do programowania. Wykład 1 Wstęp do programowania Wykład 1 1 / 49 Literatura Larry Ullman, Andreas Signer. Programowanie w języku C++. Walter Savitch, Kenrick Mock. Absolute C++. Jerzy Grębosz. Symfonia C++. Standard. Stephen Prata.

Bardziej szczegółowo

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s].

Uwaga: Funkcja zamień(a[j],a[j+s]) zamienia miejscami wartości A[j] oraz A[j+s]. Zadanie 1. Wiązka zadań Od szczegółu do ogółu Rozważmy następujący algorytm: Dane: Algorytm 1: k liczba naturalna, A[1...2 k ] tablica liczb całkowitych. n 1 dla i=1,2,,k wykonuj n 2n s 1 dopóki s

Bardziej szczegółowo

Zadanie 2: Arytmetyka symboli

Zadanie 2: Arytmetyka symboli 1 Cel ćwiczenia Zadanie 2: Arytmetyka symboli Wykształcenie umiejętności abstrahowania operacji arytmetycznych. Zapoznanie się i przećwiczenie mechanizmu tworzenia przeciążeń funkcji operatorowych. Utrwalenie

Bardziej szczegółowo

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe I. Struktury sterujące.bezpośrednie następstwo (A,B-czynności) Wykład _2 Algorytmy sortowania tablic Sortowanie bąbelkowe Elementy języka stosowanego do opisu algorytmu Elementy Poziom koncepcji Poziom

Bardziej szczegółowo

4. Napisz program wyznaczający wartość funkcji. f (x) = x cos x + e 4x 7. w zadanym punkcie.

4. Napisz program wyznaczający wartość funkcji. f (x) = x cos x + e 4x 7. w zadanym punkcie. Zadania 1. Napisz program, który wyświetla na ekranie komunikat Witaj. 2. Napisz program przeliczający wielkość kąta wyrażoną w stopniach na radiany według wzoru π Rad = St 180. Liczba π ma w języku C++

Bardziej szczegółowo

Wykład 4. Informatyka Stosowana. Magdalena Alama-Bućko. 25 marca Magdalena Alama-Bućko Wykład 4 25 marca / 25

Wykład 4. Informatyka Stosowana. Magdalena Alama-Bućko. 25 marca Magdalena Alama-Bućko Wykład 4 25 marca / 25 Wykład 4 Informatyka Stosowana Magdalena Alama-Bućko 25 marca 2019 Magdalena Alama-Bućko Wykład 4 25 marca 2019 1 / 25 Macierze Magdalena Alama-Bućko Wykład 4 25 marca 2019 2 / 25 Macierza wymiaru m n

Bardziej szczegółowo

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

Podstawy Programowania Podstawowa składnia języka C++ Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include

Bardziej szczegółowo

Algorytmy i struktury danych. Wykład 4

Algorytmy i struktury danych. Wykład 4 Wykład 4 Różne algorytmy - obliczenia 1. Obliczanie wartości wielomianu 2. Szybkie potęgowanie 3. Algorytm Euklidesa, liczby pierwsze, faktoryzacja liczby naturalnej 2017-11-24 Algorytmy i struktury danych

Bardziej szczegółowo

Programowanie komputerowe. Zajęcia 3

Programowanie komputerowe. Zajęcia 3 Programowanie komputerowe Zajęcia 3 Instrukcje przypisania Poza zwykłą instrukcją przypisania, powodującą ustawienie wartości zmiennej na podane wyrażenie, istnieje wiele innych, np. += dodaj, a+=b jest

Bardziej szczegółowo

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

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia

Bardziej szczegółowo

Treść wykładu. Układy równań i ich macierze. Rząd macierzy. Twierdzenie Kroneckera-Capellego.

Treść wykładu. Układy równań i ich macierze. Rząd macierzy. Twierdzenie Kroneckera-Capellego. . Metoda eliminacji. Treść wykładu i ich macierze... . Metoda eliminacji. Ogólna postać układu Układ m równań liniowych o n niewiadomych x 1, x 2,..., x n : a 11 x 1 + a 12 x 2 + + a 1n x n = b 1 a 21

Bardziej szczegółowo

Wstęp do programowania

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

Bardziej szczegółowo

1 Macierz odwrotna metoda operacji elementarnych

1 Macierz odwrotna metoda operacji elementarnych W tej części skupimy się na macierzach kwadratowych. Zakładać będziemy, że A M(n, n) dla pewnego n N. Definicja 1. Niech A M(n, n). Wtedy macierzą odwrotną macierzy A (ozn. A 1 ) nazywamy taką macierz

Bardziej szczegółowo

ZASADY PROGRAMOWANIA KOMPUTERÓW

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.

Bardziej szczegółowo

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje. Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using

Bardziej szczegółowo

Rozwiązywanie układów równań liniowych metody dokładne Materiały pomocnicze do ćwiczeń z metod numerycznych

Rozwiązywanie układów równań liniowych metody dokładne Materiały pomocnicze do ćwiczeń z metod numerycznych Rozwiązywanie układów równań liniowych metody dokładne Materiały pomocnicze do ćwiczeń z metod numerycznych Piotr Modliński Wydział Geodezji i Kartografii PW 13 stycznia 2012 P. Modliński, GiK PW Rozw.

Bardziej szczegółowo

Strategia "dziel i zwyciężaj"

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

Bardziej szczegółowo

Zapis liczb binarnych ze znakiem

Zapis liczb binarnych ze znakiem Zapis liczb binarnych ze znakiem W tej prezentacji: Zapis Znak-Moduł (ZM) Zapis uzupełnień do 1 (U1) Zapis uzupełnień do 2 (U2) Zapis Znak-Moduł (ZM) Koncepcyjnie zapis znak - moduł (w skrócie ZM - ang.

Bardziej szczegółowo

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Operacje dyskowe - zapis do pliku #include #include

Bardziej szczegółowo

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE 1. Proste typy danych- ciąg dalszy 2. Typy złożone danych : TABLICE Wykład 3 ZMIENNE PROSTE: TYPY WBUDOWANE Typy zmiennoprzecinkowe: float double long double Różne rozmiary bajtowe. W konsekwencji różne

Bardziej szczegółowo

I. Podstawy języka C powtórka

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.

Bardziej szczegółowo