# 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

Permalink: http://bit.ly/mff-uk-prg1-labs-2018

# Dates

Tuesday's labs, 14:00, SW2, Jakub Gemrot: jakub.gemrot@gmail.com

# Interesting

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**- Describe what you would like to create in 3-10 sentences and send it to jakub.gemrot@gmail.com

- Description deadline:
**17.12.2018**- Use (copy-and-update) the following template

- Ideas can be get from Martin Mareš's topic examples

**Deliver a semester project**- Delivery deadline: “up-to-you” = to be negotiated :)
- Apart from the implementation you will also have to create user's manual and programmer's manual
- Follow delivery guidelines when submitting your work

# Submitting homeworks

Send me an email (jakub.gemrot@gmail.com) 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

**25.1.2019**, SW2**18.1.2019**, SW2

# 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)
- Is this input a natural number (0 included)?
- Does this string contain a natural number (0 included)?
- Does this string a whole number?

- Homework
**PRG2 - 2018 - L06 - Strings**- 4 programs; deliver them as functions- How many digits this whole number stored in a string is containing? Return -1 if the string does not contain a whole number.
- 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.
- 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.
- 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
- Examples here: stringy.pas

### 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**- Solve the following 22 problems (programs) with a Pascal program
- If you are an expert, try to solve them with the least number of variables possible ;)
- Deadline: next lab… we need to decide when that is going to be

- 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
**PRG1 - 2018 - L02 - Install Pascal**- If on Win/Linux - install Free Pascal, compile and run the following code and send me a screenshot
- 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.)
- If on Mac - try following these steps, compile and run the code above as well, send me a screenshot

**PRG2 - 2018 - L02 - Glasses**- Solve the following problem Wizard & Prisoner - Glasses problem and send me the solution

**PRG2 - 2018 - L02 - River**- Solve the following problem River in the park and send me the solution

- Deadline: 15.10.2018 23:59

### Lab 01

**2.10.2018**- Welcome to Programming!
- Some introductory formal / informal info
- First batch of homeworks :)
**PRG1 - 2018 - L01 - Login**~~Go to SISAL and create an account for the lab~~- NEW: test that you can login to some computer in Rotunda using your CAS (SIS) credentials
- Send me an email with you CUNI number and login to ReCodEx

**PRG1 - 2018 - L01 - Prisoners**- Solve the following problem, Prisoners, and ideally (but optionally) prove that your solution is working

**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