Available courses

Celem zajęć jest przedstawienie podstawowych metod i algorytmów rozwiązywania typowych zadań obliczeniowych. Omawiane zagadnienia mają wielorakie zastosowania m.in. w obliczeniach naukowych czy grafice komputerowej.

Opis w Systemie Zapisy. Zajęcia odbywają się we środy w godzinach 14:15–18:00 w sali 139. Ostatnia migracja danych z Systemu Zapisy odbyła się 14 października 2024.

Celem projektu jest praktyczna nauka architektur komputerów poprzez ich implementację w formie umożliwiającej syntezę na układy FPGA. Pierwszym krótkoterminowym celem projektu jest zaimplementowanie minimalnego rdzenia RISC-V (RV32I) w mikroarchitekturze out-of-order. Implementacja będzie miała w założeniu modularny charakter „generatora rdzeni”, umożliwiający dodawanie, rekonfigurację i wymianę elementów składowych rdzenia bez głębokich zmian w kodzie.

Kurs o modelach językowych. Do czego służą, jak są zbudowane i czy (już) śnią o elektrycznych owcach.
Najważniejsze informacje dla nowych studentów rozpoczynających naukę w roku akademickim 2024/25.
Na wykładzie wprowadzone jest teoria i podstawowe metody, które umożliwiają efektywne programowanie grafiki z użyciem kart graficznych. Wykład nie jest jednak kursem biblioteki OpenGL.
Najważniejszym elementem zajęć są prezentację prowadzone przez studentów dla innych studentów. Ćwiczymy publiczne mówienie o sprawach technicznych, przy okazji budując widzę o wizualizacji danych.
Wykład jest wprowadzeniem do programowania systemów wbudowanych. W ramach wykładu student zapozna się z architekturą popularnych mikrokontrolerów, nauczy się wykorzystywać ich peryferia do sterowania różnorodnymi urządzeniami zewnętrznymi, a także pozna popularne magistrale używane w systemach wbudowanych.
Wykład przedstawia najważniejsze informacje dotyczące równań w słowach
Wstępny kurs programowania na przykładzie języka Python.
Opis przedmiotu w Systemie Zapisy. Zajęcia odbywają się we wtorki w godzinach 16:15–18:00 w sali 141. Ostatnia migracja danych z Systemu Zapisy odbyła się 14 października 2024.

Java to współczesny obiektowy język programowania stworzony przez Jamesa Goslinga z firmy Sun Microsystems. Od momentu powstania w połowie lat 90-tych XX wieku przeżył on dynamiczny rozwój a zainteresowanie nim nie maleje. Język Java przyciągnął do dziś wiele milionów programistów. Znajduje zastosowanie w każdej ważniejszej gałęzi przemysłu informatycznego i jest obecny w różnego rodzaju urządzeniach, komputerach i sieciach. Popularność Javy wynika przede wszystkim z przenośności programów i niezależności od konkretnej platwormy sprzętowej, a co za tym idzie, ma zastosowanie w Internecie oraz ogólnie w aplikacjach sieciowych. Jego podstawowe koncepcje zostały przejęte z języka Smalltalk (maszyna wirtualna, odśmiecanie pamięci) oraz z języka C++ (znaczna część składni i słów kluczowych).

Celem tych zajęć jest nauka programowania obiektowego w języku Java oraz zapoznanie z najważniejszymi pakietami z biblioteki standardowej i podstawowymi technologiami programistycznymi Javy.

Prace Churcha, Turing i Goedla z początków XX w. pokazały, że problem spełnialności (czy dana formuła ma model?) dla logiki pierwszego rzędu jest nierozstrzygalny. Wyniki te zapoczątkowały duży program badawczy, którego celem było ustalenie, które naturalne fragmenty logiki pierwszego rzędu są rozstrzygalne. Nieco później dodatkowym bodźcem dla tego programu stały się potencjalne zastosowania w informatyce (bazy danych, reprezentacja wiedzy, automatyczna weryfikacja programów i sprzętu, sztuczna inteligencja, itd.). Oczywiście, zwiększyły one też zainteresowanie badaczy dokładną złożonością obliczeniową problemu spełnialności w przypadku fragmentów rozstrzygalnych.

