Lista 7 (6 grudnia 2005): 14 punktów.

Przeczytaj z książki B.W.Kernighana i D.M.Ritchiego Język ANSI C rozdział 5: Wskaźniki i tablice.

  1. (2 punkty) Zaprogramuj funkcję, która dla zadanego znaku char oraz słowa char[] zwróci wskaźnik do pierwszego wystąpienia tego znaku w słowie lub NULL jeżeli znak nie występuje. Następnie napisz program, który wczyta napis i sprawdzi (korzystając z tej funkcji), które samogłoski występują w tym napisie, a które w ogóle w nim nie występują.
    Uwaga: Program powinien wypisać wszystkie samogłoski występujące w napisie.
  2. (2 punkty) Zaprogramuj funkcję, która pobiera dwa wskaźniki do łańcuchów znakowych i sprawdza, czy pierwszy występuje w drugim. Następnie napisz program, który wczyta określoną liczbę napisów i sprawdzi czy istnieją wśród nich takie pary, że jeden napis występuje w drugim.
    Uwaga: Program powinien wypisać wszystkie takie pary.
  3. (3 punkty) Napisz program, który wczyta określoną liczbę napisów, a następnie wypisze je uporządkowane leksykograficznie.
    Uwaga: Twój program powinien porządkować tylko tablicę ze wskaźnikami na napisy (sortowanie napisów poprzez przestawianie wskaźników do tablic znakowych).
    Wskazówka: Do porównywania napisów użyj funkcji z biblioteki standardowej strcmp().
  4. (2 punkty) Napisz program, który wczyta nie więcej niż 1000000000 liczb całkowitych z zakresu od 0 do 999 i wypisze liczbę wystąpień (o ile jest niezerowa) każdej liczby z tego zakresu.
  5. (2 punkty) Napisz program, który wypełni losowymi wartościami całkowitymi z zakresu od 0 do 999 tablicę liczb o określonym rozmiarze, a następnie wyznaczy wszystkie pary liczb różniące się o jakąś potęgę 2 (czyli o 1, 2, 4,... 512).
    Uwaga: Program powinien wypisać wszystkie takie pary.
  6. (3 punkty) Zaprogramuj funkcję, która będzie mnożyła dwie kwadratowe macierze liczb. Rozmiar tych macierzy jest przekazywany jako parametr wywołania. Funkcja ta ma umieszczać wynik w tablicy, do której wskaźnik także jest przekazywany poprzez parametr wywołania funkcji. Następnie napisz program, który wczyta niedużą liczbę naturalną n i podniesie do potęgi n-tej macierz A. Sama macierz A ma wymiary 2x2 i jest cała wypełniona jedynkami za wyjątkiem pierwszego zerowego elementu (a1,1=0 oraz a1,2=a2,1=a2,2=1).
    Uwaga: Program powinien wypisać macierz An.

  7. (7 punktów) Napisz program, który będzie w pętli wczytywał ze standardowego wejścia liczby całkowite z zakresu od 0 do 999 i wypisywał je w postaci słownej w języku polskim na standardowe wyjście. Program ma zakończyć działanie dopiero po wczytaniu liczby spoza tego zakresu. Komunikaty zachęcające do wprowadzania danych wypisuj na standardowe wyjście dla błędów.
    Uwaga: Zamieniając liczbę na postać słowną skorzystaj z zainicjalizowanych tablic globalnych JEDNOSCI[20], DZIESIATKI[10] i SETKI[10]. Tablice te zdefiniuj w oddzielnym pliku źródłowym, a w pliku nagłówkowym umieść stosowne deklaracje zapowiadające.
    Uwaga: Przy zamianie liczby na postać słowną skorzystaj z funkcji, która będzie zwracała wskaźnik do powstałego napisu (lokalna zmienna statyczna). Napis ten nie powinien posiadać żadnych spacji na początku i na końcu, a poszczególne liczebniki powinny być pooddzielane dokładnie jedną spacją.
  8. (7 punktów, kontynuacja poprzedniego zadania) Napisz program, który będzie w pętli wczytywał ze standardowego wejścia liczby całkowite z zakresu od -999999999 do 999999999 i wypisywał je w postaci słownej w języku polskim na standardowe wyjście. Program ma zakończyć działanie dopiero po wczytaniu liczby spoza tego zakresu.
    Uwaga: Pamiętaj o poprawnej odmianie liczebników tysiąc i milion.