Informatyka, Podstawy Informatyki

        


Zasady zaliczenia
Wykład: kolokwium zaliczeniowe na przedostatnich zajęciach.
Laboratorium: bieżąca realizacja zadań z kolejnych list w zakresie określonym przez prowadzącego. Nacisk kładę na samodzielne rozwiązywanie elementarnych problemów, a nie przynoszenie gotowego, skopiowanego rozwiązania. Oprócz bieżącego treningu na zajęciach i ocen cząstkowych, na ocenę końcową składa się także realizacja nieco większego projektu programistycznego - aplikacji, która powinna składać się z kilku wybranych elementów zrealizowanych w semestrze. Może to być program do gromadzenia i przetwarzania danych, prosta gra logiczna, narzędzie do przetwarzania tekstu (na takiej zasadzie jak działają polecenia more, grep itp.). Wśród tematów projektów mile widziane są takie, które po niewielkich modyfikacjach będą się w niedalekiej przyszłości nadawać do przeniesienia na mikrokontroler. Szczegóły techniczne przedstawię w trakcie zajęć.
Instrukcje do laboratoriów zostały przygotowane z myślą o samodzielnej pracy w domu i przygotowaniem się do zajęć. Konkretne zadania do wykonania prowadzący będą przekazywać na bieżąco w trakcie zajęć. Zadania do realizacji znajdujące się w instrukcjach są zróżnicowane pod względem poziomu trudności. Nie jest wymagane zrealizowanie 100% zadań - niektóre z nich są przeznaczone dla tych z was, którzy zainteresowali się tematyką kursu i są skłonni poświęcić więcej własnego czasu na zajęcie się ambitniejszymi problemami.
W uzasadnionych przypadkach istnieje możliwość realizacji innych zadań niż te z poniższych list - dotyczy to w szczególności wykonania wszystkich lub wybranych laborek na mikrokontrolerach. Szczegóły są możliwe do ustalenia indywidualnie i wymagają zgody prowadzącego zajęcia.

Narzędzia programistyczne
http://sourceforge.net/projects/codeblocks - bezpłatne środowisko zintegrowane, dostępne zarówno dla Windows jak i Linuksa.
Microsoft Visual C++ 2010 - bezpłatna wersja Express
Microsoft Visual Studio 2010 Ultimate - licencja akademicka DreamSpark
Odradzam instalację najnowszych wersji Visual Studio na słabszym sprzęcie - do zajęć wystarczy w zupełności Code::Blocks lub wymienione wyżej starsze bądź odchudzone wersje VS.

Literatura
  • Brian W. Kernighan, Dennis M. Ritchie. Język ANSI C. [PDF]
Oprócz tych, które zostały podane na wykładzie, warto zapoznać się z:
  • https://pl.wikibooks.org/wiki/C - podręcznik on-line dla zupełnie zielonych
  • http://xion.org.pl/productions/texts/coding/megatutorial - Megatutorial “Od zera do gier kodera” [PL]
  • Thinking in C++ (wersja elektroniczna)
  • Stephen Prata; Język C. Szkoła programowania. Wydanie VI; Wydawnictwo Helion (bardzo dobra książka dla zaawansowanych programistów)
  • http://pl.wikibooks.org/wiki/Programowanie:C
  • http://proquestcombo.safaribooksonline.com/9781449335649 Head First C By: David Griffiths; Dawn Griffiths