Na wykładzie przedstawię szereg wyników dotyczących rozstrzygalności/nierozstrzygalności i złożoności obliczeniowej logik motywowanych teorią informatyki.

W programie m.in.: logiki modalne, temporalne i deskrypcyjne, logiki z dwiema zmiennymi, fragmenty strzeżone, logika z unarną negacją. Wykład będzie oparty głównie na pracach opublikowanych w ciągu ostatnich dwudziestu kilku lat, choć opowiem oczywiście również o paru klasycznych wynikach, sięgając m.in. do prac Kurta Gödla.

Wymagania: Logika dla informatyków, Zalecane: Języki formalne i złożoność obliczeniowa

Course description:

This seminar will cover the latest research in generative AI, with a focus on generative models, such as variational autoencoders (VAEs), generative adversarial networks (GANs) and diffusion models (DDPM, or recent modifications LoRA, IP adapters, SORA, …).

The seminar will be based on recent papers and will cover a wide range of topics, including the theory of generative models, training and evaluation of GANs, and applications of generative models in computer vision, natural language processing, and other areas.

Each student will be required to present a paper, write a summary of the paper, and participate in discussions of the papers presented by other students.

Prerequisites:

Basic knowledge of machine learning and deep learning (e.g., completion of the Neural Networks course). Basic knowledge of probability theory and statistics (e.g., completion of the Probability and Statistics course). Basic knowledge of linear algebra (e.g., completion of the Linear Algebra course). The seminar will be held in English (or Polish if all participants prefer).

Kurs Algebry dla 1. roku informatyki
Algorytmy rozproszone 2024
Wykład oferuje intensywne wprowadzenie do budowy i zasad działania komputerów z punktu widzenia programisty. Po zaliczeniu przedmiotu studenci powinni rozumieć jaki wpływ ma architektura komputera na wydajność aplikacji, które przyjdzie im implementować w praktyce zawodowej.
C++ to obiektowo zorientowany język programowania. Został on zaprojektowany przez Bjarne'a Stroustrupa z myślą o programowaniu systemowym oraz do zaawansowanych obliczeń inżynierskich. Świadome używanie C++ do rozwiązywania problemów algorytmicznych daje dużo satysfakcji doświadczonym programistom, zwłaszcza dlatego, że generowany przez kompilator kod jest bardzo efektywny.

Celem kursu jest zapoznanie studentów z bogatą składnią języka C++, różnorodnymi technikami stosowanymi w programowaniu w C++ oraz z obszernymi fragmentami biblioteki STL.
Wykład ma na celu przybliżyć słuchaczom React’a i przekazać wiedzę pozwalającą na budowanie przy jego pomocy pierwszych aplikacji Frontendowych. Skupiać będziemy się głównie na podstawach oraz popularnych obecnie bibliotekach usprawniających pracę, jednak będziemy też zahaczać o tematy historyczne (jak np. Komponenty Klasowe) w celu lepszego zrozumienia ideologii React’a.
Wykład jest wprowadzeniem do projektowania układów cyfrowych. Celem wykładu jest nauczenie zasad rządzących funkcjonowaniem elektroniki cyfrowej oraz typowych rozwiązań stosowanych przy projektowaniu układów. Wiedza zdobyta na wykładzie pomoże w zrozumieniu zasady działania mikroprocesorów i mikrokontrolerów oraz zasad rządzących programowalnymi układami logicznymi FPGA.
Metody programowania to jeden z przedmiotów obowiązkowych. Jego zasadniczym celem jest objaśnienie zasad rządzących językami programowania oraz ich implementacjami: interpreterami i kompilatorami. Przedmiot ma charakter praktyczny: zagadnienia są prezentowane przy użyciu funkcyjnego języka programowania. Kładziony jest nacisk na używanie języków programowania jako formalnych narzędzi komunikacji między ludźmi.
Niektórzy uważają, że każdy informatyk powinien zaimplementować ray tracer.  W ramach przedmiotu na wykładzie przedstawiane są podstawy teoretyczne, a na pracowni realizujemy implementacje ray tracera od prostego klasycznego, aż do fizycznie poprawnego opartego o metody Monte Carlo.
Seminarium jest rozszerzeniem wykładu z analizy numerycznej. Jego celem jest zapoznanie uczestników z nowymi oraz z klasycznymi, ale nieomawianymi na wykładzie z analizy numerycznej, metodami i algorytmami numerycznymi rozwiązywania różnego rodzaju zadań matematyki obliczeniowej i grafiki komputerowej. Do zaliczenia zajęć konieczne będzie wygłoszenie referatu na temat ustalonej z prowadzącym seminarium metody numerycznej.
Powiedzmy sobie szczerze: ten kurs jest tak legendarny, że nie wymaga streszczenia.
Przeglądowy wykład dotyczący różnych zagadnień sztucznej inteligencji
Celem zajęć jest przedstawienie podstawowych metod i algorytmów rozwiązywania typowych zadań obliczeniowych. Omawiane zagadnienia mają wielorakie zastosowania m.in. w obliczeniach naukowych czy grafice komputerowej.
Kurs kodów korekcyjnych, edycja 2.

