Programowanie Proceduralne

W semestrze zimowym 2015/2016 wykład odbywa się w każdy poniedziałek g. 10-12 w sali 20.

Wykład

Wykład w całości - plik będzie aktualizowany na bieżąco w trakcie postępów wykładu.

Wstęp

Trochę historii komputerów i programowania.

Podstawowe pojęcia,

Języki programowania - historia, klasyfikacja.

Środowiska programistyczne.

Pliki źródłowe: hello.c

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:

euclid1.c

euclid2.c

euclid1.pas

euclid1.f

euclid2.c

euclid3.c

euclid3rekurencja.c

Przykładowe zadania

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:

hello.c

kolo.c

silnia.c

Przykładowe zadania

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:

heron.c

break.c

continue.c

switch.c

prime.c

goto.c, goto2.c

Przykładowe zadania

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:

euclid3.c - największy wspólny dzialnik

pierwsza.c, pierwsza2.c - sprawdzanie czy liczba jest pierwsza

heron2.c - pole trójkąta o bokach a, b, c

globalne.c - demonstracja różnic pomiędzy zm. globalnymi i lokalnymi

silnia2.c - wyznaczanie silni za pomocą f. rekurencyjnej

fib1.c, fib2.c - wyznaczanie elementów ciągu Fibonacciego

Przykładowe zadania

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:

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

Przykładowe zadania

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:

minmax1.c

minmax2.c - dziel i zwyciężaj

wyznaczanie dominanty w ciągu liczb całkowitych

dominanta1.c - wersja naiwna

dominanta2.c - wersja szybsza

Przykładowe zadania

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:

dec2all.c zamiana do innego systemu liczbowego

Przykładowe zadania

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:

strindex.c wyszukiwanie wzorca metodą naiwną i Boera-Moore'a

Przykładowe zadania

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:

szyfr-xor.c szyfrowanie tekstu za pomocą operacji XOR

Przykładowe zadania

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 i strumienie.

Plik i format pliku

Systemy plików

Strumienie

Podstawowe operacje na strumieniach w C

Pliki źródłowe:

zapis.c przykładowy zapis do pliku

odczyt.c przykładowy odczyt z pliku

Przykładowe zadania

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

Test

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

Kurs programowania w C (WikiBook)

WWW

Kilka przydatnych odnośników

Ściąga dotycząca programowania w C w Visual Studio
C reference
Programming C (wikibook) (wersja polska)
Alfabetyczny spis funkcji biblioteki standardowej ANSI C (tzw. libc) w wersji C89
ANSI C for Programmers on UNIX Systems
The International Obfuscated C Code Contest
Notatki do wykładu z języka C (dr N. Jankowski)

Zintegrowane środowiska programistyczne (IDE)

Visual Studio Express (MS Windows)
Eclipse z wtyczką CDT (GNU Linux, MS Windows)
NetBeans IDE C and C++ Development
Bloodshed Software - Dev-C++ (MS Windows) Nie rozwijany od 2005 !!
Rozwijana nieoficjalna wersja DevC++ Orvel DevC++
Code::Blocks (GNU Linux, MS Windows, Mac OS X)
Kdevelop KDE Development Environment (GNU Linux)
Anjuta DevStudio IDE for C and C++, written for GTK/GNOME (GNU Linux)
Relo (MS Windows)
Turbo C version 2.01 (MS Windows)
Borland C++ Builder 6 Personal

Inne

Ideone - Kompilator online