Język C++ Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.

Slides:



Advertisements
Podobne prezentacje
Tablice 1. Deklaracja tablicy
Advertisements

C++ wykład 2 ( ) Klasy i obiekty.
C++ wykład 4 ( ) Przeciążanie operatorów.
Język C/C++ Funkcje.
Zmienne i Typy.
Wzorce.
Język ANSI C Funkcje Wykład: Programowanie komputerów
Prowadzący: mgr inż. Elżbieta Majka
Podstawy informatyki Wirtotechnologia – Wskaźniki i referencje
Podstawy informatyki Informatyka stosowana Prowadzący: Grzegorz Smyk
Struktury.
Tablice.
Wykład 1: Wskaźniki Podstawy programowania Programowanie w C
Podstawy programowania PP – LAB5 Wojciech Pieprzyca.
Polsko – Japońska Wyższa Szkoła Technik Komputerowych
Podstawy programowania
Podstawy informatyki 2013/2014
Metody Programowania Wykład
Podstawy programowania II
Podstawy informatyki (4)
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki 2013/2014
Podstawy informatyki 2013/2014
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki 2012/2013
Podstawy programowania
TABLICE C++.
Łódź, 3 października 2013 r. Katedra Analizy Nieliniowej, WMiI UŁ Podstawy Programowania Złożona składnia języka C++
Przekazywanie argumentów
Podstawy programowania w języku C i C++
Jerzy F. Kotowski1 Informatyka I Wykład 14 DEKLARATORY.
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Podstawy informatyki 2013/2014
Podstawy informatyki 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Przekazywanie parametrów do funkcji oraz zmienne globalne i lokalne
Programowanie obiektowe 2013/2014 Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Programowanie obiektowe 2013/2014
Programowanie obiektowe 2013/2014
Podstawy języka Instrukcje - wprowadzenie
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski 1 informatyka +
Kurs języka C++ – wykład 4 ( )
K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++
Tablice Zajęcia 8. Definicja Tablica (z ang. array) jest zmienną złożoną, która składa się z ciągu elementów tego samego typu. W pamięci komputera tablica.
PO13-1 / 19 Wykład 13 Wyjątki i ich zgłaszanie Wyłapywanie wyjątków Obsługa wyjątków Wykorzystanie polimorfizmu Filtrowanie wyjątków Błędy w konstruktorach.
Podstawy informatyki Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Pakiety numeryczne Graphical User Interface Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Pakiety numeryczne Tablice: tworzenie, indeksowanie, wymiary Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Wstęp do programowania wykład 3 Typy wyliczeniowe, tablice.
Pakiety numeryczne Interpolacja i aproksymacja
Podstawy informatyki Zmienne, stałe Instrukcje sterujące Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu.
Pakiety numeryczne Wielomiany Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Wstęp do programowania Wykład 2 Dane, instrukcje, program.
Podstawy informatyki Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki Funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka Podstawy.
Pakiety numeryczne Skrypty, funkcje Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
Podstawy informatyki Struktury Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi.
Podstawy informatyki Szablony funkcji Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty.
Podstawy informatyki Operatory rzutowania Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały.
Podstawy informatyki Mechanizm obsługi sytuacji wyjątkowych Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu.
K URS JĘZYKA C++ – WYKŁAD 3 ( ) Przenoszenie Składowe statyczne Funkcje wbudowane Argumenty domyślne.
Pakiety numeryczne Operatory, instrukcje sterujące, operacje bitowe Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania.
K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Obliczenia w Matlabie Tablice
Obliczenia inżynierskie w Matlabie
Język C++ Typy Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego.
Język C++ Operatory Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Zapis prezentacji:

Język C++ Tablice Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła Jerzego Matuszyka

= *= /= %= += -= <<= >>= &= |= ^= Tablice Tablica – agregat składający się z określonej liczby obiektów tego samego typu zajmujący w pamięci ciągły obszar. Operator odwołania się do elementu tablicy: [] Tablice definiuje się również za pomocą []. Jeżeli po nazwie znajduje się otwarty nawias kwadratowy, to nazwa jest nazwą tablicy! Definiując tablicę podajemy jej nazwę oraz liczbę i typ przechowywanych elementów, np.: int tablica[10]; 18 17 ++ -- POST () [] 16 ++ -- PRE + - ! ~ 15 14 * / % 13 + - 12 << >> 11 < <= > >= 10 == != 9 & 8 ^ 7 | 6 && 5 || 4 ? : 3 = *= /= %= += -= <<= >>= &= |= ^= 2 1 ,

typ_elementu nazwa_tablicy[liczba_elementów]; Tablice Postać definicji tablicy: typ_elementu nazwa_tablicy[liczba_elementów]; Typ elementu: jeden z typów fundamentalnych (z wyjątkiem void) typ wyliczeniowy (enum) wskaźnik inna tablica typ zdefiniowany przez użytkownika wskaźnik do pokazywania na składniki klasy Liczba elementów rozmiar tablicy musi być wyrażeniem stałym (lub stałą), o wartości znanej w trakcie kompilacji

