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

Podobne dokumenty
tablica: dane_liczbowe

Wstęp do programowania

Podstawy Programowania

1 Podstawy c++ w pigułce.

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

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

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

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

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

Zmienne i struktury dynamiczne

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

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

Programowanie i struktury danych

Programowanie obiektowe W3

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

Pętla for. Wynik działania programu:

Programowanie komputerowe. Zajęcia 1

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

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

Podstawy Programowania C++

Część 4 życie programu

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

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

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

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

1 Podstawy c++ w pigułce.

Wstęp do programowania

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Wykład 1: Wskaźniki i zmienne dynamiczne

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

Programowanie w języku C++

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.

Programowanie komputerowe. Zajęcia 5

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

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

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

Pytania sprawdzające wiedzę z programowania C++

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:

Język C++ zajęcia nr 2

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

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

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

Podstawy programowania. Wykład: 8. Wskaźniki. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

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

lekcja 8a Gry komputerowe MasterMind

Programowanie Procedurale

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

Typ użyty w deklaracji zmiennej decyduje o rodzaju informacji, a nazwa zmiennej symbolicznie opisuje wartość.

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Wstęp do Informatyki

ZASADY PROGRAMOWANIA KOMPUTERÓW

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

r. Tablice podstawowe operacje na tablicach

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

Tablice. int rozmiar; cout << Jaki ma być rozmiar tabeli? ; cin >> rozmiar; { int tablica[rozmiar]; /* TU JEST ŹLE */... }

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

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

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

Lab 9 Podstawy Programowania

do instrukcja while (wyrażenie);

Stałe, tablice dynamiczne i wielowymiarowe

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

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

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

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

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

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

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 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Wstęp do programowania. Wykład 1

C-struktury wykład. Dorota Pylak

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

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

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie - wykład 4

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

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

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

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

Podstawy programowania w języku C++

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

I - Microsoft Visual Studio C++

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

Wstęp do programowania

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

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

Wykład II Tablice (wstęp) Przykłady algorytmów Wstęp do języka C/C++

Wstęp do informatyki- wykład 11 Funkcje

Wstęp do programowania

W dowolnym momencie można zmienić typ wskaźnika.

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

Pytanie 1. Pytanie 2. Pytanie 3 WOJEWÓDZKI KONKURS INFORMATYCZNY. Treść pytania

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

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

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

Wstęp do programowania

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

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

Transkrypt:

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 matematyka w latach 2008-2017. 12 wartości typu short opisujących liczbę dni w kolejnych miesiącach. 365 wartości typu float mówiących o wydatkach na jedzenie w ciągu kolejnych dni roku. Każda wartość jest zapisywana w osobnym elemencie tablicy, a komputer wszystkie te elementy umieszcza w pamięci jeden za drugim. Tablica jest przykładem typu pochodnego. Aby utworzyć tablicę, używa się deklaracji. Deklaracja tablicy powinna zawierać trzy elementy: typ wartości poszczególnych elementów, nazwę tablicy, liczbę elementów tablicy. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Tablice Deklaracja s h o r t m i e s i a c e [ 1 2 ] ; tworzy tablicę o nazwie miesiace mającą 12 elementów/komórek, z których każda zawiera wartość typu short. Deklaracja tablicy nazwatypu nazwatablicy[wielkośćtablicy] Wyrażenie wielkośćtablicy, określające liczbę elementów, może być jedną z poniższych wielkości: stałą całkowitą większą od zera (np. 12), wartością const, wyrażeniem stałym (np. 5*sizeof(int)), w którym wszystkie wartości są znane w chwili kompilacji. W szczególności wielkośćtablicy nie może być zmienną, której wartość jest ustawiana w trakcie działania programu. Monika Wrzosek (IM UG) Podstawy Programowania 97 / 119

