====== Programowanie Proceduralne ======
W semestrze zimowym 2017/2018 wykład odbywa się w każdy wtorek g. 10-12 w auli COK.
===== Wykład =====
{{zajecia:pp_2017_2:pp-wyklad.pdf|Wykład w całości}} - plik będzie aktualizowany na bieżąco w trakcie postępów wykładu.
- {{zajecia:pp_2017_2_:00-wstep.pdf|Wstęp}}
* Trochę historii komputerów i programowania.
* Podstawowe pojęcia,
* Języki programowania - historia, klasyfikacja.
* Środowiska programistyczne.
* Pliki źródłowe: {{zajecia:pp_2017_2:src:hello.c}}
- {{zajecia:pp_2017_2_:01-algorytmy.pdf|Algorytmy - podstawy}}\\
* Algorytmy i ich cechy.
* Zadanie algorytmiczne, specyfikacja.
* Formy zapisu algorytmów - np. schematy blokowe.
* Przykłady algorytmów: alg. Euclidesa
* Pliki źródłowe:
* {{zajecia:pp_2017_2:src:euclid1.c}}
* {{zajecia:pp_2017_2:src:euclid2.c}}
* {{zajecia:pp_2017_2:src:euclid1.pas}}
* {{zajecia:pp_2017_2:src:euclid1.f}}
* {{zajecia:pp_2017_2:src:euclid2.c}}
* {{zajecia:pp_2017_2:src:euclid3.c}}
* {{zajecia:pp_2017_2:src:euclid3rekurencja.c}}
* [[.:wyklad:zad-algorytmy|Przykładowe zadania]]
- {{zajecia:pp_2017_2_:02-c-wprowadzenie.pdf|Podstawy języka C}}\\
* Struktura kodu.
* Zmienne - deklaracja i inicjalizacja.
* Najważniejsze operatory: arytmetyczne, relacji i logiczne
* Funkcje: ''printf()'', ''scanf()''.
* Instrukcje sterujące: if, else, while
* Przykłady programów: pole koła, silnia
* Komentarze w C
* Standardy C (ANSI C vs. C99)
* Graficzna postać kodu: wcięcia
* Pliki źródłowe:
* {{zajecia:pp_2017_2:src:hello.c}}
* {{zajecia:pp_2017_2:src:kolo.c}}
* {{zajecia:pp_2017_2:src:silnia.c}}
* [[.:wyklad:zad-podstawy-c|Przykładowe zadania]]
- {{zajecia:pp_2017_2_:03-instrukcje-sterujace.pdf|Instrukcje sterujące}}\\
* Powtórzenie: if, while
* Pętla sterowana z dołu: do while
* Pętla for vs. while
* Instrukcja switch
* Instrukcja goto i zasady programowania strukturalnego
* continue i break
* Przykłady programów: pierwiastek kwadratowy (alg. Herona)
* Pliki źródłowe:
* {{zajecia:pp_2017_2:src:heron.c}}
* {{zajecia:pp_2017_2:src:break.c}}
* {{zajecia:pp_2017_2:src:continue.c}}
* {{zajecia:pp_2017_2:src:switch.c}}
* {{zajecia:pp_2017_2:src:prime.c}}
* {{zajecia:pp_2017_2:src:goto.c}}, {{zajecia:pp_2017_2:src:goto2.c}}
* [[.:wyklad:zad-instrukcje|Przykładowe zadania]]
- {{zajecia:pp_2017_2_:04-funkcje.pdf|Funkcje, czyli programowanie proceduralne}}\\
* 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)) vs. iteracja
* Przykłady algorytmów: alg. Euklidesa (NWD), wyznaczanie liczb pierwszych, wzór Herona (pole trójkąta), wyznaczanie silni, elementy ciągu Fibonacciego
* Pliki źródłowe:
* {{zajecia:pp_2017_2:src:euclid3.c}} - największy wspólny dzialnik
* {{zajecia:pp_2017_2:src:pierwsza.c}}, {{zajecia:pp_2017_2:src:pierwsza2.c}} - sprawdzanie czy liczba jest pierwsza
* {{zajecia:pp_2017_2:src:heron2.c}} - pole trójkąta o bokach ''a'', ''b'', ''c''
* {{zajecia:pp_2017_2:src:globalne.c}} - demonstracja różnic pomiędzy zm. globalnymi i lokalnymi
* {{zajecia:pp_2017_2:src:silnia2.c}} - wyznaczanie silni za pomocą f. rekurencyjnej
* {{zajecia:pp_2017_2:src:fib1.c}}, {{zajecia:pp_2017_2:src:fib2.c}} - wyznaczanie elementów ciągu Fibonacciego
* [[.:wyklad:zad-funkcje|Przykładowe zadania]]
- {{zajecia:pp_2017_2_:05-tablice-struktury.pdf|Tablice i struktury, czyli złożone typy danych}}\\
* Tablice - deklaracja, inicjowanie, indeksowanie, operator ''[]''.
* Tablice jako argumenty funkcji.
* Typowe przykłady użycia tablic: wczytywanie wartości, kopiowanie
* Struktury - deklaracja, operator dostępu ''.'', inicjowanie struktur
* Typ ''struct'' jako argument funkcji
* Struktura jako wartość zwracana z funkcji
* Przykłady algorytmów:
* przeszukiwanie liniowe
* przeszukiwanie liniowe z wartownikiem
* wyznaczanie środka masy układu punktów materialnych
* Pliki źródłowe:
* {{zajecia:pp_2017_2:src:przeszukiwanie.c}} - przeszukiwanie liniowe
* {{zajecia:pp_2017_2:src:przeszukiwanie2.c}} - przeszukiwanie liniowe z wartownikiem
* wyznaczanie środka masy układu punktów:
* {{zajecia:pp_2017_2:src:sm1.c}} - punkt materialny reprezentowany jako tablica ''float punkt[4]''
* {{zajecia:pp_2017_2:src:sm2.c}} - punkt materialny reprezentowany przez strukturę ''struct punkt''
* {{zajecia:pp_2017_2:src:sm3.c}} - punkt materialny reprezentowany przez strukturę zawierającą tablicę ''struct punkt''
* {{zajecia:pp_2017_2:src:sm4.c}} - układ punktów reprezentowany przez tablicę struktur ''float punkt[]''
* {{zajecia:pp_2017_2:src:sm6.c}} - układ punktów reprezentowany przez strukturę z tablicą punktów ''struct chmura''
* [[.:wyklad:zad-tablice-struktury|Przykładowe zadania]]
- {{zajecia:pp_2017_2_:06-wskazniki.pdf|Wskaźniki.}}\\
* Adresy, wskaźniki, zmienne wskaźnikowe, typ wskaźnikowy.
* Deklaracje zmiennych wskaźnikowych.
* Operator referencji ''&'' i dereferencji ''*''
* Wskaźniki jako argumenty funkcji.
* Wskaźniki jako wartość zwracana z funkcji.
* Co wspólnego mają wskaźniki i tablice?
* Przykłady algorytmów:
* jednoczesne znajdowanie elementu największego i najmniejszego 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:
* {{zajecia:pp_2017_2:src:minmax1.c}}
* {{zajecia:pp_2017_2:src:minmax2.c}} - dziel i zwyciężaj
* wyznaczanie dominanty w ciągu liczb całkowitych
* {{zajecia:pp_2017_2:src:dominanta1.c}} - wersja naiwna
* {{zajecia:pp_2017_2:src:dominanta2.c}} - wersja szybsza
* [[.:wyklad:zad-wskazniki|Przykładowe zadania]]
- {{zajecia:pp_2017_2_:07-symbole-short.pdf|Reprezentacja symboli w komputerze}}\\
* Bit, bajt i kody bitowe
* Pozycyjne systemy liczbowe
* Reprezentacja liczby całkowitej i rzeczywistej w komputerze
* Limity typów liczbowych.
* Niedokładności przy obliczeniach zmiennopozycyjnych
* Przykłady algorytmów:
* zapis liczby w innym systemie pozycyjnym
* Pliki źródłowe:
* {{zajecia:pp_2017_2:src:dec2all.c}} zamiana do innego systemu liczbowego
* [[.:wyklad:zad-symbole-liczby|Przykładowe zadania]]
- {{zajecia:pp_2017_2_:08-symbole2-short.pdf|Reprezentacja symboli w komputerze: znaki, łańcuchy znakowe}}\\
* Reprezentacja znaków, kod ASCII
* Łańcuchy znakowe
* Formatowanie za pomocą printf() i scanf()
* Przykłady algorytmów:
* wyszukiwanie wzorca
* Pliki źródłowe:
* {{zajecia:pp_2017_2:src:strindex.c}} wyszukiwanie wzorca metodą naiwną i Boera-Moore'a
* [[.:wyklad:zad-symbole-znaki|Przykładowe zadania]]
- {{zajecia:pp_2017_2_:09-operatory-short.pdf|Operatory: powtórzenie i uzupełnienie.}}
* Operatory bitowe, przesunięcie bitowe
* Operator rzutowania
* Operator warunkowy ''?:''
* Wszystkie operatory i ich priorytety
* Przykład: szyfrowanie XOR, maski bitowe
* Pliki źródłowe:
* {{zajecia:pp_2017_2:src:szyfr-xor.c}} szyfrowanie tekstu za pomocą operacji XOR
* [[.:wyklad:zad-operatory|Przykładowe zadania]]
- {{zajecia:pp_2017_2_:10-typy-zlozone.pdf|Złożone typy danych: powtórzenie i uzupełnienie}}
* Typ wyliczeniowy enum
* Struktury, unie, pola bitowe
* Instrukcja typedef i jej użycie w deklaracji struktur
* Pliki źródłowe:
* {{zajecia:pp_2017_2:src:enum1.c}}, {{zajecia:pp_2017_2:src:enum2.c}} - demonstracja użycia typu wyliczeniowego
* {{zajecia:pp_2017_2:src:typedef1.c}}, {{zajecia:pp_2017_2:src:struct2.c}} - demonstracja użycia instrukcji ''typedef''
* {{zajecia:pp_2017_2:src:union1.c}}, {{zajecia:pp_2017_2:src:union2.c}} - demonstracja użycia unii
* {{zajecia:pp_2017_2:src:bitfield.c}} - demonstracja użycia pól bitowych
* [[.:wyklad:zad-typy-zlozone|Przykładowe zadania]]
- {{zajecia:pp_2017_2_:11-strumienie.pdf|Pliki i strumienie.}}\\
* Plik i format pliku
* Systemy plików
* Strumienie
* Podstawowe operacje na strumieniach w C
* Pliki źródłowe:
* {{zajecia:pp_2017_2:src:zapis.c}} przykładowy zapis do pliku
* {{zajecia:pp_2017_2:src:odczyt.c}} przykładowy odczyt z pliku
* [[.:wyklad:zad-strumienie|Przykładowe zadania]]
- {{zajecia:pp_2017_2_:12-podsumowanie.pdf|Podsumowanie: elementy inżynierii oprogramowania.}}\\
* Co było a czego nie było na wykładzie?
* Wstęp do inżynierii oprogramowania.
* Kilka dobrych rad
* O stylu i standardach kodowania
* Obsługa błędów w C
===== Test =====
[[zagadnienia-2017|Zagadnienia do testu]]
===== 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\\
* [[http://pl.wikibooks.org/wiki/C|Kurs programowania w C (WikiBook)]]
* [[google>programowanie w języku ANSI C |WWW]]
===== Kilka przydatnych odnośników =====
[[..:pp:ide_wstep|Ściąga dotycząca programowania w C w Visual Studio]]\\
[[http://en.cppreference.com/w/c| C reference]]\\
[[http://en.wikibooks.org/wiki/C_Programming|Programming C (wikibook)]] ([[http://pl.wikibooks.org/wiki/C|wersja polska)]]\\
[[http://pl.wikibooks.org/wiki/Programowanie:C:Biblioteka_standardowa:Indeks_alfabetyczny|Alfabetyczny spis funkcji biblioteki standardowej ANSI C (tzw. libc) w wersji C89]]\\
[[http://www-h.eng.cam.ac.uk/help/tpl/languages/C/teaching_C/teaching_C.html|ANSI C for Programmers on UNIX Systems]]\\
[[http://www.ioccc.org/|The International Obfuscated C Code Contest]]\\
[[http://www.fizyka.umk.pl/~norbert/C|Notatki do wykładu z języka C (dr N. Jankowski)]]\\
===== Zintegrowane środowiska programistyczne (IDE) =====
[[http://msdn2.microsoft.com/en-us/express/default.aspx|Visual Studio Express]] (MS Windows)\\
[[http://www.eclipse.org/|Eclipse]] z wtyczką [[http://www.eclipse.org/cdt/|CDT ]] (GNU Linux, MS Windows)\\
[[http://netbeans.org/features/cpp/|NetBeans IDE C and C++ Development]]\\
[[http://www.bloodshed.net/devcpp.html|Bloodshed Software - Dev-C++]] (MS Windows) Nie rozwijany od 2005 !! \\ Rozwijana nieoficjalna wersja DevC%%++%% [[http://orwelldevcpp.blogspot.com/|Orvel DevC++]]\\
[[http://www.codeblocks.org/|Code::Blocks]] (GNU Linux, MS Windows, Mac OS X)\\
[[http://www.kdevelop.org/|Kdevelop]] KDE Development Environment (GNU Linux)\\
[[http://anjuta.sourceforge.net/|Anjuta DevStudio]] IDE for C and C%%++%%, written for GTK/GNOME (GNU Linux)\\
[[http://www.fifsoft.com/relo/|Relo]] (MS Windows)\\
[[http://edn.embarcadero.com/article/20841|Turbo C version 2.01]] (MS Windows)\\
[[http://download.komputerswiat.pl/producenci/wwwborlandpl|Borland C++ Builder 6 Personal]]\\
===== Inne =====
[[http://ideone.com/|Ideone - Kompilator online]]\\