Stacks Image 24329

Wstęp do Informatyki i Programowania

Stacks Image 22837
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

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

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.
  • 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

W serwisie adventofcode.com znajdziesz zadania do oprogramowania (będą publikowane codziennie od 1 grudnia).

Zadania z poprzednich lat znajdziesz na stronach:

Prezentacja przekazywania parametrów do funkcji

Stacks Image 23974

Podstawy operowania wskaźnikami

Ranking najbardziej popularnych języków programowania

Stacks Image 23982

Komputer ze sznurka i odważników

Stary żart rysunkowy

Stacks Image 23992