Wszystkie treści na stronie ir.migra.pl chronione są prawami autorskimi. Więcej informacji znajdziesz tutaj.
Zapisy podstawy programowej 2024 realizowane w temacie:
I. Rozumienie, analizowanie i rozwiązywanie problemów
Zakres rozszerzony. Uczeń spełnia wymagania określone dla zakresu podstawowego, a ponadto:II. Programowanie i rozwiązywanie problemów z wykorzystaniem komputera i innych urządzeń cyfrowych.
- do realizacji rozwiązania problemu dobiera odpowiednią metodę lub technikę algorytmiczną i struktury danych;
Zakres rozszerzony. Uczeń spełnia wymagania określone dla zakresu podstawowego, a ponadto:
- sprawnie posługuje się zintegrowanym środowiskiem programistycznym przy pisaniu, uruchamianiu i testowaniu programów;
Spis treści
- Typy danych
- Typy danych w języku C++
- Typy danych w języku Python
- Sposoby wprowadzania danych i wyprowadzania wyników
- Formatowanie wyprowadzanych wyników w języku C++
- Formatowanie wyprowadzanych wyników w języku C++
- Dane losowe
- Dane losowe w języku C++
- Dane losowe w języku Python
- Sprawdzanie poprawności danych
- Sprawdzanie poprawności danych w języku C++
- Sprawdzanie poprawności danych w języku Python
1. Typy danych
Prawie każdy język programowania daje możliwość tworzenia programów przetwarzających różnorodne dane: liczby, znaki, daty i struktury złożone, np. dane tekstowe teksty, tablice (C++), listy (Python).
W tworzonych przez nas wcześniej programach danymi były głównie liczby rzeczywiste i całkowite oraz znaki. W językach programowania typy te należą do prostych typów danych (w języku Python), zwanych też (w języku C++) podstawowymi typami danych.
Aby przechowywać ciągi znaków i wykonywać operacje na tekstach, stosowaliśmy typ tekstowy (łańcuchowy). Poznaliśmy też algorytmy wymagające przetwarzania wielu danych (np. liczb), co wymagało zastosowania tablic (C++), list (Python) lub typów tekstowych (łańcuchy). Typy te należą do typów złożonych (w języku C++ zwane również pochodnymi).
Wśród niektórych typów danych wyróżnia się ich szczegółowe podzbiory (jak pokazano w tabelach 2. i 4.).
1.1. Typy danych w języku C++
Podział typów danych w języku C++ | |
typy proste | porządkowe (m.in. całkowity, logiczny, znakowy) |
rzeczywiste | |
typy złożone | tablice |
łańcuchy | |
struktury | |
unie | |
typ obiektowy |
W języku C++ deklaracja zmiennej określonego typu wiąże się z przydzieleniem jej odpowiedniego obszaru pamięci i wyznaczeniem adresu w pamięci komputera. Na przykład zmienna typu logicznego zajmuje 1 bajt pamięci komputera. Typ logiczny składa się tylko z dwóch elementów (false i true), które odpowiadają wartościom logicznym fałsz i prawda. W języku C++ typ logiczny nosi nazwę bool
, a wartościom logicznym fałsz i prawda odpowiadają wartości false
i true.
W tabeli 2. przedstawiono typy danych dla znaków, liczb całkowitych i rzeczywistych, dodając informację, ile bajtów pamięci zajmuje zmienna zadeklarowana jako konkretny typ. Standardowo w C++ przyjmuje się, w zmiennych typu całkowitego pamiętane są liczby ze znakiem (można to wymusić słowem kluczowym signed
przed nazwą typu – wymaganym w przypadku zmiennych char
). Aby pamiętać liczby bez znaku, należy przed nazwą typu użyć słowa kluczowego unsigned.
Rodzaj typu | Zajętość pamięci | Zakres | Nazwa typu |
znakowy | 1B | znaki kodu ASCII | char |
2B lub 4B | znaki kodu Unicode | wchar_t |
|
całkowity, ze znakiem | 1B | 〈-128; 127〉 | signed char |
2B | 〈-32768; 32767〉 | short |
|
4B | 〈-231; 231 – 1〉 | int |
|
8B | 〈-263; 263 – 1〉 | long long |
|
całkowity, bez znaku | 1B | <0; 255〉 | unsigned char |
2B | 〈0; 65535〉 | unsigned short |
|
4B | 〈0; 232 – 1〉 | unsigned int |
|
8B | 〈0; 264 – 1〉 | unsigned long long |
|
rzeczywisty | 4B | 〈-3,4 · 1038; 3,4 · 1038〉 7-8 cyfr znaczących najmniejsze możliwe liczby bliskie zeru dające się przedstawić za pomocą typu float to -1,18 · 10-38 i 1,18 · 1038 |
float |
8B | 〈-1,78 · 10308; 1,78 · 10308〉 15-16 cyfr znaczących najmniejsze możliwe liczby bliskie zeru dające się przedstawić za pomocą typu double to -2,23 · 10-308 i 2,23 · 10-308 |
double |
|
16B | 〈-1,19 · 104932; 1,19 · 104932〉 21 cyfr znaczących najmniejsze możliwe liczby bliskie zeru dające się przedstawić za pomocą typu long double to -3,36 · 10-4932 i 3,36 · 10-4932 |
long double |
Uwaga: Wartości przedstawione w tabeli 2. są przykładowe, w rzeczywistości zależą od wykorzystywanego kompilatora.
Ćwiczenie 1. Określamy typy danych i wielkość pamięci zajmowanej przez zmienne
Do jakiego typu należą zmienne zadeklarowane w każdym z przypadków?
float a;
int x[50];
char c[21];
char d;
unsigned short k;
W języku C++ kompilator z góry wie, ile pamięci musi zarezerwować na zmienną danego typu. Wielkość określającą liczbę bajtów pamięci zajmowanych przez zmienną (lub typ zmiennej) można uzyskać w programie za pomocą operatora sizeof()
, którego parametrem jest nazwa zmiennej lub typu, np. dla zmiennych z ćwiczenia 1:
sizeof(a)
sizeof(x)
sizeof(double)
Przykład 1. Stosowanie operatora sizeof()
do określania liczby bajtów pamięci zajmowanych przez zmienne
Ćwiczenie 2. Obliczamy i wyświetlamy wielkości pamięci zajmowane przez zmienne wybranych typów
- Otwórz plik TC1_c2_p1.cpp, w którym zapisano program z przykładu 1. Objaśnij poszczególne wiersze programu, m.in. podaj jakiego typu zmienne zadeklarowano.
- Uzupełnij program, aby obliczał i wypisywał wielkości pamięci zajmowanej przez zmienne typów określonych w tabeli 2.
- Zapisz plik pod tą samą nazwą.
Język C++ posiada również wbudowane funkcje pozwalające na uzyskanie najmniejszych i największych wartości dających się zapamiętać w zmiennej określonego typu (przy czym dla zmiennych rzeczywistych przez wartość najmniejszą należy rozumieć możliwie najmniejszą liczbę dodatnią bliską zeru).
numeric_limits<T>::max() |
uzyskiwanie maksymalnej skończonej wartości reprezentowanej przez typ liczbowy T |
numeric_limits<T>::min() |
uzyskiwanie minimalnej skończonej wartości reprezentowanej przez typ liczbowy T |
Przykład 2. Uzyskiwanie najmniejszych i największych wartości dających się zapamiętać w zmiennej określonego typu
Ćwiczenie 3. Obliczamy i wypisujemy minimalne i maksymalne wartości dające się zapamiętać w zmiennej
- Otwórz plik TC1_c3_p2.cpp, w którym zapisano program z przykładu 2. Objaśnij, co dzieje się w poszczególnych wierszach programu.
- Uzupełnij program, aby obliczał i wypisywał minimalne i maksymalne wartości dające się zapamiętać w zmiennej pozostałych typów podanych w tabeli 2. Porównaj otrzymane wyniki z wartościami umieszczonymi w tabeli 2.
- Zapisz plik pod tą samą nazwą.
1.2. Typy danych w języku Python
Podział typów danych w języku Python | |
typy proste | logiczny |
całkowity | |
rzeczywisty | |
typy złożone | listy |
łańcuchy | |
zbiory | |
słowniki | |
typ obiektowy |
W języku Python, podobnie jak w języku C++, każda zmienna jest przechowywana w pamięci i zajmuje w niej określone miejsce. Jednak to, ile miejsca zużywa każda zmienna, często zależy od konkretnej wartości tej zmiennej.
W typach reprezentujących liczby w języku Python nie występują znane z języka C++ warianty różniące się zakresem i możliwością użycia znaku.
Rodzaj typu | Zajętość pamięci | Zakres | Nazwa typu | Przykład |
logiczny | do 28B | dwie (True oraz False ) |
boolean |
a = True |
całkowity | od 24B | ograniczony ilością pamięci dostępną dla programu | int |
n = 100000 |
rzeczywisty | 24B | 〈-1,79769 · 10308; 1,79769 · 10308〉 do 15 cyfr znaczących najmniejsze możliwe liczby bliskie zeru dające się przedstawić za pomocą typu float to -2,23 · 10-308 i 2,23 · 10-308 |
float |
f = 0.0 |
float
mogą się różnić w zależności od komputera, na którym jest uruchamiany program.Warto zauważyć, że obszar pamięci zajmowany przez zmienne w języku Python jest o wiele większy niż ten, który zajmowałyby podobne zmienne w języku C++. Jest to spowodowane tym, że nawet zmienne typów prostych są reprezentowane w pamięci jako obiekty. W praktyce nieczęsto spotyka się sytuacje, gdy wielkość pamięci jest mocno ograniczona i znacząco wpływa na kształt programu. W takich przypadkach trzeba zastanowić się, czy język Python jest najlepszym narzędziem do rozwiązania danego problemu albo użyć bardziej oszczędnych reprezentacji zdefiniowanych w specjalnych bibliotekach dla języka Python.
Ćwiczenie 4. Określamy typy danych i wielkość pamięci zajmowanej przez zmienne
Do jakiego typu należą zmienne zadeklarowane w każdym z przypadków?
a = 1.123
- liczby = [10, 20]
n = -6439
flaga = False
b = 5.4574e20
Wielkość pamięci zajmowanej przez dany typ prosty można dokładnie sprawdzić, używając funkcji getsizeof()
z modułu sys.
Zwraca ona liczbę użytych bajtów.
Funkcja getsizeof()
zwraca również całkowity rozmiar pamięci użyty dla łańcuchów znaków, jednak dla innych złożonych typów i obiektów funkcja nie uwzględni obiektów, do których odwołuje się dana zmienna. Przykładowo dla listy funkcja nie uwzględni pamięci zużytej przez jej elementy. Aby sprawdzić jakiego typu jest dana zmienna, można użyć wbudowanej funkcji type().
Przykład 3. Zastosowanie funkcji getsizeof()
i type()
Ćwiczenie 5. Obliczamy i wyświetlamy wielkości pamięci zajmowane przez zmienne wybranych typów
- Otwórz plik TC1_c5_p3.py, w którym zapisano program z przykładu 3. Objaśnij, co dzieje się w poszczególnych wierszach programu.
- Zmień program tak, aby sprawdzał typ i miejsce zajęte przez bardzo długi napis.
- Zapisz plik pod tą samą nazwą, uruchom i wyjaśnij rezultat działania programu.
2. Sposoby wprowadzania danych i wyprowadzania wyników
Wykonując ćwiczenia dotyczące tworzenia i uruchamiania programów w językach C++ i Python, dane do programów wprowadzaliśmy z klawiatury, a wyprowadzaliśmy na monitor. Czasem jednak wygodniej jest, jeśli program korzysta z danych generowanych losowo lub też wczytuje je z przygotowanego wcześniej pliku.
Sposoby wprowadzania danych:
- wprowadzanie danych z klawiatury – obiekt
cin
(C++), funkcjainput()
(Python, - generowanie liczb losowo – funkcje
rand()
isrand()
(C++), funkcja … (Python), - wprowadzać dane z pliku (temat C9, część II Materiału edukacyjnego).
Sposoby wyprowadzania danych:
- wyprowadzanie wyników działania programu na ekran monitora – obiekt
cout
(C++), funkcjaprintf()
(C++), funkcjaprint()
(Python), - wyprowadzać wyniki działania programu do pliku (temat C9, część II Materiału edukacyjnego).
2.1. Formatowanie wyprowadzanych wyników w języku C++
W języku C++:
- Możliwe jest formatowanie danych wyprowadzanych za pomocą obiektu
cout
poprzez użycie różnego rodzaju poleceń, np.setprecision(dokładność)
,setiosflags(atrybut)
,setw(szerokość)
,setfill(znak-wypełnienia)
. - Do formatowania wyprowadzanych danych często wykorzystywana jest istniejącą już w języku C funkcja
printf(format, dana1, dana2, ..., danaN)
, gdzie format to łańcuch określający sposób formatowania, a dana1, dana2, …, danaN to kolejne dane podlegające formatowaniu.
Symbol formatowania | Znaczenie |
\n | przejście do nowego wiersza |
\t | znak tabulacji |
%d | wyprowadzenie wartości całkowitej w postaci dziesiętnej |
%x | wyprowadzenie wartości całkowitej w postaci szesnastkowej |
%e | wyprowadzenie wartości zmiennoprzecinkowej w notacji naukowej |
%e | wyprowadzenie wartości zmiennoprzecinkowej w postaci ułamka dziesiętnego |
%c | wyprowadzenie znaku |
%s | wyprowadzenie ciągu znaków |
%% | wyprowadzenie znaku „%” |
printf()
Uwaga: Szczegółowy opis funkcji printf()
i wszystkich wykorzystywanych w niej specyfikacji formatu można znaleźć w dowolnym podręczniku do języka C.
Przykład 5. Wyprowadzanie wartości za pomocą funkcji printf()
w języku C++
Ćwiczenie 6. Analizujemy gotowy program
- Otwórz plik TC1_c6_p5.cpp. Uruchom program.
- Objaśnij sposób formatowania poszczególnych wyników.
2.2. Formatowanie wyprowadzanych wyników w języku Python
W języku Python najprostszym sposobem formatowania jest użycie funkcji print()
z wieloma argumentami podobnie, jak zostało to pokazane w przykładzie 3. W takim przypadku na ekran zostanie wyprowadzony każdy z podanych argumentów rozdzielonych separatorem, który domyślnie jest znakiem spacji.
Przy definiowaniu ciągów znaków można, podobnie jak w języku C++, używać \n
i \t
jako reprezentacje znaków nowej linii i tabulacji.
Przy użyciu funkcji print()
w języku Python nie ma potrzeby dodawać znaku nowej linii na końcu napisu. Ta funkcja automatycznie przechodzi do nowej linii po wyprowadzeniu napisu na ekran.
Do zaawansowanego formatowania w języku Python używa się mechanizmu f-łańcuchów (ang. f-string), który został zastosowany w przykładzie 6.
Przykład 6. Wyprowadzanie wartości za pomocą funkcji print()
i f-łańcuchów w języku Python
Ćwiczenie 7. Analizujemy gotowy program
- Otwórz plik TC1_c7_p6.py. Uruchom program.
- Objaśnij sposób formatowania poszczególnych wyników.
3. Dane losowe
W wielu zastosowaniach (np. szyfrowanie, symulacje, gry komputerowe, grafika komputerowa) konieczne jest wprowadzenie do programu elementu przypadkowości. Wówczas wygodniej jest, jeśli program korzysta z danych generowanych losowo lub też wczytuje je z przygotowanego wcześniej pliku.
Większość języków programowania posiada generatory liczb pseudolosowych, umożliwiające wybieranie „przypadkowych” liczb. Przypadkowość jest tu pojęciem umownym, ponieważ tak naprawdę liczby te tworzone są według z góry ustalonego schematu.
3.1. Dane losowe w języku C++
W języku C++ do losowania liczb służą funkcje rand()
i srand()
.
Funkcja rand()
generuje i zwraca liczbę całkowitą z przedziału 〈0; RAND_MAX〉.
Aby uzyskać liczbę z zadanego przedziału lewostronnie domkniętego 〈0; n), należy obliczyć resztę z dzielenia wartości uzyskanej za pomocą funkcji rand()
przez n.
Przykład 7. Symulacja rzutów sześcienną kostką do gry w języku C++
Uruchamiając program kilka razy pod rząd, zauważymy, że za każdym razem są losowane te same liczby. Nie jest to jednak błąd programistyczny, lecz specyfika generowania liczb losowych. Polega ona na tym, że przy każdym uruchomieniu programu generator liczb pseudolosowych startuje „od początku”, dając w efekcie te same wartości. Aby wyeliminować ten problem, należy przed pierwszym wywołaniem funkcji rand()
użyć funkcji srand()
z parametrem odpowiadającym aktualnemu czasowi: srand(time(NULL))
. Wówczas generator liczb pseudolosowych będzie inicjalizowany aktualnym czasem systemowym.
Ćwiczenie 8. Stosujemy dane losowe w języku C++
- Otwórz plik TC1_c8_p7.cpp. Uruchom kilkukrotnie program. Sprawdź otrzymane każdorazowo wyniki.
- Zmodyfikuj program tak, by eksperyment za każdym razem dawał inne rezultaty. Uruchom kilkukrotnie zmodyfikowany program.
- Zapisz plik pod nazwą TC1_c8_kostka.cpp . Wskazówka: Dołącz do programu bibliotekę
ctime
, które zawiera funkcje time():
#include <ctime>
3.2. Dane losowe w języku Python
W języku Python liczby losowe generuje funkcja randint().
Na przykład randint(1, 100)
– wygeneruje losowo liczbę naturalną z przedziału (1, 100〉.
Na początku programu musimy zaimportować moduł, w którym zdefiniowano funkcję randint():
from random import randint
Aby uzyskać liczbę z zadanego przedziału lewostronnie domkniętego 〈0; n), należy obliczyć resztę z dzielenia wartości uzyskanej za pomocą funkcji randint()
przez n.
Przykład 8. Symulacja rzutów sześcienną kostką do gry w języku Python
W języku Python funkcja randint()
przyjmuje dwa argumenty, pierwszy to początek przedziału liczb wynikowych, a drugi to jego koniec. Przedział jest obustronnie domknięty.
Stosując bezpośrednio funkcję randint()
, używamy generatora liczb pseudolosowych, który jest zainicjalizowany aktualnym czasem, więc przy kolejnych uruchomieniach programu wyniki będą różne.
Aby powtórzyć tę samą sekwencję losowań, należy samodzielnie zainicjalizować generator liczb pseudolosowych i wywoływać funkcję randint()
tak, jak w programie poniżej.
r = Random(10)
napisać r = Random().
Ćwiczenie 9. Stosujemy dane losowe w języku Python
- Otwórz plik TC1_c9_p8.py. Uruchom kilkukrotnie program. Sprawdź otrzymane każdorazowo wyniki.
- Zmodyfikuj program tak, by eksperyment za każdym razem dawał takie same rezultaty. Uruchom kilkukrotnie zmodyfikowany program.
- Zapisz plik pod nazwą TC1_c9_kostka.py.
4. Sprawdzanie poprawności danych
Niezmiernie istotnym zagadnieniem jest sprawdzanie poprawności danych wprowadzanych do programu. Dzięki temu jesteśmy zabezpieczeni przed niespodziewanym przerwaniem pracy programu oraz zapewniamy zgodność danych wejściowych ze specyfikacją zadania.
4.1. Sprawdzanie poprawności danych w języku C++
Ćwiczenie 10. Analizujemy gotowe rozwiązanie
- Otwórz plik TC1_c10.cpp. Zapisano w nim program pokazany na rysunku 1.
- Uruchom program. Gdy program będzie czekał na wprowadzenie wartości zmiennej x, wpisz dowolny ciąg znaków, który nie jest liczbą całkowitą. Zaobserwuj i skomentuj efekty.
W języku C++ po podaniu jako wartości zmiennej ciągu znaków innego niż liczba całkowita wykonanie programu nie ulega przerwaniu, jednak program wprowadzony ciąg traktuje jako liczbę 0. W tej sytuacji nie ma możliwości rozróżnienia, czy wprowadzona została błędna dana wejściowa, czy też rzeczywiście liczba 0. Rozwiązaniem tego problemu jest wczytanie danej wejściowej do zmiennej łańcuchowej, a następnie jej zamiana na liczbę przy użyciu jednej z funkcji standardowych: strtol()
, strtoul()
, strtof()
lub strtod()
.
Pełne wykorzystanie tych funkcji wymaga użycia tzw. zmiennych wskaźnikowych (temat C10, część II Materiału edukacyjnego).
Przykład 9. Sprawdzanie poprawności danych liczbowych (całkowitych i rzeczywistych) w języku C++
W przykładzie zdefiniowano funkcje strtoint() i strtofloat(), które zamieniają ciąg tekstowy podany jako pierwszy parametr na liczbę i zapisują ją w zmiennej przekazanej jako drugi parametr (mamy tu do czynienia z przekazywaniem parametru przez referencję). Wynikiem działania funkcji jest wartość logiczna true
(jeżeli przekazany parametr jest prawidłową liczbą) lub wartość logiczna false
– w przeciwnym przypadku.
Ćwiczenie 11. Sprawdzamy poprawność danych w języku C++
- Napisz program obliczający pola powierzchni kwadratu i sześcianu dla długości boku wprowadzonej z klawiatury, przy czym program powinien sprawdzać, czy wprowadzona dana jest poprawną liczbą całkowitą i wypisywać stosowny komunikat, jeżeli tak nie jest. Zastosuj jedną z funkcji zapisaną w pliku TC1_c11_p9.cpp.
- Zapisz plik pod nazwą TC1_c11_pola.cpp.
4.2. Sprawdzanie poprawności danych w języku Python
Ćwiczenie 12. Analizujemy gotowe rozwiązanie
- Otwórz plik TC1_c12.py. Zapisano w nim program pokazany na rysunku 2.
- Uruchom program. Gdy program będzie czekał na wprowadzenie wartości zmiennej x, wpisz dowolny ciąg znaków, który nie jest liczbą całkowitą. Zaobserwuj i skomentuj efekty.
W języku Python po podaniu jako wartości zmiennej ciągu znaków innego niż liczba całkowita wykonanie programu zostanie przerwane i na ekranie zostanie wypisany komunikat błędu. Aby tego uniknąć, powinniśmy w jakiś sposób sprawdzić ciąg znaków, będący wynikiem funkcji input()
zanim zostanie on przekazany do funkcji int()
. Najlepiej jest to zrobić, używając funkcji sprawdzającej, czy w podanym ciągu znaków znajdują się wyłącznie cyfry i opcjonalnie znak minus na pierwszym miejscu.
Przykład 10. Sprawdzanie poprawności danych liczbowych całkowitych w języku Python
Funkcja czy_liczba() zwraca wartość True
, gdy podany napis zawiera wyłącznie cyfry lub znak „-” na pierwszym miejscu i cyfry. W tym celu używa metody isnumeric()
, która jest zdefiniowana dla ciągów znaków. Zwraca on True
, gdy wszystkie znaki w napisie są cyframi.
Ćwiczenie 13. Sprawdzamy poprawność danych w języku Python
- Napisz program obliczający pole kwadratu i sześcianu dla długości boku wprowadzonej z klawiatury, przy czym program powinien sprawdzać, czy wprowadzona dana jest poprawną liczbą całkowitą i wypisywać stosowny komunikat, jeżeli tak nie jest. Zastosuj funkcję zapisaną w pliku TC1_c13_p10.py.
- Zapisz plik pod nazwą TC1_c13_pola.py.
Zadania
- Oblicz wielkość pamięci zajmowanej przez następujące zmienne:
char s1[21];
char t1[101][21];
float t2[51];
long t3[11][11][11];
a = 1.123
liczby = [10, 20]
napis = "To jest jakiś napis"
n = -6439
flaga = False
b = 5.4574e20
- Otwórz wybrany plik własnego programu i omów, jakie typy zmiennych w nim zastosowano. Czy potrafisz powiedzieć, ile zajmują miejsca w pamięci?
- Napisz program wyświetlający na ekranie pierwiastki kwadratowe z liczb od 1 do 100, w ten sposób, by w każdym wierszu znalazła się liczba i jej pierwiastek (np. „Pierwiastek z 1 = 1.000”). Pierwiastki powinny być wypisane z dokładnością do trzech miejsc po przecinku. Wyrównaj liczby do prawej strony. Zapisz program w pliku pod nazwą TC1_z3_pierwiastki.
- Napisz w języku C++ funkcje strtoint_range() i strtofloat_range() umożliwiające bezpieczne wprowadzenie danych typu
int
ifloat
oraz sprawdzające, czy wprowadzone dane należą do przedziału obustronnie domkniętego (którego granice powinny być parametrami funkcji). Wykorzystaj funkcje strtoint() i strtofloat() z przykładu 8. Zadbaj o właściwą postać parametrów i wyników funkcji. - Napisz program symulujący dziesięciokrotny rzut dwiema sześciennymi kostkami do gry i wypisujący sumy wyrzuconych oczek. Zapisz plik pod nazwą TC1_z5_dwie_kostki.cpp.
- Napisz funkcję losuj(m, n), zwracającą losową liczbę całkowitą z przedziału obustronnie domkniętego 〈m; n〉, gdzie m i n są liczbami całkowitymi.
- Napisz program losujący 6 liczb z przedziału 〈1; 49〉. Użyj funkcji losuj() z zadania 6. Napisz funkcję kostka(k, s), symulującą rzut k kostkami, każda o s ściankach. Kostki takie wykorzystywane są np. w grach RPG (z ang. Role Playing Games).
- Użyj funkcji
rand()
(w języku C++) lubrandint()
(w języku Python) do wypełnienia liczbami tablicy (listy) n liczb całkowitych (n zdefiniuj jako stałą). Wyprowadź zawartość tablicy (listy) po 10 liczb w wierszu ekranu. Posortuj zawartość tablicy (listy) i wyprowadź ponownie na ekran.
Dla zainteresowanych
- Napisz program umożliwiający wprowadzenie daty w postaci trzech liczb, określających kolejno: rok, miesiąc i dzień. Program powinien odrzucać niepoprawne daty (np. 31 kwietnia) i w takim przypadku prosić użytkownika o ponowne wprowadzenie odpowiedniej wartości. Wykorzystaj funkcję strtoint_range() zdefiniowaną w zadaniu 4. Uwzględnij w programie lata przestępne. Jaka formuła określa przestępność roku?
- Zmodyfikuj program z zadania 7. tak, aby niemożliwe było wielokrotne wylosowanie tej samej liczby.
- Korzystając z funkcji kostka(k,s) utworzonej w zadaniu 5., zasymuluj wynik doświadczenia polegającego na tysiąckrotnym rzuceniu dwiema sześciennymi kostkami i zliczaniu, ile razy wypadną poszczególne sumy oczek. Przedstaw wyniki w postaci histogramu.