e-learning: Automaty komórkowe

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

Download "e-learning: Automaty komórkowe"

Transkrypt

1 0.1 Jednowymiarowe automaty komórkowe Przykłady programowania w C++ e-learning: Automaty komórkowe Mirosław Dudek dla Otwartych Warsztatów Komputerowych Streszczenie Celem tego krótkiego kursu jest pokazanie działania prostych automatów komórkowych na przykładach programowania obiektowego. Wydruki stanu automatów zapisywane są do plików ppm. 0.1 Jednowymiarowe automaty komórkowe Za twórcę automatów komórkowych uważa się Johna von Neunmanna. W tym rozdziale ograniczymy się do automatów jednowymiarowych w wersji spopularyzowanej przez Stevena Wolframa (1986) tj. do automatów 8-bitowych. Automat komórkowy oznacza układ, który ewoluuje w dyskretnym czasie i posiada skończoną ilość stanów w których może występować. Rysunek 1: Wyobraźmy sobie że chcemy zrobić wizualizację koralika poruszającego się jednostajnie wzdłuż pierścienia na który jest on nanizany. Żeby nie rozwiązywać skomplikowanych równań ruchu i zastanawiać się nad najlepszym algorytmem numerycznym dla nich wystarczy skorzystać z algorytmu automatu komórkowego. Dla uproszczenia zamiast pierścienia koralik będzie poruszał się po odcinku prostej na który nałożone są periodyczne warunki brzegowe, tj. jeśli koralik poruszając się np. w prawą stronę dotrze do prawego końca odcinka to równoważne będzie pojawieniu się koralika na lewym końcu odcinka. Koralik bedzie kontynuował ruch w prawo. Kolejne uproszczenie to odcinek po którym porusza się koralik będzie przybliżony dyskretną liczbą L położeń które może zająć poruszający się koralik. Miejsce w którym jest koralik będziemy reprezentować jedynką a miejsce puste zerem jak na schemacie poniżej W kolejnych krokach czasowych rysować będziemy dywan czasoprzestrzenny pokazujący zmieniające się położenie koralika. Koralików może być więcej i np. trzy pierwsze kroki ewolucji czasowej dla 5 koralików poruszających się w prawą stronę możemy przedstawić jak niżej Reguły 8-bitowe Wolframa to przyporządkowanie stanom (1 - zajęty lub 0 - pusty) trójki sąsiednich węzłów (i-1,i,i+1) z poprzedniego kroku czasowego t stanu węzła środkowego (i-tego) w kolejnym kroku czasowym t + 1. W przypadku stanów zero-jedynkowych trzy węzły mają M.R. Dudek dla < OWK/ > 1 Materiał dystrybuowany bezpłatnie

2 0.1 Jednowymiarowe automaty komórkowe Przykłady programowania w C = 8 możliwości pojawienia się jedynek i zer. Formalnie, takie przyporządkowanie trójce bitów jednego bitu dla węzła środkowego można zapisać jako nastepujący przepis σ i (t + 1) = Φ(σ i 1 (t), σ i (t), σ i+1 (t)), (1) gdzie Φ jest regułą Wolframa i ma postać jak na rysunku poniżej. Rysunek 2: Takie odwzorowanie można reprezentować liczbą dziesiętną. Jeśli popatrzymy na konfigurację łańcucha binarnego na Rys.4. to licząc od prawej strony mamy 240 = (2) ji wartość dziesiętna 240 jest tzw. Regułą Wolframa o numerze 240. Dla automatów 8-bitowych mamy 256 reguł. Poniżej znajduje się program reg.cc który przypisuje liczbie dziesiętnej wartość łańcucha binarnego o zadanej długości. 1 #include <iostream> 2 #include <c a s s e r t > 3 #include <s t d l i b. h> 4 5 using namespace std ; class C e l l u l a r { // d e k l a r a c j a k l a s y C e l l u l a r 9 private : 10 int Regula ; 11 char RegulaLancuchBin ; // d e k l a r a c j a wskaznika na znak 12 // pod tym adresem b e d z i e zapamietana 13 // t a b l i c a r e p r e z e n t u j a c a lancuch binarny 14 // d l a l i c z b y Regula 8 b i t o w e j 15 public : C e l l u l a r ( ) { 18 RegulaLancuchBin=new char [ 8 ] ; 19 i f (! RegulaLancuchBin ){ 20 cout<< brak pamieci dla tablicy RegulaLancuchBin [8] <<e n d l ; 21 } 22 } void WczytajRegule ( int dec ){ a s s e r t ( dec>=0 && dec <256); Regula=dec ; i t o s ( Regula, RegulaLancuchBin, 2, 8 ) ; // zamieniamy l i c z b e Regula 31 // na lancuch bitowy 32 } ; M.R. Dudek dla < OWK/ > 2 Materiał dystrybuowany bezpłatnie

