UWAGA w zadaniach 1, 2, 3, 4 używamy tylko wskaźników. Np
Transkrypt
UWAGA w zadaniach 1, 2, 3, 4 używamy tylko wskaźników. Np
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 < n1) 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.