Lista 4 (8 listopada 2005): 13 punktów.

Przeczytaj z książki B.W.Kernighana i D.M.Ritchiego Język ANSI C rozdział 3: Sterowanie.

  1. (2 punkty) Napisz program, który wczytuje tekst ze standardowego wejścia i wypisuje go na standardowe wyjście z małymi literami zamienionymi na wielkie. Wykorzystaj własną funkcję zamieniającą małą literę na wielką. Pozostałe znaki nie powinny być zmieniane. Do czytania danych ze strumienia wejściowego wykorzystaj funkcję getchar() a do pisania do strumienia wyjściowego funkcję putchar(). Program ma działać w pętli, dopóki nie zostanie wczytany znak końca pliku EOF.
  2. (2 punkty) Napisz program, który wczytuje tekst ze standardowego wejścia i po przefiltrowaniu wypisuje go na standardowe wyjście. Filtrowanie ma polegać na usunięciu z tekstu wszystkich znaków o kodach <32 (za wyjątkiem znaków '\n' i '\t') lub ==127. Wykorzystaj własną funkcję sprawdzającą, czy znak ma być zatrzymany (wartość 1) czy odrzucony (wartość 0). Do czytania danych ze strumienia wejściowego wykorzystaj funkcję getchar() a do pisania do strumienia wyjściowego funkcję putchar(). Program ma działać w pętli, dopóki nie zostanie wczytany znak końca pliku EOF.
  3. (3 punkty) Napisz program, który wczytuje tekst ze standardowego wejścia i wypisuje go na standardowe wyjście po przeformatowaniu. Formatowanie ma polegać na zastąpieniu w tekście wszystkich długich odstępów pojedynczą spacją i na usunięciu odstępów sprzed znaku końca linii '\n'. Przez długi odstęp należy rozumieć spójny ciąg złożony ze znaków spacji ' ' i tabulacji '\t' za wyjątkiem pojedynczej spacji. Do czytania danych ze strumienia wejściowego wykorzystaj funkcję getchar() a do pisania do strumienia wyjściowego funkcję putchar(). Program ma działać w pętli, dopóki nie zostanie wczytany znak końca pliku EOF.
  4. (3 punkty) Napisz program, który wczytuje tekst ze standardowego wejścia i wypisuje go na standardowe wyjście po przeformatowaniu. Formatowanie ma polegać na zastąpieniu w tekście wszystkich znaków tabulacji '\t' odpowiednią liczbą spacji ' ' (od 1 do 8), tak aby wygenerowany tekst wyglądał tak samo jak oryginał. Do czytania danych ze strumienia wejściowego wykorzystaj funkcję getchar() a do pisania do strumienia wyjściowego funkcję putchar(). Program ma działać w pętli, dopóki nie zostanie wczytany znak końca pliku EOF.
  5. (3 punkty) Napisz program, który wczytuje tekst ze standardowego wejścia i wypisuje go na standardowe wyjście po przeformatowaniu. Formatowanie ma polegać na wypisaniu każdego słowa w osobnej linii. Słowa w tekście są porozdzielane ciągami białych znaków (spacje ' ', tabulacje '\t', znaki przejścia do nowej linii '\r' i '\n'). Do czytania danych ze strumienia wejściowego wykorzystaj funkcję getchar() a do pisania do strumienia wyjściowego funkcję putchar(). Program ma działać w pętli, dopóki nie zostanie wczytany znak końca pliku EOF.

  6. (2 punkty) Równanie algebraiczne drugiego stopnia (równanie kwadratowe) ma następującą postać:
    ax2 + bx + c = 0
    Napisz program, który wczyta współczynniki rzeczywiste (typu double) tego równania ze standardowego wejścia (funkcja scanf()) i rozwiąże je (wyznaczy pierwiastki rzeczywiste). Jeśli wczytany współczynnik a będzie równy 0, to należy natychmiast zakończyć działanie programu. Komunikaty zachęcające do wpisywania wanych należy kierować na standardowe wyjście dla błędów (funkcja fprintf()). Jako wynik, należy wypisać na standardowym wyjściu (funkcja printf()) w pierwszej linii liczbę pierwiastków rzeczywistych tego równania, a w następnych liniach kolejno te pierwiastki (po jednym w każdej linii).
  7. (11 punktów) Równanie algebraiczne trzeciego stopnia (równanie sześcienne) ma następującą postać:
    ax3 + bx2 + cx + d = 0
    Napisz program, który wczyta współczynniki rzeczywiste (typu double) tego równania ze standardowego wejścia (funkcja scanf()) i rozwiąże je (wyznaczy pierwiastki rzeczywiste). Jeśli wczytany współczynnik a będzie równy 0, to należy natychmiast zakończyć działanie programu. Komunikaty zachęcające do wpisywania danych należy kierować na standardowe wyjście dla błędów (funkcja fprintf()). Jako wynik, należy wypisać na standardowym wyjściu (funkcja printf()) w pierwszej linii liczbę pierwiastków rzeczywistych tego równania, a w następnych liniach kolejno te pierwiastki (po jednym w każdej linii). Informacji na temat rozwiązywania równań trzeciego stopnia powinieneś poszukać w internecie (na przykład w Wikipedii) lub w fachowej literaturze matematycznej.