Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

2 - Vstup a výstup programu

Záznam cvičení: Google Drive (nutná autorizace v doméně fel.cvut.cz)

Doprovodné materiály pro druhé cvičení: promenne.pdf operatory.pdf

Procvičovaná témata

Úkoly

Kompilace a spouštění programu

  • Vytvořte program “Ahoj PRPA”, který uložte do souboru program.c v domovském adresáři, např. ~/prpa/tut02.

#include <stdio.h>
 
int main(void)
{
   printf("Ahoj PRPA!\n");
 
   return 0;
}

  • Program zkompilujte a spusťte.
  • Zobrazte návratovou hodnotu
    • Windows (cmd): příkazem echo %errorlevel%
    • Linux, MSYS (bash): příkazem echo $?.
  • Vyzkoušejte změnit návratovou hodnotu a opět vypsat.
  • Program rozšiřte o násobný výpis textové zprávy

#include <stdio.h>
 
int main(void)
{
   printf("Ahoj PRPA!\n");
   printf("Ahoj PRPA!\n");
   printf("Ahoj PRPA!\n");
   printf("Ahoj PRPA!\n");
 
   return 0;
}

  • Vyzkoušejte funkci řídicích znaků: \n, \t, \r
  • Vyzkoušejte, jak kompilátor reaguje na chyby v kódu:
    • Chybějící středník
    • Neukončený řetězec
    • Neukončený blok
  • Vyzkoušejte si automatické formátování kódu

Standardní formátovaný výstup

  • Vyzkoušejte různé formy výpisu znaků a čísel:

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 přesměrování výstupů programu do souboru

./main >output.log 2

Operátory

  • Operátor přiřazení - jak zvětšit hodnotu celočíselné proměnné o 10?

// pomoci pomocne promenne
int tmp, a = 10;
tmp = a + 10;
a = tmp;
// vyrazem - manipulace s hodnotou promenne 
a = a + 10
// zkracenym vyrazem
a += 10

Více o výrazech na 4. přednášce
  • Unární operátor inkrementace - zvětší hodnotu proměnné o 1

int a = 1;
printf("a: %d, a++: %d", a, a++);

  • Celočíselné a neceločíselné dělení, operátor přetypování

int a = 10;
int b = 3;
printf("a/b = %f\n", a/b); // jak zařídit, aby výsledek byl desetinné číslo?

Standardní formátovaný vstup

  • vyzkoušejte načtení vstupu:

1-20.3-4.0e3

  • příkazem

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


Přesměrování vstupu pro Linux a cmd line ve Windows

./main <input.log

Přesměrování vstupu pro PowerShell ve Windows

Get-Content data.txt | .\main.exe > out.txt

Příklady k procvičení

Řešení příkladů včetně krátkého videa s komentářem najdete na této stránce.

1. Výpočet přepony pravoúhlého trojúhelníka

Napište program, který ze standardního vstupu načte dvě celá čísla (datový typ integer) reprezentující odvěsny pravoúhlého trojúhelníka a vypočítá délku přepony. Délku přepony vypište ve tvaru desetinného čísla s přesností na dvě desetinná místa. V programu vyuzijte funkci sqrt, která je definovaná v hlavičkovém souboru math.h. Pri kompilaci v OS Linux pak použijte volbu -lm pro přilinkováni správné knihovny - libm.

Pokud používáte MinGW kompilátor, kompilace s volbou -lm není nutná. Zatímco v OS Linux programy využívají knihovnu libc, která neobsahuje matematické funkce a je třeba využít knihovnu libm, v prostředí OS Windows zkompilované programy využívají jako standardní knihovnu MSVCRT.DLL, která již potřebnou funkcionalitu obsahuje a libm je vlastně jen prázná schránka. Je třeba mít na paměti, že BRUTE využívá služeb OS Linux a programy, které se nekompilují s -lm, matematické funkce nepodporují.

Pokud nechce vypisovat délky odvěsen ručně, před spuštěním programu si vytvořte textový soubor, který přesměrujte na vstup programu. Volání a interakce s programem v prostředí OS Linux potom vypadá následovně:

$ echo "4 3" > data
$ ./01-trojuhelnik < data
Prepona je 5.00

Řešení příkladu zde.

2. Získání celé a desetinné části reálného čísla

Napište program, který načte ze standardního vstupu reálné číslo, vypočítá celou a desetinnou část a vypíše ji na obrazovku s přesností na 4 desetinná místa.

Volání programu v OS Linux vypadá následovně:

$ ./02-cislo 
8.3343
Cela cast: 8
Desetinna cast: 0.3343

Řešení příkladu zde.

3. Zkrácení reálného čísla

Napište program, jehož vstupem bude reálné číslo a počet desetinných míst, na které má být provedeno zkrácení. Zamyslete se nad možností aplikace zaokrouhlovacích pravidel.

Volání programu v OS Linux vypadá následovně:

$ ./03-orez
8.3343
3
Orez na 3 desetinna mista: 8.334

Řešení příkladu zde.

courses/b0b99prpa/labs/lab02.txt · Last modified: 2020/10/07 21:00 by viteks