3 0.1 Jednowymiarowe automaty komórkowe Przykłady programowania w C void i t o s ( int xx, char lanc, int nn, int DLUG) ; void PokazRegule ( ) { 37 cout<< Regula <<Regula<< : <<RegulaLancuchBin<<e n d l ; 38 } } ; void C e l l u l a r : : i t o s ( int xx, char lanc, int nn, int DLUG){ 43 long x=xx ; 44 int l=dlug 1; 45 long n = nn ; 46 int j ; for ( j =0; j<dlug; j++) ( l anc+j )= 0 ; 49 ( l anc+dlug)= 0 ; i f (! x ) ; 52 else 53 { 54 do 55 { 56 ( l anc+l )= 0 +x % n ; x/=n ; l ; 61 } while ( x ) ; 62 for ( j =0; j<l ; j++) ( lanc+j )= 0 ; 63 ( l anc+dlug)= 0 ; } 66 } int main ( int argc, char argv ){ 70 i f ( argc!=2){ 71 cout<< Poprawny format polecenia: <<argv [0] << nr reg Wolframa <<e n d l ; 72 return 0 ; 73 } int reg=a t o i ( argv [ 1 ] ) ; //numer r e g u l y Wolframa C e l l u l a r A; 78 A. WczytajRegule ( reg ) ; 79 A. PokazRegule ( ) ; return 0 ; 82 } Kolejny program, reguly.cc, wyrysowuje dywan przestrzenny na ekranie dla zadanej reguły. 1 #include <iostream> 2 #include <c a s s e r t > 3 #include <s t d l i b. h> 4 M.R. Dudek dla < OWK/ > 3 Materiał dystrybuowany bezpłatnie

4 0.1 Jednowymiarowe automaty komórkowe Przykłady programowania w C++ 5 using namespace std ; class C e l l u l a r { // d e k l a r a c j a k l a s y C e l l u l a r 9 private : 10 int Regula ; 11 char RegulaLancuchBin ; // d e k l a r a c j a wskaznika na znak 12 // pod tym adresem b e d z i e zapamietana 13 // t a b l i c a r e p r e z e n t u j a c a lancuch binarny 14 // d l a l i c z b y Regula 8 b i t o w e j 15 public : C e l l u l a r ( ) { 18 RegulaLancuchBin=new char [ 8 ] ; 19 i f (! RegulaLancuchBin ){ 20 cout<< brak pamieci dla tablicy RegulaLancuchBin [8] <<e n d l ; 21 } 22 } void WczytajRegule ( int dec ){ 25 a s s e r t ( dec>=0 && dec <256); 26 Regula=dec ; 27 i t o s ( Regula, RegulaLancuchBin, 2, 8 ) ; // zamieniamy l i c z b e Regula 28 // na lancuch bitowy 29 } ; void i t o s ( int xx, char lanc, int nn, int DLUG) ; 32 void PokazRegule ( ) { 33 cout<< Regula <<Regula<< : <<RegulaLancuchBin<<e n d l ; 34 } int ZakodujSasiedztwo ( const int &lewy, const int &srodek, const int &prawy ){ 37 int l i c z b a d e k o d, reg, r e f ; 38 char znak, zero= 0 ; 39 r e f =(int ) zero ; reg=prawy+2 srodek+4 lewy ; 42 znak = ( RegulaLancuchBin+7 r e g ) ; 43 l i c z b a d e k o d =(( int ) ( znak)) r e f ; 44 return l i c z b a d e k o d ; } 47 } ; void C e l l u l a r : : i t o s ( int xx, char lanc, int nn, int DLUG){ 50 long x=xx ; 51 int l=dlug 1; 52 long n = nn ; 53 int j ; for ( j =0; j<dlug; j++) ( l anc+j )= 0 ; 56 ( l anc+dlug)= 0 ; i f (! x ) ; 59 else 60 { M.R. Dudek dla < OWK/ > 4 Materiał dystrybuowany bezpłatnie

5 0.1 Jednowymiarowe automaty komórkowe Przykłady programowania w C++ 61 do 62 { 63 ( l anc+l )= 0 +x % n ; x/=n ; l ; 68 } while ( x ) ; 69 for ( j =0; j<l ; j++) ( lanc+j )= 0 ; 70 ( l anc+dlug)= 0 ; } 73 } void WarunkiPeriodyczne ( int &i l e f t, const int &i, int &i r i g h t, const int &L ) ; int main ( int argc, char argv ){ 78 i f ( argc!=4){ 79 cout<< Poprawny format polecenia: ; 80 cout<<argv [0] << nr reg Wolframa l krok czas l wezlow <<e n d l ; 81 return 0 ; 82 } int reg=a t o i ( argv [ 1 ] ) ; //numer r e g u l y Wolframa 85 int T=a t o i ( argv [ 2 ] ) ; // l i c z b a krokow czasowych 86 int L=a t o i ( argv [ 3 ] ) ; // l i c z b a wezlow C e l l u l a r A; 89 A. WczytajRegule ( reg ) ; 90 A. PokazRegule ( ) ; int Dywan=new int [ L ] ; 93 int DD=new int [ L ] ; for ( int i =0; i <L ; i ++){ 96 Dywan [ i ]=0; 97 } int ilewy, i s r o d, iprawy ; 101 int slewy, ssrod, sprawy ; (Dywan+L/2)=1; // s t a r t for ( int t =0; t<t; t++){ for ( int i =0; i<l ; i ++){ // przegladamy stan dywanu w c h w i l i t 108 i f ( (Dywan+i )==1)cout<< * ; else cout<< ; 109 } 110 cout<<endl ; for ( int i =0; i<l ; i ++){ 114 i l e w y=i 1; i s r o d=i ; iprawy=i +1; 115 WarunkiPeriodyczne ( ilewy, i srod, iprawy, L ) ; 116 slewy = (Dywan+i l e w y ) ; s s r o d = (Dywan+i s r o d ) ; sprawy= (Dywan+iprawy ) ; M.R. Dudek dla < OWK/ > 5 Materiał dystrybuowany bezpłatnie

6 0.1 Jednowymiarowe automaty komórkowe Przykłady programowania w C++ Rysunek 3: (DD+i )=A. ZakodujSasiedztwo ( slewy, ssrod, sprawy ) ; 119 } for ( int i =0; i<l ; i ++){ 122 (Dywan+i )= (DD+i ) ; 123 } 124 } return 0 ; 128 } void WarunkiPeriodyczne ( int &i l e w y, const int &i, int &i prawy, const int &L){ 131 i f ( i ==0) i l e w y=l 1; 132 else { 133 i f ( i==l 1) i prawy =0; 134 } 135 } Wynik działania tego programu dla reguły Wolframa o numerze 149 jest na rysunku poniżej. Kolejny program regulyppm.cc na dysku zapisuje dywan czasoprzestrzenny w postaci pliku ppm. Pogram ten dostępny jest wraz z innymi źródłami tego kursu. Tutaj zamieszczamy tylko fragment wprowadzający format zapisu do pliku ppm. Pozostałe części programu są jak poprzednio. Uwaga, zmienna L z poprzedniego programu to stała N poniżej. 1 int main ( int argc, char argv ){ 2 i f ( argc!=3){ 3 cout<< Poprawny format polecenia: ; 4 cout<<argv [0] << nr reg Wolframa l krok czas <<e n d l ; 5 return 0 ; 6 } 7 8 int reg=a t o i ( argv [ 1 ] ) ; //numer r e g u l y Wolframa 9 int T=a t o i ( argv [ 2 ] ) ; // l i c z b a krokow czasowych 10 M.R. Dudek dla < OWK/ > 6 Materiał dystrybuowany bezpłatnie

7 0.1 Jednowymiarowe automaty komórkowe Przykłady programowania w C++ 11 C e l l u l a r A; 12 A. WczytajRegule ( reg ) ; 13 // A. PokazRegule ( ) ; int ilewy, i s r o d, iprawy ; 18 int slewy, ssrod, sprawy ; // Najpierw piszemy symbol P3 k t o r y oznaczac b e d z i e ze k o l o r y 22 // beda kodowane w ASCII cout<< P3 <<endl ; //potem piszemy dwie l i c z b y c a l k o w i t e N M r e p r e z e n t u j a c e 27 // odpowiednio l i c z b e kolumn i l i c z b e w i e r s z y obrazka 28 // np // c z y l i N=400 i M= // 31 int N=1000, M=1000; 32 cout<<m<< <<N<<endl ; 33 //W k o l e j n e j l i n i i polecen piszemy maksymalna l i c z b e kolorow cout <<255<<endl ; // Nastepnie piszemy t r o j k i RGB l i c z b c a l k o w i t y c h 38 // z p r z e d z i a l u [ 0, ] o l i c z b i e t r o j e k rownej NxM int r, g, b ; int Dywan=new int [ N ] ; 46 int DD=new int [ N ] ; for ( int i =0; i <N; i ++){ 49 Dywan [ i ]=0; 50 } 51 (Dywan+N/2)=1; // s t a r t for ( int t =0; t<t; t++){ for ( int i =0; i<n; i ++){ // przegladamy stan dywanu w c h w i l i t 57 i f ( (Dywan+i )==1)cout <<255<< <<0<< <<0<<endl ; 58 else cout<<0<< <<0<< <<0<<endl ; 59 } Natomiast na kolejnym rysunku mamy wynik jego działania dla tej samej reguły Wolframa o numerze 149. M.R. Dudek dla < OWK/ > 7 Materiał dystrybuowany bezpłatnie

8 0.2 Dwuwymiarowe automaty komórkowe Przykłady programowania w C++ Rysunek 4: Ta sama reguła 149 ale jej wynik zrzucony został do pliku.ppm o rozdzielczości pikseli. Widać strukturę fraktalną utworzonego dywanu czasoprzestrzennego. 0.2 Dwuwymiarowe automaty komórkowe Ponieważ każdy układ dyskretny w czasie o tej własności że liczba stanów tego układu jest skończona spełnia warunki bycia automatem komórkowym to można pokusić się o napisanie programu na automat dwuwymiarowy. Inspirację można wziąć z gry komputerowej Game of Life Johna Conway a. Nie jest to gra komputerowa w potocznym rozumieniu bo nie ma w niej zwycięzców i przegranych - zobacz np. W naszym przypadku również życie będzie toczyć się na siatce kwadratowej o L L kwadratów. Każdy kwadrat może być w dwóch stanach: zajęty lub pusty co bedziemy oznaczać odpowiednio jedynką i zerem. O tym jaki bedzie stan kwadratu w położeniu (i, j) sieci kwadratowej w kolejnym kroku czasowym decydują reguły, powiedzmy że mają one postać przepisu polegającego na tym ze jeśli w otoczeniu kwadratu (i,j) jest za mało kwadratów zajętych (liczba mniejsza niż 3) to stan kwadratu σ (i,j) (t + 1) w kolejnym kroku czasowym (t+1) wynosi 0. Podobnie jeśli otoczenie kwadratu (i,j) jest przepełnione. Niech stan kwadratu σ (i,j) (t + 1) = 1 tylko jeśli obsadzenie dziewięciu kwadratów z kwadratem (i,j) w centrum przyjmuje wartości 3 lub 4. Wtedy matematycznie te reguły można zapisać w postaci wzoru: 0; jeśli σ (i,j) (t + 1) = 1; jeśli 3 0; jeśli sąsiedztwo(i,j) sąsiedztwo(i,j) sąsiedztwo(i,j) σ (i,j) (t) < 3 (3) σ (i,j) (t) < 5 (4) σ (i,j) (t) 5 (5) gdzie σ = 0 lub 1. Te dziewięć kwadratów reprezentujących sąsiedztwo kwadratu (i,j) przedstawiono na rysunku ponniżej. Poniżej przedstawiony jest kod programu realizującego taki automat komórkowy. Plik dostępny jest niezależnie pod nazwą 2Dautomaty.cc. W programie najpierw poproszeni jestesmy o podanie liniowego wymiaru sieci kwadratowej L. Można wpisać np. L=100. Potem poproszeni jesteśmy o wpisanie liczby kroków czasowych trwania naszego eksperymentu. Na początek najlepiej wybrać liczbę kroków czasowych taką samą jak liniowy wymiar sieci, tj. N=100. W programie w funkcji main() nastepuje wydruk do pliku o nazwie serweta.ppm. Taki wydruk dla (6) M.R. Dudek dla < OWK/ > 8 Materiał dystrybuowany bezpłatnie

9 0.2 Dwuwymiarowe automaty komórkowe Przykłady programowania w C++ Rysunek 5: Sąsiedztwo 9 kwadratów z centralnym kwadratem (i,j). Kazdy kwadrat może być w stanie σ = 0 lub 1 czyli kwadrat pusty i kwadrat obsadzony. parametrów L=1000 i N=1000 można zobaczyć na rysunku poniżej w przypadku gdy warunkami początkowymi były stany wszystkich kwadratów sieci kwadratowej L L puste za wyjątkiem 9 kwadratów w centrum siatki. 1 // p r z y k l a d automatu dwuwymiarowego na s i e c i kwadratowej 2 // Regule stanowi stan s a s i e d z t w a 9 kwadratow ( t u t a j g w i a z d k i ) 3 // s i e c i kwadratowej LxL 4 // 5 // 6 // 7 // 8 // Stan s i wezla srodkowego i w nastepnym kroku czasowym z a l e z y od stanow 9 // s k d z i e w i e c i u wezlow 10 //w kroku poprzednim k = : 11 // 12 // s i =suma k =1..9 s k 13 // Regula : 14 // i f (suma<3) s i =0 15 // i f (suma>=3 && suma<5) s i =1 16 // i f (suma>=5) s i =0 17 #include <iostream> 18 #include <fstream> 19 #include <c a s s e r t > 20 #include <s t d l i b. h> using namespace std ; class Otoczenie { 25 private : 26 int Sasiad [ 9 ] ; // s t a t y c z n a t a b l i c a d l a stanow obsadzen 9 kwadratow 27 int stan ; 28 int L ; // l i n i o w y wymiar s i e c i kwadratowej 29 int suma ; // l i c z b a k t o r a mowi i l e sposrod komorek j e s t z a j e t y c h 30 public : 31 Otoczenie ( int LL){L=LL; } // k o n s t r u k t o r 32 int OkreslStanOtoczenia ( int S, int nr ){ // argumentem j e s t wskaznik na i n t 33 // adres b e d z i e r e p r e z e n t o w a l s i a t k e kwadratowa 34 // przy pomocy t a b l i c y jednowymiarowej 35 // o t o c z e n i e w konwencji s i e c i kwadratowej. 36 //n=i L+j ; numer porzadkowy t a b l i c y jednowymiarowej 37 // odpowiadajacy elementowu ( i, j ) t a b l i c y 38 // dwuwymiarowej 39 // ( i 1, j 1) ( i 1, j ) ( i 1, j +1) 40 // ( i, j 1) ( i, j ) ( i, j +1) 41 // ( i +1, j 1) ( i +1, j ) ( i +1, j +1) M.R. Dudek dla < OWK/ > 9 Materiał dystrybuowany bezpłatnie

10 0.2 Dwuwymiarowe automaty komórkowe Przykłady programowania w C int i i, j j ; 45 int suma=0; 46 int n, i, j ; i=nr /L ; j=nr%l ; // p r z y p i s a n i e numerowi nr wspolrzednych ( i, j ) 49 // s i a t k i kwadratowej // gorny w i e r s z o t o c z e n i a 9 kwadratow 52 i i =PeriodWar ( i 1); 53 j j=periodwar ( j 1); 54 n=i i L+j j ; suma+= (S+n ) ; 55 n=i i L+j ; suma+= (S+n ) ; 56 j j=periodwar ( j +1); 57 n=i i L+j j ; suma+= (S+n ) ; 58 // srodkowy w i e r s z o t o c z e n i a 9 kwadratow 59 j j=periodwar ( j 1); 60 n=i L+j j ; suma+= (S+n ) ; 61 n=i L+j ; suma+= (S+n ) ; 62 j j=periodwar ( j +1); 63 n=i L+j j ; suma+= (S+n ) ; 64 // dolny w i e r s z o t o c z e n i a 9 kwadratow 65 i i =PeriodWar ( i +1); 66 j j=periodwar ( j 1); 67 n=i i L+j j ; suma+= (S+n ) ; 68 n=i i L+j ; suma+= (S+n ) ; 69 j j=periodwar ( j +1); 70 n=i i L+j j ; suma+= (S+n ) ; i f ( suma<3) stan =0; // za malo komorek z a j e t y c h 74 else { 75 i f (suma>=3 && suma<5) stan =1; // warunki optymalne d l a komorek 76 else stan =0; // p r z e p e l n i e n i e 77 } return stan ; 80 } int PeriodWar ( int i ){ // metoda dbajaca aby wartosc 84 int k=i ; // argumentu i b y l a w [ 0, L 1] 85 i f ( i <0) k=l 1; 86 else { 87 i f ( i>=l) k=0; 88 } 89 return k ; 90 } } ; void WarunkiPocz ( int s, int L){ 95 int n ; // najpierw wypelniamy zerami c a l a s i a t k e kwadratowa M.R. Dudek dla < OWK/ > 10 Materiał dystrybuowany bezpłatnie

11 0.2 Dwuwymiarowe automaty komórkowe Przykłady programowania w C++ 98 for ( int i =0; i<l ; i ++){ 99 for ( int j =0; j<l ; j ++){ 100 n=i L+j ; 101 ( s+n)=0; 102 } 103 } // wypelniamy jedynkami 9 kwadratow na srodku s i a t k i n=(l/2) L+L/ 2 ; ( s+n)=1; ( s+n 1)=1; ( s+n+1)=1; 108 n=(l/2+1) L+L/ 2 ; ( s+n)=1; ( s+n 1)=1; ( s+n+1)=1; 109 n=(l/2 1) L+L/ 2 ; ( s+n)=1; ( s+n 1)=1; ( s+n+1)=1; 110 } int Z e r u j S i a t k e ( int tab, int L){ for ( int i =0; i <L ; i ++){ 115 for ( int j =0; j<l ; j ++){ 116 ( tab+i L+j )=0; 117 } 118 } } void ZapisDoPlikuPPM ( int N, int M, int S ){ fstream WY; // d e k l a r a c j a 125 WY. open ( serweta.ppm, i o s : : out ) ; // i z a p i s do p l i k u serweta. ppm // Najpierw piszemy symbol P3 k t o r y oznaczac b e d z i e ze k o l o r y 129 // beda kodowane w ASCII WY<< P3 <<endl ; //potem piszemy dwie l i c z b y c a l k o w i t e N M r e p r e z e n t u j a c e 134 // odpowiednio l i c z b e kolumn i l i c z b e w i e r s z y obrazka 135 // 136 WY<<M<< <<N<<endl ; 137 //W k o l e j n e j l i n i i polecen piszemy maksymalna l i c z b e kolorow WY<<255<<endl ; // Nastepnie piszemy t r o j k i RGB l i c z b c a l k o w i t y c h 142 // z p r z e d z i a l u [ 0, ] o l i c z b i e t r o j e k rownej NxM int r, g, b ; 145 int n ; for ( int i =0; i <M; i ++){ 148 for ( int j =0; j<n; j ++){ n=i M+j ; i f ( ( S+n)==1)WY<<255<< <<0<< <<0<<endl ; 153 else WY<<255<< <<255<< <<255<<endl ; M.R. Dudek dla < OWK/ > 11 Materiał dystrybuowany bezpłatnie

12 0.2 Dwuwymiarowe automaty komórkowe Przykłady programowania w C } 155 } WY. c l o s e ( ) ; // zamkniecie z a p i s u 158 } void ZamienSiatki ( int A, int B, int L2 ){ 161 for ( int n=0;n<l2 ; n++){ 162 (A+n)= (B+n ) ; 163 } 164 } int main ( ) { cout<< Wprowadz wymiar liniowy sieci kwadratowej L= ; 169 int L ; 170 cin>>l ; 171 int L2=L L ; cout<< Podaj liczbe krokow czasowych ewolucji automatu komorkowego N= ; 174 int Nkrokow ; 175 cin>>nkrokow ; // d e k l a r a c j a dynamiczna t a b l i c y SIATKA [ ] 178 int SIATKA=new int [ L2 ] ; //w kroku t 179 // wtedy n t y element t a b l i c y oznacza w i e r s z i oraz kolumne j 180 // i=n/l oraz j=n % L int DUBEL=new int [ L2 ] ; // s i a t k a d u b e l w kroku t // Deklarujemy warunki poczatkowe z a p e l n i e n i a t a b l i c y SIATKA 187 //w p o s t a c i z a p e l n i o n y c h 9 kwadratow 188 // p o z o s t a l e elementy s i a t k i sa n i e z a p e l n i o n e WarunkiPocz (SIATKA, L ) ; // a l o k a c j a o b i e k t u z k l a s y Otoczenie 194 Otoczenie A(L ) ; // o b i e k t z metoda do w y l i c z e n i a 195 // stanu s a s i e d z t w a s k l a d a j a c e g o s i e z 9 kwadratow for ( int t =0; t<nkrokow ; t++){ 198 Z e r u j S i a t k e (DUBEL, L ) ; // wyzerowanie elementow s i a t k i dubla 199 // stany z a j e t o s c i elementow s i a t k i 200 // dotycza kroku w t for ( int n=0;n<l2 ; n++){ 202 (DUBEL+n)=A. OkreslStanOtoczenia (SIATKA, n ) ; //argumentem 203 // j e s t SIATKA d l a kroku t 204 } ZamienSiatki (SIATKA,DUBEL, L2 ) ; //podmiana s i a t e k 208 } 209 M.R. Dudek dla < OWK/ > 12 Materiał dystrybuowany bezpłatnie

