Warning
This page is located in archive.

Lab 01 - Úvodní cvičení

Organizace předmětu

Jan Faigl 2024/02/14 16:03

Cíle cvičení

  1. Přihlášení do operačního prostřední a nastavení vývojového prostředí.
  2. Vytvoření jednoduchého skriptu (posloupnosti příkazů) pro práci se soubory.
  3. Formátování zdrojového programu.
  4. Kompilace programu a spouštění programu.
  5. Základní datové typy, standardní vstup a výstup.
V PRGA nepředepisujeme jaké pracovní vývojové prostředí používat. Obecně doporučujeme začínajícím programátorům použít prostředí 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.

Práce s příkazovou řádkou

  • Procvičte si práci v příkazové řádce a vypracujete úkoly.
    • Ve svém domovském adresáři si založte složku prga a složku lab01.
    • Ve složce lab01 vytvořte soubor se jménem program.c.
    • Celou složku lab01 přesuňte z domovského adresáře do složky prga.
    • Přejmenujte program.c na main.c.

Formátování zdrojového programu

Klíčové nastavení editoru je pro formátování zdrojového kódu. V předmětu PRGA 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 Programovací prostředí.

Výstup pak může například vypadat následovně.

Nastavení formátování ''clang-format'' v ''gedit''

Kompilace programu a spouštění programu

// example program in C
#include <stdio.h>
 
int main()
{
    printf("Hello PRGA!\n");
    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

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.

kde můžeme též využít příložena Makefile a vytvořit si zip soubour voláním make zip.

Úkoly

  • Do souboru main.c napište zdrojový kód programu, který vypíše na standardní výstup “Hello PRG!”.
  • Program zkompilujte a spusťte
    • Jaká je návratová hodnota programu?
    • Jak lze programy spouštět za sebou?
  • Zdrojový kód zazipujte do archivu hw0.zip, například příkazem: zip hw0.zip main.c
  • V archivu nevytvářejte žádné složky.
  • Vytvořený archiv nahrajte do systému BRUTE, viz nebodovaný úkol HW0.
  • 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.

Základní datové typy, standardní vstup a výstup

  • základní datové typy - char, int, float, double
  • standardní vstup - scanf getchar

int scanf(const char *format [, address, ...]);
int getchar(void);

int printf(const char *format [, arg, ...]);
int fprintf(FILE *stream, const char *format [, arg, ...]);

  • řídicí struktury - if

if( podmínka ){
    příkaz1
} else {
    příkaz2
}

  • řídicí struktury - for

for( inicializace ; podmínka ; změna){
    příkaz
}

Úkoly

Základní datové typy

  • Zjistěte jakou velikost mají základní datové typy char, int, float a double?

printf("Size of int: %lu\n", sizeof(int));

Standardní výstup

  • Vyzkoušejte různé formy výpisu znaků a čísel formátovaným výstupem printf, fprintf.

char c = 'a';
int i = 1000,j;
float x,y = 3.1415;
 
printf("%c\n",c);
printf("%i\n",c);
 
printf("%d\n",i);
printf("%+5d\n",i);
printf("%x\n",i);
 
printf("%f\n",y);
printf("%10.3f\n",y);
printf("\t%-g\n",y);

  • co bude výsledkem výpisu následujících příkazů?

printf("%6d,%4d",86,1040);
printf("\n");
printf("%12.5e",3.14159265);
printf("\r");
printf("%.4f\n",85.167);

  • Vyzkoušejte výpis na standardní výstup (stdout) a standardní chybový výstup (stderr) pomocí funkce fprintf

fprintf(stdout,"Standardní výstup: %d",i);
fprintf(stderr,"Error výstup: %d",i);

  • Vyzkoušejte přesměrování výstupů programu do souboru

./main >output.log 2>error.log

Standardní vstup

  • Vyzkoušejte načtení vstupu:

1-20.3-4.0e3

  • Příkazem:

int r = scanf("%d%d%f%f",&i,&j,&x,&y)

  • Zamyslete se nad chováním příkazu scanf na základě formátovacího řetězce.
  • Vypište návratovou hodnotu r.
  • Vyzkoušejte načtení vstupů ” 9/ 16” a “ 9 / 16” pomocí formátovacího řetězce “%d/%d”
  • Vyzkoušejte přesměrování vstupu programu.

./main <input.log

Jednoduchý automat na mince

  • Napište program, který pro zadanou částku (v celých korunách) vypíše nejmenší počet mincí (20, 10, 5, 2, 1), ze kterých se dá daná částka složit.
  • Rozšiřte program tak, aby vypisoval pouze použité mince.
  • Nechte program vypsat vloženou částku i v jiných měnách.
courses/bab36prga/labs/lab01/start.txt · Last modified: 2024/02/21 11:46 by valoudav