Rozważmy przypadek kiedy macierz zaczyna się liczbą nieparzystą. Wtedy na pozycjach, których jedna współrzędne x i y są równocześnie parzyste lub nieparzyste oznacza, że liczba powinna być nieparzysta. W przeciwnym wypadku rozpatrywana liczba na x, y powinna być parzysta. W ten sposób dochodzimy do wniosku, że pierwszy przypadek będzie spełniony, gdy reszta z dzielenia x przez 2 + reszta z dzielenia y przez 2 wyniesie 0 lub 2, w drugim przypadku 1. Jeśli wynik podzielimy przez dwa uzyskamy 0 dla pierwszego przypadku, a 1 dla drugiego. Teraz ten wynik możemy potraktować jako prawidłowy wynik reszty z dzielenia liczby na x, y przez 2.
Do rozpatrzenia pozostaje drugi przypadek, gdy pierwsza jest liczba parzysta. Na początku sprawdźmy parzystość pierwszej liczby. To ona zadecyduje jakiego typu mamy macierz. Wynik reszty dzielenia liczby na pozycji 1, 1 dodamy do obliczania: reszta z dzielenia x przez 2 + reszta z dzielenia y. Funkcja parznieparz() realizująca ten proces myślenia:
Napiszemy funkcję najczesciej(), która zliczy ile razy występuje każda litera. Następnie sprawdzi, która litera najczęściej występowała dana litera i ją zwróci.
(2.) Na początek deklarujemy zmienną dl, która określa nam ile różnych elementów możemy mieć, czyli wszystkie od a do z dodajemy jeden, bo od 1 do 2 jest nie 2 - 1, a (2 - 1) + 1 elementów. (3.) Zmienna i posłuży nam do różnych celów w różnych częściach kodu. (5.) Inicjalizujemy listę, która posłuży nam do zliczania każdej litery i (6., 7.) ustawiamy wartość każdego elementu na 0. Następnie (9.) resetujemy wskaźnik i na 0 i (10.) przeglądamy cały napis. (11.) Zmieniamy wartość kubełka napis[i++] - 'a', ponieważ kubełek litery a ma indeks=0. Po zliczeniu wystąpień każdego znaku (12.) deklarujemy zmienną pozycja, która będzie wskazywała, który kubełek ma najwięcej elementów. Potem (13.) sprawdzamy dla każdego kubełka czy nie jest pusty i czy ma więcej elementów niż dotąd kubełek znaleziony. Jeśli tak (14.) to go zapamiętujemy. Na sam koniec (16.) usuwamy listę zliczającą czyli nasze kubełki i zwracamy literę pamiętając, że indeks 0 ma a, 1 - b, 2 - c itd.
Funkcja Loteryjka() najlepiej rozbić na kilka prostszych funkcji do napisania. Na początek zadeklarujmy zmienną stałą, globalną ILOSC:
Dzięki temu za każdym razem, gdy będziemy sprawdzać listę kuponu zamiast pisać 5 to wpiszemy zmienną. Jest to dobry nawyk, bo dzięki temu mamy pewność, ze wszędzie mamy tę sama wartość, a jeśli pomylimy się z wartością zmiennej to wystarczy zmienić to tylko w jednym miejscu zamiast szukać w kodzie, gdzie jeszcze trzeba zmienić.
Pierwsza funkcja, którą dopiszemy będzie sprawdzać czy na podanej liście nie znajduje się dana liczba.
Nie deklarujemy tu dodatkowej zmiennej, która sprawdza kolejne wartości na liście. Zmniejszamy podaną długość listy. Dzięki temu przeglądamy każdy element idąc od tyłu. Możemy to zrobić wiedząc, że lista ma minimalną długość 0 i nigdzie dalej nie wykorzystujemy podanej zmiennej.
Następna funkcja jest bardziej związana z tematem zadania. Napiszemy funkcję, która wylosuje nam 5 liczb z zakresu od 1 do 100.
(2.) Deklarujemy listę na której umieścimy wylosowane liczby. (3.) Zmienna liczba posłuży nam do zapamiętania wylosowanej liczby. (4.) Rozpoczynamy losowanie 5 liczb. (5.) Posłużymy się pętlą, aby wylosować liczbę. (7.) Losujemy liczbę, jeśli (8.) jest na liście to wracamy do (7.) co będzie wywoływać losowanie nowej liczby aż uzyskamy taką, której nie ma na liście. Na koniec iteracji z (4.) dopisujemy liczbę na i-te miejsce. (10.) Na sam koniec zwracamy listę wylosowanych liczb.
Mają dwie dodatkowe funkcje przechodzimy do pisania głównej:
(2.) wynik to nasza tablica, którą mamy zwrócić na sam koniec. W niej będziemy przechowywać ile za i-tym razem zostało trafionych liczb. (3.) Rozpoczynamy iterację dla każdego z k losowań. Na początek (4.) losujemy nowe liczby. (5.) Ustawiamy ilość trafionych liczb na zero, a (6. - 7.) potem sprawdzamy dla każdej liczby typowanej czy jest na liście wylosowanych. Korzystamy z tego, że wartość prawda to 1. Każda zgarnięta liczba to wygrane 100zł, dlatego (8.) mnożymy ilość trafionych liczb razy sto. Na koniec iteracji (9.) usuwamy wylosowaną listę liczb i (10.) kończymy iteracje. (11.) Na sam koniec zwracamy lsitę wyników.
Struktura rok powinna wyglądać tak: (oczywiście nazwy zmiennych są dowolne)
Kolejna funkcja stworzRok():
Należy pamiętać o ->, ponieważ rok jest wskaźnikiem.
Ostatnia funkcja nie powinna być problematyczna, ale należy pamiętać, że najpierw musimy sprawdzić poprawność miesiąca i dopiero sprawność poprawność dni, ponieważ odwrotnie możemy odwołać się do elementu tablicy dni, który nie istnieje. Co więcej miesiące i dni numerujemy od 1, więc jeśli sprawdzimy, że dany miesiąc istnieje to ile dni odczytamy na tablicy o indeksie, którego wartość to podany miesiąc zmniejszony o 1.
Polecam zamienić podane funkcje na swoje własne i sprawdzić na przygotowanych testach poprawność swoich rozwiązań: