====== Programowanie Proceduralne ======
Termin zajęć w semestrze zimowym 2013/2014:\\
**Wykład:** poniedziałek g. 14-16, aula COK sala 20, WFAiIS\\
**Laboratorium:** (od 6 listopada)
* grupa 1, wtorek, godz. 1215-1430, PK6, WFAiIS
* grupa 2, wtorek, godz. 1435-1650 godz. 1500-1715, PK6, WFAiIS
===== Wykład =====
{{zajecia:pp_2013_2:pp-wyklad-2013.pdf|Wykład w całości}} - plik będzie aktualizowany na bieżąco w trakcie postępów wykładu.
- {{zajecia:pp_2013_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_2013_2:src:hello.c}}
- {{zajecia:pp_2013_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_2013_2:src:euclid1.c}}
* {{zajecia:pp_2013_2:src:euclid2.c}}
* {{zajecia:pp_2013_2:src:euclid1.pas}}
* {{zajecia:pp_2013_2:src:euclid1.f}}
* [[zadania01|Przykładowe zadania]]
- {{zajecia:pp_2013_2_:02-c.pdf|Podstawy języka C}}\\
* Struktura kodu.
* Zmienne - deklaracja i inicjalizacja.
* Najważniejsze operatory.
* Funkcje: ''printf()'', ''scanf()''.
* Instrukcje sterujące: if, else, do, while
* Przykłady programów: pole koła, silnia, pierwiastek kwadratowy (alg. Herona)
* Pliki źródłowe:
* {{zajecia:pp_2013_2:src:hello.c}}
* {{zajecia:pp_2013_2:src:kolo.c}}
* {{zajecia:pp_2013_2:src:silnia.c}}
* {{zajecia:pp_2013_2:src:heron.c}}
* [[zadania02|Przykładowe zadania]]
- {{zajecia:pp_2013_2_:03-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''
* Przykłady programów: alg. Euklidesa (NWD), liczby pierwsze, wzór Herona (pole trójkąta)
* Pliki źródłowe:
* {{zajecia:pp_2013_2:src:euclid3.c}} - wyznaczanie pierwiastka kwadratowego
* {{zajecia:pp_2013_2:src:pierwsza.c}} - sprawdzanie czy liczba jest pierwsza
* {{zajecia:pp_2013_2:src:heron2.c}} - pole trójkąta o bokach ''a'', ''b'', ''c''
* {{zajecia:pp_2013_2:src:globalne.c}} - demonstracja różnic pomiędzy zm. globalnymi i lokalnymi
* [[zadania03|Przykładowe zadania]]
- {{zajecia:pp_2013_2_:04-tablice-struktury.pdf|Tablice i struktury, czyli złożone typy danych}}\\
* Tablice - deklaracja, indeksowanie, operator ''[]''.
* Tablice jako argumenty funkcji.
* Typowe przykłady użycia tablic: wczytywanie wartości, kopiowanie
* Struktury - deklaracja, operator dostępu ''.''
* 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_2013_2:src:przeszukiwanie.c}} - przeszukiwanie liniowe
* {{zajecia:pp_2013_2:src:przeszukiwanie2.c}} - przeszukiwanie liniowe z wartownikiem
* wyznaczanie środka masy układu punktów:
* {{zajecia:pp_2013_2:src:sm1.c}} - punkt materialny reprezentowany jako tablica ''float punkt[4]''
* {{zajecia:pp_2013_2:src:sm2.c}} - punkt materialny reprezentowany przez strukturę ''struct punkt''
* {{zajecia:pp_2013_2:src:sm3.c}} - punkt materialny reprezentowany przez strukturę zawierającą tablicę ''struct punkt''
* {{zajecia:pp_2013_2:src:sm4.c}} - układ punktów reprezentowany przez tablicę struktur ''float punkt[]''
* {{zajecia:pp_2013_2:src:sm6.c}} - układ punktów reprezentowany przez strukturę z tablicą punktów ''struct chmura''
* [[zadania04|Przykładowe zadania]]
- {{zajecia:pp_2013_2_:05-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_2013_2:src:minmax1.c}}
* {{zajecia:pp_2013_2:src:minmax2.c}} - dziel i zwyciężaj
* wyznaczanie dominanty w ciągu liczb całkowitych
* {{zajecia:pp_2013_2:src:dominanta1.c}} - wersja naiwna
* {{zajecia:pp_2013_2:src:dominanta2.c}} - wersja szybsza
* [[zadania05|Przykładowe zadania]]
- {{zajecia:pp_2013_2_:06-symbole.pdf|Reprezentacja symboli w komputerze}}\\
* Bit, bajt i kody bitowe
* Pozycyjne systemy liczbowe
* Reprezentacja liczby całkowitej i rzeczywistej w komputerze
* Niedokładności przy obliczeniach zmiennopozycyjnych
* Przykłady algorytmów:
* zapis liczby w innym systemie pozycyjnym
* miejsca zerowe równania kwadratowego
* Pliki źródłowe:
* {{zajecia:pp_2013_2:src:dec2all.c}} zamiana do innego systemu liczbowego
* {{zajecia:pp_2013_2:src:miejscazerowe.c}} miejsca zerowe równania kwadratowego
* [[zadania06|Przykładowe zadania]]
- {{zajecia:pp_2013_2_:07-symbole2.pdf|Reprezentacja symboli w komputerze: znaki, łańcuchy znakowe}}\\
* Reprezentacja znaków, kod ASCII
* Strony kodowe cp1250, latin2, UTF-8
* Łańcuchy znakowe
* Przykłady algorytmów:
* wyszukiwanie wzorca metodą naiwną
* wyszukiwania wzorca (uproszczonym) algorytmem Boyera-Moore'a
* Pliki źródłowe:
* {{zajecia:pp_2013_2:src:strindex.c}} wyszukiwanie wzorca metodą naiwną i Boera-Moore'a
* [[zadania07|Przykładowe zadania]]
- {{zajecia:pp_2013_2_:08-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_2013_2:src:fopen.c}} przykładowy zapis do pliku
* {{zajecia:pp_2013_2:src:fopen2.c}} przykładowy odczyt z pliku
* [[zadania08|Przykładowe zadania]]
- {{zajecia:pp_2013_2_:09-podsumowanie.pdf|Podsumowanie: elementy inżynierii oprogramowania.}}\\
* Co było a co nie było omówione na wykładzie?
* Wstęp do inżynierii oprogramowania.
* Kilka dobrych rad
* O stylu i standardach kodowania
* Obsługa błędów w C
===== Laboratorium =====
{{page>zajecia:pp_2013_2:lab:sidebar&noheader&nofooter}}
===== 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 =====
[[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]]\\