Rozmiar tablicy Kompilator musi wiedzieć, ile miejsca ma zarezerwować na daną tablicę. Poniższy kod jest nieprawidłowy. i n t n ; cout << " Podaj r o z m i a r t a b l i c y : " ; c i n >> n ; i n t tab [ n ] ; Błąd! Wartość n nie jest znana w trakcie kompilacji. Znana jest dopiero w trakcie działania programu (gdy użytkownik wprowadzi ją z klawiatury). Uwaga: Niektóre kompilatory posiadają rozszerzenia umożliwiające skompilowanie i poprawne działanie powyższego przykładu. Z takich kompilatorów korzysta m.in. Dev C++. Kompilator Microsoft Visual Studio zgłosi jednak błąd. Warto mieć jednak świadomość, że tablice o zmiennym rozmiarze (VLA - variable length arrays) nie są częścią standardu C++11. Monika Wrzosek (IM UG) Podstawy Programowania 98 / 119

Rozmiar tablicy Zaletą tablic statycznych (tablic o stałym rozmiarze) jest łatwość ich użycia, natomiast dużą wadą jest brak możliwości sterowania ich rozmiarem. Z programu, w którym zdefiniujemy tablicę i n t tab [ 1 0 0 ] ; nie skorzysta użytkownik, który zechce wprowadzić 101 liczb. Standard C++11 umożliwia tworzenie tablic do przechowywania danych, których liczby nie jesteśmy w stanie dokładnie przewidzieć w trakcie pisania programu. Jest to tzw. dynamiczna alokacja tablicy. To użytkownik, a nie kompilator, samodzielnie przydziela potrzebny obszar pamięci na tablicę, a na koniec zwalnia go. Aby utworzyć tablicę dynamiczną potrzebne są wskaźniki (o czym będzie później). Uwaga: Inny sposób to użycie bibliotecznej klasy kontenerowej vector. Monika Wrzosek (IM UG) Podstawy Programowania 99 / 119

Tablice Do każdego elementu tablicy odwołujemy się z osobna. Służą do tego indeksy pozwalające ponumerować elementy. Elementy indeksujemy zawsze od zera. Indeks podaje się w nawiasach kwadratowych; np. miesiace[0] to pierwszy element tablicy miesiace, a miesiace[11] to element ostatni. Jak widać, indeks ostatniego elementu jest o jeden mniejszy od liczby elementów w tablicy. Wobec tego deklaracja tablicy umożliwia utworzenie wielu zmiennych w jednej deklaracji; za pomocą indeksu można później wskazywać poszczególne elementy. Kompilator nie sprawdza, czy użyto prawidłowych indeksów; np. kompilator nie zgłosi błędu, jeśli odwołamy się do nieistniejącego elementu miesiace[100]. Jednak przypisanie takiemu elementowi wartości może spowodować kłopoty, w szczególności uszkodzić dane lub kod i ewentualnie zawiesić program. Monika Wrzosek (IM UG) Podstawy Programowania 100 / 119

Tablice Przykład prawidłowej deklaracji tablicy i ustawienia jej wartości: i n t tab [ 2 ] ; tab [ 0 ] = 5 ; tab [ 1 ] = 3 ; Przykład nieprawidłowego wypełnienia tablicy: i n t tab [ 2 ] ; tab [ 0 ] = 5 ; tab [ 1 ] = 3 ; tab [ 2 ] = 6 ; Błąd! Element tab[2] nie istnieje. Kompilator nie zgłosi błędu, jednak instrukcja tab[2] = 6; może zniszczyć w pamięci ważną daną. Monika Wrzosek (IM UG) Podstawy Programowania 101 / 119

