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
-
- Algorytmy i ich cechy.
- Zadanie algorytmiczne, specyfikacja.
- Formy zapisu algorytmów, np. schematy blokowe.
- Przykład algorytmu: algorytm Euklidesa.
- Pliki źródłowe:
-
- 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).
-
- Powtórzenie: if, while
- Pętla sterowana z dołu: do while
- Pętla for a while.
- Instrukcja switch.
- Instrukcja goto i zasady programowania strukturalnego.
- Instrukcje continue i break.
- Przykład programu: obliczanie pierwiastka kwadratowego (algorytm Herona).
- Pliki źródłowe:
-
- 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
- globalne.c - demonstracja różnic między zmiennymi globalnymi i lokalnymi
- silnia2.c - wyznaczanie silni za pomocą funkcji rekurencyjnej
-
- 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
structjako 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:
- minmax2.c - metoda „dziel i zwyciężaj”
- Wyznaczanie dominanty w ciągu liczb całkowitych:
- dominanta1.c - wersja naiwna
- dominanta2.c - wersja szybsza
-
- 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()iscanf(). - 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
typedefi jej użycie w deklaracjach struktur. - Pliki źródłowe:
- bitfield.c - demonstracja użycia pól bitowych
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
- ANSI C for Programmers on UNIX Systems autorstwa Tima Love’a
- Sphere Online Judge - platforma do rozwiązywania zadań programistycznych.
Zintegrowane środowiska programistyczne (IDE)
- Visual Studio (Windows) - wystarczy bezpłatna wersja Visual Studio Community z kompilatorem Visual C++.
- Visual Studio Code (Windows/Linux/macOS) - wtyczka Microsoft C/C++ Extension i kompilator (np. GCC lub MinGW). Zobacz C/C++ for Visual Studio Code.
- Code::Blocks (GNU/Linux, Windows, macOS).
- Dev-C++ (Windows).
- KDevelop (KDE Development Environment, GNU/Linux).
- Anjuta DevStudio - środowisko IDE dla C i C++, oparte na GTK/GNOME (GNU/Linux).
- CodeLite - bezpłatne, otwarte i wieloplatformowe środowisko IDE dla C, C++, PHP i Node.js.
Kompilatory C online
- paiza.io - kompilator języka C online