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

Podobne dokumenty
tablica: dane_liczbowe

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

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

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

Zmienne i struktury dynamiczne

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

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

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

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

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

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

Inicjacja tablicy jednowymiarowej

Język C, tablice i funkcje (laboratorium)

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

Wstęp do Informatyki

Podstawy Programowania C++

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

Tablice, funkcje - wprowadzenie

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

Programowanie i struktury danych

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

1 Podstawy c++ w pigułce.

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

Proste programy w C++ zadania

Język C, tablice i funkcje (laboratorium, EE1-DI)

W języku C/C++ pomiędzy wskaźnikami a tablicami istnieje bardzo ścisły związek. Do onumerowania elementów w tablicy służą tzw. INDEKSY.

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

Programowanie obiektowe 2005/2006. Laboratorium 1. Przeciążanie funkcji

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

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

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

Przeciążanie funkcji. Przykład 1: #include <iostream> using namespace std; double srednia(double n1, double n2) { return ((n1 + n2)/2.

Programowanie obiektowe W3

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

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

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

Struktury Struktura polami struct struct struct struct

n, m : int; S, a, b : double. Gdy wartości sumy składowej nie można obliczyć, to przyjąć Sij = 1.03 Dla obliczenia Sij zdefiniować funkcję.

Programowanie komputerowe. Zajęcia 5

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

1 Podstawy c++ w pigułce.

Język C++ zajęcia nr 2

do instrukcja while (wyrażenie);

VII. Ciągi znaków łańcuchy

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

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

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

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

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

Wstęp do wskaźników w języku ANSI C

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

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

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Część 4 życie programu

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

Język ludzki kod maszynowy

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

PROGRAMOWANIE W PYTHONIE ALGORYTMY TABLICOWE A LISTY

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

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

Programowanie komputerowe. Zajęcia 1

Programowanie i struktury danych

Wstęp do programowania

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

*W uproszczeniu: jest dziewięciu sędziów przyznających po dwie noty: za wartość techniczną i artystyczną (skala od 0.0 do 6.0)

Wstęp do programowania

Wstęp do programowania

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

Tablice deklaracja, reprezentacja wewnętrzna

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

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

Programowanie strukturalne i obiektowe. Funkcje

Podstawy programowania w języku C++

Wstęp do programowania

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

Języki programowania obiektowego Nieobiektowe elementy języka C++

TABLICA (ang. array) pojedyncza zmienna z wieloma komórkami, w których można zapamiętać wiele wartości tego samego typu danych.

PARADYGMATY PROGRAMOWANIA Wykład 3

ZASADY PROGRAMOWANIA KOMPUTERÓW

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

Programowanie komputerowe. Zajęcia 3

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

Wskaźniki. Przemysław Gawroński D-10, p marca Wykład 2. (Wykład 2) Wskaźniki 8 marca / 17

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Zajęcia 6 wskaźniki i tablice dynamiczne

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Podstawy programowania

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.pl. Tablice cz. II. Kopiowanie tablic, tablice wielowymiarowe

Laboratorium 5: Tablice. Wyszukiwanie binarne

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

Lab 9 Podstawy Programowania

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

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

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

Język C zajęcia nr 7. Uwagi dotyczące stylu programowania

WHILE (wyrażenie) instrukcja;

Transkrypt:

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 możliwy poprzez podanie położenia elementu w tablicy. Ten rodzaj dostępu nazywa się indeksowaniem (ang. indexing, subscripting). 5.1 Tablice jednowymiarowe Składnia deklaracji tablicy jednowymiarowej: <typ> <nazwa_tablicy>[<wymiar>]; gdzie: <typ> tablicy określa typ wszystkich jej elementów. <wymiar> (ang. dimension) tablicy określa liczbę elementów, które można zapisać w tablicy. Przykład: deklaracja tablicy dziesięciu obiektów typu int ma postać int t[10]; Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady: int wyniki[25] /*tablica przechowująca 25 liczb typu int */ char alfabet[26]; /* tablica przechowujące 26 znaków */ const int rozmiar_bufora=80; char bufor_we[rozmiar_bufora]; Dostęp do elementów tablicy Nazwa tablicy jest wspólną nazwą wszystkich elementów tablicy. Dostęp do elementów tablicy jest realizowany za pomocą indeksu, który wskazuje położenie danego elementu w tablicy. Indeks może być dowolnym wyrażeniem o wartości całkowitej, zawierającym zmienne i stałe całkowite. Pierwszy element tablicy ma indeks równy 0. Ostatni element tablicy ma indeks równy rozmiarowi tablicy minus 1. Przykład: int wyniki_testu[25]; // tablica o 25 elementach typu int wyniki_testu[0]=3; // pierwszy element tablicy wyniki_testu[24]=5; // ostatni element tablicy Indeks nie musi być stałą, może być obliczany. Niebezpieczeństwo: w języku C i C++ nie sprawdzane jest automatycznie przekroczenie zakresu indeksów tablicy. Programista musi sam zadbać o to, aby użyć właściwej wartości indeksu: nieujemnego i mniejszego od rozmiaru tablicy. 1

