UWAGA w zadaniach 1, 2, 3, 4 używamy tylko wskaźników.
Np. zapis nps[i] jest niedopuszczalny Zad1
Napisz funkcję
void opak(char *napis),
która odwraca napis, np. jeśli nps jest zdefiniowane:
char nps[]="Alicja";
to po komendach:
opak(nps);
puts(nps);
ma się pojawić na ekranie napis: ajcilA Zad2
Napisz funkcję:
void cezar(char napis[]),
która szyfruje napis przesuwając litery o 1 w "górę alfabetu", zaś
'z' zamienia na 'a' (znaków innych niż litery nie zmieniamy, a liter polskich nie uznajemy).
w przykładzie jak z Zad1 ma się pojawić: Bmjdkb Zad3
Napisać funkcję mnożącą dwie macierze 3x3 Zad4
Zmodyfikować funkcję selsort z programu wybieranie.c z wykładu 6 do "postaci wskaźnikowej".
Zad5
Napisać funkcję void ciagi(int n),
która drukuje wszystkie ciągi o wyrazach 0, 1 i długości n
wywołanie:
ciagi(2) ma wydrukować
0 0
0 1
1 0
1 1
(albo te same ciągi w innej kolejności)
Zad6
Zbiór Cantora jest dość złożonym obiektem matematycznym, który rysuje się za pomocą kolejnych przybliżeń
(w których stopniowo rośnie "powiększenie").
Pierwsze przybliżenie wygląda tak:
* * // gwiazdka, spacja, gwiazdka Dla n>1, n-te przybliżenie wygląda tak:
(n-1-sze przybliżenie)(spacje)(n-1-sze przybliżenie),
przy czym liczba spacji jest taka, jak długość n-1-szego przybliżenia, czyli dokładnie 3^(n-1).
Np. trzecie przybliżenie wygląda tak:
* * * * * * * *
Napisz funkcję void cantor(int n),
która drukuje n-te przybliżenie zbioru Cantora.
Dla ułatwienia możesz na końcu nie drukować znaku nowej linii.
Zad7
Napisz funkcję
void katalogi(int n),
która drukuje (w sposób zgodny z przykładem podanym poniżej) hierarchię katalogów i plików.
Zakładamy, że w systemie:
- jest jeden katalog główny na głębokości 0, - wszystkie pliki znajdują się na głębokości n,
- każdy katalog zawiera dokładnie dwa podkatalogi (jeśli jest na głębokości < n- 1)
lub dokładnie dwa pliki (jeśli jest na głębokości n-1).
Np. dla n=2 funkcja powinna wydrukować:
- katalog |- katalog | |- plik | |- plik |- katalog | |- plik | |- plik
Zad8 Bernard gra w nastepującą jednoosobową grę:
- na poczatku dana jest całkowita dodatnia liczba n
- w każdym ruchu Bernard wykonuje na aktualnej liczbie jedną z operacji:
- dzielenie przez 5 (bez reszty) - zmniejszenie o 1
- zmniejszenie o 215
przy czym dozwolone sa tylko te operacje, które dają wynik całkowity dodatni - celem gry jest otrzymanie liczby 1 w najmniejszej możliwej liczbie ruchow.
Np.
- zaczynając od 4 można dojść do 1 w trzech ruchach (-1, -1, -1) - zaczynając od 34 można dojść do 1 w dwoch ruchach (:5, :5) - zaczynając od 216 można dojść do 1 w jednym ruchu (-215).
Napisz funkcję
int ile_krokow(int n),
która dla danej liczby n<=500 zwraca najmniejszą liczbę ruchów prowadzących z n do 1.
Dostaniesz dodatkowe punkty, jeśli funkcja będzie dawała wynik natychmiast (w sekundę) dla n<=1000000.