Programowanie obiektowe W3

Podobne dokumenty
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

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

Zmienne i struktury dynamiczne

Wstęp do programowania

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

DYNAMICZNE PRZYDZIELANIE PAMIECI

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

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

Programowanie w języku C++

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

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

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Część 4 życie programu

1 Podstawy c++ w pigułce.

Stałe, tablice dynamiczne i wielowymiarowe

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

Lab 9 Podstawy Programowania

Programowanie obiektowe, wykład nr 10. Metaprogramowanie cz.2: szablony struktur i klas

Programowanie i struktury danych

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

1 Podstawy c++ w pigułce.

Programowanie Procedurale

Spis treści WSKAŹNIKI. DYNAMICZNY PRZYDZIAŁ PAMIĘCI W JĘZYKU C. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

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

Wykład 1: Wskaźniki i zmienne dynamiczne

tablica: dane_liczbowe

Laboratorium nr 9. Temat: Wskaźniki, referencje, dynamiczny przydział pamięci, tablice dynamiczne. Zakres laboratorium:

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

1,3,4,2,3,4,0,1,4,5,0. Wówczas największa suma trzech kolejnych liczb (zaznaczone na czerwono) wynosi:

Mechanizm dziedziczenia

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

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

//zmienne globalne int *pa, *pb; //wskaźniki globalne void main(void) { clrscr(); printf("\n podaj wartosc liczby a\n"); scanf("%d",&a); pa=&a;

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

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

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

Podstawy programowania. Wykład: 6. Tablice statyczne. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie - wykład 4

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

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

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

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

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

C-struktury wykład. Dorota Pylak

Wskaźniki. Informatyka

Wstęp do programowania

Tbli Tablice obiektów biktó są tworzone dokładnie d tak samo, jak i tablice, składające się z elementów innego typu

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

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:

Wstęp do Informatyki

Podstawy programowania komputerów

KURS C/C++ WYKŁAD 6. Wskaźniki

Informacja o programowaniu w c++ Dr Maciej Bobrowski

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

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

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

r. Tablice podstawowe operacje na tablicach

Programowanie obiektowe w C++ Wykład 1

C-struktury wykład. Dorota Pylak

Podstawy Programowania

Wstęp do programowania obiektowego, wykład 7

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 1. Wprowadzenie, środowisko programistyczne, pierwsze programy

Struktury Struktura polami struct struct struct struct

I - Microsoft Visual Studio C++

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Język C++ Różnice między C a C++

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

Podstawy programowania w języku C++

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

Programowanie proceduralne w języku C++ Pętle, tablice

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

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

Język C zajęcia nr 11. Funkcje

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

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

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

Zadeklarowanie tablicy przypomina analogiczną operację dla zwykłych (skalarnych) zmiennych. Może zatem wyglądać na przykład tak:

Podstawy algorytmiki i programowania - wykład 4 C-struktury

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

Wstęp do programowania INP001213Wcl rok akademicki 2018/19 semestr zimowy. Wykład 4. Karol Tarnowski A-1 p.

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

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Programowanie komputerowe. Zajęcia 5

Materiał. Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji

Spis treści JĘZYK C - WSKAŹNIKI, DYNAMICZNY PRZYDZIAŁ PAMIĘCI. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu

Deklaracja struktury w C++

Mechanizm dziedziczenia

Wykład 4: Klasy i Metody

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.

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

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

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

Wstęp do programowania

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

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

Wykład 3 Składnia języka C# (cz. 2)

dr inż. Paweł Myszkowski Wykład nr 8 ( )

Alokacja pamięci dla tablicy dwuwymiarowej

Transkrypt:

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 Tablica jest złożoną strukturą danych, składającą się z elementów tego samego typu. Zajmuje ona ciągły obszar pamięci o rozmiarze niezbędnym do zapamiętania jej elementów. W deklaracji tablicy należy określić typ wartości, jakie ma przechowywać tablica, a także liczbę jej elementów. Tablica zdefiniowana jest zgodnie z następującym szablonem: typ nazwa[ilosc_elementow]; Rozpoczyna się od typu elementów, które są w niej przechowywane, a po nim następuje nazwa tablicy. Od deklaracji zwykłej zmiennej odróżnia ją ilość elementów podana w nawiasach kwadratowych.

