Programming I - Labs 2018/2019

This page contains materials for the practice lessons of the Programming I (NPRG030) course that is being/has been taught during winter semester 2018/2019 at Charles University in Prague, Czech Republic. The course official web page is/was to be found at Tomáš Holan's webpage. The practice lessons (labs) are/were backed by many, for this group, concretely, by Jakub Gemrot



Tuesday's labs, 14:00, SW2, Jakub Gemrot:


VisuAlgo - visualization of algorithms including AVL trees!

How to pass the labs

  • Max TWO absences
  • Do ALL homeworks I give you
    • Almost no excuses here, it has very good motivation I('ll) share during the first lab
  • Pass a lab exam
    • Two dates: 18. 12. 2018 / 8. 1. 2019
  • Come up with an individual semester project
    • Project idea deadline: 3.12.2018
    • Description deadline: 17.12.2018
      • Use (copy-and-update) the following template
    • Ideas can be get from Martin Mareš's topic examples

Submitting homeworks

Send me an email ( containing a link where I can download your homework / project.

Ideally use DropBox or One Drive or WeTransfer; from time to time I have problems downloading files from GDrive (they are having wild JavaScripting that gets blocked by my filters occasionally).

Always use subject: PRG1 - 2018 - L[lab number] - [homework name]

The subject is crucial! My mailbox is often overflowing and I have to process emails in batches - at these times, I'm searching for your homeworks via subject names.

Lab Tests

Labs History

Lab 10

  • 8.1.2019
  • Dynamic Trees, Binary Search Trees, definitions and implications
  • PRG1 - 2018 - L10 - BST
    • Create a program that will load integer numbers into the binary search tree dynamic structure
    • Pretty print the result binary tree

Lab 09

  • 19.12.2018
  • Recursion
    • Fibonacci numbers, Factorial, Tower of Ha-noi, Quicksort
  • No homework

Lab 08

  • 12.12.2018
  • Dynamic variables, new/dispose, linked lists
  • Homework in the ReCodEx group (Big Numbers / Fakt dlouhá čísla)

Lab 07

  • 4.12.2018
  • Arrays in Pascal, user types, record, passing the data via value and reference (var)
  • Homework in the ReCodEx group (Train and the Bridge / Po mostě má přejet vlak)

Lab 06

  • 27.11.2018
  • We have been talking about functions building chain of functions and reusing them, showing the result of function signature changes and how to work around it
  • Tasks we have been working on, using only functions chr(x) and ord(x)
    1. Is this input a natural number (0 included)?
    2. Does this string contain a natural number (0 included)?
    3. Does this string a whole number?
  • Homework
    • PRG2 - 2018 - L06 - Strings - 4 programs; deliver them as functions
      1. How many digits this whole number stored in a string is containing? Return -1 if the string does not contain a whole number.
      2. What is the sum of digits in this whole number stored in a string? Return -1 if the string does not contain a whole number.
      3. You are given a string that should contain a whole number; return the number without its first digit. Return 0 if the string does not contain a whole number or the number contains only single digit.
      4. You are given a string, return the same string but convert all lower-case characters into their upper-case variants.
        • This exercise has been experimentally assigned to your group in ReCodEx, try to solve this by submitting your solution through ReCodEx!

Lab 05

  • 20.11.2018
  • We've been going through the 22 small programs and then we will be talking about string handling, procedures and functions
  • We touched string functions and procedures in Pascal

Lab 04

  • 23.10.2018
  • So we have presented correct lower-estimate for sorting algorithms based on comparison of two numbers, yep O(N log N) is the best we can hope for
  • But only for a given assumptions, see Counting Sort, for small range of natural numbers, you can have sort with time complexity O(N)! But it's not working in-place, what a pity.
  • Then I've been showing Pascal language, some bits of Lazarus, and we have a homework!
    • PRG1 - 2018 - L04 - Small Programs
  • WARNING: 30.10. - immatriculation, 6.11. - Dean's day, 13.11. - I'm in Canada ;(

Lab 03

  • 16.10.2018
  • We talked about time complexity of algorithms, we touched Big-O notation (Landau Notation)
  • I've failed to show you the correct computation of the lower bound for sorting, which we will fix next week
  • No homeworks folks! Yay! Finish the ones from previous weeks :-)

Lab 02

  • 9.10.2018
  • We did some mind-troubling puzzles again :)
  • Homeworks
    1. PRG1 - 2018 - L02 - Install Pascal
      1. If on Win/Linux - install Free Pascal, compile and run the following code and send me a screenshot
      2. If on Win - install ConTEXT and configure it so you can compile and run the code above from it as well, send me a screenshot (instead of ConTEXT, you can try also PSPad, Notepad++ or Sublime, etc.)
      3. If on Mac - try following these steps, compile and run the code above as well, send me a screenshot
    2. PRG2 - 2018 - L02 - Glasses
    3. PRG2 - 2018 - L02 - River
    • Deadline: 15.10.2018 23:59

Lab 01

  • 2.10.2018
  • Welcome to Programming!
  • Some introductory formal / informal info
  • First batch of homeworks :)
    1. PRG1 - 2018 - L01 - Login
      1. Go to SISAL and create an account for the lab
      2. NEW: test that you can login to some computer in Rotunda using your CAS (SIS) credentials
      3. Create an account in ReCodEx; this can be done IF AND ONLY IF you have entered your email adress into the CAS
      4. Send me an email with you CUNI number and login to ReCodEx
    2. PRG1 - 2018 - L01 - Prisoners
      • Solve the following problem, Prisoners, and ideally (but optionally) prove that your solution is working
    3. PRG1 - 2018 - L01 - Coins
      • Solve the following problem, Wizard & Prisoner - Coins, in a way that the description also serves as a proof that your algorithm is working
    • Deadline: 8.10.2018 23:59
programming_i_2018-19_winter_semester.txt · Last modified: 2019/01/25 16:16 by jakub.gemrot