13 0.2 Dwuwymiarowe automaty komórkowe Przykłady programowania w C ZapisDoPlikuPPM (L, L,SIATKA ) ; return 0 ; 213 } Rysunek 6: Wynik działania dwuwymiarowego automatu komórkowego z regułami przeżycia we wzorach (6) po 1000 kroków czasowych i warunkach pocątkowych w postaci zapełnionych 9 kwadratów na środku siatki. W przypadku tego programu skorzystaliśmy z małej sztuczki polegającej na tym że do zapisu stanów L L kwadratów użyliśmy tablicy jednowymiarowej zamiast kwadratowej. W tym przypadku tablica jednowymiarowa SIATKA[0.. L 2 1] przebiegała L 2 kwadratów sieci kwadratowej wierszami od góry do dołu jak poniżej: L-1 L L+1 L L-1... L(L-1) L(L-1)+1 L(L-1)+2... L 2-1 Wtedy element (i, j) można wyliczyć z następujących równań: M.R. Dudek dla < OWK/ > 13 Materiał dystrybuowany bezpłatnie

14 0.2 Dwuwymiarowe automaty komórkowe Przykłady programowania w C++ i = n/l j = n%l (7) gdzie n = 0, 1,..., L 2 1 jest indeksem tablicy jednowymiarowej. M.R. Dudek dla < OWK/ > 14 Materiał dystrybuowany bezpłatnie

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy 2.4 Dziedziczenie Poprzednie dwa rozdziały które dotyczyły zagadnienia automatów komórkowych na przykładach programów w C++. Mogłyby one sugerować że niekoniecznie trzeba programować obiektowo aby napisać

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

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

