covid19 Course info for the state of emergency


This is an informational web page for the Computer Systems course (NSWI170), which is being taught at the Faculty of Mathematics and Physics, Charles University. The schedule for the course can be accessed in SIS.

You can find here:


The course is currently led by Jakub Yaghob and Lubomír Bulej. Please direct inqueries of a specific topic (or home assignment) to the teacher who presented the topic.

Latest Updates

13.3.2020 COVID-19 info.
10.2.2020 A new web page was created.


Lab credit and the course test are completely independent.

Lab Credit

Each lab will hold one assignment (possibly broken down into several steps). The assignments are incremental, which means that your code and knowledge obtained when solving one assignment may be required for the subsequent assignment(s). The individual assignemnts lead to the final home assignment. To receive a credit for the labs, you need to complete all the individual assignments from all labs and sucessfuly present the final home assignment to your lab teacher.

Under regular circumstances, the individual lab assignments are solved during the labs. If one fails to complete the assignment during the labs or misses the class altogether, the assignment should be finished at home. In any case, the assignments has to be uploaded to Study Group Roster (a SIS module) before midnight of the day when the next lab starts.

The final home assignment has to be presented in person to your labs teacher. Individual labs will have individual terms for presentations (announced by the lab teacher before the summer examination period). Primary criterium for the credit is that you solution is fully functional. Secondary criterum is the code quality. Solutions which severely violate good coding practices will not be accepted.

Course Test

The course exam will take the form of a short written test followed by a programming task for Arduino in a lab. The terms will be announced before the summer exam period in Student Information System as well.


If you have any questions or suggestions related to the lectures, please contact the teachers.

The presented schedule is only informational. Teaching time for a matter may vary slightly depending on the student's grasp.

18.2. Introduction, C language PPTX File Icon CS-00-INTRO.pptx
25.2. C language (cont.) PPTX File Icon CS-01-C.pptx PDF File Icon LB-01-C.pdf
3.3. Computer and CPU architecture PPTX File Icon CS-02-CPU.pptx PDF File Icon LB-02-CPU.pdf
10.3. CPU - instruction set, registers
17.3. CPU - instruction set (cont.), stack
24.3. Memory - addressing, data, alignment, allocation PPTX File Icon CS-03-MEM.pptx
31.3. Memory - memory hierarchy, cache
7.4. Programming languages - compilation, libraries, linking, memory organization, function calls, parameter passing PPTX File Icon CS-04-LANG.pptx
14.4. Programming languages - variables, heap, runtime, JIT, VM/container, source code portability
21.4. Operating systems - role, architecture, CPU modes PPTX File Icon CS-05-OS.pptx
28.4. Operating systems - interrupt, exception, DMA
5.5. Operating systems - process, thread, scheduling, file system
12.5. Operating systems - virtual memory
19.5. Parallel programming, synchronization PPTX File Icon CS-06-SYNC.pptx


If you have any questions or suggestions related to the labs, please contact your corresponding teacher.

Library for your Arduino labs: ZIP File Icon

Mo 14:00
We 17:20
We 12:20
Mo 15:40
C language detailed info PPTX File Icon lab01-C.pptx PPTX File Icon lab-cs-01-C.pptx detailed info
Arduino IDE, setup/loop PPTX File Icon lab02-Blinq.pptx , result visualization PPTX File Icon lab-cs-02-Arduino.pptx
LEDs & Buttons PPTX File Icon lab03-Buttons.pptx , visualization of Task 6 PPTX File Icon lab-cs-03-Buttons.pptx
7-seg display PPTX File Icon lab04-7seg.pptx , visualization of results PPTX File Icon lab-cs-04-7seg.pptx
7-seg display - multiplex PPTX File Icon lab05-7segmux.pptx , multiplexing, Task 5 PPTX File Icon lab-cs-05-7segmux.pptx
7-seg display - running message PPTX File Icon lab06-7segalpha.pptx , starter pack, result PPTX File Icon lab-cs-06-7segalpha.pptx

Home Assignment

The objective is to create a random number generator which will simulate dice throws in Advanced Dungeons & Dragons game. The game uses various types of polyhedral dices with different numbers of sides (d4, d6, d8, ...). Furthermore, a generated random number represents a sum of multiple throws. E.g., 3d6 means that player should throw 3 times using a dice with 6 sides (cube) and take the sum of these three throws (which is a number between 3 and 18).

The dice is controlled by 3 buttons and display the results on the 4-digit LED display. It operates in two modes. In normal mode it displays last generated number on the LED display. In configuration mode it displays the type (and repetition) of dice being simulated. First digit (1-9) displays number of throws, second digit displays symbol 'd', and the remaining two digits display the type of dice (d4, d6, d8, d10, d12, d20, and d100 should be supported; d100 is denoted as '00' on the LED display).

It might be a good idea to show some 'activity' on the display whilst the random number is being generated (whilst the button 1) is pressed. You may show currently computed random numbers (if they change fast enought so the user cannot possibly stop at the right number), or you may create some sort of animation on LED display or using the other onboard LEDs.

Remember that the probability distribution is not uniform, but if follows Binomial distribution. Your simulator must use counter/time measurement of how long the button 1 has been pressed to get a random number (which follows uniform distribution). You may use additional pseudo-random generators (even Arduino built-in functions) to assist you with this task, but the initial randomness has to be tied somehow to the button event duration. Any reasonable implementation of binomial distribution will be accepted, but strictly uniform random generators will not (i.e., you need to implement binomial distribution using uniform random generator).


Course information for the state of emergency

General information

The state of emergency does not interrupt the course. We will use any possibility to successfully complete the course.

All available recordings from ZOOM lectures and labs are available on the YouTube playlist.


School of computer science uses the ZOOM communication platform. Each lecture will be scheduled and provided as a separate ZOOM meeting. Below is a table with corresponding ZOOM meeting IDs. Meeting ID is used for joining the lecture.

Lectures will be recorded for anyone not able to attend an online lecture. The recorded video will be placed on a streaming platform and a link will be published here.


DateMeeting IDMeeting linkRecorded lecture
17.3.2020 493 883 387 Join the lecture Recorded lecture
18.3.2020 416 993 369 Join the lab Recorded lab
24.3.2020 736 889 454 Join the lecture Recorded lecture
31.3.2020 736 889 454 Join the lecture Recorded lecture
1.4.2020 499 288 702 Join the lab Recorded lab
7.4.2020 736 889 454 Join the lecture Recorded lecture
14.4.2020 736 889 454 Join the lecture Recorded lecture
15.4.2020 499 288 702 Join the lab Recorded lab
21.4.2020 736 889 454 Join the lecture Recorded lecture
28.4.2020 736 889 454 Join the lecture Recorded lecture
29.4.2020 499 288 702 Join the lab Recorded lab
5.5.2020 736 889 454 Join the lecture Recorded lecture
12.5.2020 736 889 454 Join the lecture Recorded lecture
13.5.2020 499 288 702 Join the lab Recorded lab
19.5.2020 736 889 454 Join the lecture Recorded lecture


Labs will continue with the same timetable as planned originally, including deadlines for uploading your solution to Study Group Roster.

Lab teachers were instructed to prepare more informational materials for you. Moreover, they will contact you with specific instructions. In case of any doubt, do not hesitate to contact your lab teacher.


DateTimeMeeting ID
9.6.2020 14:00 929 4313 6617
17.6.2020 14:00 948 4953 9658
22.6.2020 14:00 919 2209 8427
26.6.2020 10:00 929 1057 8534
29.6.2020 14:00 946 4073 0365