Materiały treningowe (do samodzielnej pracy i przygotowania do laboratoriów)
Poniższe materiały nie zastąpią pełnych podręczników i samodzielnego treningu - nie należy ich traktować jako substytutu pełnowartościowej diety edukacyjnej! 
  • Lab01 - Przygotowanie projektu w środowisku Code::Blocks.
  • Lab02 - Podstawowe operacje wejścia/wyjścia w C: stdio, przekierowanie strumieni we/wy w konsoli znakowej.
  • Lab03 - Debuger, typy całkowite i zmiennoprzecinkowe, jawne i niejawne ich rzutowanie oraz horror zatytułowany "printf(...)/scanf(...)".
    https://bulldogjob.pl/news/114-upiorne-bugi-male-bledy-wielkie-katastrofy
  • Lab04 - Napisy, tablice znakowe, pliki. Wprowadzenie w świat wskaźników znakowych.
  • Lab05 - Poza funkcjami bibliotecznymi, czyli sam na sam z językiem C.
  • Lab06 - Gospodarka pamięcią i zmienne w C. Część pierwsza.
    Jeden z nieco nadgorliwych studentów zauważył, że w tej instrukcji nie ma listy zadań do zrealizowania ani zagadnień do przygotowania i poczuł się zagubiony. Wieloletnia praktyka i nieuchronne funkcjonowanie kalendarza akademickiego oraz jego interferencje z kalendarzem astronomicznym powodują, że ta laborka wypada w okolicach początku wiosny, co z kolei nagminnie powoduje przekraczanie "piku Balmera" przez studentów (wygooglajcie sobie, skąd to określenie). Dla programistów (zwłaszcza mało wprawionych) oznacza to zanik wszelkich zdolności tworzenia kodu, dlatego litościwie pozostawiłem w tej instrukcji tylko zadania "badawcze" (copy-paste-compile-run-observe). Pogoda jednak w tym roku nie sprzyja przeskakiwaniu Balmerowych pików, zatem na wyraźną prośbę jednego ze studentów, który nie wiedział, co robić w pierwszy dzień wiosny, zadania do realizacji na laborce są następujące:
    (1) Wyznacz maksymalny domyślny dla twojego kompilatora/środowiska programistycznego limit pamięci, w jakim zmieści się zmienna lokalna (mniej więcej odpowiada to wielkości dostępnego dla aplikacji stosu
    (2) Znajdź ustawienie projektu/kompilatora, które pozwala zmienić tę wartość i pokaż, że to zadziałało (ustaw ogromniasty stos 100 MiB, aby aplikacja z gigantyczną lokalną tablicą się nie wysypywała).
    (3) przekaż do funkcji void g(int t[X]) argument będący tablicą 100, 10000, 1000000 intów. Gdzie leży granica X?
    (4) Zmień kod zad. 3. tak, aby przekazywać zamiast tablicy intów wskaźnik na int. Udowodnij że wiesz, o co w tym wszystkim chodzi, wyświetlając w tej funkcji zawartość tablicy.
    Generalnie: aby te zadania miały sens, w pętli for(...) nadawaj wartości elementom każdej tablicy (np. 666). W zadaniu (4) wyświetl tylko pierwsze 100 i ostatnie 100 elementów, bo dla miliona sztuk wyświetlanie zajmie całą laborkę.
    (5) W funkcji f zdefiniuj pewną zmienną lokalną, będącą tablicą 100 znaków i zainicjalizuj ją napisem "test zadania 5". Niech wynikiem zwracanym przez tę funkcję będzie wskaźnik na tę tablicę. Wskazówka: nagłówek funkcji wygląda tak: char * f(); . Wyświetl w głównym programie (w funkcji main) wynik działania funkcji, np. printf("%s", f());
    (6) W funkcji main() użyj wskaźnika zwracanego przez funkcję f(): char * wsk = f(); . Do obszaru pamięci wskazywanego przez ten wskaźnik wpisz napis "Litwo! Ojczyzno moja! ty jesteś jak zdrowie". Jest to mniej niż 99 znaków, które teoretycznie można zmieścić w tablicy 100 elementowej zdefiniowanej wewnątrz f(). Jakie będą efekty w CodeBlocks? A jakie w Visual Studio? Wskazówka: zapoznaj się z funkcją strcpy(...) lub napisz jej odpowiednik używając pętli for(...) albo while(...). Będzie to dodatkowo punktowane.
    (7) sprawdź, czy w międzyczasie nie nadeszła przypadkiem wiosna, i zdobądź szczyt Balmera (po zajęciach). Powodzenia!
  • Lab07 - Warunki, instrukcje wyboru i jak nie pisać scenariusza filmowego.
  • Lab08 - Dynamiczna alokacja pamięci, arytmetyka wskaźników w C.
  • Lab09 - Klasy i obiekty (cz.1.), czyli dlaczego Studenci{} piją SokiOwocowe{}.
  • Lab10 - Obiektowe we/wy w C++.
  • Lab11 - Sortowanie, wskaźniki funkcyjne, złożoność algorytmów.
  • Lab13 - Polimorfizm.

Tematyka wykładów
  • Projekt w języku C/C++: pliki H, C, CPP[, OBJ, LIB]. Rola preprocesora, kompilatora, linkera. Debugger. 
  • Podstawowe (wbudowane) typy zmiennych: void, enum, bool, char, int, float, double. Modyfikatory short, long, signed, unsigned. 
  • Konwersja typów (jawna i niejawna). 
  • Funkcje i ich argumenty. Przeciążanie funkcji w C++. 
  • Stdio i ciągi formatujące: %s, %d, %f, %g. System dwójkowy, ósemkowy, szesnastkowy i konwersje między nimi. Reprezentacja zmiennych całkowitych w pamięci i operacje bitowe. 
  • Dokładność obliczeń i potencjalne problemy z zaokrągleniami (float, double). 
  • Zmienne plikowe. Tryby b, t, a, w, r. Tryb tekstowy (z translacją) a znaki końca wiersza w plikach (Windows, Linuks). Pętla for(.). Tablice jedno- i wieloindeksowe. 
  • Pętle do..while oraz while. Wskaźniki i arytmetyka wskaźników. Instrukcja warunkowa if..else. 
  • Instrukcje warunkowe ?: oraz switch..case..break. Tablice a wskaźniki. 
  • Praktyczne zastosowania arytmetyki wskaźników: różne sposoby zamiany małych liter na wielkie 
  • Struktury danych i ich reprezentacja w pamięci. Problem przenośności danych bitowych między programami w C. Tablice struktur. 
  • Przekazywanie struktur jako argumentów funkcji: przez wartość, referencję, wskaźnik. 
  • Klasy, obiekty pola i metody. Rola konstruktora i destruktora. Krótkie opowiadanie o idei projektowania obiektowego oraz strukturalnego. 
  • Polimorfizm, dziedziczenie. Zachowanie metod wirtualnych. Pojęcie klasy abstrakcyjnej. Lista jednokierunkowa 
  • Operacje na listach i innych dynamicznych strukturach danych: stosie, drzewie, liście dwukierunkowej. 
  • Zastosowanie pól statycznych w klasach. 
  • Wyrzucanie i przechwytywanie wyjątków. 
  • Algorytmy sortowania, porównanie wydajności. Wskaźniki funkcyjne w praktyce (qsort). Sortowanie listy jednokierunkowej algorytmem bąbelkowym. 
  • Operatory i ich przeciążanie. Konstruktory kopiujące. Praktyczne zastosowania. 
  • Szablony funkcji i klas. Biblioteka STL. Wyrzucanie i przechwytywanie wyjątków. 
  • Zaprzyjaźnianie klas i funkcji. Sekcje public, protected, private w klasach. Niejawna rekurencja: przykład destruktora elementu listy jednokierunkowej. Domyślne wartości argumentów funkcji i metod.
Ċ
Krzysztof Urbański,
23 sty 2017, 01:53
ċ
Inf_Lab01_sources.zip
(1k)
Krzysztof Urbański,
23 sty 2017, 01:53
Ċ
Krzysztof Urbański,
23 sty 2017, 01:53
Ċ
Krzysztof Urbański,
23 sty 2017, 01:53
Ċ
Krzysztof Urbański,
23 sty 2017, 01:53
Ċ
Krzysztof Urbański,
23 sty 2017, 01:53
Ċ
Krzysztof Urbański,
23 sty 2017, 01:53
Ċ
Krzysztof Urbański,
23 sty 2017, 01:53
Ċ
Krzysztof Urbański,
23 sty 2017, 01:53
Ċ
Krzysztof Urbański,
23 sty 2017, 01:53
Ċ
Krzysztof Urbański,
23 sty 2017, 01:53
Ċ
Krzysztof Urbański,
23 sty 2017, 01:54
Ċ
Krzysztof Urbański,
23 sty 2017, 01:54