{{indexmenu_n>1}}
====== 1 - Úvodní cvičení ======
* [[courses:b0b36prp:internal:tutorialinstruction:01|pro vyučující]]
===== Cíle cvičení =====
- Seznámení s počítačovou učebnou, [[courses:b0b36prp:tutorials:services|ownCloud]] a [[https://cw.felk.cvut.cz/upload/|BRUTE]].
- Přihlášení do operačního prostřední a nastavení vývojového prostředí.
- Vytvoření jednoduchého skriptu (posloupnosti příkazů) pro práci se soubory.
- Formátování zdrojového programu.
- Kompilace programu a spouštění programu.
==== Materiály ====
* Organizace předmětu: {{courses:b0b36prp:b0b36prp-lec00-slides.pdf|}}; //[[faiglj@fel.cvut.cz|Jan Faigl]] 2025/09/19 16:50//
V PRP nepředepisujeme jaké [[https://cw.fel.cvut.cz/b221/courses/b0b36prp/tutorials/start?animal=b221#pracovni_prostredi|pracovní vývojové prostředí používat]]. Obecně doporučujeme začínajícím programátorům použít prostředí [[courses:b0b36prp:tutorials:devel:vscode|VS Code]], případně nakonfigurovaný editor ''gedit'' nebo ''vim''. Určitě je také možné použít komplexní prostředí jako je např. CLion. Nicméně jeho konfigurace a prozkoumání všech možností, může velmi rychle překročit časovou dotaci předmětu.
===== Úkoly =====
* Nastavte si heslo v počítačové učebně [[https://www.felk.cvut.cz/labpass/|(Nastavení hesla)]] a seznamte se používaným prostředím
===== Práce s příkazovou řádkou =====
* [[courses:b0b36prp:labs:lab01:cmd| Procvičte si práci v příkazové řádce]] a vypracujete úkoly.
* Ve svém domovském adresáři si založte složku ''my_prg'' a složku ''lab01''.
* Ve složce ''lab01'' vytvořte soubor se jménem ''program.c''.
* Celou složku ''lab01'' přesuňte ze domovského adresáře do složky ''prg''.
* Přejmenujte ''program_c'' na ''main.c''.
==== Příprava prostředí pro cvičení z prp ====
* V terminálu se přesuňte do domovského adresáře a ověřte jaký je aktuální pracovní adresář, ++ např. |
% cd
% pwd
++
* Vytvořte příkazem ''mkdir'' adresář prp/lab01, kam si uložíte pracovní soubory z 1. cvičení, ++ např. |
% mkdir prp/lab01
++
* Pokud se to nepodařilo, zjistěte jak se příkaz ''mkdir'' používá, ++ např. |
% man mkdir
++
* Nyní vytvořte adresářovou strukturu prp/lab01, ++ např. |
% mkdir -p prp/lab01
++
* Vytvořte prázdný soubor ''main.c'' v ''prp/lab01'' a vypište obsah adresáře ''ls -l prp/lab01'', ++ např. |
% touch prp/lab01/main.c
++
* Zjistětě to dělá předpínač ''-l'' u příkazu ''ls'', ++ např. |
% man ls
++
* Přepněte pracovní adresář na ''prp/lab01'' a spusťte vývojové prostředí (pokud už neběží), ++ např. |
* cd ~/prp/lab01
* code .
++
==== Úkoly v příkazové řádce ====
* Vygenerujete soubor s náhodnými celými čísly, využijte přesměrování standardního výstupu do souboru, ++ např. kombinací programů seq a shuf|
% seq 1 1 10 > numbers.txt
% shuf numbers.txt > random.txt
++.
* Zajistěte, že jsou v souboru opakující se hodnoty, ++ např. přidáním do souboru|
% shuf numbers.txt >> random.txt
++.
* S využitím přesměrování výstupu hodnoty uspořádejte do nového souboru, ++ např. nástrojem sort |
% sort -n random.txt > sorted.txt
% wc sorted.txt
20 20 42 sorted.txt
++.
* Odstraňte duplicitní hodnoty, ++ např. nástrojem uniq |
% uniq sorted.txt > sorted-u.txt
% wc sorted-u.txt
10 10 21 sorted-u.txt
++.
* Porovnejte původní soubory s čísly, např. soubor ''numbers.txt'' a ''sorted-u.txt'' ++ příkazem diff |
% diff numbers.txt sorted-u.txt > /dev/null
% echo $?
0
++. Vypište návratovou hodnotu posledního volaného příkazu ''echo $?''.
* Podobně porovnejte původní soubor s čísly s randomizovaným pořadím, ++ např. |
% diff numbers.txt sorted-u.txt > /dev/null
% echo $?
1
++.
* Jednotlivé příkazy shrňte ve skriptu, který vygeneruje soubory s náhodnými uspořádanými hodnotami celých čísel. Vytvořte spustitelných skript nastavení práv ''u+x'' příkazem ''chmod'', ++ např. |
% touch script.sh
% ./script.sh
% ls -l script.sh
% chmod u+x script.sh
% ls -l script.sh
% ./script.sh
++
Pracovat s příkazovou řádkou můžete přímo v prostředí VS Code (příkaz ''code''), do kterého je vhodné si lokálně doinstalovat rozšíření pro C/C$++$.
++++ C/C$++$ Rozšíření VS Code |
{{:courses:b0b36prp:labs:lab01:vscode-c_c_.png?1800|}}
{{:courses:b0b36prp:labs:lab01:vscode-extensions.png?1800|}}
K efektivnímu programování patří i pohodlné pracovní prostředí. Každému vyhovuje něco jiného – někdo používá jednoduchý editor, jiný složitější nástroje jako CLion. Nastavit takové programy může být samo o sobě náročné. V tomto kurzu si vystačíme s VS Code. CLion můžete použít také (příkaz ''clion''), ale začátečníkům doporučujeme spíše soustředit se na principy než ztrácet čas složitým nastavováním.
++++
===== Formátování zdrojového programu =====
Klíčové nastavení editoru je pro formátování zdrojového kódu. V předmětu PRP je preferováno formátování nástrojem clang-format a nastavením stylu:
{BasedOnStyle: llvm, IndentWidth: 4, BreakBeforeBraces: Linux}
Formátování zdrojového kódu pak provedete např. následovně:
clang-format -style='{BasedOnStyle: llvm, IndentWidth: 4, BreakBeforeBraces: Linux}' muj_kod.c > formatovany_kod.c
V případě použití vývojového prostředí VS Code lze lokálně nastavit formátování vytvořením souboru ''.clang-format'', viz [[courses:b0b36prp:tutorials:devel:vscode|Programovací prostředí]].
++++ Výstup pak může například vypadat následovně. |
{{:courses:b0b36prp:labs:vscode-clangformat2.png?400|}}
{{:courses:b0b36prp:labs:vscode-clangformat.png?400|}}
{{:courses:b0b36prp:labs:vscode-clang_format10.png?400|}}
++++
/*
++++ Nastavení formátování ''clang-format'' v ''gedit'' |
* Stáhněte si nastavení pro textový editor **gedit**: {{:courses:b0b36prp:labs:setup_gedit.zip|}}.
=== ===
wget https://cw.fel.cvut.cz/wiki/_media/courses/b0b36prp/labs/setup_gedit.zip
==== ====
* Rozbalte jej, prohlédněte obsah a nainstalujte (=spusťte).
=== ===
unzip setup_gedit.zip
cat setup_gedit.sh
gedit setup_gedit.sh
./setup_gedit.sh
==== ====
++++
*/
===== První program =====
==== ====
// example program in C
#include
int main()
{
puts("Hello PRP!");
return 0;
}
==== Překlad programu ====
Překlad na spustitelný soubor provádíme z příkazové řádky příkazem
clang -Wall -pedantic -std=c99 main.c -o main
případně
gcc -Wall -pedantic -std=c99 main.c -o main
==== Spuštění programu ====
Program spouštíme z příkazové řádky příkazem
$ ./main
==== Zjištění typu souboru ====
$ file main
==== Úkoly ====
* Nastavete si formátování použitého editoru nebo vývojového prostředí.
++++ Spuštění programu ve VS Code |
V prostředí VS Code může vypadat interaktivní práce tak, že si stáhneme soubor domácího úkolu v prohlížeči do adresáře ''~/Downloads'' a dále vše řešíme už jen z VS Code s využitím integrovaného terminálu.
{{:courses:b0b36prp:labs:vscode-hw00.png?800|}}
kde můžeme též využít příložena ''Makefile'' a vytvořit si ''zip'' soubor voláním ''make zip''.
{{:courses:b0b36prp:labs:vscode-hw00zip.png?800|}}
++++
==== Úkoly programování HW00 ====
* Do souboru ''main.c'' napište zdrojový kód programu, který vypíše na standardní výstup **"Hello PRP!"**.
* Program zkompilujte a spusťte.
* Zdrojový kód zazipujte do archivu **''main.zip''**, například pomocí příkazu: **"''zip main.zip main.c''"**.
* Vytvořený archiv nahrajte do [[https://cw.felk.cvut.cz/brute|Upload systému]], viz úkol [[courses:b0b36prp:hw:hw00|HW00]].
* Dále je možné využít proměnnou prostředí ''$?'' a vyzkoušet si různé návratové hodnoty programu a řetězení kompilace a spuštění programu, včetně např. podmíněného spuštění programu v závislosti na úspěchu kompilace programu.
{{:courses:b0b36prp:labs:vscode-lab01-return_value.png?800|}}
==== Kvízy ====
Kvízy jsou tu především proto, abyste si vyzkoušeli, co už znáte, a objevili, co si ještě potřebujete doplnit. Nejde o to mít vše hned bez chyby – právě omyly vám pomohou učit se nejvíc. Proto mají kvízy jen malé bodové hodnocení a slouží hlavně jako bezpečný prostor pro trénink a získání jistoty.