Rozmieszczenie tablicy w pamięci Każda tablica zajmuje spójny obszar pamięci. Przykład: tablica int a[4]=5,4,8,7, (zakładamy, że typ int zajmuje 2 bajty): element a[0] a[1] a[2] a[3] wartość 5 4 8 7 adres 1000 1002 1004 1006 komórki 1000 1001 1002 1003 1004 1005 1006 1007 Całkowity rozmiar tablicy w bajtach można obliczyć za pomocą jednego ze wzorów: razem_bajtow = sizeof(typ) * liczba_elementów_tablicy razem_bajtów = sizeof nazwa_tablicy 5.2 Nadawanie wartości elementom tablicy Inicjowanie tablicy przy deklaracji int liczby[3]=1,2,3; int liczby[3]=1; // niepełna inicjacja int liczby[]=1,2,3; // inicjacja: podane wartości wszystkich // elementów // automatyczne nadawanie rozmiaru: // kompilator sam obliczy rozmiar Przykład: W tablicy dni przechowywane są liczby dni w każdym miesiącu roku. Chcemy je wydrukować. int main() int dni[] = 31,28,31,30,31,30,31,31,30,31,30,31; for (int i = 0; i < sizeof dni / sizeof (int); i++) cout << "Miesiac " << (i+1) << " ma " << dni[i] << " dni." << endl; Przypisywanie wartości elementom tablicy Wartości można przypisać jedynie pojedynczym elementom tablicy. Przykład: int wyniki_testu[20]; // deklaracja tablicy wyniki_testu[0]=3; // przypisanie wartości elementowi tablicy Nie można jednej tablicy bezpośrednio przypisać innej tablicy: int x[] = 0,1,2; int y[3]; x=y; // błąd Aby utworzyć kopię tablicy, trzeba kolejno kopiować każdy element tablicy. Przykład(kopia): int main() const int rozmiar=5; int x[rozmiar], y[rozmiar]; int i; // przypisywanie wartości elementom tablicy x 2

for (i=0; i<rozmiar; ++i) x[i]=i; // kopiowanie tablicy x do y for (i=0; i<rozmiar; ++i) y[i]=x[i]; // drukowanie tablicy y for (i=0; i<rozmiar; ++i) cout << y[i] << ' '; Wczytywanie wartości elementów tablicy Wartości można wczytywać tylko do pojedynczych elementów tablicy. Przykład: int wyniki_testu[20]; for (int i=0;i<3;i++) cin >> wyniki_testu[i]; 3

5.3 Przykłady użycia tablic jednowymiarowych Przykład 1. Wczytać dzienne pomiary temperatury w tygodniu i obliczyć ich średnią. int main() int const TYDZIEN=7; int i; double temperatura[tydzien], suma=0 ; for (i=0;i<tydzien;i++) cin >> temperatura[i]; suma += temperatura[i]; cout << "Srednia temperatura w tygodniu: " << suma/tydzien << endl; Przykład 2. Wczytać do tablicy 10 liczb i wydrukować je w odwrotnej kolejności. int main() const int MAX=10; int t[max], ile; // ile - faktyczna liczba elementów cout << "Podaj liczbe elementow: "; cin >> ile; if (ile < 0 ile > MAX) cout << "Liczba elementów musi być nieujemna i mniejsza od "<<MAX<< endl; return 1; cout << "Podaj liczby:" << endl; for (int i=0; i<ile; i++) cin >> t[i]; /* wyświetlenie liczb z tablicy */ cout << "Liczby w odwrotnej kolejnosci:" << endl; for (int i=ile-1; i>=0; i--) cout << t[i] << ' '; Przykład 3: Obliczyć krotność występowania cyfr 0-9 we wprowadzonym tekście. int main() int znak,i; int cyfry[10]; for (i=0;i<10;++i) cyfry[i]=0; while ((znak=cin.get())!= '\n') if (znak>='0' && znak <='9') ++cyfry[znak-'0']; cout << "Wprowadzone cyfry:" << endl; for (i=0;i<10;++i) cout << setw(3) << i; for (i=0;i<10;++i) cout << setw(3) << cyfry[i]; 4

