Programowanie Procedurale

Podobne dokumenty
Wstęp do Informatyki

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

Programowanie Proceduralne

Programowanie i struktury danych

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

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

Alokacja pamięci dla tablicy dwuwymiarowej

Techniki Programowania wskaźniki 2

Wstęp do programowania

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

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

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

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

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

Programowanie obiektowe W3

Wstęp do Programowania 2

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

Wstęp do programowania

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

Programowanie - wykład 4

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

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

Programowanie Procedurale. Pliki w języku C++

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

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

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

Część 4 życie programu

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

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

Wstęp do informatyki- wykład 9 Pętla while, do while,for -pętla w pętli- przykłady Funkcje

I - Microsoft Visual Studio C++

Języki programowania - podstawy

Programowanie Proceduralne

Zmienne i struktury dynamiczne

Wstęp do Programowania 2

Operacje wejścia/wyjścia odsłona pierwsza

Pytania sprawdzające wiedzę z programowania C++

Wstęp do programowania

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

Programowanie w języku C++

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

DYNAMICZNE PRZYDZIELANIE PAMIECI

Plik klasy. h deklaracje klas

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

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

Wprowadzenie do szablonów klas

Wstęp do programowania

Techniki Programowania wskaźniki

Wstęp do Programowania 2

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

tablica: dane_liczbowe

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

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Wykład. Materiały bazują częściowo na slajdach Marata Dukhana

Wstęp do informatyki- wykład 8 Pętla while, do while,for -pętla w pętli- przykłady Operator rzutowania Manipulatory

KURS C/C++ WYKŁAD 8. Deklaracja funkcji informuje komplilator jaką wartość funkcja będzie zwracała i jakiego typu są jej argumenty.

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

Projektowanie klas c.d. Projektowanie klas przykład

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Programowanie obiektowe w C++ Wykład 1

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Programowanie i struktury danych

Wstęp do informatyki- wykład 11 Funkcje

Programowanie Proceduralne

Wstęp do informatyki- wykład 9 Funkcje

Wstęp do programowania 1

Kontrola przebiegu programu

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

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

Informacja o programowaniu w c++ Dr Maciej Bobrowski

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

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

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

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

ECLIPSE wnioski z dwóch pierwszych laboratoriów

Programowanie obiektowe w C++ Wykład 12

Wstęp do Programowania 2

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

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

Wstęp do Programowania 2

Programowanie Proceduralne

Wstęp do programowania obiektowego, wykład 7

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

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

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

Podstawy algorytmiki i programowania - wykład 5 C-struktury cd.

Język C++ zajęcia nr 2

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

Programowanie 2. Język C++. Wykład 3.

Program 22. #include <iostream> using namespace std; struct Osoba { string Imie; string Nazwisko; char Plec; int RokUr; };

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

Programowanie obiektowe język C++

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

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

Przeciążenie (przeładowanie nazw) funkcji

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

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

Programowanie komputerowe. Zajęcia 1

Program 14. #include <iostream> #include <ctime> using namespace std;

Transkrypt:

Programowanie Procedurale Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 6 Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 1 / 27

Zbiór ctime zawiera deklarcję funkcji clock() i typu clock_t Funkcja clock() zwraca czas systemowy, który upłyna od chwili uruchomienia programu. Uwaga!!! clock() niekoniecznie musi zwracać czas w sekundach. Wartość funkcji może być albo typu long albo unsigned long, albo jeszcze innym. Rozwiazaniem powyższych problemów jest stała CLOCKS_PER_SEC zdefiniowana w ctime. Jej wartościa jest liczba systemowych jednostek czasu na sekundę. Zatem dzielac czas systemowy przez tę stała, otrzymujemy liczbe sekund. Można też pomnożyć sekundy przez tę stała, aby uzyskać czas w jednostkach systemowych. Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 2 / 27