Opis przedmiotu. Zajęcia odbywają się we wtorki w godzinach 16:15–20:00 w sali 140. Ostatnia migracja danych z Systemu Zapisy: 12/10/2023.

Java to współczesny obiektowy język programowania stworzony przez Jamesa Goslinga z firmy Sun Microsystems. Od momentu powstania w połowie lat 90-tych XX wieku przeżył on dynamiczny rozwój a zainteresowanie nim nie maleje. Język Java przyciągnął do dziś wiele milionów programistów. Znajduje zastosowanie w każdej ważniejszej gałęzi przemysłu informatycznego i jest obecny w różnego rodzaju urządzeniach, komputerach i sieciach. Popularność Javy wynika przede wszystkim z przenośności programów i niezależności od konkretnej platwormy sprzętowej, a co za tym idzie, ma zastosowanie w Internecie oraz ogólnie w aplikacjach sieciowych. Jego podstawowe koncepcje zostały przejęte z języka Smalltalk (maszyna wirtualna, odśmiecanie pamięci) oraz z języka C++ (znaczna część składni i słów kluczowych).

Celem tych zajęć jest nauka programowania w języku Java oraz zapoznanie z podstawowymi technologiami Javy.

Kurs języka Rust 2023

Kurs ASP.NET - laboratorium, grupa PRz (czw. 18-20)

Proszę umieszczać w rozwiązaniach całe projekty VS z usuniętymi katalogami bin/ i obj/ spakowane do pliku .zip.

