Podstawy informatyki Informatyka stosowana - studia niestacjonarne - Zajęcia nr 5 Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie,
Materiał Umiemy Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Funkcje Wskaźniki Referencje Tablice dynamiczne Typ string Przeładowania funkcji Przed nami Struktury Operacje IO Argumenty do funkcji main
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 i więcej! 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
Argumenty funkcji main
Argumenty funkcji main Dla funkcji main: int main (int argc, char* argv[]), argc argument counter ilośc argumentów argv argument value ścieżka oraz argumenty. char* argv[] jednoznaczne z char** argv - jest tablicą wskaźnikową dwuwymiarową, gdzie wprowadzając do programu jakieś zmienne, zapisuje zawsze liczbę zmiennych argc, a potem jakie zmienne do argv, Zawsze argv[0] przechowuje nazwę programu! np.: argc zawsze = 1, gdzie argv[0] = nazwa programu/ ścieżka+nazwa programu uruchomienie programu:./program boo foo hii to argc = 4, po kolei argv = { program, boo, foo, hii }
Argumenty funkcji main #include <iostream> using namespace std; int main(int argc, char* argv[]) { cout<<"nazwa programu: " <<argv[0]<<endl; cout<<"ilosc argumentow: "<<argc<<endl; for(int i=1; i<argc; i++) { cout<<"argument "<<i<<" to: "<<argv[i]<<endl; } Program wywołuje się z konsoli: <nazwa_programu>.exe b 20 t o kaczka } system("pause"); return 0; Do programu można przesłać efekt działania innego programu lub zmienne środowiskowe. np. %USERNAME% https://pl.wikipedia.org/wiki/zmienna_%c5%9brodowiskowa
Struktury
Struktury - budowa Przykład budowy: struct nazwa { // definicja struktury typ1 element1; typ2 element2; }; // pola elementów // struktury nazwa obiekt; // deklaracja obiektu
Struktury odwołanie do elementów struct data { int dzien; int miesiac; int rok; }; data dzis; dzis.dzien = 16; dzis.miesiac = 12; dzis.rok = 2017; Data dziś = {16, 12, 2017}; // wykorzystanie agregatu
Zadania
Zadania: 1. Napisz program w którym zaimplementowana będzie struktura Liczba_zespolona, zawierająca dwie zmienne cz_rzeczywista, cz_urojona. I. Program ma umożliwić wykonanie podstawowych operacji arytmetycznych przy pomocy funkcji II. Program ma spytać użytkownika czy chce ponownie wykonać operacje na zdefiniowanych liczbach, czy podać nowe III. Wyświetlenie liczb w postaci: <1, 2i>
Zadanie 2. Napisz program, który za pomocą argumentów do funkcji main otrzyma: Nazwę_użytkownika (%USERNAME%) Aktualną datę Aktualną godzinię (%DATE%) (%TIME%) wyświetli na ekranie w formacie. Witaj: <nazwa użytkownika> W programie <nazwa programu> Dzisiejsza data: <data>, <godzina>
Zadania 3. Napisz program do którego zostanie przekazany ciąg znaków liczbowych. Zapisz otrzymany ciąg w postaci tablicy typu int Przy pomocy funkcji zlicz ilość elementów parzystych i nieparzystych Wynik oraz elementy z tablicy wyświetl na ekranie.
Zadanie 4. Napisz program w którym zaimplementowana będzie struktura Student zawierająca pola: imię, nazwisko, numer_indeksu licznik (statyczny) Utwórz tablicę 5 studentów i przy pomocy funkcji globalnej uzupełnij ich dane. Wypisz dane studentów przy pomocy metody.
Zadanie 5. Zmodyfikuj zadanie 4 w taki sposób, by dane studenta zostały przekazane przez argumenty do funkcji main.
Adventofcode.com
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