Compare commits

...

12 Commits

Author SHA1 Message Date
Tomáš Kléger
bd56ab16ea git: Merge of initial BI-GIT commit and already existing BI-PA-1 commits 2025-10-07 09:23:05 +02:00
Tomáš Kléger
fd11dcb8d8 exercise-03: Add test data 2025-10-07 09:19:49 +02:00
Tomáš Kléger
08dc716e4d exercise-03: Added assignment detail 2025-10-07 09:19:49 +02:00
Tomáš Kléger
8d4a9c82ac homework-00: Free buffer 2025-10-07 09:19:49 +02:00
Tomáš Kléger
f33577f0cb homework-00: Fix bad pointer comparison 2025-10-07 09:19:49 +02:00
Tomáš Kléger
e48d086814 homework-00: Comment code 2025-10-07 09:19:49 +02:00
Tomáš Kléger
9e3d232a4f homework-00: Use getline and strtol instead to account for special cases 2025-10-07 09:19:49 +02:00
Tomáš Kléger
26efaaab55 homework-00: Added additional test data for special cases 2025-10-07 09:19:49 +02:00
Tomáš Kléger
f04ce072d7 homework-00: Added my solution to the homework 2025-10-07 09:19:49 +02:00
Tomáš Kléger
d8075b8b20 homework-00: Added test data 2025-10-07 09:19:49 +02:00
Tomáš Kléger
b8d09468ac homework-00: Added assignment detail 2025-10-07 09:19:49 +02:00
Petr Pulc
aecbc90dba
Initial commit 2025-10-07 00:57:56 +02:00
70 changed files with 447 additions and 0 deletions

5
README.md Normal file
View File

@ -0,0 +1,5 @@
# PA1 Repository
This repository contains solutions to assignments for the PA1 course.
Each assignment must be located in its own subdirectory. Please follow the instructions at: https://courses.fit.cvut.cz/BI-GIT/pa1.html

87
exercise-03-rgb/README.md Normal file
View File

@ -0,0 +1,87 @@
Úkolem je vytvořit program, který převede barvu z RGB zápisu do hexadecimálního formátu.
Na vstupu dostanete definici barvy v podobě rgb ( x, y, z ). x, y a z jsou celá čísla v intervalu od 0 do 255 včetně a reprezentují barevnou složku. Cílem je převést tento formát na formát začínající znakem # a následně bez mezer pro každou barevnou složku hexadecimální zápis na dvě pozice například pro hodnotu 12 vypíšete dvě hodnoty 0C. Formát vstupu a výstupu je vidět níže na ukázce práce programu.
Pokud je vstup neplatný, program to musí detekovat a zobrazit chybové hlášení. Chybové hlášení zobrazujte na standardní výstup (ne na chybový výstup). Za chybu považujte:
- vstup neobsahuje řetězec rgb,
- chybějící čárka nebo závorka,
- chybějící barevná složka,
- barevná složka není validní číslo,
- barevná složka není v rozmezí 0 až 255.
**Ukázky běhu programu:**
```
Zadejte barvu v RGB formatu:
rgb ( 255, 0, 0 )
#FF0000
```
---
```
Zadejte barvu v RGB formatu:
rgb ( 0 , 255 , 0 )
#00FF00
```
---
```
Zadejte barvu v RGB formatu:
rgb(0,0,255)
#0000FF
```
---
```
Zadejte barvu v RGB formatu:
rgb ( 127, 127, 0 )
#7F7F00
```
---
```
Zadejte barvu v RGB formatu:
hsl ( 0, 127, 0 )
Nespravny vstup.
```
---
```
Zadejte barvu v RGB formatu:
rgb ( 255, 0 )
Nespravny vstup.
```
---
```
Zadejte barvu v RGB formatu:
rgb ( 1000, 127, 0 )
Nespravny vstup.
```
---
```
Zadejte barvu v RGB formatu:
RGB ( 100, 200, 0 )
Nespravny vstup.
```
---
**Poznámky:**
- Ukázkové běhy zachycují očekávané výpisy Vašeho programu (tučné písmo) a vstupy zadané uživatelem (základní písmo). Zvýraznění tučným písmem je použité pouze zde na stránce zadání, aby byl výpis lépe čitelný. Váš program má za úkol zobrazit text bez zvýrazňování (bez HTML markupu).
- Znak odřádkování je i za poslední řádkou výstupu (i za případným chybovým hlášením).
- Pro načítání vstupu se hodí funkce scanf. Pomocí funkce scanf lze i snadno kontrolovat přítomnost čárek, závorek a řetězce rgb.
- Nepokoušejte se načíst řetězec rgb do paměti a pak jej kontrolovat. Práce s řetězci je v C komplikovaná a náchylná k chybám. V této úloze to navíc není potřeba, kontrolu zvládne funkce scanf.
- Na výstupu zobrazte hexadecimální číslo s velkými písmeny. Použijte odpovídající formát pro funkci printf.
- Při programování si dejte pozor na přesnou podobu výpisů. Výstup Vašeho programu kontroluje stroj, který požaduje přesnou shodu výstupů Vašeho programu s výstupy referenčními. Za chybu je považováno, pokud se výpis liší. I chybějící nebo přebývající mezera/odřádkování je považováno za chybu. Abyste tyto problémy rychle vyloučili, použijte přiložený archiv se sadou vstupních a očekávaných výstupních dat. Podívejte se na videotutoriál (**Courses -> Video tutoriály**), jak testovací data použít a jak testování zautomatizovat.