Definiowanie tablic - przykłady int a[4]; - 4-ro elementowa tablica elementów typy int const int n=10; char tab[n]; int n=10; Niektóre kompilatory dopuszczają powyższą formę, ale nie jest ona zgodna ze standardem języka (taki zapis nie „kompiluje się” na kartce). a a[0] a[1] a[2] OK a[3] BŁĄD

Stała, ale nie jest znana na etapie kompilacji Definiowanie tablic Próba oszukania kompilatora int a; cin>>a; const int n=a; int tab[n]; się nie uda. Będzie błąd. Stała, ale nie jest znana na etapie kompilacji

Odwołania do elementów tablicy Do elementów tablicy można się odwołać korzystając z operatora indeksowania [] Elementy tablicy są numerowane kolejnymi liczbami naturalnymi, począwszy od zera Numery elementów w tablicy nazywane są indeksami. Tablica n-elementowa ma elementy o indeksach od 0 do n-1 const int n=5; int tab[n]; tab[0]=1; tab[1]=tab[0]; tab[2]=4; tab[3]=tab[4]=7; tab[5]=10; Element o indeksie 5 nie istnieje

Inicjalizacja tablic Tablice podobnie jak inne zmienne można inicjalizować podczas definiowania Inicjalizacja tablicy – nadanie wartości elementom tablicy w momencie jej definicji. int t[4]={1,2,3,4}; jest równoważne z int t[4]; t[0]=1; t[1]=2; t[2]=3; t[3]=4; Tablice można zainicjalizować częściowo: int t[4]={1,2}; int t[4]={1,2,0,0};

Inicjalizacja tablic Lista inicjalizacyjna tablicy może zawierać stałe oraz zmienne: int n1 = 0, n2 = 1, n3 = 2; int t[4] = {n1, n2, n3, 5};

Inicjalizacja tablic Możliwe jest zdefiniowanie tablicy bez jawnego podawania jej rozmiaru – wymaga to jednak jednoczesnej inicjalizacji tablicy. Kompilator na podstawie liczby elementów podanych na liście inicjalizacyjnej rezerwuje odpowiednią ilość miejsca pamięci: int t[]={1,2,3,4};

Odwołania do elementów tablicy Najczęstszą konstrukcją języka używaną do przetwarzania tablic jest pętla for const int n = 4; int t[n]; for(int i = 0; i < n; ++i) t[i] = i+2; for(int i = 0; i <= n - 1; ++i)

Nazwa tablicy jest jednocześnie adresem jej zerowego elementu! Wypisywanie tablic int main() { const int n=4; int tab[n]; for (int i=0; i<n; ++i) tab[i]=i+2; cout<<tab<<endl; cout<<tab[i]<<endl; } Nazwa tablicy jest jednocześnie adresem jej zerowego elementu! 0027FD40 2 3 4 5

Stałe tablice Stała tablica – tablica zawierająca stałe elementy. Tablica obiektów stałych musi podczas definicji zostać zainicjalizowana co najmniej jednym elementem lub pustą listą inicjalizacyjną. Elementy niezainicjalizowane są inicjalizowane zerami odpowiedniego typu.

Stałe tablice const int a = 7; int b = 7; const int t1[3] = {2, 4, a}; const int t2[3] = {2, 4, b}; const int t3[3] = {2}; //równoważne {2,0,0} const int t4[3] = {}; //równoważne {0,0,0} const int t5[3]; BŁĄD t1[1] = 0; BŁĄD

char tekst[20]={"przyklad"}; Tablice znakowe Tablice ciągów znaków reprezentujące napis – na końcu zawsze dodawany jest znak o kodzie 0, NULL: '\0‘ char tekst[20]={"przyklad"}; Znak NULL jest automatycznie dodawany do końca ciągu, ponieważ ciąg "przyklad" ujęto w cudzysłów.

Tablice znakowe AGH ----- AGH-- 3 AGH 3 AGH - int main() { char tab1[]={"AGH"}; char tab2[]={"-----"}; char tab3[]={"-----"}; cout<<tab1<<endl<<tab2<<endl<<tab3<<endl; int i=0; while (tab1[i]) tab2[i]=tab1[i]; ++i; } cout<<tab2<<endl; cout<<i<<endl; i=-1; while (++i,tab3[i]=tab1[i]); cout<<tab3<<endl; for (i=0; i<5; ++i) cout<<tab3[i]; cout<<endl; return 0; AGH ----- AGH-- 3 AGH 3 AGH -

char tekst[20] = {'p','r','z','y','k','l','a','d'}; Tablice znakowe Tablice o elementach typu znakowego nie muszą być traktowane jako napisy: char tekst[20] = {'p','r','z','y','k','l','a','d'}; tu jest znak Null ponieważ reszta tablicy jest wypełniana zerami char tekst[] = {'p','r','z','y','k','l','a','d'}; tu znaku Null nie będzie ponieważ zostanie stworzona tablica 8 elementowa