waiting.cpp #include <iostream> #include <ctime> int main(){ using namespace std; cout << "Podaj czas opóźnienia w sekundach: "; float secs; cin >> secs; // konwersja na jednostki zegara clock_t delay = secs * CLOCKS_PER_SEC; cout << "zaczynamy\a\n"; clock_t start = clock(); while (clock() - start < delay ); cout << "gotowe \a\n"; return 0; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 3 / 27

Sortowanie babelkowe. Mierzenie czasu wykonania programu. #include <iostream> #include <ctime> #include <cstdlib> using namespace std; void swap(long a[], int i, int j); void showarr(long const a[], int n); void fillarr(long a[], int n, long maxvalue); void bubblesort(long a[], int n); Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 4 / 27

Sortowanie babelkowe. Mierzenie czasu wykonania programu. int main(){ cout <<"Podaj rozmiar tablicy: "; int n; cin >> n; long* a = new long[n]; if (a == 0) { cout << "Brak pamieci\n"; return 1; fillarr(a, n, 100); cout <<"\ntablica po wypelnieniu pseudolosowymi wartosciami\n"; showarr(a, n); clock_t start = clock(); bubblesort(a, n); clock_t koniec = clock(); clock_t czas_w_sek =(koniec-start) / CLOCKS_PER_SEC; cout <<"Tablica po posortowaniu\n"; showarr(a, n); cout <<"\n Sortowanie zajęło: " << czas_w_sek << endl; delete [] a; return 0; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 5 / 27

Sortowanie babelkowe. Mierzenie czasu wykonania programu. void swap(long a[], int i, int j) { long tmp = a[i]; a[i] = a[j]; a[j] = tmp; void bubblesort(long a[], int n) { for (int i = n - 1; i > 1; --i) { for (int j = 0; j < i; ++j) { if (a[j] > a[j + 1]) { swap(a, j, j + 1); // bubblesort() Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 6 / 27

Sortowanie babelkowe. Mierzenie czasu wykonania programu. void showarr(long const a[], int n) { for (int k = 0; k < n; k++) { cout << a[k] << "\t"; cout << endl; void fillarr(long a[], int n, long maxvalue) { srand(time(0)); for (int k = 0; k < n; ++k) { a[k] = rand() % maxvalue + 1; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 7 / 27

Deklaracja statycznych tablic dwuwymiarowych: int A[10][5]; double B[2][4]; char C[4][6]; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 8 / 27

Inicjalizacje: A[0][0] = 10; B[1][2] = 3.2; C[3][3] = a ; Deklaracja poła czona z inicjalizacja int A[3][2]={ {1,2, {3,4, {5,6 ; double B[2][3]={ {1.2,1.2,1.2,{3.4,3.4,3.4; double C[2][4]={ {1.2, {3.4 ; double D[2][4]={ {1.2 ; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 9 / 27

Przykład - w3-00.cpp #include <iostream> #include <cstdlib> using namespace std; void read (int [100][100], int, int); void write (int [][100], int, int); int main (){ int A[100][100]; read(a,6,6); write(a,6,6); return 0; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 10 / 27

Przykład - w3-00.cpp void read (int A[100][100], int w, int k) { srand(time(0)); for(int i=0; i<w; i++) for(int j=0; j<k; j++) A[i][j]=rand()%10; void write (int A[][100], int w, int k) { for(int i=0; i<w; i++){ for(int j=0; j<k; j++){ cout << "[" << i << "][" << j << "] = " << A[i][j] << " "; cout << endl; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 11 / 27

Efekt wykonania w3-00.cpp [0][0] = 9 [0][1] = 5 [0][2] = 5 [0][3] = 1 [0][4] = 2 [0][5] = 0 [1][0] = 7 [1][1] = 7 [1][2] = 7 [1][3] = 2 [1][4] = 2 [1][5] = 0 [2][0] = 1 [2][1] = 5 [2][2] = 3 [2][3] = 8 [2][4] = 1 [2][5] = 5 [3][0] = 7 [3][1] = 3 [3][2] = 4 [3][3] = 5 [3][4] = 4 [3][5] = 6 [4][0] = 7 [4][1] = 3 [4][2] = 8 [4][3] = 6 [4][4] = 5 [4][5] = 5 [5][0] = 4 [5][1] = 5 [5][2] = 0 [5][3] = 0 [5][4] = 8 [5][5] = 2 Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 12 / 27

Przykład - w3-01.cpp #include <iostream> #include <cstdlib> using namespace std; //definicje jak w w3-00.cpp void read (int [100][100], int, int); void write (int [][100], int, int); int main (){ int A[10][10]; read(a,10,10); write(a,10,10); return 0; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 13 / 27

Efekt wykonania w3-01.cpp w3-01.cpp: In function int main() : w3-01.cpp:10:15: error: invalid conversion from int (*)[10] to int [-fpermissive] /usr/include/unistd.h:357:16: error: initializing argument 1 of ssize_t read(int, void*, size_t) [-fpermissive] w3-01.cpp:10:15: error: invalid conversion from int to void* [-fpermissive] /usr/include/unistd.h:357:16: error: initializing argument 2 of ssize_t read(int, void*, size_t) [-fpermissive] w3-01.cpp:11:16: error: invalid conversion from int (*)[10] to int [-fpermissive] /usr/include/unistd.h:363:16: error: initializing argument 1 of ssize_t write(int, const void*, size_t) [-fpermissive] w3-01.cpp:11:16: error: invalid conversion from int to const void* [-fpermissive] /usr/include/unistd.h:363:16: error: initializing argument 2 of ssize_t write(int, const void*, size_t) [-fpermissive] Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 14 / 27

typedef long T; T* a[100]; // a jest tablica 100 wskaźników do T double* b[100]; // b jest tablica 100 wskaźników do double char* weekdays[] = { niedziela, poniedziałek, wtorek, środa, czwartek, piątek, sobota ; /* weekdays jest tablica wskaźników do char zainicjalizowana wskaznikami do podanych napisów */ Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 15 / 27

Następuja ce deklaracje funkcji sa równoważne void func(t* a[], int n); void func(t** a, int n); Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 16 / 27

Przykład - w3-02.cpp #include <iostream> #include <cstdlib> using namespace std; void read (int* [], int, int); void write (int* [], int, int); int main (){ int* B[5]; for(int i=0; i < 5; i++) B[i]= new int[5]; read(b,5,5); write(b,5,5); for(int i=0; i < 5; i++) delete [] B[i]; return 0; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 17 / 27

Przykład - w3-02.cpp void read (int* A[], int w, int k) { srand(time(0)); for(int i=0; i<w; i++) for(int j=0; j<k; j++) A[i][j]=rand()%10; void write (int* A[], int w, int k) { for(int i=0; i<w; i++){ for(int j=0; j<k; j++){ cout << "[" << i << "][" << j << "] = " << A[i][j] << " "; printf("\n"); Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 18 / 27

Efekt wykonania w3-02.cpp [0][0] = 3 [0][1] = 6 [0][2] = 8 [0][3] = 1 [0][4] = 2 [1][0] = 4 [1][1] = 7 [1][2] = 1 [1][3] = 6 [1][4] = 1 [2][0] = 4 [2][1] = 6 [2][2] = 0 [2][3] = 3 [2][4] = 1 [3][0] = 6 [3][1] = 7 [3][2] = 4 [3][3] = 2 [3][4] = 8 [4][0] = 3 [4][1] = 7 [4][2] = 4 [4][3] = 3 [4][4] = 3 Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 19 / 27

Przykład - w3-03.cpp #include <iostream> int main() { using namespace std; cout<< "Podaj rozmiar tablicy: "; int n; cin>>n; double **a = new double* [n]; for(int i=0; i<n; i++) a[i] = new double [n]; for(int i=0; i<n; i++) for(int j=0; j<n; j++) a[i][j] = i+j; for(int i=0; i<n; i++){ for(int j=0; j<n; j++) cout<< a[i][j] <<"\t"; cout<<endl; cout<<endl; for(int i=0; i<n; i++) delete [] a[i]; delete [] a; return 0; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 20 / 27

Przykład - w3-04.cpp #include <iostream> #include <cstdlib> #include <iomanip> using namespace std; typedef long long T; T** creatematrix(int raws, int cols); void destroymatrix(t**, int raws); void initmatrix(t**, int raws, int cols, T maxvalue); void showmatrix(t**, int raws, int cols); int main() { cout<< "Podaj rozmiar tablicy: "; int n; cin>>n; T **a = creatematrix(n,n); initmatrix(a,n,n,20); showmatrix(a,n,n); destroymatrix(a,n); return 0; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 21 / 27

Przykład - w3-04.cpp T** creatematrix(int raws, int cols) { T** a = new T*[raws]; if (a == 0) { return NULL; for (int i = 0; i < raws; ++i) { a[i] = new T[cols]; if (a[i]==0) { return NULL; return a; void destroymatrix(t** a, int raws) { for (int i = 0; i < raws; ++i) { delete [] a[i]; delete [] a; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 22 / 27

Przykład - w3-04.cpp void initmatrix(t** a, int raws, int cols, T maxvalue) { srand(time(0)); for (int i = 0; i < raws; ++i) { for (int j = 0; j < cols; ++j) { a[i][j] = rand() % maxvalue; void showmatrix(t** a, int raws, int cols) { for (int i = 0; i < raws; ++i) { for (int j = 0; j < cols; ++j) { cout << setw(4) << a[i][j] << " "; cout << endl; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 23 / 27

Efekt wykonania w3-04.cpp Podaj rozmiar tablicy: 5 6 15 16 7 18 3 11 2 8 1 9 2 5 12 8 8 3 3 10 14 7 15 8 18 16 Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 24 / 27

Referencja to alternatywna nazwa uprzednio zdefiniowanej zmiennej. Zmienna referencyjna musi zostać zainicjalizowana. #include <iostream> #include <iomanip> using namespace std; int main(void) { int wysokosc = 10; int &h = wysokosc; h += 10; cout << "h = " << h << ", wysokosc = " << wysokosc << endl; cout << "adres h: " << &h << ", adres wys.: "<< &wysokosc << endl; int *wsk = &h; cout << "*wsk = " << *wsk << ", wsk: " << wsk << endl; return 0; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 25 / 27

rats = 101, rodents = 101 adres rats = 0x7fffc20ced4c, adres rodents = 0x7fffc20ced4c bunnies = 50, rats = 50, rodents = 50 adres bunnies = 0x7fffc20ced48, adres rodents = 0x7fffc20ced4c Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 26 / 27

#include <iostream> void swapr(int & a, int & b); // a, b to aliasy wartosci int void swapp(int * p, int * q); // p, q to adresy wartosci int void swapv(int a, int b); // a, b to nowe zmienne int main() { using namespace std; int w1 = 300, w2 = 350; cout << "w1 = $" << w1 << " w2 = $" << w2 << endl; cout << "Zamiana wartosci za pomoca referencji:\n"; swapr(w1, w2); // przekaz zmienne cout << "w1 = $" << w1 << " w2 = $" << w2 << endl; cout << "Zamiana wartosci za pomoca wskazników:\n"; swapp(&w1, &w2); // przekaz adresy zmiennych cout << "w1 = $" << w1 << " w2 = $" << w2 << endl; cout << "Proba zamiany przy przekazywaniu przez wartosc:\n"; swapv(w1, w2); // przekazanie wartosci zmiennych cout << "w1 = $" << w1 << " w2 = $" << w2 << endl; return 0; void swapr(int & a, int & b){int temp=a; a=b; b=temp; void swapp(int * p, int * q){int temp=*p; *p=*q; *q=temp; void swapv(int a, int b){int temp=a; a=b; b=temp; Bożena Woźna-Szcześniak (AJD) Programowanie Procedurale Wykład 6 27 / 27