Deklarowanie tablicy Tablice statyczne jednowymiarowe 1.int wynik_egzaminu [50]; Kompilator C++ przydzieli zmiennej wyniki_egzaminu tyle pamięci, by mogła przechowywać 50 liczb typu int. 2. Tablicy możemy nadać wartości początkowe przy deklaracji: int tablica[3] = {1,2,3; 3. Po ostatnim elemencie tablicy może występować przecinek, a jeżeli poda się tylko część wartości, to dopisywane są zera: int tablica[20] = {1,; 4. Niekoniecznie trzeba podawać rozmiar tablicy, np.: int tablica[] = {1, 2, 3, 4, 5; W takim przypadku kompilator sam ustali rozmiar tablicy

Tablice dwuwymiarowe i wielowymiarowe Tablice w C++ mogą być wielowymiarowe. Deklaracja tablicy N-wymiarowej : typ-elementów identyf_tablicy [wymiar1][wymiar2]..[wymiarn]; Możemy na przykład zdefiniować macierz, czyli tablicę dwuwymiarową. Dwuwymiarowa tablica liczb całkowitych: int tab[4][4]; Analogicznie wygląda także inicjowanie elementów tablicy. int tab2[2][2] = {{3,-10),{90,20; float macierz[][4] = { { 1.6, 4.5, 2.4, 5.6, /* pierwszy wiersz */ { 5.7, 4.3, 3.6, 4.3, /* drugi wiersz */ { 8.8, 7.5, 4.3, 8.6, /* trzeci wiersz */ { 6.3, 2.7, 5.7, 2.7 /* czwarty wiersz */ ;

Dostęp do elementów tablicy Dostęp do elementu jest możliwy za pośrednictwem indeksów. Zakres indeksów tablicy rozpoczyna się od 0, a więc ostatni element równy jest ilości elementów minus 1. np. int t[4];// czteroelementowa tablica elementów typu int : //t[0], t[1], t[2], t[3], element t[4] nie istnieje Elementy tablic nie są inicjowane zerami w chwili deklaracji: int tablicaint[10]; Zerowanie: for(int i=0;i<10;i++) tablicaint[i]=0;

Wpisywanie wartości do tablic Na ekranie zobaczymy: Liczba t[0]=0 Liczba t[1]=100 Liczba t[2]=200 Liczba t[3]=300

Wpisywanie wartości do tablic c.d. #include <iostream> /* using namespace std; nie zaleca się*/ int main(void) { int liczby [5]; //Deklaracja tablicy liczby [0] = 100; liczby [1] = 200; liczby [2] = 300; liczby [3] = 400; liczby [4] = 500; std::cout << "Tablica zawiera następujące wartości:" <<std::endl; for (int i = 0; i < 5; i++){ cout << liczby [i] << ' '; std::cout << '\n'<<"jeszcze raz wyświetlamy: "<<std::endl; //Jeżeli zmienimy pętlę w programie na następującą: for (int i = 4; i >= 0; i--) { std::cout << liczby [i] << ' '; return 0; Na ekranie zobaczymy: Tablica zawiera następujące wartości: 100 200 300 400 500 Jeszcze raz wyswietlamy: 500 400 300 200 100

Losowanie wartości do tablic tablica jednowymiarowa #include <iostream> #include <cstdlib> #include <ctime> /*using namespace std; nie zaleca się*/ int main(void) { short tab[10]; std::srand( time( NULL ) ); for(int i=0; i<10; i++) { tab[i]= rand(); std::cout << "Liczba tab[" << i << "]="<< tab[i]<< std::endl; return 0; Na ekranie zobaczymy: Liczba tab[0]=24139 Liczba tab[1]=13205 Liczba tab[2]=2056 Liczba tab[3]=15216 Liczba tab[4]=17892 Liczba tab[5]=21425 Liczba tab[6]=4416 Liczba tab[7]=6241 Liczba tab[8]=9601 Liczba tab[9]=12494

Losowanie wartości do tablic c.d. tablica dwuwymiarowa #include <iostream> #include <cstdlib> #include <ctime> int main(void) { short tab[3][4]; //inicjacja std::srand( time( NULL ) ); for(int i=0;i<3;i++) { for(int j=0;j<4;j++){ tab[i][j]= rand() % 41-20; std::cout << "tab[" << i << "]"<< "["<< j<< "]= << tab[i][j]<<std::endl; return 0; Na ekranie zobaczymy: tab[0][0]=-3 tab[0][1]=-19 tab[0][2]=2 tab[0][3]=-4 tab[1][0]=18 tab[1][1]=-14 tab[1][2]=7 tab[1][3]=-10 tab[2][0]=-5 tab[2][1]=4 tab[2][2]=-13 tab[2][3]=9

Przekazywanie tablicy do funkcji

Przekazywanie tablicy do funkcji c.d. Do funkcji można też wysłać jeden element tablicy, np. void funk( int x ) ; int tabl[10]; wywołanie : funk(tabl[5]);

Przekazywanie tablicy do funkcji - #include <iostream> przykład void wypisz_tablice (int tablica[], int liczba_elementow) { for (int i = 0; i < liczba_elementow; i++) std::cout << tablica[i] << ' '; std::cout << std::endl; int main(void) { int male_liczby[5] = {1, 2, 3, 4, 5; int duze_liczby[3] = {1000, 2000, 3000; wypisz_tablice (male_liczby, 5); wypisz_tablice (duze_liczby, 3); return 0; Na ekranie zobaczymy: 1 2 3 4 5 1000 2000 3000

Definiowanie aliasów typów -typedef

Tablice dynamiczne Podstawowym ograniczeniem tablic statycznych jest ich z góry określona wielkość. W C++ wprowadzono możliwość deklarowania tzw. tablic dynamicznych. Do określenia wielkości tablicy tworzonej dynamicznie możemy użyć zmiennej, której wartość może być określona/wczytywana przez użytkownika. Pamięć zarezerwowana przez tablice dynamiczne nie zostanie automatycznie zwolniona. Do jej zwolnienia korzystamy z operatora delete[]

Tablice dynamiczne c.d. W języku C do przydzielania i zwalniania pamięci służyły głównie funkcjemalloc() i free(). W języku C++ do alokowania pamięci służy operator new, a do zwalniania delete. Dynamiczne przydzielenie pamięci dla tablicy: Typ_zm* nazwa = new typ_zm[ ilosc_elementow]; Np. int* wektor = new int[10]; // alokowanie pamięci dla tablicy delete[] wektor; // zwalnianie pamięci

Tablice dynamiczne c.d. Za pomocą operatora new można również tworzyć tablice wielowymiarowe: int** tablica = new int*[8]; for (int i = 0; i < 8; ++i) tablica[i] = new int [10]; W ten sposób stworzono tablicę dynamiczną dwuwymiarową którą statycznie zadeklarowalibyśmy jako: int tablica[8][10]; Tablice tworzone dynamicznie są automatycznie inicjowane zerami

Przykład: Dana jest tablica dynamiczna prostokątna A. Utworzyć tablicębprzez skreślenie i-tego wiersza i j-tej kolumny na przecięciu których znaleziono największy element tej macierzy. #include <cassert> #include <cstdlib> #include <iostream> // funkcje wypisujace tablice na ekran void print(int* tablica, size_t n) { std::cout << "[ "; for (size_t ii = 0; ii < n; ++ ii) std::cout << tablica[ii] << " "; std::cout << "]" << std::endl; void print(int** tablica, size_t n, size_t m) { for (size_t ii = 0; ii < m; ++ ii) print(tablica[ii], n);

//wybór max w tablicy input i zapamiętanie indeksów int** wyszukaj(int** input, size_t n, size_t m) { assert(n > 0 && m > 0); size_t imax = 0, jmax = 0; for (size_t ii = 0; ii < m; ++ ii) { for (size_t jj = 0; jj < n; ++ jj) { if (input[ii][jj] > input[imax][jmax]) { imax = ii; jmax = jj;

// przepisanie wartości z tablicy input do nowej (n-1)x(m-1) tablicy output int** output = new int*[m-1]; // alokacja tablicy for (size_t ii = 0; ii < imax; ++ ii) { output[ii] = new int[n-1]; for (size_t jj = 0; jj < jmax; ++ jj) output[ii][jj] = input[ii][jj]; //przepisano wartości do indeksu jmax for (size_t jj = jmax+1; jj < n; ++ jj) // dalsza część przepisywania output[ii][jj-1] = input[ii][jj]; for (size_t ii = imax+1; ii < m; ++ ii) { output[ii-1] = new int[n-1]; // przepisano wartości do indeksu imax for (size_t jj = 0; jj < jmax; ++ jj) // dalsza część przepisywania output[ii-1][jj] = input[ii][jj]; for (size_t jj = jmax+1; jj < n; ++ jj) output[ii-1][jj-1] = input[ii][jj]; return output;

//funkcja inicjuje tablicę, wykonuje działania i wyświetla wynik void wykonaj() { int** t0 = new int*[3]; t0[0] = new int[4]; t0[1] = new int[4]; t0[2] = new int[4]; //alokacja pamięci t0[0][0] = 0; t0[0][1] = 1; t0[0][2] = 2; t0[0][3] = 3; t0[1][0] = 2; t0[1][1] = 3; t0[1][2] = 9; t0[1][3] = 5; t0[2][0] = 4; t0[2][1] = 5; t0[2][2] = 6; t0[2][3] = 7; std::cout << "Dane początkowe: \n"; print(t0, 4, 3); std::cout << std::endl; int** result0 = wyszukaj(t0, 4, 3); std::cout << "Tablica po usunieciu wiersza i kolumny \n na przecięciu których znaleziono największy element: \n"; print(result0, 3, 2); std::cout << std::endl; // trzeba usunąć tablice for (size_t ii = 0; ii < 3; ++ ii) delete[] t0[ii]; delete[] result0;

//funkcja main i efekt działania int main() { std::cout << "Tablica 3x4 \n\n"; wykonaj(); return 0; Na ekranie zobaczymy: Tablica 3x4 Dane początkowe: [ 0 1 2 3 ] [ 2 3 9 5 ] [ 4 5 6 7 ] Tablica po usunięciu wiersza i kolumny na przecięciu których znaleziono największy element: [ 0 1 3 ] [ 4 5 7 ]