#i n c l u d e <i o s t r e a m > using namespace s t d ; i n t main ( ) i n t cena [ 3 ] ; cena [ 0 ] = 6 ; cena [ 1 ] = 8 ; cena [ 2 ] = 5 ; cout << " T a b l i c a cena z a w i e r a warto ś c i : " << cena [ 0 ] << ", " << cena [ 1 ] << " i " << cena [ 2 ] << e n d l ; i n t i l e [ 3 ] = 2, 1, 2 ; i n t k o s z t = cena [ 0 ] i l e [ 0 ] + cena [ 1 ] i l e [ 1 ] + cena [ 2 ] i l e [ 2 ] ; cout << "Wydano " << k o s z t << " z ł. " << e n d l ; cout << " Rozmiar t a b l i c y i l e : " << s i z e o f ( i l e ) << " b a j t ów" ; cout << " \ nrozmiar j e d n e g o elementu : " << s i z e o f ( i l e [ 0 ] ) ; T a b l i c a cena z a w i e r a warto ś c i : 6, 8 i 5 Wydano 30 z ł. Rozmiar t a b l i c y i l e : 12 b a j t ów. Rozmiar j e d n e g o elementu : 4 Monika Wrzosek (IM UG) Podstawy Programowania 102 / 119

Tablice Program najpierw tworzy trójelementową tablicę cena; jej elementy mają indeksy 0, 1 i 2. Pierwszy element tablicy (tzn. element o indeksie 0) ma wartość 6, drugi (o indeksie 1) ma wartość 8, ostatni trzeci (o indeksie 2) wartość 5: cena [ 0 ] = 6 ; cena [ 1 ] = 8 ; cena [ 2 ] = 5 ; Każdy element tej tablicy to liczba typu int ze wszystkimi jej cechami, zatem program może przypisywać elementom wartości, dodawać elementy, mnożyć je i wyświetlać ich wartości. Tablicę można też wypełnić wartościami w chwili jej tworzenia (inicjalizacja): i n t i l e [ 3 ] = 2, 1, 2 ; Monika Wrzosek (IM UG) Podstawy Programowania 103 / 119

Tablice Tablice można inicjalizować tylko podczas definiowania tablicy; nie można tego zrobić później: i n t A [ 4 ] ; A [ 4 ] = 2, 2, 3, 2 ; nieprawidłowo i n t A [ 4 ] = 2, 2, 3, 2 ; prawidłowo Nie można przypisać jednej tablicy w całości do innej tablicy: i n t A [ 4 ] = 2, 2, 3, 2 ; i n t B [ 4 ] = A ; nieprawidłowo i n t A [ 4 ] = 2, 2, 3, 2 ; i n t B [ 4 ] ; B = A nieprawidłowo Monika Wrzosek (IM UG) Podstawy Programowania 104 / 119

Tablice Podczas inicjalizacji tablicy można podać mniej wartości niż ma tablica: i n t A [ 5 ] = 3, 2 ; Wtedy dwa pierwsze elementy otrzymają wartości kolejno 3 i 2, a pozostałe kompilator wypełni zerami. Powyższa inicjalizacja jest równoważna następującej: i n t A [ 5 ] = 3, 2, 0, 0, 0 ; Inicjalizacja i n t A [ 5 ] = 3, 2, 6, 0, 1, 2 ; zakończy się błędem: na liście jest 6 liczb, a tablica ma rozmiar 5. Jeśli w inicjalizacji tablicy nawiasy kwadratowe pozostawimy puste, kompilator policzy elementy inicjalizujące i ustawi odpowiednią wielkość tablicy: i n t A [ ] = 1, 5, 2, 1, 1, 4 ; Kompilator utworzy 6-elementową tablicę A. Monika Wrzosek (IM UG) Podstawy Programowania 105 / 119

