Zad 1. (1 punkt)
Dokonaj zmina w programie Kod programu tak by na standardowym wyjściu zostało wypisane:
Przed: a = 1 b = 2 c = 3 Po : a = 1 b = 6 c = 12
Typ wyliczeniowy enum
Enum to rodzaj danych, który zawiera już listę wartości, jaką można nadać zmiennej własnego typu enum. Taki typ poprzedza słowo kluczowe enum.
Zad 2. (1 punkt)
Zmodyfikuj kod programu Kod programu tak aby na standardowym wyjściu otrzymać:
0 1 2
Zad 3. (1 punkt)
Do programu Kod programu dodaj zawartość funkcji int suma_liczb_naszego_enuma() zwracającej sumę elementów enuma.
Wskaźniki do funkcji
Zad 4. (2 punkt)
Napisz funkcję bool f(int a), która zwarac true jeżeli liczba jest mniejsz od 0 oraz false w przeciwnm wypadku.
Napisz funkcję o następującej sygnaturze:
void filtr(int t[], int n, bool (*f)(int));
Funkcja powinna wypisać na ekran te elementy tablicy t, dla których warunek filtracji f zwraca wartość true. Argument n określa ilość elementów tablicy t.
Funkcje o zmiennej liczbie argumentów:
Zdarzają się funkcje które nie mają w naturalny sposób określonej, z góry znanej liczby argumentów. W C/C++ istnieje sposób na tworzenie tego rodzaju funkcji, choć jest to nieco zawiłe i trudne w użyciu (w porównaniu z innymi językami, jak C#, Java, a szczególnie Python, w którym mechanizm przekazywania argumentów jest zdumiewająco elastyczny i łatwy w użyciu). W C++ zwykle lepiej i prościej zastosować opisany dalej mechanizm przeciążania funkcji.
Funkcje tego typu deklarujemy ze znakiem wielokropka (' ...') w miejsce parametrów, których liczby nie specyfikujemy. Przed wielokropkiem wymienione są wszystkie „normalne”, obowiązkowe parametry (przynajmniej jeden). Na przykład deklaracja
int fun(char* ...);
deklaruje funkcję, którą można wywołać z obowiązkowym pierwszym argumentem (typu char*) i dowolną liczbą dodatkowych argumentów. Tę samą deklarację można też zapisać z przecinkiem po ostatnim obowiązkowym argumencie:
int fun(char*, ...);
Jak napisać treść funkcji aby prawidłowo odczytać w niej wszystkie przekazane argumenty? Przede wszystkim należy dołączyć plik nagłówkowy cstdarg (lub stdarg.h). następnie, wewnątrz funkcji:
- Utworzyć zmienną typu va_list. Typ ten jest dostępny po dołączeniu pliku nagłówkowego cstdarg (nazwa va_list pochodzi od variable-arguments list). Załóżmy, że zmienna ta nazywa się ap (jest to tradycyjna nazwa takiej zmiennej, od argument pointer).
- Wywołać (tylko raz) funkcję va_start podając jako jej pierwszy argument utworzoną wcześniej zmienną typu va_list, a jako drugi argument zmienną odpowiadającą ostatniemu parametrowi obowiązkowemu funkcji (w poniższym przykładzie wywołanie ma zatem postać va_start(ap,typ)). Funkcja ta jest zwykle implementowana jako makro preprocesora, ale dla nas jako użytkowników nie jest to istotne.
- Wartości kolejnych argumentów odczytywać wywołując funkcję va_arg: jej pierwszym argumentem powinna być zmienna ap, a drugim nazwa typu tego argumentu funkcji który chcemy odczytać. Wynika z tego zatem, że ten typ trzeba znać! Trzeba też wiedzieć, kiedy skończyć wczytywanie argumentów. Najczęściej informacja o liczbie i typie argumentów w aktualnym wywołaniu jest w jakiś sposób przekazywana poprzez pierwsze, obowiązkowe argumenty funkcji.
- Po zakończeniu wczytywania argumentów wywołać funkcję va_end ze zmienną ap jako jedynym argumentem. Funkcja ta porządkuje stos; jeśli jej nie wywołamy, to program może się załamać.
Więcej informacji na Zmienna liczba argumentów
Zad 4. (1 punkt)
Dokonaj zmina w programie Kod programu tak by na standardowym wyjściu zostało wypisane:
Napis : Jan Nielegalny kod typu!!! Liczba int : 17 Napis : Jan Napis : Maria Liczba double: 1 Liczba int : 17 Liczba double: 19.5 Liczba double: 1.5 Napis : OK Liczba int : -1 Liczba int : 8
Zad 6. (2 punkt)
W poniższych zadaniach zakładamy, że funkcje mają nieokreśloną liczbę argumentów będących liczbami całkowitymi. Pierwszy i jedyny określony argument oznacza liczbę pozostałych argumentów
- Napisz funkcję liczącą sumę podanych argumentów
- Napisz funkcje liczącą średnią arytmetyczną