Edytuj stronę Odnośniki Fold/unfold all ODT export Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić. ====== Programowanie Proceduralne ====== Termin zajęć w semestrze zimowym 2013/2014:\\ **Wykład:** poniedziałek g. 14-16, aula COK <del>sala 20</del>, WFAiIS\\ **Laboratorium:** (od 6 listopada) * grupa 1, wtorek, godz. 12<sup>15</sup>-14<sup>30</sup>, PK6, WFAiIS * grupa 2, wtorek, godz. 14<sup>35</sup>-16<sup>50</sup> <del>godz. 15<sup>00</sup>-17<sup>15</sup></del>, 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]]\\