Wypełnianie tablicy w pętli (1) #i n c l u d e <i o s t r e a m > using namespace s t d ; i n t main ( ) i n t tab [ 1 0 0 ], n ; cout << " Podaj r o z m i a r t a b l i c y ( n i e wi ę k s z y n i ż 1 0 0 ) : " ; c i n >> n ; //Wype ł n i e n i e t a b l i c y warto ś c i a m i z k l a w i a t u r y cout << " Podaj e l e m e n t y t a b l i c y : " << e n d l ; f o r ( i n t i = 0 ; i <= n 1; i ++) cout << " tab [ " << i << " ]= " ; c i n >> tab [ i ] ; //Wyś w i e t l e n i e zawarto ś c i t a b l i c y cout << " Oto e l e m e n t y t a b l i c y : " << e n d l ; f o r ( i n t i = 0 ; i < n ; i ++) cout << tab [ i ] << " " ; Monika Wrzosek (IM UG) Podstawy Programowania 106 / 119

Wypełnianie tablicy w pętli (1) Przykładowy wynik działania programu: Podaj r o z m i a r t a b l i c y ( n i e wi ę k s z y n i ż 1 0 0 ) : 5 Podaj e l e m e n t y t a b l i c y : tab [0]= 2 tab [1]= 3 tab [2]= 1 tab [3]= 1 tab [4]= 3 Oto e l e m e n t y t a b l i c y : 2 3 1 1 3 W programie utworzono tablicę 100-elementową, użytkownik nie musi jednak wykorzystać jej w całości. W tym celu wprowadza rzeczywisty rozmiar n (nie większy niż maksymalny = 100). Kolejne operacje wykonywane są na fragmencie tablicy wskazanym przez użytkownika, np: f o r ( i n t i = 0 ; i < n ; i ++) zamiast f o r ( i n t i = 0 ; i < 100 ; i ++) Monika Wrzosek (IM UG) Podstawy Programowania 107 / 119

Wypełnianie tablicy w pętli (2) #i n c l u d e <i o s t r e a m > #i n c l u d e <c s t d l i b > #i n c l u d e <ctime> using namespace s t d ; i n t main ( ) i n t tab [ 1 0 0 ], a, b, n ; cout << " Podaj k o l e j n o pocz ą t e k i k o n i e c p r z e d z i a ł u : \n" ; c i n >> a >> b ; cout << " Podaj r o z m i a r t a b l i c y ( n i e wi ę k s z y n i ż 1 0 0 ) : " ; c i n >> n ; //Wype ł n i e n i e t a b l i c y l i c z b a m i losowymi z p r z e d z i a ł u [ a, b ] s r a n d ( time (NULL ) ) ; f o r ( i n t i = 0 ; i <= n 1; i ++) tab [ i ] = rand ()%( b a + 1) + a ; cout << " Oto e l e m e n t y t a b l i c y : " << e n d l ; f o r ( i n t i = 0 ; i < n ; i ++) cout << tab [ i ] << " " ; Monika Wrzosek (IM UG) Podstawy Programowania 108 / 119

Wypełnianie tablicy w pętli (2) Przykładowy wynik działania programu: Podaj k o l e j n o pocz ą t e k i k o n i e c p r z e d z i a ł u : 0 9 Podaj r o z m i a r t a b l i c y ( n i e wi ę k s z y n i ż 1 0 0 ) : 10 Oto e l e m e n t y t a b l i c y : 1 1 9 0 7 1 7 3 0 2 Monika Wrzosek (IM UG) Podstawy Programowania 109 / 119

Program zlicza jedynki w n-elementowym ciągu binarnym. #i n c l u d e <i o s t r e a m > #i n c l u d e <c s t d l i b > #i n c l u d e <ctime> using namespace s t d ; i n t main ( ) i n t b i n [ 1 0 0 ], n, i l e =0; cout << " Podaj r o z m i a r t a b l i c y ( n i e wi ę k s z y n i ż 1 0 0 ) : " ; c i n >> n ; s r a n d ( time (NULL ) ) ; f o r ( i n t i = 0 ; i < n ; i ++) b i n [ i ] = rand ()%2; cout << " Oto e l e m e n t y t a b l i c y : " << e n d l ; f o r ( i n t i = 0 ; i < n ; i ++) cout << b i n [ i ] << " " ; f o r ( i n t i = 0 ; i < n ; i ++) i f ( b i n [ i ] == 1) i l e ++; cout << " \ n L i c z b a j e d y n e k w wylosowanym c i ągu to : " << i l e ; Monika Wrzosek (IM UG) Podstawy Programowania 110 / 119