5.4 Tablice wielowymiarowe Deklaracja tablicy wielowymiarowej: <typ> <nazwa_tablicy>[<wymiar_n>]...[<wymiar_2>][<wymiar_1>] Tablica dwuwymiarowa Najprostszą tablicą wielowymiarową jest tablica dwuwymiarowa. Deklaracja tablicy dwuwymiarowej: <typ> <nazwa_tablicy>[<liczba_wierszy>][<liczba_kolumn>] Przykład deklaracji tablicy A5,10 : int A[5][10]; /* w deklaracji każdy nawias określa liczbę elementów, tablica ma 5 wierszy i 10 kolumn */ Pierwszy i ostatni element tablicy A: int A[0][0]; /* [wiersz][kolumna] */ int A[4][9]; /* [wiersz][kolumna] */ Dostęp do elementu a1,2 : a[1][2]=5; Elementy tablicy umieszczane są w pamięci wierszami. Przykład tablicy int a[2][3] (zakładamy, że typ int zajmuje 2 bajty), w której umieszczono kolejne liczby całkowite poczynając od 0. Element Adres Komórki Zawartość a[0][0] 1000 1000 1001 0 a[0][1] 1002 1002 1003 1 a[0][2] 1004 1004 1005 2 a[1][0] 1006 1006 1007 3 a[1][1] 1008 1008 1009 4 a[1][2] 1010 1010 1011 5 Inicjacja tablic dwuwymiarowych Inicjacja tablic dwuwymiarowych jest podobna do inicjacji tablic jednowymiarowych. Przykład 1: int a[2][3]= 0,1,2, 3,4,5; Przykład 2: Jeśli wpisujemy wszystkie wartości, to możemy pominąć nawiasy wyznaczające wiersze, musimy tylko pamiętać, że wartości początkowe nadawane są kolejnymi wierszami. int a[2][3] = 0,1,2,3,4,5 ; Przykład 3: Można pominąć ostatni wymiar (ten który wymieniony jest jako pierwszy) int a[][3] = 0,1,2, 3,4,5 ; 5

Przykład 4: Wypełnienie tablicy wartościami 1 i wyświetlenie tablicy wierszami. int main() const int MAXW=3; const int MAXK=4; int a[maxw][maxk]; for (int i=0; i<maxw; ++i) for (int j=0; j<maxk; ++j) a[i][j]=1; /* wyświetlenie liczb w tablicy */ for (int i=0; i<maxw; ++i) for (int j=0; j<maxk; ++j) cout << setw(2) << a[i][j]; 5. Tablice Przykład 5: Wyzerowanie głównej przekątnej w macierzy kwadratowej, przypisanie pozostałym elementom wartości 1. int main() const int MAX=4; int a[max][max],i,j; for (i=0; i<max; i++) for (j=0; j<max; j++) a[i][j]= (i==j)? 0:1; /* wyświetlenie liczb w tablicy */ for (i=0; i<max; ++i) for (j=0; j<max; ++j) cout << setw(3) << a[i][j]; 6

Przykład 6. Obliczenie i wyświetlenie sumy elementów w każdej kolumnie tablicy. 5. Tablice int main() const int MAXW=3; const int MAXK=4; int t[maxw][maxk]; int suma; for (int i=0; i<maxw; ++i) cout << "Podaj " << MAXK << " elementow wiersza " << i <<endl; for (int j=0; j<maxk; ++j) cin >> t[i][j]; /* obliczenie sum w kolumnach */ for (int j=0; j<maxk; ++j) suma =0; for (int i=0; i<maxw; ++i) suma += t[i][j]; cout << "Suma w kolumnie " << j << " wynosi: " << suma << endl; Przykład 7. Przepisanie tablicy do wektora. int main() const int MAXW=3; const int MAXK=4; int t[maxw][maxk]; int w [MAXW*MAXK]; int i,j,iw; for (i=0; i<maxw; ++i) cout << "Podaj " << MAXK << " elementow wiersza " << i <<endl; for (j=0; j<maxk; ++j) cin >> t[i][j]; /* przepisanie tablicy do wektora */ iw=0; for (i=0; i<maxw; ++i) for (j=0; j<maxk; ++j) w[iw]= t[i][j]; iw++; /* wydrukowanie wektora */ cout << "Elementy wektora" << endl; for (i=0; i<maxw*maxk; i++) cout << setw(3) << w[i]; 7

Przykład 8. Zamiana dwóch wybranych wierszy tablicy int main() const int MAXW=3; const int MAXK=4; int t[maxw][maxk]; int i,j,tymcz, w1, w2; for (i=0; i<maxw; ++i) cout << "Podaj " << MAXK << " elementow wiersza " << i <<endl; for (j=0; j<maxk; ++j) cin >> t[i][j]; cout << "Ktore wiersze zamienic?"; cin >> w1 >> w2; // pominięte sprawdzenie, czy użytkownik podał numery wierszy z zakresu /* Zamiana wierszy */ for (j=0; j<maxk; j++) tymcz=t[w1][j]; t[w1][j]= t[w2][j]; t[w2][j]=tymcz; cout << "Tablica po zamianie" << endl; for (i=0; i<maxw; i++) for (j=0; j<maxk; j++) cout << setw(3) << t[i][j]; 8