Półsemestralny kurs (15h wyklad + 15h pracowni) obejmuje naukę podstaw programowania równoległego kart graficznych w oparciu o bibliotekę CUDA firmy NVIDIA. Zajęcia będą w nietypowym półsemestralnym wymiarze i rozpoczną się 23 listopada. 
C++23 to najnowsza wersja języka C++. Język C++ sprawdza się, gdy chcemy zapewnić wysoką wydajność programu. Doskonale nadaje się do zastosowań systemowych, inżynierskich i algorytmicznych. Język ten jest stale rozwijany a kolejne jego specyfikacje, czyli C++11, C++14, C++17, C++20 i C++23, przyniosły wiele zmian i udogodnień. W porównaniu z językiem C++98 (standard z roku 1998) przeszedł on tak dużą transformację, że można śmiało powiedzieć, że jest to nowy język programowania. Aby w pełni wykorzystać potencjał współczesnego języka C++ należy go używać wraz z biblioteką standardową STL. C++ i STL to doskonałe narzędzie do zaimplementowania oprogramowania bardzo wysokiej jakości.
Celem projektu jest praktyczna nauka architektur komputerów poprzez ich
implementację w formie umożliwiającej syntezę na układy FPGA. Pierwszym
krótkoterminowym celem projektu jest zaimplementowanie minimalnego
rdzenia RISC-V (RV32I) w mikroarchitekturze out-of-order. Implementacja
będzie miała w założeniu modularny charakter „generatora rdzeni”,
umożliwiający dodawanie, rekonfigurację i wymianę elementów składowych
rdzenia bez głębokich zmian w kodzie.
Ten zaawansowany przedmiot pozwoli informatykom na lepsze zrozumienie fundamentalnych zasad logiki oraz wykorzystanie jej narzędzi do rozwiązywania bardziej zaawansowanych problemów informatycznych.
Najważniejsze informacje dla nowych studentów rozpoczynających naukę w roku akademickim 2023/24.
Na wykładzie wprowadzone jest teoria i podstawowe metody, które umożliwiają efektywne programowanie grafiki z użyciem kart graficznych. Wykład nie jest jednak kursem biblioteki OpenGL.
Wykład jest wprowadzeniem do projektowania układów cyfrowych przy użyciu języka opisu sprzętu Verilog oraz ich implementacji na układach FPGA. W ramach zajęć student nauczy się również metod testowania sprzętu oraz zapozna się z podstawami formalnej weryfikacji układów cyfrowych.
Seminarium poświęcone wielkim (i trochę mniejszym) modelom językowym, takim jak ChatGPT
Wykład jest wprowadzeniem do programowania systemów wbudowanych. W ramach wykładu student zapozna się z architekturą popularnych mikrokontrolerów, nauczy się wykorzystywać ich peryferia do sterowania różnorodnymi urządzeniami zewnętrznymi, a także pozna popularne magistrale używane w systemach wbudowanych.
Podstawy teorii kategorii wraz z zastosowaniami w informatyce
Elementarny kurs wprowadzający do programowania, wykorzystujący język Python

Opis przedmiotu. Zajęcia odbywają się we środy w godzinach 14:15–16:00 w sali 141. Ostatnia migracja danych z Systemu Zapisy: 12/10/2023.

Advanced Distributed Algorithms, 2023

Wykład oferuje intensywne wprowadzenie do budowy i zasad działania komputerów z punktu widzenia programisty. Po zaliczeniu przedmiotu studenci powinni rozumieć jaki wpływ ma architektura komputera na wydajność aplikacji, które przyjdzie im implementować w praktyce zawodowej.

Digital Image Processing / Przetwarzanie Obrazów

Krzywe i powierzchnie to podstawowe obiekty grafiki komputerowej. To właśnie przy ich pomocy można modelować skomplikowane kształty i sceny, którym nadaje się później cechy realistyczne i wykorzystuje na przykład w tak modnej ostatnio animacji komputerowej.

Głównym celem wykładu jest przedstawienie podstawowych wiadomości na temat narzędzi pozwalających efektywnie reprezentować i modelować krzywe oraz powierzchnie różnego typu i wygładzać przy ich pomocy dane. Szczególny nacisk położony będzie na omówienie odpowiednich technik i algorytmów z tym związanych, które pozwolą uczestnikom zajęć przygotować własny edytor krzywych i powierzchni.

Celem kursu jest rozwinięcie u uczestników praktycznych umiejętności zarządzania systemem Linux na komputerze osobistym lub serwerze. Zostaną przedstawione podstawowe informacje na temat budowy i sposobu działania systemów uniksopodobnych, a szczególnie różnych dystrybucji Linuksa. Zajęcia są adresowane do wszystkich studentów, którzy chcieliby sprawnie korzystać na co dzień z systemów linuksowych i którzy są zdania, że to użytkownik powinien mieć władzę na komputerem, a nie komputer nad użytkownikiem. Mimo że osiągnięcie tego celu wymaga sporego zaangażowania, wiedzy i praktycznych umiejętności, nie zakłada się wstępnego doświadczenia słuchaczy w zakresie administrowania Linuksem. Wystarczy wola odłączenia myszy i chęć pracy z terminalem tekstowym. Opis zajęć. Ostatnia synchronizacja z Systemem Zapisy: 2023-03-09 15:22:04

C++ to obiektowo zorientowany język programowania. Został on zaprojektowany przez Bjarne'a Stroustrupa z myślą o programowaniu systemowym oraz do zaawansowanych obliczeń inżynierskich. Świadome używanie C++ do rozwiązywania problemów algorytmicznych daje dużo satysfakcji doświadczonym programistom, zwłaszcza dlatego, że generowany przez kompilator kod jest bardzo efektywny.