Przykładowy wynik działania programu: Podaj r o z m i a r t a b l i c y ( n i e wi ę k s z y n i ż 1 0 0 ) : 10 Oto e l e m e n t y t a b l i c y : 1 0 1 0 0 0 1 0 0 1 L i c z b a j e d y n e k w wylosowanym c i ągu to : 4 Monika Wrzosek (IM UG) Podstawy Programowania 111 / 119

Tablice znakowe Definicja char tab [ 3 ] ; oznacza, że tab jest tablicą 3 elementów, będących znakami. #i n c l u d e <i o s t r e a m > using namespace s t d ; i n t main ( ) char tab [ 3 ] ; tab [ 0 ] = C ; tab [ 1 ] = + ; tab [ 2 ] = + ; f o r ( i n t i = 0 ; i < 3 ; i ++) cout << tab [ i ] ; C++ Monika Wrzosek (IM UG) Podstawy Programowania 112 / 119

Tablice znakowe W tablicy znakowej można również umieścić tekst. Wtedy po ciągu liter (a właściwie ich kodów liczbowych) następuję znak o kodzie 0 (NULL). Jest on po to, aby oznaczyć, gdzie kończy się ciąg liter. Na taki ciąg liter zakończony znakiem NULL mówimy string (łańcuch). #i n c l u d e <i o s t r e a m > using namespace s t d ; i n t main ( ) char tab1 [ ] = " kot a l i " ; char tab2 [ ] = k, o, t,, a, l, i ; cout << " Rozmiar tab1 : " << s i z e o f ( tab1 ) << e n d l ; cout << " Rozmiar tab2 : " << s i z e o f ( tab2 ) ; Rozmiar tab 1 : 8 Rozmiar tab 2 : 7 Monika Wrzosek (IM UG) Podstawy Programowania 113 / 119

Program sprawdza, czy wprowadzony wyraz jest palindromem. #i n c l u d e <i o s t r e a m > using namespace s t d ; i n t main ( ) char tab [ 1 0 0 ] ; cout << " Podaj wyraz : " ; c i n >> tab ; i n t n = 0 ; w h i l e ( tab [ n ]!= NULL) n++; // o b l i c z e n i e d ł ugo ś c i wyrazu i n t i = 0, j = n 1; w h i l e ( i < n /2) i f ( tab [ i ]!= tab [ j ] ) break ; i ++; j ; i f ( i < j ) cout << " Wyraz n i e j e s t palindromem. " ; e l s e cout << " Wyraz j e s t palindromem. " ; Monika Wrzosek (IM UG) Podstawy Programowania 114 / 119

Przykładowe wyniki działania programu: Podaj wyraz : k a j a k Wyraz j e s t palindromem. Podaj wyraz : owocowo Wyraz j e s t palindromem. Podaj wyraz : anna Wyraz j e s t palindromem. Podaj wyraz : programowanie Wyraz n i e j e s t palindromem. Monika Wrzosek (IM UG) Podstawy Programowania 115 / 119

Tablice dwuwymiarowe Definicja i n t tab [ 3 ] [ 5 ] ; oznacza, że tab jest tablicą 3-elementową, a każdy z tych elementów jest 5-elementową tablicą int. Pierwszy element tab[0], to tab[0][0] i jest to już liczba typu int. Aby zatem sięgnąć po element typu int, potrzebujemy dwóch indeksów. O pierwszym indeksie można myśleć jak o wyborze wiersza, o drugim jak o wyborze kolumny. Tablicę tab można widzieć jako macierz o 3 wierszach i 5 kolumnach. Poszczególne jej elementy to: tab[0][0] tab[0][1] tab[0][2] tab[0][3] tab[0][4] tab[1][0] tab[1][1] tab[1][2] tab[1][3] tab[1][4] tab[2][0] tab[2][1] tab[2][2] tab[2][3] tab[2][4] Monika Wrzosek (IM UG) Podstawy Programowania 116 / 119

