{{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.