Podstawy informatyki Informatyka stosowana - studia niestacjonarne - Zajęcia nr 4 Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie,
Materiał - Typy zmiennych - Instrukcje warunkowe - Pętle - Tablice statyczne - Wskaźniki - Tablice dynamiczne - Referencje - Funkcje - Przeładowania funkcji
Instrukcje warunkowe while (warunek) { // blok instrukcji; } Obliczana jest wartość warunku, jeśli warunek wynosi 0 to blok instrukcji nie jest wykonywany. Jeśli warunek jest różny od 0 to blok instrukcji jest wykonywany dopóki warunek ma wartość niezerową;
Instrukcje warunkowe do { // blok instrukcji } while (warunek); Najpierw wykonywany jest blok instrukcji, a dopiero potem sprawdzany jest warunek. Jeśli warunek jest prawdziwy to wykonywany jest ponownie blok instrukcji.
Instrukcje warunkowe for (instr_ini; wyraz_warunk; instr_krok) { //instrukcja1 } instr_ini instrukcja wykonywana w czasie pierwszego wykonywania pętli wyraz_warunk wyrażenie obliczane w czasie każdej iteracji zmiennych (gdy jest równe 0 to pętla kończy swoje działanie) instr_krok instrukcja wykonywana na zakończenie każdego obiegu pętli
Tablice
Tablice statyczne [od C++ 9] tablica statyczna jednowymiarowa: typ_danych nazwa_tablicy[ilosc_elementów]; tablica statyczna dwuwymiarowa: typ_danych nazwa_tablicy[l_wierszy][l_kolumn]; Do tablic możemy przypisywać elementy w momencie jej inicjalizacji, jak również przy tablicach statycznych możemy operować na wartościach używając: cin / cout;
Tablice statyczne Odwoływanie się do elementów tablicy: int tab[3] = { 1, 2, 3 }; Wartości: tab[0] = 1; tab[1] = 2; tab[2] = 3; Jeśli umiemy się odwołać do elementu, możemy wywołać na nim: cin>>element; cout<<element;
Tablice statyczne (C++ 11, ) #include <array> Tablica statyczna jednowymiarowa: std::array<typ, rozmiar> nazwa_tablicy; Tablica wielowymiarowa: std::array<std::array<typ, rozmiar>, rozmiar> arr; http://en.cppreference.com/w/cpp/container/array
Tablice statyczne (C++ 11, ) Biblioteka array umożliwia stosowanie kontenera o zadanym rozmiarze dowolnego typu Pozwala na wykorzystanie elementów wbudowanych Możliwe jest wykorzystanie pętli for w formie for each Brak odpowiednika tablicy dynamicznej (czyt: dynarray) Wymuszone przejście na vector
Funkcje
Funkcje::Deklaracja, definicja użycie Deklaracja funkcji: typ_zwracany nazwa_funkcji( argumenty ); Definicja funkcji: typ_zwracany nazwa_funkcji( argumenty ) { ciało funkcji }; Przekazywanie argumentów do funkcji jest opcjonalne. Możliwe jest również przekazywanie kilku argumentów jednocześnie. By to zrobić należy rozdzielić jest przecinkami. Przykład: int funkcja(int arg1, int arg2); Funkcja jest to część programu, która możemy wywołać w kodzie programu poprzez podanie jej nazwy w programie oraz poprzez (opcjonalne) przekazanie argumentów do funkcji. Uwaga! Możliwa jest jednoczesna deklaracja z definicja funkcji, ale musi się ona odbyć przed użyciem funkcji w kodzie
Funkcje::Przeładowanie Może istnieć zdefiniowanych wiele funkcji o tej samej nazwie z różną liczbą argumentów jednak ich deklaracja ma być jednoznaczna!
Wskaźniki & referencje
Referencja Typ referencyjny jest połączeniem funkcjonalności typu wskaźnikowego ze składnią typu bezpośredniego Definicja zmiennej typy referencyjnego tworzona jest przez dodanie symbolu & przez nazwą zmiennej typu wskaźnikowego.
Wskaźniki - inicjalizacja Wskaźnik zmienna wskaźnikowa w której zapisywany jest nie obiekt, a adres komórki pamięci, inicjalizowana jest przez dodanie * przed nazwą zmiennej; Dzięki wskaźnikom możemy przechowywać np. adres innej zmiennej oraz umożliwić bezpośredni dostęp do tej zmiennej.
Wskaźniki i referencje Operacja Wskaźnik Referencja Zmienne bezpośrednie Deklaracja bez inicjalizacji Deklaracja z inicjalizacją Zmiana zmiennej wskazywanej int a, b; int a, b; int *wskaznik; - BRAK - int *ptr = &a; Int &ref = a; ptr = &b; - BRAK -
Wskaźniki vs tablice Nazwa tablicy jest wskaźnikiem na adres jej pierwszego elementu. int *wsk = tab; Zmienne wskaźnikowe można przesuwać, więc zapis tab[0] = 0; tab[1] = 1; tab[9] = 9; Jest równoznaczny z: *wsk = 0; *(wsk+1) = 1; *(wsk+9) = 9;
Tablice dynamiczne
Tablice dynamiczne Istnieje możliwość dynamicznej alokacji pamięci dla tablicy przy wykorzystaniu wskaźników. Generujemy wtedy tablicę o zalokowanej pamięci o zadanym rozmiarze. Istnieje możliwość zrobienia też dynamicznej tablicy wielowymiarowej, generuje się wtedy tablicę wskaźników na wskaźniki. int** tab = new int*[a];
Tablice i operacje na nich. tablica dynamiczna jednowymiarowa: TYP *nazwa_tablicy = new TYP [ilosc_elementów]; tablica wielowymiarowa: TYP **nazwa_tablicy = new TYP* [ilosc_elementów]; for(int i=0; i<ilość_elementów;i++) Nazwa_tablicy[i] = new TYP[ilość_elementów] zaletą tablic dynamicznych jest fakt, że pamięć można zwolnić
String tablica charow Aby móc posługiwać się typem string, który przechowuje łańcuchy znaków należy dodać plik nagłówkowy: #include <string> oraz użyć przestrzeni nazw std. Na zmiennej typu string możemy operować tak samo jak każdej innej zmiennej ORAZ tak jak na tablicy charów odwołując się do poszczególnych elementów w tablicy. Możliwe jest dodawanie (konkatenacja) zmiennych typu string jednak nie można sklejać w następujący sposób: string zmienna = nowy + wyraz
#include <ctime> using namespace std; void f() { clock_t begin = clock(); code_to_time(); clock_tend = clock(); double elapsed_secs = double(end - begin) / CLOCKS_PER_SEC; }
Zadania
Zadania: 1. Napisz program w którym zaalokowana zostanie tablica dynamiczna o rozmiarze podanym przez użytkownika. I. Przekaż tablicę do funkcji, która uzupełni tablicę zmiennymi losowymi z przedziału podanego przez użytkownika II. Przekaż tablicę do funkcji, która zwróci kopię tablicy III. Przekaż tablice do funkcji, która posortuje elementy tablicy dowolnym algorytmem sortowania IV. Przekaz tablicę do funkcji, która znajdzie i wyświetli min-max tablicy. V. Wypisz elementy tablicy przed i po sortowaniu I. tablica jest posortowana II. kopia jest nieposortowana
Zadanie 2. Napisz program, w którym: I. wewnątrz funkcji zostanie zaalokowana tablica dwuwymiarowa II. Przy pomocy osobnej funkcji zostanie uzupełniona tablica wg schematu. III. Wyświetl elementy tablicy IV. Zwolnij zaalokowaną pamięć 25 24 23 22 21 10 9 8 7 20 11 2 1 6 19 12 3 4 5 18 13 14 15 16 17
Zadania: 3. Napisz program, który na podstawie wartości liczbowej podanej przez użytkownika wygeneruje losowy ciąg znaków o danej długości (min 8 znaków). I. Łańcuch znaków jest tablicą dynamiczną typu char. II. Pojedyncze znaki są zwracane z indywidualnych funkcji: 1. Małe litery :: ASCII<97-122>, 2. Duże litery :: ASCII<65-90>, 3. Liczby :: ASCII <48-57> III. Uzupełniamy tablicę losowymi wynikami w zależności od wyboru użytkownika: I. Same małe litery II. Litery małe i duże w losowej ilości III. IV. Litery małe, duże i liczby w losowej ilości. Zdefiniuj ilość poszczególnych znaków w haśle.
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