Tablice dwuwymiarowe Kiedy tworzymy tablicę dwuwymiarową, możemy zainicjalizować wszystkie jej elementy. Sposób inicjalizacji wynika ze sposobu inicjalizacji tablic jednowymiarowych. Przykład inicjalizacji tablicy jednowymiarowej: i n t A [ 5 ] = 2, 3, 1, 0, 1 ; W przypadku tablic dwuwymiarowych każdy element sam z siebie jest tablicą, więc inicjalizujemy go tak jak to pokazano powyżej. Wobec tego inicjalizacja będzie zawierała listę inicjalizacji tablic jednowymiarowych ujętą w nawiasy i rozdzieloną przecinkami: i n t tab [ 3 ] [ 5 ] = 2, 3, 1, 0, 1, // warto ś c i tab [ 0 ] 5, 7, 3, 6, 6, // warto ś c i tab [ 1 ] 4, 1, 2, 8, 3 // warto ś c i tab [ 2 ] ; Monika Wrzosek (IM UG) Podstawy Programowania 117 / 119

Tablice dwuwymiarowe Inicjalizację i n t tab [ 3 ] [ 5 ] = 2, 3, 1, 0, 1, 5, 7, 3, 6, 6, 4, 1, 2, 8, 3 ; można zapisać w skróconej formie i n t tab [ 3 ] [ 5 ] = 2, 3, 1, 0, 1, 5, 7, 3, 6, 6, 4, 1, 2, 8, 3 ; a nawet i n t tab [ ] [ 5 ] = 2, 3, 1, 0, 1, 5, 7, 3, 6, 6, 4, 1, 2, 8, 3 ; Elementy tablicy wielowymiarowej umieszczane są kolejno w pamięci komputera tak, że najszybciej zmienia się najbardziej skrajny prawy indeks. Oznacza to, że tablica przechowywana jest "rzędami". Monika Wrzosek (IM UG) Podstawy Programowania 118 / 119

#i n c l u d e <i o s t r e a m > #i n c l u d e <c s t d l i b > #i n c l u d e <ctime> using namespace s t d ; i n t main ( ) i n t tab [ 1 0 ] [ 1 0 ], n, m; cout << " Podaj l i c z b ę w i e r s z y ( n<=10): " ; c i n >> n ; cout << " Podaj l i c z b ę kolumn (m<=10): " ; c i n >> m; // wype ł n i e n i e m a c i e r z y l i c z b a m i losowymi 0 9 s r a n d ( time (NULL ) ) ; f o r ( i n t i = 0 ; i < n ; i ++) f o r ( i n t j = 0 ; j < m; j ++) tab [ i ] [ j ] = rand ()%10; //wy ś w i e t l e n i e m a c i e r z y f o r ( i n t i = 0 ; i < n ; i ++) f o r ( i n t j = 0 ; j < m; j ++) cout << tab [ i ] [ j ] << " " ; cout << e n d l ; Monika Wrzosek (IM UG) Podstawy Programowania 119 / 119

