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 ====== <WRAP info center round box 60%> W semestrze zimowym 2017/2018 wykład odbywa się w każdy wtorek g. 10-12 w auli COK. </WRAP> ===== 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 ===== <fs large> [[zagadnienia-2017|Zagadnienia do testu]] </fs> ===== 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]]\\