Celem kursu jest zapoznanie studentów z bogatą składnią języka C++, różnorodnymi technikami stosowanymi w programowaniu w C++ oraz z obszernymi fragmentami biblioteki STL.

Kurs programowania gier w silniku Unreal 5 pomoże Ci poznać nie tylko podstawy, ale również zaawansowane techniki pracy z jednym z najpotężniejszych silników do tworzenia gier na świecie. 

Celem projektu jest praktyczna nauka architektur komputerów poprzez ich implementację w formie umożliwiającej syntezę na układy FPGA. Pierwszym krótkoterminowym celem projektu jest zaimplementowanie minimalnego rdzenia RISC-V (RV32I) w mikroarchitekturze out-of-order. Implementacja będzie miała w założeniu modularny charakter „generatora rdzeni”, umożliwiający dodawanie, rekonfigurację i wymianę elementów składowych rdzenia bez głębokich zmian w kodzie.

Wykład jest wprowadzeniem do projektowania układów cyfrowych. Celem wykładu jest nauczenie zasad rządzących funkcjonowaniem elektroniki cyfrowej oraz typowych rozwiązań stosowanych przy projektowaniu układów. Wiedza zdobyta na wykładzie pomoże w zrozumieniu zasady działania mikroprocesorów i mikrokontrolerów oraz zasad rządzących programowalnymi układami logicznymi FPGA.

Metody programowania to jeden z przedmiotów obowiązkowych. Jego zasadniczym celem jest przygotowanie studentów do używania języków programowania jako formalnych narzędzi komunikacji miedzy ludźmi, ze szczególnym uwzględnieniem technik, które mogą i powinny być stosowane do zapanowania nad złożonością dużych systemów.

Projekt zespołowy wdrażający dobre praktyki tworzenia oprogramowania z wykorzystaniem sieci neuronowych.

Świetnym sposobem na poznanie architektury systemu linuksowego jest własnoręczne zbudowanie go krok po kroku od zera. Pomaga w tym projekt Gerarda Beekmansa „Linux from scratch” rozpoczęty w 1999 i nadal aktywnie rozwijany. Uczestnicy zajęć otrzymaja do opracowania fragment systemu LFS, który powinni dobrze zrozumieć i przygotować w domu, a następnie przedstawić wszystkim uczestnikom zajęć podczas dwugodzinnej prezentacji tak, by mogli oni odtworzyć omówiony fragment we własnych instalacjach. Na koniec wszyscy powinni mieć gotowe, działające instalacje. Zajęcia są przeznaczone dla osób posiadających dobrą znajomość Linuksa. Opis zajęć. Ostatnia synchronizacja z Systemem Zapisy: 2023-03-09 15:21:48.

23-08-04 zpl->P.T.Zainteresowan{e|i}:

Dwa pliki umieszczone na tej stronie: (zpl, prac. PO, lato23, A-M).zip i (zpl, prac. PO, lato23, N-Z).zip zawierają komplet zasobów powstałych w ramach pracowni z programowania obiektowego w semestrze letnim roku akademickiego 2022-2023, tj. programy studenckie oraz korespondencję obrazująca nadzór dydaktyczny nad dwiema pracowniami. Wszystkie dane zawarte w plikach podlegają stosownej ochronie autorskiej.

Zdzisław Płoski

23-08-04 zpl->P.T. Zainteresowan{e|i}:

Dwa pliki umieszczone na tej stronie: (zpl, prac. PO, lato23, A-M).zip i (zpl, prac. PO, lato23, N-Z).zip zawierają komplet zasobów powstałych w ramach pracowni z programowania obiektowego w semestrze letnim roku akademickiego 2022-2023, tj. programy studenckie oraz korespondencję obrazująca nadzór dydaktyczny nad dwiema pracowniami. Wszystkie dane zawarte w plikach podlegają stosownej ochronie autorskiej.

Zdzisław Płoski, zpl

