Wstęp do Informatyki i Programowania
Algorytmy + Struktury danych = Programy
Niklaus Wirth
Aktualności
05.12.2023 Zamieszczono listę czwartą na laboratorium
08.11.2023 Zamieszczono listę trzecią na laboratorium
19.10.2023 Zamieszczono listę drugą na laboratorium
08.11.2023 Zamieszczono listę trzecią na laboratorium
19.10.2023 Zamieszczono listę drugą na laboratorium
Zasady zaliczenia
Ocena końcowa
- Ocena z grupy kursów Wstęp do Informatyki i Programowania jest wyliczana na podstawie średniej ważonej liczby punktów uzyskanych na laboratorium i liczby punktów uzyskanych z kolokwium (wagi odpowiednio 40% i 60%).
- Aby zaliczyć grupę kursów należy zarówno z laboratorium jak i z kolokwium uzyskać co najmniej po 50 punktów.
- Zależność między oceną końcową a średnią definiuje poniższa funkcja (podano źródła w językach C i w Ada):
#include <assert.h> double ocena_koncowa(int lab, int wyk) { assert(lab >= 50); assert(wyk >= 50); double srednia = 0.40 * lab + 0.60 * wyk; if(srednia < 50.0) return 2.0; else if(srednia < 60.0) return 3.0; else if(srednia < 70.0) return 3.5; else if(srednia < 80.0) return 4.0; else if(srednia < 90.0) return 4.5; else return 5.0; }
function Ocena_Koncowa (Lab: in Integer; Wyk : in Integer) return Float with Pre => Lab >= 50 and Wyk >= 50 is Srednia : Float := 0.40 * Float (Lab) + 0.60 * Float (Wyk); begin return (if Srednia < 50.0 then 2.0 elsif Srednia < 60.0 then 3.0 elsif Srednia < 70.0 then 3.5 elsif Srednia < 80.0 then 4.0 elsif Srednia < 90.0 then 4.5 else 5.0); end Ocena_Koncowa;
Laboratorium
- Podczas zajęć laboratoryjnych zaliczane są listy zadań (przy każdej z nich podano nieprzekraczalny termin jej zaliczenia i maksymalną liczbę punktów do uzyskania).
- Zadania należy rozwiązywać samodzielnie.
- Student zaliczając listę zadań musi umieć odpowiedzieć na pytania weryfikujące samodzielność jego pracy nad rozwiązaniami.
- Jeśli nie zaliczy się listy zadań, to ma się za nią 0 punktów.
- W ostatnim tygodniu zajęć, prowadzący laboratoria przysyłają do wykładowcy liczbę punktów jaką uzyskali z laboratoriów poszczególni studenci.
- Nie ma możliwości zaliczania laboratorium podczas sesji egzaminacyjnej.
Wykład
- Na ostatnim wykładzie odbędzie się kolokwium, z którego będzie można uzyskać od 0 do 100 punktów.
- Na stronie podano termin i miejsce kolokwium.
Ocena celująca
- Jeśli student uzyskał z laboratorium co najmniej 95 punktów i z kolokwium co najmniej 95 punktów, to może odpowiadać na ocenę celującą podczas konsultacji wykładowcy w pierwszym tygodniu sesji (powinien przed rozpoczęciem sesji poinformować wykładowcę o chęci odpowiadania pisząc e-mail).
Plan wykładu
Wstęp
- Algorytm - komputer - program wip_wyk1.pdf
Elementy języka C
- Proste typy danych wip_wyk2.pdf
- Rozgałęzienia wip_wyk3.pdf
- Iteracje wip_wyk4.pdf
- Złożone typy danych wip_wyk5.pdf
- Funkcje wip_wyk6.pdf
- Operacje wejścia/wyjścia wip_wyk7.pdf
- Struktury dynamiczne wip_wyk8.pdf
- Dobry styl programowania stara prezentacja
Elementy algorytmiki
- Analiza asymptotyczna wip_wyk10.pdf
- Rekurencja stara prezentacja
- Przegląd z nawrotami stara prezentacja
- Zasada dziel i zwyciężaj stara_prezentacja
- Programowanie dynamiczne stara_prezentacja
Zagadnienia już omówione |
Zagadnienia do omówienia |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
algorytm komputer język programowania interpreter kompilator typ bool typ char typ int typ float typ double typ wskaźnikowy deklaracje zmiennych stan obliczeń instrukcja if instrukcja switch instrukcja while niezmiennik pętli dowodzenie poprawności programów instrukcja for instrukcja do-while tablice struktury unie deklaracje funkcji definicje funkcji wywołania funkcji przekazywanie parametrów standardowe wejście i wyjście pliki otwieranie i zamykanie plików czytanie z i pisanie do plików struktury dynamiczne alokacja pamięci zwalnianie pamięci dobry styl programowania analiza asymptotyczna czasowa złożoność obliczeniowa pamięciowa złożoność obliczeniowa rekurencja przegląd z nawrotami drzewo poszukiwań zasada dziel i zwyciężaj |
programowanie dynamiczne |
Termin i miejsce kokolwium
1 lutego 2024 (ostatni wykład)
sala C3-23, godzina 15:15
sala C3-23, godzina 15:15
Literatura
- S. Alagić, M.A. Arbib. Projektowanie programów poprawnych i dobrze zbudowanych. WNT, Warszawa 1982. Książkę można ściągnąć w formacie PDF ze strony wydawcy będąc w sieci PWr.
- M. Kotowski. Wysokie C. LUPUS, Warszawa, 1998.
- D. Harel, Y. Feldman. Rzecz o istocie informatyki. WNT, Warszawa 2008.
- B. W. Kernighan, D. M. Ritchie. Język ANSI C. WNT, Warszawa 2002.
- A. Hunt, D. Thomas. Pragmatyczny programista. Od czeladnika do mistrza. WNT, Warszawa, 2002.
Repozytoria
Wszystkie prezentowane na wykładzie przykłady programów znajdziesz w repozytorium: github.com/przemko/c-clang-wip
Narzędzia
Podczas zajęć laboratoryjnych będziemy korzystać z następujących narzędzi programistycznych.
Kompilacja
- Clang Compiler dla języka C (opcje -Wextra --pedantic -std=c11)
- GNU C Compiler dla języka C (jeden z dwóch: albo clang albo gcc)
- GNU Make
- GNATmake dla języka Ada
Analiza statyczna
- Clang Compiler dla języka C (opcja --analyze)
Kontrola stylu programowania
Ćwiczenia
Termin |
Zadania |
Zadania |
|||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
pierwsze zajęcia |
wip_lab0.pdf |
||||||||||
drugie zajęcia |
wip_lab1.pdf |
||||||||||
trzecie zajęcia |
wip_lab2.pdf |
||||||||||
czwarte zajęcia |
wip_lab3.pdf |
||||||||||
piąte zajęcia |
wip_lab4.pdf |
||||||||||
szóste zajęcia |
wip_lab1.pdf |
||||||||||
siódme zajęcia |
dokończyć listę 5 |
||||||||||
ósme zajęcia |
Laboratorium
Aby ułatwić Państwu instalację systemu Ubuntu Linux na wirtualnej maszynie przygotowałem opis instalacjaUbuntu.pdf.
Gdyby nie udało się Państwu zainstalować Linuxa na wirtualnej maszynie, to w ostateczności możecie spróbować zainstalować linuxową nakładkę na system Windows: Windows Subsystem for Linux.
Gdyby nie udało się Państwu zainstalować Linuxa na wirtualnej maszynie, to w ostateczności możecie spróbować zainstalować linuxową nakładkę na system Windows: Windows Subsystem for Linux.
- Zadania rozwiązuj samodzielnie (podczas zaliczania listy będzie to sprawdzane dodatkowymi pytaniami).
- Każdy plik źródłowy powinien zaczynać się od komentarza zawierającego nazwę pliku oraz imię i nazwisko autora programu (będzie to traktowane jak podpis pod własną pracą).
- Programy w języku C kompiluj poleceniem clang albo gcc z opcjami -Wextra --pedantic -std=c11
- Programy w języku Ada kompiluj poleceniem gnatmake. Kompilator i środowisko do programowania w języku Ada można zainstalować ze strony adacore.com/download (należy z menu wybrać system operacyjny i architekturę komputera a potem rok wydania kompilatora).
- Jeśli masz problem ze znalezieniem błędu w programie w języku C, spróbuj skompilować go z opcją --analyze (wykonuje statyczną analizę kodu).
- Dzięki silnemu typowaniu (bardzo dokładnej kontroli typów), dużo łatwiej będzie Ci poprawić w języku Ada nawet poważne błędy już na etapie kompilacji. W przyszłości być może wybierzesz kurs wybieralny Niezawodne systemy informatyczne, gdzie poznasz narzędzia do automatycznego dowodzenia poprawności programów w Adzie (dokładniej w bezpiecznym podzbiorze języka Ada jakim jest język SPARK). Jest również narzędzie, które wykonuje statyczną analizę kodu w języku Ada. Nazywa się ono CodePeer.
W pliku porównanie.pdf znajdziesz porównanie instrukcji sterujących w wybranych językach programowania. Jak widzisz są one bardzo podobne. Gdy opanujesz jeden język programowania strukturalnego, to bez problemu nauczysz się innego.
W pliku elementy.pdf znajdziesz podstawowe wiadomości o językach C i Ada aby rozwiązać pierwszą listę zadań.
Pierwsze zajęcia laboratoryjne mają charakter organizacyjny. Omówione zostaną na nich narzędzia jakie używać będziemy do programowania.
Na stronie learn.adacore.com/courses/intro-to-ada/ znajdziesz kurs języka Ada.
Listy zadań
Ciekawostki
Advent of Code
Prezentacja przekazywania parametrów do funkcji
Podstawy operowania wskaźnikami
Ranking najbardziej popularnych języków programowania
Komputer ze sznurka i odważników
Pulley Logic Gates from Alex Gorischek on Vimeo.