Stacks Image 23603
Stacks Image 24329

Wstęp do Informatyki i Programowania

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

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

Elementy języka C

Elementy algorytmiki

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

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

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

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