Edytuj stronę Odnośniki Fold/unfold all ODT export Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ====== 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ą: <code C> 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); </code> 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** : **[[https://en.cppreference.com/w/c/numeric/random/rand|rand]]**, **[[https://en.cppreference.com/w/c/numeric/random/srand|srand]]**, **[[https://en.cppreference.com/w/c/memory/malloc|malloc]]**, **[[https://en.cppreference.com/w/c/memory/free|free]]** * **time.h** : **[[https://en.cppreference.com/w/c/chrono/time|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'' ([[https://pl.wikibooks.org/wiki/C%2B%2B/Zarz%C4%85dzanie_pami%C4%99ci%C4%85|Zarządzanie pamięcią]]) * Użyj strumieni ''std::cin'' i ''std::cout'' z biblioteki ''[[http://www.cplusplus.com/reference/iostream/|<iostream>]]'' do wczytywania danych i wyświetlania komunikatów ([[https://pl.wikibooks.org/wiki/C%2B%2B/Strumienie|Strumienie]]) * Wykorzystaj obiekt typu ''[[http://www.cplusplus.com/reference/string/string/|<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 [[http://www.cplusplus.com/reference/|standardowej biblioteki C++]]. Np. w C%%++%%11 dostępna jest funkcja [[https://en.cppreference.com/w/cpp/algorithm/random_shuffle|std::random_shuffle]]. * Użyj referencji zamiast wskaźników tam gdzie uznasz to za stosowane ([[https://pl.wikibooks.org/wiki/C%2B%2B/Referencje|Referencje]]) * Dla C%%++%%11 użyj specyfikatora ''auto'' przy deklaracji obiektów i zmiennych ([[https://pl.wikibooks.org/wiki/C%2B%2B/Zmienne#Dedukcja_typ%C3%B3w_-_auto_(C++11)|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 [[https://moodle.umk.pl/mod/assign/view.php?id=282329|Zadanie 1]]