Biblioteka obiektowa C++ klasa string - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Biblioteka obiektowa C++ klasa string - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ programowanie w C++ dla OWK Biblioteka obiektowa C++ klasa string - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ 1 Streszczenie W tym rozdziale podamy kilka najprostszych

Bardziej szczegółowo

Sztuczne neurony - programowanie w C++ Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Sztuczne neurony - programowanie w C++ Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ programowanie w C++ dla OWK Sztuczne neurony - programowanie w C++ Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ 1 Streszczenie Dyskusja o stworzeniu sztucznego mózgu zawsze powoduje duże emocje. Pierwszy

Bardziej szczegółowo

Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ programowanie w C++ dla OWK Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ 1 Streszczenie W tym rozdziale podamy kilka najprostszych

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

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

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

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

TEMAT : KLASY POLIMORFIZM

TEMAT : KLASY POLIMORFIZM TEMAT : KLASY POLIMORFIZM 1. Wprowadzenie do polimorfizmu i funkcji wirtualnych w języku C++ Język C++ zakłada, że w pewnych przypadkach uzasadnione jest tworzenie klas, których reprezentanci w programie

Bardziej szczegółowo

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 19 Dynamiczne struktury danych Dynamiczną strukturą danych nazywamy taka strukturę danych, której rozmiar, a więc liczba przechowywanych w niej danych, może się dowolnie

