Ślad: • pp_2026_2

Programowanie proceduralne

Programowanie proceduralne

W semestrze zimowym 2026/27 wykład odbywa się we wtorki w godz. 14:00-16:00 w Audytorium Aleksandra Jabłońskiego (AAJ), WFAiIS.

Wykład


Slajdy do wykładu (całość: 6,5 MB)
Uwaga: slajdy mogą być aktualizowane w trakcie wykładu. Data ostatniej aktualizacji znajduje się na pierwszej stronie slajdów.

Kody źródłowe prezentowane na wykładzie są dostępne w repozytorium GitHub:\\n*** End Patch https://github.com/IS-UMK/pp_wyklad


    • Trochę historii komputerów i programowania.
    • Podstawowe pojęcia.
    • Języki programowania - historia i klasyfikacja.
    • Środowiska programistyczne.
    • Pliki źródłowe: hello.c
    • Struktura kodu.
    • Zmienne - deklaracja i inicjalizacja.
    • Najważniejsze operatory: arytmetyczne, relacyjne i logiczne.
    • Funkcje: printf(), scanf().
    • Instrukcje sterujące: if, else, while.
    • Przykłady programów: obliczanie pola koła i silni.
    • Komentarze w języku C.
    • Standardy języka C (ANSI C i C99).
    • Graficzna postać kodu - wcięcia.
    • Pliki źródłowe:
    • Kompilator GCC i jego opcje.
    • Lintery (cppcheck) i narzędzia poprawiające czytelność kodu (astyle).
    • Systemy kontroli wersji (Git, GitHub).
    • Anatomia funkcji.
    • Deklaracje i definicje funkcji.
    • Parametry formalne i aktualne.
    • Zmienne na stosie.
    • Zmienne globalne i lokalne.
    • Funkcje i procedury.
    • Biblioteki standardowe.
    • Biblioteka math.h
    • Rekurencja (rekurencja (rekurencja)) a iteracja.
    • Przykłady algorytmów: algorytm Euklidesa (NWD), sprawdzanie, czy liczba jest pierwsza, wzór Herona (obliczanie pola trójkąta), obliczanie silni i wyznaczanie elementów ciągu Fibonacciego.
    • Pliki źródłowe:
      • euclid3.c - wyznaczanie największego wspólnego dzielnika
      • pierwsza.c, pierwsza2.c - sprawdzanie, czy liczba jest pierwsza
      • heron2.c - obliczanie pola trójkąta o bokach a, b i c
      • globalne.c - demonstracja różnic między zmiennymi globalnymi i lokalnymi
      • silnia2.c - wyznaczanie silni za pomocą funkcji rekurencyjnej
      • fib1.c, fib2.c - wyznaczanie elementów ciągu Fibonacciego
    • Tablice - deklaracja, inicjalizacja, indeksowanie i operator [].
    • Tablice jako argumenty funkcji.
    • Typowe przykłady użycia tablic: wczytywanie i kopiowanie wartości.
    • Struktury - deklaracja, inicjalizacja i operator dostępu ..
    • Typ struct jako argument funkcji.
    • Struktura jako wartość zwracana przez funkcję.
    • Przykłady algorytmów:
      • przeszukiwanie liniowe
      • przeszukiwanie liniowe z wartownikiem
      • wyznaczanie środka masy układu punktów materialnych.
    • Pliki źródłowe:
      • przeszukiwanie.c - przeszukiwanie liniowe
      • przeszukiwanie2.c - przeszukiwanie liniowe z wartownikiem
      • Wyznaczanie środka masy układu punktów:
        • sm1.c - punkt materialny reprezentowany jako tablica float punkt[4]
        • sm2.c - punkt materialny reprezentowany przez strukturę struct punkt
        • sm3.c - punkt materialny reprezentowany przez strukturę zawierającą tablicę struct punkt
        • sm4.c - układ punktów reprezentowany przez tablicę struktur float punkt[]
        • sm6.c - układ punktów reprezentowany przez strukturę z tablicą punktów struct chmura
    • Adresy, wskaźniki, zmienne wskaźnikowe i typ wskaźnikowy.
    • Deklaracje zmiennych wskaźnikowych.
    • Operatory pobrania adresu & i dereferencji *.
    • Wskaźniki jako argumenty funkcji.
    • Wskaźniki jako wartości zwracane przez funkcję.
    • Co wspólnego mają wskaźniki i tablice?
    • Przykłady algorytmów:
      • jednoczesne znajdowanie największego i najmniejszego elementu w ciągu
      • wyznaczanie najczęściej występującego elementu w ciągu.
    • Pliki źródłowe:
      • Wyznaczanie największej i najmniejszej liczby całkowitej:
      • Wyznaczanie dominanty w ciągu liczb całkowitych:
    • Bit, bajt i kody bitowe
    • Pozycyjne systemy liczbowe
    • Reprezentacja liczby całkowitej i rzeczywistej w komputerze
    • Zakresy typów liczbowych.
    • Niedokładności obliczeń zmiennoprzecinkowych.
    • Przykład algorytmu:
      • zapis liczby w innym systemie pozycyjnym.
    • Pliki źródłowe:
      • dec2all.c - zamiana liczby na zapis w innym systemie liczbowym
    • Reprezentacja znaków i kod ASCII.
    • Łańcuchy znakowe.
    • Formatowanie za pomocą funkcji printf() i scanf().
    • Przykład algorytmu:
      • wyszukiwanie wzorca.
    • Pliki źródłowe:
      • strindex.c - wyszukiwanie wzorca metodą naiwną i algorytmem Boyera-Moore’a
    • Operatory bitowe i przesunięcia bitowe.
    • Operator rzutowania.
    • Operator warunkowy ?:.
    • Wszystkie operatory i ich priorytety.
    • Przykład: szyfrowanie za pomocą XOR i maski bitowe.
    • Pliki źródłowe:
      • szyfr-xor.c - szyfrowanie tekstu za pomocą operacji XOR
    • Typ wyliczeniowy enum.
    • Struktury, unie i pola bitowe.
    • Instrukcja typedef i jej użycie w deklaracjach struktur.
    • Pliki źródłowe:
    • Plik i format pliku.
    • Systemy plików.
    • Strumienie.
    • Podstawowe operacje na strumieniach w języku C.
    • Pliki źródłowe:

Zaliczenie wykładu

Warunkami uzyskania zaliczenia z wykładu są:

  • pozytywna ocena z laboratorium
  • zaliczenie testu z wynikiem powyżej 50%

Literatura

  • Brian W. Kernighan, Dennis M. Ritchie, Język ANSI C
  • Maciej M. Sysło, „Algorytmy”, WSiP, Warszawa, 2002.
  • David Griffiths, Dawn Griffiths, „Rusz głową! C”, Helion, Gliwice, 2013.
  • (prawie) wszystkie książki na temat języka C

Kilka przydatnych odnośników

Zintegrowane środowiska programistyczne (IDE)

Kompilatory C online

Formatowanie kodu online