Wstęp do informatyki i programowania (W04INA-SI0029G)
Algorytmy + Struktury danych = Programy
Niklaus Wirth
Aktualności
—
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 if(srednia < 100.0) return 5.0 else return 5.5; }
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 elsif Srednia < 100.0 then 5.0 else 5.5); 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
- Aby otrzymać ocenę celującą należy uzyskać 100 punktów z laboratorium i 100 punktów z kolokwium.
Plan wykładu
Wstęp
- Algorytm - komputer - język programowania
- Środowisko programowania
Elementy języka C, Python i Ada
- Deklaracje i proste instrukcje
- Instrukcje warunkowe
- Iteracje
- Niezmiennik i skończoność pętli
- Złożone typy danych
- Funkcje i procedury
- Struktury dynamiczne (wskaźniki i listy)
- Struktury dynamiczne (drzewa binarne)
- Operacje wejścia/wyjścia
Elementy algorytmiki
- Rekurencja
- Zasada dziel i zwyciężaj
- Przegląd z nawrotami
Zagadnienia już omówione
Zagadnienia do omówienia
Algorytm
Komputer
Język programowania niskiego poziomu
Język programowania wysokiego poziomu
Interpreter
Kompilator
Proste typy danych
Visual Studio Codę
Github Copilot
Kompilatory CLANG i GNAT
Interpreter Python
Korzystanie z AI
Deklaracje zmiennych
Instrukcja podstawienia
Instrukcja czytania
Instrukcja pisania
Instrukcje warunkowe
Instrukcje iteracji
Niezmiennik pętli
Skończoność pętli
Złożone typy danych
Wskaźniki
Listy
Drzewa binarne
Operacje wejścia/wyjścia
Rekurencja
Zasada dziel i zwyciężaj
Przegląd z nawrotami
Komputer
Język programowania niskiego poziomu
Język programowania wysokiego poziomu
Interpreter
Kompilator
Proste typy danych
Visual Studio Codę
Github Copilot
Kompilatory CLANG i GNAT
Interpreter Python
Korzystanie z AI
Deklaracje zmiennych
Instrukcja podstawienia
Instrukcja czytania
Instrukcja pisania
Instrukcje warunkowe
Instrukcje iteracji
Niezmiennik pętli
Skończoność pętli
Złożone typy danych
Wskaźniki
Listy
Drzewa binarne
Operacje wejścia/wyjścia
Rekurencja
Zasada dziel i zwyciężaj
Przegląd z nawrotami
Termin i miejsce kokolwium
TBA
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
- GNAT (Gnu Ada Translator)
- Python 3
Analiza statyczna
- Clang Compiler dla języka C (opcja --analyze)
Kontrola stylu programowania
Ćwiczenia
Listy zadań
TBA
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ń
TBA
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.