/************************************************/ /* Program sortuje tablicę liczb calkowitych */ /* w porządku niemalejącym. */ /* Algorytm sortowania przez wstawianie. */ /************************************************/ #include <iostream> using namespace std; int main() const int max_n = 100; int A[max_n], n; // wczytanie danych cout << "Ile liczb chcesz posortować? (max=100) "; cin >> n; cout << "Wprowadź liczby " << endl; for (int i = 0; i < n; i++) cout << "A[" << i << "] = "; cin >> A[i]; // wypisanie tabeli cout << "Tabela przed sortowaniem:" << endl; for (int i = 0; i < n; i++) cout << A[i] << " "; // sortowanie przez wstawianie int i, j, pom; for (i = 0; i < n-1; i++) j = i + 1; pom = A[j]; while ((j > 0) && (A[j-1] > pom)) A[j] = A[j-1]; j--; A[j] = pom; // wypisanie posortowanej tabeli cout << "\ntabela po sortowaniu:" << endl; for (i = 0; i < n; i++) cout << A[i] << " "; PRZYKŁAD DZIAŁANIA PROGRAMU: Ile liczb chcesz posortować? (max=100) 6 Wprowadź liczby A[0] = 5 A[1] = 2 A[2] = 8 A[3] = 0 A[4] = 3 A[5] = 6 Tabela przed sortowaniem: 5 2 8 0 3 6 Tabela po sortowaniu: 0 2 3 5 6 8

/********************************************** */ /* Program sortuje tablicę liczb całkowitych */ /* w porządku niemalejącym. */ /* Algorytm sortowania bąbelkowego. */ /********************************************** */ #include <iostream> using namespace std; int main() const int max_n = 100; int A[max_n], n; // wczytanie danych cout << "Ile liczb chcesz posortować? (max=100) "; cin >> n; cout << "Wprowadź liczby " << endl; for (int i = 0; i < n; i++) cout << "A[" << i << "] = "; cin >> A[i]; // wypisanie tabeli cout << "Tabela przed sortowaniem:" << endl; for (int i = 0; i < n; i++) cout << A[i] << " "; // sortowanie bąbelkowe int i, j, pom; for (i = 1; i <= n; i++) for (j = n-1; j >= i; j--) if (A[j] < A[j-1]) pom = A[j-1]; A[j-1] = A[j]; A[j] = pom; // wypisanie posortowanej tabeli cout << "\ntabela po sortowaniu:" << endl; for (i = 0; i < n; i++) cout << A[i] << " "; PRZYKŁAD DZIAŁANIA PROGRAMU: Ile liczb chcesz posortować? (max=100) 6 Wprowadź liczby A[0] = 5 A[1] = 2 A[2] = 8 A[3] = 0 A[4] = 3 A[5] = 6 Tabela przed sortowaniem: 5 2 8 0 3 6 Tabela po sortowaniu: 0 2 3 5 6 8

/* Program zamienia miejscami elementy macierzy leżące po przeciwnej stronie */ /* prostej pionowej dzielącej macierz na dwie równe części. */ #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main () int A[10][10], n, m; int i, j, pom; cout << "Podaj liczbę wierszy (n<=10): "; cin >> n; cout << "Podaj liczbę kolumn (m<=10): "; cin >> m; //wypełnienie macierzy liczbami losowymi 0-9 srand(time(null)); for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) A[i][j] = rand()%10; //wyświetlenie tablicy cout << "Wylosowana tablica:" << endl; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) cout << A[i][j] << " "; cout << endl; //zamiana elementów w tablicy for (i = 0; i < n; i++) for (j = 0; j < m/2; j++) pom = A[i][j]; A[i][j] = A[i][(m-1)-j]; A[i][(m-1)-j] = pom; //wyświetlenie tablicy zmodyfikowanej cout << "Tablica zmodyfikowana:" << endl; for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) cout << A[i][j] << " "; cout << endl; PRZYKŁAD DZIAŁANIA PROGRAMU: Podaj liczbę wierszy (n<=10): 3 Podaj liczbę kolumn (m<=10): 7 Wylosowana tablica: 8 4 2 5 6 5 2 4 6 4 2 2 3 4 8 8 7 0 9 3 9 Tablica zmodyfikowana: 2 5 6 5 2 4 8 4 3 2 2 4 6 4 9 3 9 0 7 8 8