Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok akademicki 2016/2017
Materiał - Typy zmiennych - Instrukcje warunkowe - Pętle - Tablice statyczne - Wskaźniki - Tablice dynamiczne - Referencje - Funkcje
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 [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ć
#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, możliwa będzie alokacja tablicy dynamicznej typu int. I. Przy pomocy funkcji wykona alokację tablicy II. I. Funkcja przyjmuje tylko rozmiar, a zwraca kopię wskaźnika z zaalokowaną pamięcią II. *) Funkcja przyjmuje wskaźnik oraz rozmiar i nic nie zwraca Przy pomocy funkcji uzupełnij tablicę kolejnymi wartościami ciągu Fibonacciego III. Znajdź i wyświetl największy element w tablicy. IV. Zmodyfikuj typ int w taki sposób by można było wyświetlić więcej elementów ciągu Fibonacciego (91) Zmierz czas wykonywania obliczeń dla 40 elementów w zależności od implementacji liniowej oraz rekurencyjnej.
Zadanie 4 2. Napisz program, w którym w funkcji zostanie utworzona tablica dwuwymiarowa (zwrócona do funkcji main). Napisz funkcję która uzupełni tą tablicę wg schematów. Do wyświetlania użyj metody std::setw(int); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 8 7 6 5 9 10 11 12 16 15 14 13 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
Zadania: 3. Napisz program który wyświetli wszystkie dodatnie dzielniki liczby podanej przez użytkownika (wynik ma zostać zapisany w tablicy), w przypadku braku dzielników (poza 1 i samą sobą) na ekranie pojawia się komunikat, że jest to liczba pierwsza. 4. 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 posortuje elementy tablicy dowolnym algorytmem sortowania III. Przekaż tablice do funkcji, która odwróci kolejność elementów tablicy IV. Napisz funkcję, która zwróci kopię przekazanej do niej tablicy, V. Wypisz elementy tablicy po wykonaniu każdej operacji przy pomocy funkcji
Zadania: 5. Napisz program generujący hasła: a. Użytkownik zostanie poproszony o długość hasła b. Generowanie haseł tylko alfanumerycznych c. Generowanie haseł zawierających znaki specjalne
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