View File

@ -0,0 +1 @@
rgb ( 255, 0, 0 )

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
#FF0000

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
#FF0000

View File

@ -0,0 +1 @@
rgb ( 0 , 255 , 0 )

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
#00FF00

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
#00FF00

View File

@ -0,0 +1 @@
rgb(0,0,255)

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
#0000FF

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
#0000FF

View File

@ -0,0 +1 @@
rgb ( 127, 127, 0 )

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
#7F7F00

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
#7F7F00

View File

@ -0,0 +1 @@
hsl ( 0, 127, 0 )

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
Nespravny vstup.

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
Nespravny vstup.

View File

@ -0,0 +1 @@
rgb ( 255, 0 )

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
Nespravny vstup.

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
Nespravny vstup.

View File

@ -0,0 +1 @@
rgb ( 1000, 127, 0 )

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
Nespravny vstup.

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
Nespravny vstup.

View File

@ -0,0 +1 @@
RGB ( 100, 200, 0 )

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
Nespravny vstup.

View File

@ -0,0 +1,2 @@
Zadejte barvu v RGB formatu:
Nespravny vstup.

View File

@ -0,0 +1,162 @@
Úkolem je vytvořit program, který bude zobrazovat vybrané citáty.
Vstupem programu je jedno celé číslo. Toto číslo je z rozsahu 0 až 8 a určuje citát, který má být zobrazen.
Výstupem programu je citát odpovídající zadanému číslu na vstupu. Citáty odpovídající jednotlivým číslům jsou uvedené v ukázkových bězích programu níže. Pozor, za textem citátu je odřádkování (`\n`).
Pokud je vstup neplatný, program to musí detekovat a zobrazit chybové hlášení. Chybové hlášení zobrazujte na standardní výstup (ne na chybový výstup). Za chybu považujte:
- ze vstupu nelze přečíst celé číslo,
- číslo přečtené ze vstupu je mimo interval 0 až 8.
Povšimněte si, že program zobrazuje různá chybová hlášení. První chybové hlášení se uplatní, pokud program nemůže ze vstupu přečíst platné celé číslo. Druhé chybové hlášení se pak použije, pokud je načtené číslo mimo rozsah (viz ukázka).
Při programování si dejte pozor na přesnou podobu výpisů. Výstup Vašeho programu kontroluje stroj, který požaduje přesnou shodu výstupů Vašeho programu s výstupy referenčními. Za chybu je považováno, pokud se výpis liší. I chybějící nebo přebývající mezera/odřádkování je považováno za chybu. Abyste tyto problémy rychle vyloučili, použijte přiložený archiv se sadou vstupních a očekávaných výstupních dat. Podívejte se na videotutoriál (courses -> výuková videa), jak testovací data použít a jak testování zautomatizovat.
Váš program bude spouštěn v omezeném testovacím prostředí. Je omezen dobou běhu (limit je vidět v logu referenčního řešení) a dále je omezena i velikost dostupné paměti (ale tato úloha by ani s jedním omezením neměla mít problém). Testovací prostředí dále zakazuje používat některé "nebezpečné funkce" -- funkce pro spouštění programu, pro práci se sítí, ... Pokud jsou tyto funkce použité, program se nespustí. Možná ve svém programu používáte volání:
```c
int main ( int argc, char * argv [] )
{
// ...
system ( "pause" ); /* aby se nezavrelo okno programu */
return 0;
}
```
Toto nebude v testovacím prostředí fungovat - je zakázáno spouštění jiného programu. (I pokud by se program spustil, byl by odmítnut. Nebyl by totiž nikdo, kdo by pauzu "odmáčkl", program by čekal věčně a překročil by tak maximální dobu běhu.) Pokud tedy chcete zachovat pauzu pro testování na Vašem počítači a zároveň chcete mít jistotu, že program poběží správně, použijte následující trik:
```c
int main ( int argc, char * argv [] )
{
// ...
#ifndef __PROGTEST__
system ( "pause" ); /* toto progtest "nevidi" */
#endif /* __PROGTEST__ */
return 0;
}
```
**Ukázka práce programu:**
---
```
ml' nob:
0
Qapla'
noH QapmeH wo' Qaw'lu'chugh yay chavbe'lu' 'ej wo' choqmeH may' DoHlu'chugh lujbe'lu'.
```
---
```
ml' nob:
1
Qapla'
bortaS bIr jablu'DI' reH QaQqu' nay'.
```
---
```
ml' nob:
2
Qapla'
Qu' buSHa'chugh SuvwI', batlhHa' vangchugh, qoj matlhHa'chugh, pagh ghaH SuvwI''e'.
```
---
```
ml' nob:
3
Qapla'
bISeH'eghlaH'be'chugh latlh Dara'laH'be'.
```
---
```
ml' nob:
4
Qapla'
qaStaHvIS wa' ram loS SaD Hugh SIjlaH qetbogh loD.
```
---
```
ml' nob:
5
Qapla'
Suvlu'taHvIS yapbe' HoS neH.
```
---
```
ml' nob:
6
Qapla'
Ha'DIbaH DaSop 'e' DaHechbe'chugh yIHoHQo'.
```
---
```
ml' nob:
007
Qapla'
Heghlu'meH QaQ jajvam.
```
---
```
ml' nob:
8
Qapla'
leghlaHchu'be'chugh mIn lo'laHbe' taj jej.
```
---
```
ml' nob:
29
Qih mi' 29
```
---
```
ml' nob:
-5
Qih mi' -5
```
---
```
ml' nob:
abc
Neh mi'
```
Poznámky:
- Ukázkové běhy zachycují očekávané výpisy Vašeho programu (tučné písmo) a vstupy zadané uživatelem (základní písmo). Zvýraznění tučným písmem je použité pouze zde na stránce zadání, aby byl výpis lépe čitelný. Váš program má za úkol pouze zobrazit text bez zvýrazňování (bez HTML markupu).
- Znak odřádkování (\n) je i za poslední řádkou výstupu (i za případným chybovým hlášením).
- Výzvy programu a citáty jsou úmyslně zvoleny tak, aby bylo obtížné je ručně opisovat. Úloha se Vás snaží mj. naučit efektivní práci s počítačem, tedy např. s funkcemi copy & paste (které bohužel někteří studenti neznají nebo neumějí použít). Vyzkoušejte si a naučte se copy & paste jak pod Windows tak pod UNIXem (Linuxem), u závěrečného testu se to bude hodit!
- Ruční kontrola shody Vašeho a referenčního výstupu je nudná, člověk při porovnávání často přehlédne drobný rozdíl. Obzvláště to platí u textu v úloze, který pro většinu lidí není srozumitelný. Toto je opět záměr. Využijte volna na začátku semestru a naučte se v této jednoduché úloze efektivně testovat Vaše programy. Podívejte se na zmíněný videotutoriál (courses -> výuková videa) a využijte pro porovnání Váš počítač. V dalších úlohách tím ušetříte mnoho času.
- Vstup typu 1.23 případně 1abcd není správný. Jeho ošetření je ale pracnější. Program proto můžete realizovat v jednodušší podobě, která takový vstup akceptuje jako číslo 1. Takový program bude hodnocen nominálním počtem bodů (100 %). Pro zájemce je k dispozici bonusový test, který zkouší zadávat právě tento typ vstupů. Pokud správně ošetříte i tento typ chyb, bude váš program hodnocen body navíc. Ukázka práce programu pro tento typ vstupu:
```
ml' nob:
1.23
bIjatlh 'e' yImev
```