Tablice wielowymiarowe Postać definicji tablicy: typ_elementu nazwa_tablicy[l1][l2]...[ln]; Liczba elementów tablicy równa jest l1*l2*...*ln Liczba wymiarów tablicy odpowiada liczbie użytych par nawiasów kwadratowych [] w definicji, np.: tablica dwuwymiarowa, łącznie 16 elementów: double tab2D[2][8]; tablica czterowymiarowa, łącznie 400 elementów: unsigned int tab4D[2][2][5][20];

Tablice wielowymiarowe Deklaracja wymiarów umożliwia obliczenie położenia elementów tablicy w kolejnych wymiarów, np.: int a[2][4]; Element a[i][j] leży w stosunku do początku tablicy o (i*4)+j elementów od początku tablicy Statycznie zdefiniowana tablica wielowymiarowa może być traktowana jako ciągły obszar pamięci a a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[1][2] leży 1*4+2 elementów od początku tablicy

Przekazywanie tablic do funkcji Argumentem formalnym funkcji może być typ tablicowy. Jako argument aktualny przesyłany jest tylko adres początku tablicy. Rozmiar tablicy można przekazać tylko jawnie jako inny parametr funkcji. deklaracja funkcji: int fx1(double []); int fx2(double [], unsigned int); definicja tablicy: double tablica[4]; wywołania funkcji: fx1(tablica); fx2(tablica, 4);

Przekazywanie tablic do funkcji int fx1(double []); double tablica[4]; W wywołaniu funkcji przyjmującej tablicę podajemy tylko nazwę tablicy! fx1(tablica); fx1(tablica[]); fx1(tablica[4]); OK Błąd kompilacji Próba wysłania do funkcji elementu tablicy o indeksie 4 (JEDNEJ LICZBY)

Przekazywanie tablic do funkcji void f(double t[]) { cout<<sizeof(t)<<endl; } int main() double t[5]; f(t); return 0; 4 40

Przekazywanie tablic do funkcji void fun(int [], int); int main() { int tab[]={1,2,3,4}; for (int i=0; i<4; ++i) cout<<tab[i]<<' '; cout<<endl; fun(tab,4); } void fun(int a[], int n) for (int i=0; i<n; ++i) a[i]++; 1 2 3 4 2 3 4 5

Przekazywanie tablic do funkcji Przekazanie do funkcji tablicy n–wymiarowej wymaga zadeklarowania co najmniej n-1 ostatnich wymiarów void fx3D(float [][4][3]); void fx3D(float [][][3]); BŁĄD Podane wymiary muszą być wyrażeniami stałymi, znanymi na etapie kompilacji. Zadeklarowane wymiary są używane przez kompilator w celu: sprawdzenia zgodności typu tablicowego z argumentem aktualnym – przy wywołaniu funkcji, obliczenia położenia kolejnych wierszy najwyższego wymiaru tablicy i wierszy następnych wymiarów – wewnątrz ciała funkcji.

Przekazywanie tablic do funkcji const int a = 4, b = 3; void fx3D(int tab[][a][b], int n) { int l = 0; for (int i = 0; i < n; ++i) for (int j = 0; j < a; ++j) for (int k = 0; k < b; ++k) tab[i][j][k] = l++; } int main() int t1[5][4][3]; int t2[5][3][4]; fx3D(t1,5); fx3D(t2,5); BŁĄD

Przekazywanie tablic do funkcji #include<iostream> using namespace std; void podwoj(int [][2]); void wypisz(int [][2]); int main() { int tab[][2]={1,2,3,4}; wypisz(tab); podwoj(tab); return 0; } void podwoj(int a[][2]) { for (int i=0; i<2; ++i) for (int j=0; j<2; ++j) a[i][j]*=2; } wypisz(a); void wypisz(int a[][2]) cout << a[i][j] << '\t'; cout << endl; 2 4 6 8 2 3 4 2 4 6 8

Przekazywanie stałych tablic do funkcji #include<iostream> using namespace std; void wypisz(int [], int); int main() { const int tab[]={1,2,3,4}; wypisz(tab,4); } void wypisz(int a[], int n) for (int i=0; i<n; ++i) cout << a[i] << '\t'; cout << endl; BŁĄD

Przekazywanie stałych tablic do funkcji #include<iostream> using namespace std; void wypisz(const int [], int); int main() { const int tab[]={1,2,3,4}; wypisz(tab,4); } void wypisz(const int a[], int n) for (int i=0; i<n; ++i) cout << a[i] << '\t'; cout << endl;

Prezentacja udostępniona na licencji Creative Commons: Uznanie autorstwa, Na tych samych warunkach 3.0. Pewne prawa zastrzeżone na rzecz autorów. Zezwala się na dowolne wykorzystywanie treści pod warunkiem wskazania autorów jako właścicieli praw do prezentacji oraz zachowania niniejszej informacji licencyjnej tak długo, jak tylko na utwory zależne będzie udzielana taka sama licencja. Tekst licencji dostępny jest na stronie: http://creativecommons.org/licenses/by-sa/3.0/deed.pl