Od C do 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++

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:

  1. Użytkownik podaje wartości k, n
  2. Tworzony jest bęben losujący mieszczący n kul (tablica liczb całkowitych o rozmiarze n)
  3. Wypełniamy bęben kulami ponumerowanymi od 1 do n
  4. Mieszamy losowo zawartość
  5. Podajemy numery k pierwszych kul

Przydatne funkcje:

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