Celem zajęć jest przedstawienie podstawowych metod i algorytmów rozwiązywania typowych zadań obliczeniowych. Omawiane zagadnienia mają wielorakie zastosowania m.in. w obliczeniach naukowych czy grafice komputerowej.

KCK vel HCI (also known as CHI) alias usability engineering, cp. UX or UXD (also UED) and so on.

Kurs języka Rust 2022
Celem projektu jest praktyczna nauka architektur komputerów poprzez ich implementację w formie umożliwiającej syntezę na układy FPGA. Pierwszym krótkoterminowym celem projektu jest zaimplementowanie minimalnego rdzenia RISC-V (RV32I) w mikroarchitekturze out-of-order. Implementacja będzie miała w założeniu modularny charakter „generatora rdzeni”, umożliwiający dodawanie, rekonfigurację i wymianę elementów składowych rdzenia bez głębokich zmian w kodzie.

Korespondencja i materiały pomocnicze zpl-a na ćwiczenia i pracownię z inżynierii oprogramowania (IO). Wydanie 3. IIUWr, rok akademicki 2022/23.

Metody Implementacji Algorytmów 2022/2023

Najważniejsze informacje dla nowych studentów rozpoczynających naukę w roku akademickim 2022/23.

Wykład z podstaw grafiki komputerowej wprowadza podstawowe metody i niezbędną teoretyczną wiedzę umożliwiając efektywne programowanie grafiki z użyciem kart graficznych. W części praktycznej na pracowni uczymy się programować w nowoczesnej wersji OpenGL (wersja 3.3 lub nowsza).
Podczas projektu będziemy tworzyć boty konwersacyjne i odpowiadające na pytania

Na seminarium czytać będziemy prace dotyczące rozstrzygalności i złożoności problemów spełnialności (czy dana formuła ma model), skończonej spełnialności (czy dana formuła ma model skończony) oraz związanych z nimi problemów odpowiadania na zapytania do baz danych/baz wiedzy (dla danej bazy D, teorii logicznej T i zapytania q, czy prawdą jest, że każdy model/skończony model D i T spełnia q?)

Interesować nas będą fragmenty logiki pierwszego rzędu (two-variable fragment, guarded fragment, unary negation fragment, guarded negation fragment, …) oraz logiki deskrypcyjne.

Materiał będzie się częściowo pokrywał z materiałem przedmiotu Problemy Decyzyjne w Logice, ale będzie też sporo innych rzeczy i osoby, które ten przedmiot zaliczyły mogą śmiało zapisać się na seminarium.

Niewykluczone, że spotkamy się z pewnymi problemami otwartymi, które będzie można próbować rozwiązać.

Wykład jest wprowadzeniem do programowania systemów wbudowanych. W ramach wykładu student zapozna się z architekturą popularnych mikrokontrolerów, nauczy się wykorzystywać ich peryferia do sterowania różnorodnymi urządzeniami zewnętrznymi, a także pozna popularne magistrale używane w systemach wbudowanych.

Wstępny kurs programowania, wykorzystujący język Python

Wykład oferuje intensywne wprowadzenie do budowy i zasad działania komputerów z punktu widzenia programisty. Po zaliczeniu przedmiotu studenci powinni rozumieć jaki wpływ ma architektura komputera na wydajność aplikacji, które przyjdzie im implementować w praktyce zawodowej.

Celem wykładu jest omówienie zasad konstrukcji relacyjnych baz danych oraz opanowanie przez słuchaczy umiejętności profesjonalnej obsługi systemu baz danych od strony użytkownika.

C++ to obiektowo zorientowany język programowania. Został on zaprojektowany przez Bjerna Stroustrupa z myślą o programowaniu systemowym oraz do zaawansowanych obliczeń inżynierskich. Świadome używanie C++ do rozwiązywania problemów algorytmicznych daje dużo satysfakcji doświadczonym programistom, zwłaszcza dlatego, że generowany przez kompilator kod jest bardzo efektywny.

Celem kursu jest zapoznanie studentów z bogatą składnią języka C++, różnorodnymi technikami stosowanymi w programowaniu w C++ oraz z obszernymi fragmentami biblioteki STL.