65
homework-00-warmup/main.c Normal file
View File

@ -0,0 +1,65 @@
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
const char * PROMPT = "ml' nob:";
const char * INPUT_OKAY = "Qapla'";
const char * OUT_OF_RANGE = "Qih mi'";
const char * NOT_A_NUMBER = "Neh mi'";
const char * INVALID_NUMBER = "bIjatlh 'e' yImev";
const char * QUOTES[9] = {
"noH QapmeH wo' Qaw'lu'chugh yay chavbe'lu' 'ej wo' choqmeH may' DoHlu'chugh lujbe'lu'.",
"bortaS bIr jablu'DI' reH QaQqu' nay'.",
"Qu' buSHa'chugh SuvwI', batlhHa' vangchugh, qoj matlhHa'chugh, pagh ghaH SuvwI''e'.",
"bISeH'eghlaH'be'chugh latlh Dara'laH'be'.",
"qaStaHvIS wa' ram loS SaD Hugh SIjlaH qetbogh loD.",
"Suvlu'taHvIS yapbe' HoS neH.",
"Ha'DIbaH DaSop 'e' DaHechbe'chugh yIHoHQo'.",
"Heghlu'meH QaQ jajvam.",
"leghlaHchu'be'chugh mIn lo'laHbe' taj jej."
};
int main() {
char *buf = NULL;
size_t len = 0;
char* end;
printf("%s\n", PROMPT);
// Use getline for dynamic allocation
ssize_t chars_read = getline(&buf, &len, stdin);
errno = 0;
long input = strtol(buf, &end, 10);
// Check whether a range error occured or
// No characters were read by getline
// or check that strtol didnt move a single char
if(errno == ERANGE || chars_read == -1 || end == buf) {
printf("%s\n", NOT_A_NUMBER);
return EXIT_FAILURE;
}
// getline always adds the \n to the result string
// If the ending char by strtol is not that newline
// It means the string is not a whole number
// (e.g. 12abc, 1.23)
if(*end != '\n') {
printf("%s\n", INVALID_NUMBER);
return EXIT_FAILURE;
}
if(input < 0 || input > 8) {
printf("%s %ld\n", OUT_OF_RANGE, input);
return EXIT_FAILURE;
}
printf("%s\n", INPUT_OKAY);
printf("%s\n", QUOTES[input]);
free(buf);
return EXIT_SUCCESS;
}