Bardziej szczegółowo

Język C++ wykład VIII

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,

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

Projekt 6: Równanie Poissona - rozwiązanie metodą algebraiczną.

Projekt 6: Równanie Poissona - rozwiązanie metodą algebraiczną. Projekt 6: Równanie Poissona - rozwiązanie metodą algebraiczną. Tomasz Chwiej 9 sierpnia 18 1 Wstęp 1.1 Dyskretyzacja n y V V 1 V 3 1 j= i= 1 V 4 n x Rysunek 1: Geometria układu i schemat siatki obliczeniowej

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

Wprowadzenie do programowania i programowanie obiektowe

Wprowadzenie do programowania i programowanie obiektowe Wprowadzenie do programowania i programowanie obiektowe Wirtotechnologia Zajęcia nr 10 autor: Grzegorz Smyk Wydział Odlewnictwa Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza

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

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

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

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

Bardziej szczegółowo

Podstawy programowania w C++

Podstawy programowania w C++ Podstawy programowania w C++ Strumienie wejścia cin>> i wyjścia cout

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

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy : class nazwa_klasy prywatne dane i funkcje public: publiczne dane i funkcje lista_obiektów;

Bardziej szczegółowo

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35 Programowanie w C++ Wykład 3 Katarzyna Grzelak 12 marca 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35 Zakres ważności obiektów K.Grzelak (Wykład 1) Programowanie w C++ 2 / 35 Zakres ważności obiektów

