Od C do C++

Powtórka z C

typy

operatory

instrukcje sterujące

wskaźniki

dynamiczny przydział pamięci

struktury

pliki nagłówkowe i źródłowe

różnice między C a C++

Ćwiczenia

Losowanie Lotto

Zaimplementuj program w C (potem przerobimy go na C++) realizujący losowanie k liczb z n bez zwracania zgodnie z ponizszym schematem.

Utwórz plik nagłówkowy beben.h z poniższą zawartością:

struct beben { int rozmiar; int *kule; char* opis; }; struct beben *utworz(int n); struct beben *wypelnij(struct beben *b); struct beben *mieszaj(struct beben *b); void wypisz(struct beben *b, int n); void zwolnij(struct beben *b);

Funkcje powinny realizować:

utworz - tworzy bęben mieszczący n kul i ustawia opis na „Beben stworzony”

wypelnij - wypełnia bęben kulami od 1 do n i ustawia opis na „Beben gotowy do losowania”

mieszaj - miesza zawartość bębna i ustawia opis na „Zawartosc wymieszana”

wypisz - wypisuje opis oraz numery pierwszych n kul

zwolnij - niszczy bęben,

Zdefiniuj powyższe funkcje w pliku źródłowym beben.c.

W osobnym pliku źródłowym program.cpp napisz program, który korzystając z tych funkcji przeprowadzi losowanie wykonując nastepujace kroki:

Użytkownik podaje wartości k, n

Tworzony jest bęben losujący mieszczący n kul (tablica liczb całkowitych o rozmiarze n)

Wypełniamy bęben kulami ponumerowanymi od 1 do n

Mieszamy losowo zawartość

Podajemy numery k pierwszych kul

Przydatne funkcje:

stdlib.h : rand, srand, malloc, free

time.h : time

Zadanie 1: Od C do C++

Wyeliminuj z programu losującego elementy języka C na rzecz mechanizmów wykorzystywanych w C++

Zamień rozszerzenia nazw plików źródłowych z *.c na *.cpp

Struktura w C++ jest klasą, usuń zbędne słowo kluczowe struct przy deklaracjach zmiennych typu beben lub uczyń typ reprezentujący bęben klasą

Zamień wywołania funkcji malloc() i free() na wywołania operatorów new i delete (Zarządzanie pamięcią)

Użyj strumieni std::cin i std::cout z biblioteki <iostream> do wczytywania danych i wyświetlania komunikatów (Strumienie)

Wykorzystaj obiekt typu <string> zamiast tablic char* do reprezentowania napisów

Jeżeli wykorzystujesz nadal którąkolwiek funkcję z biblioteki standardowej C zastąp ją odpowiednikiem ze standardowej biblioteki C++. Np. w C++11 dostępna jest funkcja std::random_shuffle.

Użyj referencji zamiast wskaźników tam gdzie uznasz to za stosowane (Referencje)

Dla C++11 użyj specyfikatora auto przy deklaracji obiektów i zmiennych (deklaracja typów auto)

Zamień deklarację struktury beben w klasę Beben, zadbaj o hermetyzację obiektu (pola klasy Beben powinny być prywatne, a ewentualny dostęp do nich powinien być realizowany przez metody dostępowe (tzw. gettery i settery), zastąp funkcje utworz, wypelnij, mieszaj, wypisz, zwolnij metodami klasy Beben.

Rozwiązanie w postaci plików nagłówkowych *.h i źródłowych *.cpp umieść w Moodle Zadanie 1