View File

@ -0,0 +1 @@
0

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
noH QapmeH wo' Qaw'lu'chugh yay chavbe'lu' 'ej wo' choqmeH may' DoHlu'chugh lujbe'lu'.

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
noH QapmeH wo' Qaw'lu'chugh yay chavbe'lu' 'ej wo' choqmeH may' DoHlu'chugh lujbe'lu'.

View File

@ -0,0 +1 @@
1

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
bortaS bIr jablu'DI' reH QaQqu' nay'.

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
bortaS bIr jablu'DI' reH QaQqu' nay'.

View File

@ -0,0 +1 @@
2

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
Qu' buSHa'chugh SuvwI', batlhHa' vangchugh, qoj matlhHa'chugh, pagh ghaH SuvwI''e'.

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
Qu' buSHa'chugh SuvwI', batlhHa' vangchugh, qoj matlhHa'chugh, pagh ghaH SuvwI''e'.

View File

@ -0,0 +1 @@
3

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
bISeH'eghlaH'be'chugh latlh Dara'laH'be'.

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
bISeH'eghlaH'be'chugh latlh Dara'laH'be'.

View File

@ -0,0 +1 @@
4

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
qaStaHvIS wa' ram loS SaD Hugh SIjlaH qetbogh loD.

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
qaStaHvIS wa' ram loS SaD Hugh SIjlaH qetbogh loD.

View File

@ -0,0 +1 @@
5

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
Suvlu'taHvIS yapbe' HoS neH.

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
Suvlu'taHvIS yapbe' HoS neH.

View File

@ -0,0 +1 @@
6

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
Ha'DIbaH DaSop 'e' DaHechbe'chugh yIHoHQo'.

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
Ha'DIbaH DaSop 'e' DaHechbe'chugh yIHoHQo'.

View File

@ -0,0 +1 @@
007

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
Heghlu'meH QaQ jajvam.

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
Heghlu'meH QaQ jajvam.

View File

@ -0,0 +1 @@
8

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
leghlaHchu'be'chugh mIn lo'laHbe' taj jej.

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
leghlaHchu'be'chugh mIn lo'laHbe' taj jej.

View File

@ -0,0 +1 @@
29

View File

@ -0,0 +1,2 @@
ml' nob:
Qih mi' 29

View File

@ -0,0 +1,2 @@
ml' nob:
Qih mi' 29

View File

@ -0,0 +1 @@
-5

View File

@ -0,0 +1,2 @@
ml' nob:
Qih mi' -5

View File

@ -0,0 +1,2 @@
ml' nob:
Qih mi' -5

View File

@ -0,0 +1 @@
abc

View File

@ -0,0 +1,2 @@
ml' nob:
Neh mi'

View File

@ -0,0 +1,2 @@
ml' nob:
Neh mi'

View File

@ -0,0 +1 @@
1.123

View File

@ -0,0 +1,2 @@
ml' nob:
bIjatlh 'e' yImev

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,2 @@
ml' nob:
bIjatlh 'e' yImev

View File

@ -0,0 +1 @@
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002

View File

@ -0,0 +1,3 @@
ml' nob:
Qapla'
Qu' buSHa'chugh SuvwI', batlhHa' vangchugh, qoj matlhHa'chugh, pagh ghaH SuvwI''e'.