Bardziej szczegółowo

Obliczenia inspirowane Naturą

Obliczenia inspirowane Naturą Obliczenia inspirowane Naturą Wykład 02 Jarosław Miszczak IITiS PAN Gliwice 06/10/2016 1 / 31 Czego dowiedzieliśmy się na poprzednim wykładzie? 1... 2... 3... 2 / 31 1 2 3 3 / 31 to jeden z pierwszych

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

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

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

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy i obiekty Programowanie i obiekty uzupełnienie notatek: dr Jerzy Białkowski i obiekty 1 2 3 4 i obiekty Obiektowość języka C++ Na tym wykładzie poznamy: ˆ Klasa (w języku C++ rozszerzenie struktury, typ

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

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach

Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach Materiał uzupełniający do ćwiczen z przedmiotu: Programowanie w C ++ - ćwiczenia na wskaźnikach 27 kwietnia 2012 Wiedząc, że deklarowanie typu rekordowego w języku C/ C++ wygląda następująco: struct element

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 w C++ - wybrane przykłady szablonów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Programowanie w C++ - wybrane przykłady szablonów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ programowanie w C++ dla OWK Programowanie w C++ - wybrane przykłady szablonów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ 1 Streszczenie W tym rozdziale podamy kilka najprostszych przykładów programów

Bardziej szczegółowo

Proste programy w C++ zadania

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

Bardziej szczegółowo

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

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Podstawy informatyki Elektrotechnika I rok Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia Katedra Energoelektroniki i Automatyki Systemów Przetwarzania Energii AGH Kraków 2017 Tematyka

Bardziej szczegółowo

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

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

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

Operacje wejścia/wyjścia (odsłona druga) - pliki

Operacje wejścia/wyjścia (odsłona druga) - pliki Operacje wejścia/wyjścia (odsłona druga) - pliki Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2005 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały

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

Modelowanie wieloskalowe. Automaty Komórkowe - podstawy

Modelowanie wieloskalowe. Automaty Komórkowe - podstawy Modelowanie wieloskalowe Automaty Komórkowe - podstawy Dr hab. inż. Łukasz Madej Katedra Informatyki Stosowanej i Modelowania Wydział Inżynierii Metali i Informatyki Przemysłowej Budynek B5 p. 716 lmadej@agh.edu.pl

Bardziej szczegółowo

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Składnia C++ Programowanie Obiektowe Mateusz Cicheński Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory

Bardziej szczegółowo

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami: Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie

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

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

Układy dynamiczne Chaos deterministyczny

Układy dynamiczne Chaos deterministyczny Układy dynamiczne Chaos deterministyczny Proste iteracje odwzorowań: Funkcja liniowa Funkcja logistyczna chaos deterministyczny automaty komórkowe Ewolucja układu dynamicznego Rozwój w czasie układu dynamicznego

Bardziej szczegółowo

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński WYKŁAD 8 Funkcje i algorytmy rekurencyjne Proste przykłady Programy: c3_1.c..., c3_6.c Tomasz Zieliński METODY REKURENCYJNE (1) - program c3_1 ======================================================================================================

Bardziej szczegółowo

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 3 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Instrukcja wielokrotnego wyboru Instrukcja wielokrotnego wyboru switch umożliwia podejmowanie decyzji na podstawie wartości

Bardziej szczegółowo

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

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

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

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

Bardziej szczegółowo

Języki i metodyka programowania. Wprowadzenie do języka C

Języki i metodyka programowania. Wprowadzenie do języka C Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia

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

I - Microsoft Visual Studio C++

I - Microsoft Visual Studio C++ I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i

Bardziej szczegółowo

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków ZAWARTOŚCI 3 PLIKOW W WORDZIE: MAIN.CPP: #include #include #include pamięci // Potrzebne do memset oraz memcpy, czyli kopiowania bloków #include "Rysowanie_BMP.h" using

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 Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej

Bardziej szczegółowo

Pytania sprawdzające wiedzę z programowania C++

Pytania sprawdzające wiedzę z programowania C++ Pytania sprawdzające wiedzę z programowania C++ Wstęp 1. Zaprezentuj mechanikę tworzenia programu napisanego w języku C++. 2. Co to jest kompilacja? 3. Co to jest konsolidacja? 4. Co to jest kod wykonywalny?

Bardziej szczegółowo

Metoda eliminacji Gaussa

Metoda eliminacji Gaussa Metoda eliminacji Gaussa Rysunek 3. Rysunek 4. Rozpoczynamy od pierwszego wiersza macierzy opisującej nasz układ równań (patrz Rys.3). Zakładając, że element a 11 jest niezerowy (jeśli jest, to niezbędny

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

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,

Bardziej szczegółowo

Wyjątki (exceptions)

Wyjątki (exceptions) Instrukcja laboratoryjna nr 6 Programowanie w języku C 2 (C++ poziom zaawansowany) Wyjątki (exceptions) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp Wyjątki (ang.

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

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły

Bardziej szczegółowo

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 )

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,

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

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

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,

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

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki Wykład 2 - podstawy języka C++ Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu. Zmienne i ich nazwy, podstawowe typy: całkowite, rzeczywiste, znakowe i napisowe. Instrukcje:

Bardziej szczegółowo

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5

WYKŁAD 10. Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo. Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5 WYKŁAD 10 Zmienne o złożonej budowie Statyczne i dynamiczne struktury danych: lista, kolejka, stos, drzewo Programy: c5_1.c, c5_2, c5_3, c5_4, c5_5 Tomasz Zieliński ZMIENNE O ZŁOŻONEJ BUDOWIE (1) Zmienne

Bardziej szczegółowo

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy.

12. Rekurencja. UWAGA Trzeba bardzo dokładnie ustalić <warunek>, żeby mieć pewność, że ciąg wywołań się zakończy. 12. Rekurencja. Funkcja rekurencyjna funkcja, która wywołuje samą siebie. Naturalne postępowanie: np. zbierając rozsypane pionki do gry podnosi się zwykle pierwszy, a potem zbiera się resztę w ten sam

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

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików

1 Pierwsze kroki w C++ cz.3 2 Obsługa plików 1 Pierwsze kroki w C++ cz.3 2 Obsługa plików Do pracy z plikami zewnętrznymi niezbędna będzie biblioteka fstream. Udostępnia ona programiście narzędzia do zapisu i odczytu plików. 2.1 Typ zmiennej fstream.

Bardziej szczegółowo

Inicjacja tablicy jednowymiarowej

Inicjacja tablicy jednowymiarowej TABLICE C++ Inicjacja tablicy jednowymiarowej typ_komórek_tablicy nazwa_tablicy [ ilość elementów tablicy ] ; np.: int tablica[1000]; czyli tablica, która może przechowywać tysiąc elementów typu całkowitego,

Bardziej szczegółowo

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego Publikacja jest dystrybuowana bezpłatnie Program Operacyjny Kapitał Ludzki Priorytet 9 Działanie 9.1 Poddziałanie

Bardziej szczegółowo

MODELOWANIE RZECZYWISTOŚCI

MODELOWANIE RZECZYWISTOŚCI MODELOWANIE RZECZYWISTOŚCI Daniel Wójcik Instytut Biologii Doświadczalnej PAN Szkoła Wyższa Psychologii Społecznej d.wojcik@nencki.gov.pl dwojcik@swps.edu.pl tel. 022 5892 424 http://www.neuroinf.pl/members/danek/swps/

Bardziej szczegółowo

Wstęp do informatyki- wykład 7

Wstęp do informatyki- wykład 7 1 Wstęp do informatyki- wykład 7 Operatory przypisania, złożone operatory przypisania, Pętla while i do..while Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania.

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania wykład 4 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Pętle wykonujące się podaną liczbę razy Jeśli chcemy wykonać pewien fragment programu określoną liczbę razy, możemy użyć

Bardziej szczegółowo

Techniki Programowania wskaźniki 2

Techniki Programowania wskaźniki 2 Techniki Programowania wskaźniki 2 Łukasz Madej Katedra Informatyki Stosowanej i Modelowania Wykłady opracowane we współpracy z Danutą Szeligą, Łukaszem Sztangretem Jeżeli wskaźnik pokazuje na element

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:

Bardziej szczegółowo

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Historia C++ został zaprojektowany w 1979 przez Bjarne Stroustrupa jako rozszerzenie języka C o obiektowe mechanizmy abstrakcji danych i

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe 10.04.2017 W slajdach są materiały zapożyczone z https://www.ii.uni.wroc.pl/~prz/2012lato/cpp/slajdy/cpp5.ppt Przykład wykorzystania obiektu Obiekt X jest instancją klasy Y Obiekt

Bardziej szczegółowo

Polimorfizm w pigułce

Polimorfizm w pigułce Polimorfizm w pigułce Kwadrat kwadr( 5 );... wypiszdane( &kwadr );... void wypiszdane( Kwadrat * k ) cout

Bardziej szczegółowo

Projektowanie klas c.d. Projektowanie klas przykład

Projektowanie klas c.d. Projektowanie klas przykład Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej

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

C++ wprowadzanie zmiennych

C++ wprowadzanie zmiennych C++ wprowadzanie zmiennych Każda zmienna musi być zadeklarowana, należy określić jej nazwę (identyfikator) oraz typ. Opis_typu lista zmiennych Dla każdej zmiennej rezerwowany jest fragment pamięci o określonym

Bardziej szczegółowo

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej. Polimorfizm jest filarem programowania obiektowego, nie tylko jeżeli chodzi o język C++. Daje on programiście dużą elastyczność podczas pisania programu. Polimorfizm jest ściśle związany z metodami wirtualnymi.

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 5 JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Wykład 5 1 SPECYFIKATOR const Specyfikator (przydomek) const: Umieszczenie przed nazwą zmiennej specyfikatora const w jej definicji informuje kompilator,

Bardziej szczegółowo

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

Złożoność obliczeniowa zadania, zestaw 2

Złożoność obliczeniowa zadania, zestaw 2 Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze

Bardziej szczegółowo

Języki programowania - podstawy

Języki programowania - podstawy Języki programowania - podstawy Andrzej Dudek Wydział Techniczno Informatyczny W Jeleniej Górze Dudek A. Informatyka przemysłowa tendencje i wyzwania 26.10.2015 1 /24 Algorytm określony sposób rozwiązania

Bardziej szczegółowo

Wstęp do Programowania, laboratorium 02

Wstęp do Programowania, laboratorium 02 Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite

Bardziej szczegółowo

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r. M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza

Bardziej szczegółowo

a 11 a a 1n a 21 a a 2n... a m1 a m2... a mn a 1j a 2j R i = , C j =

a 11 a a 1n a 21 a a 2n... a m1 a m2... a mn a 1j a 2j R i = , C j = 11 Algebra macierzy Definicja 11.1 Dla danego ciała F i dla danych m, n N 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

Programowanie komputerowe. Zajęcia 4

Programowanie komputerowe. Zajęcia 4 Programowanie komputerowe Zajęcia 4 Typ logiczny Wartości logiczne są reprezentowane przez typ bool. Typ bool posiada tylko dwie wartości: true i false. Zamiast wartości logicznych można używać wartości

Bardziej szczegółowo

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019 Wykład 3 22 marca 2019 Klasy wewnętrzne Klasa wewnętrzna class A {... class B {... }... } Klasa B jest klasa wewnętrzna w klasie A. Klasa A jest klasa otaczajac a klasy B. Klasy wewnętrzne Właściwości

Bardziej szczegółowo

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016 Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa

Bardziej szczegółowo