Operační systémy. Cvičení 3: Programování v C pod Unixem



Podobné dokumenty
Operační systémy. Cvičení 4: Programování v C pod Unixem

Koncepce (větších) programů. Základy programování 2 Tomáš Kühr

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

Programovací jazyk C++ Hodina 1

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

Úvod do programování. Lekce 1

Základy programování (IZP)

Základy programování (IZP)

PROGRAMOVÁNÍ V C++ CVIČENÍ

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Algoritmizace a programování

Proměnná. Datový typ. IAJCE Cvičení č. 3. Pojmenované místo v paměti sloužící pro uložení hodnoty.

2 Datové typy v jazyce C

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Správné vytvoření a otevření textového souboru pro čtení a zápis představuje

Příkazy preprocesoru - Před překladem kódu překladačem mu předpřipraví kód preprocesor - Preprocesor vypouští nadbytečné (prázdné) mezery a řádky -

Základy programování (IZP)

Programování v C++ 1, 1. cvičení

Základy programování (IZP)

Základy programování (IZP)

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Opakování programování

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

IUJCE 07/08 Přednáška č. 1

Základy programování (IZP)

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Racionální čísla, operátory, výrazy, knihovní funkce

Paměť počítače. alg2 1

Základy jazyka C. Základy programování 1 Tomáš Kühr

Jazyk C Program v jazyku C má následující strukturu: konstanty nebo proměnné musí Jednoduché datové typy: Strukturované datové typy Výrazy operátory

Algoritmy I. Cvičení č. 2, 3 ALGI 2018/19

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

Zápis programu v jazyce C#

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Racionální čísla, operátory, výrazy, knihovní funkce

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Lekce 6 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Formátové specifikace formátovací řetězce

Pole a Funkce. Úvod do programování 1 Tomáš Kühr

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Proměnná a její uložení v paměti

ZPRO v "C" Ing. Vít Hanousek. verze 0.3

Programování v jazyce C pro chemiky (C2160) 6. Funkce, struktury

Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele

- jak udělat konstantu long int: L long velka = 78L;

6. lekce Úvod do jazyka C knihovny datové typy, definice proměnných základní struktura programu a jeho editace Miroslav Jílek

Základy algoritmizace a programování

Základy programování (IZP)

Základy programování (IZP)

Programování v C++, 2. cvičení

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Operátory. Základy programování 1 Martin Kauer (Tomáš Kühr)

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Základy programování (IZP)

Řešení sady 1. Úvod do programování 1 Tomáš Kühr

Základní datové typy, proměnné - deklarujeme předem - C je case sensitive rozlišuje malá a velká písmena v názvech proměnných a funkcí

Základy programování v C

Programování v jazyce C pro chemiky (C2160) 10. Grafická knihovna g2

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

Algoritmizace a programování

Algoritmizace a programování

Programování v jazyce C pro chemiky (C2160) 12. Specifické problémy při vývoji vědeckého softwaru

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Jazyk C++, některá rozšíření oproti C

Preprocesor. Karel Richta a kol. katedra počítačů FEL ČVUT v Praze. Karel Richta, Martin Hořeňovský, Aleš Hrabalík, 2016

C2110 Operační systém UNIX a základy programování

Programování v jazyce C pro chemiky (C2160) 4. Textové řetězce, zápis dat do souboru

Část I. Část 1 Základy programování v C. Přehled témat. Základy programování v C. Jazyk C

Funkce, intuitivní chápání složitosti

Základy programování (IZP)

C2110 Operační systém UNIX a základy programování

Úvod do programovacích jazyků (Java)

Programovací jazyk C(++) C++ area->vm_mm->locked_vm -= len >> PAGE_SHIFT;

Funkce pokročilé možnosti. Úvod do programování 2 Tomáš Kühr

Operátory. Základy programování 1 Tomáš Kühr

Úvod do programování. Lekce 3

IUJCE Přednáška č. 11. další prvky globální proměnné, řízení viditelnosti proměnných, funkcí

Odvozené a strukturované typy dat

Algoritmizace a programování

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Př. další použití pointerů

Algoritmy I. Cvičení č.1 ALGI 2015/16

ZÁPOČTOVÝ TEST. Zpracoval Vilém Závodný, #include "stdafx.h" #include "stdio.h"

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Algoritmizace a programování

Algoritmizace a programování

Programovanie v jazyku C - ti to zratam...

Algoritmizace a programování

LabView jako programovací jazyk II

Transkript:

Operační systémy Cvičení 3: Programování v C pod Unixem 1

Obsah cvičení Editace zdrojového kódu Překlad zdrojového kódu Základní datové typy, struktura, ukazatel, pole Načtení vstupních dat Poznámka: uvedené příklady jsou dostupné na www nebo na počítačích v K327 v adresáři: ~trdlicka/os/c 2

Editace zdrojového kódu Pomocí libovolného textového editoru. Některé textové editory v Unixu: vi vim joe emacs, xemacs dtpad http://www.fi.muni.cz/usr/brandejs/unix_old/slajdy/vi/node 2.html http://www.kit.vslib.cz/~satrapa/docs/vim/ http://www.phil.muni.cz/lvt/navody/joe.html http://www.karlin.mff.cuni.cz/asc/network/prirucky/obcasni k/ob02/section3_3.html man dtpad Kromě editoru dtpad, ostatní editory fungují, jak ve znakovém, tak grafickém prostředí. 3

Úkol Přihlaste se na počítač v K327. Ve svém domovském adresáři vytvořte podadresář osy. Vyzkoušejte si jednotlivé editory. Vyberte si jeden z nich a pomocí něho vytvořte soubor $HOME/osy/hello.c. #include <stdio.h> int main() { printf( \nhello World!\n\n ); return(0); } 4

Překlad zdrojového kódu Překladač jazyka C gcc [-přepínače] zdrojový_soubor Překladač jazyka C++ g++ [-přepínače] zdrojový_soubor Překladač g++ lze použít i pro překlad programu v jazyce C, navíc toleruje některé další syntaktické konstrukce (např. vhodné při přenosu programu z MS Windows na Unix). Dokumentace k překladači info gcc nebo man gcc 5

Překlad zdrojového kódu (2) Překlad zdrojového kódu probíhá ve 4 fázích: preprocesor (cpp) zpracovává zdrojový program odstraní komentáře interpretuje speciální direktivy začínající znakem # (např. #define, #include,...) překladač (ccom) přeloží předzpracovaný zdrojový soubor do asembleru asembler (as) vygeneruje sestavitelný kód sestavovací program (ld) sestaví sestavitelný kód s knihovnami a vytvoří spustitelný soubor 6

Překlad zdrojového kódu (3) 7

Překlad zdrojového kódu (4) Užitečné volby překladače -o soubor -E -S -c výstup z gcc/g++ se uloží do daného souboru místo do a.out spustí se pouze preprocesor vytvoří se pouze soubor s asemblerem vytvoří se pouze sestavitelný kód (prog.o) -g -On do spustitelného programu se uloží informace pro ladící program spustitelný program bude optimalizován pro úroveň n 8

Překlad zdrojového kódu (5) -Dmacro -Dmacro hodnota -lknihovna definujeme dané macro a můžeme mu přiřadit danou hodnotu zdrojový program se spojí s danou knihovnou -Ladresář -Iadresář knihovny se budou hledat navíc i v tomto adresáři vkládané (hlavičkové) soubory se budou hledat navíc i v tomto adresáři 9

Úkol Vygenerujte asembler z programu hello.c a uložte ho do hello.s. Přeložte váš program hello.c a spustitelný program uložte do souboru hello. Spusťte váš přeložený program hello. 10

Základní datové typy Typ Deklarace Inicializace Deklarace+inicializace znak char letter letter= a char letter= a celé číslo int num num=-23 int num=-23 nezáporné celé číslo unsigned int num num=23 unsigned int num=23 číslo v pohyblivé řadové čárce float sum sum=2.35e-3 float sum=2.35e-3 číslo v pohyblivé řadové čárce double bigsum bigsum=-71.25 double bigsum=-71.25 Kolik místa zabírá datový typ v paměti zjistíme pomocí funkce sizeof() 11

Formátovaný výstup knihovna: #include <stdio.h> funkce: printf( format, arg1, arg2, ); format: %[příznaky][šířka][.přesnost][modifikátor]konverze konverze: %c %d %i %u %f %s jeden znak celé číslo celé číslo bez znaménka číslo v pohyblivé řadové čárce řetězec 12

Příklad: variable.c #include <stdio.h> int main() { char letter='a'; /* znak */ int a=-5, b=7; /* cela cisla */ unsigned int c=5; /* nezaporne cele cislo */ float sum=23.5e-2; /* cislo v pohyblive radove carce */ double bigsum=-7.5e2; /* cislo v pohyblive radove carce */ char name[20]="smith"; /* retezec */ 13

Příklad: variable.c (2) printf("\nukazky formatovaneho vystupu\n"); printf("\nznak: letter=%c", letter); printf("\ncele cisla: a=%d b=%d", a, b); printf("\nnezaporna cela cisla: c=%u", c); printf("\ncisla v pohyblive radove carce: sum=%f sum=%5.2f", sum, sum); printf("\ncisla v pohyblive radove carce: bigsum=%f bigsum=%5.2f\n", bigsum, bigsum); printf("\nretezec: name=%s", name); printf("\n\n"); return(0); } 14

Úkol Přeložte a spusťte příklad variable.c. Napište program, který vypíše informaci o tom, kolik bytů v paměti na daném počítači zabírají datové typy: char int unsigned int float double 15

Základní binární operátory = + - * / % && přiřazení sčítání odčítání násobení dělení modulo (zbytek po celočíselném dělení logický součin logický součet 16

Datový typ struktura Může obsahovat prvky různých typů, které jsou adresovány klíčem. Deklarace struktury struct name { type1 element1; type2 element2; } variable; Inicializace variable.element1=value Příklad struct member { char name[10]; int phone; } member1, member2; member1.name=smith; member1.phone=23452145; 17

Datový typ ukazatel 18

Příklad: pointer.c #include <stdio.h> int main() { int a=-5, b=7; /* cela cisla */ int *pa, *pb; /* ukazatele na int */ pa=&a; pb=&b; /* pa=adresa cisla a, pb=adresa cisla b */ printf("\na=%-3d b=%-3d pa=%-12u pb=%-12u\n", a, b, pa, pb); b=*pa; /* cislo z adresy ulozene v pa se zkopiruje do b */ printf("\na=%-3d b=%-3d pa=%-12u pb=%-12u\n", a, b, pa, pb); a=pa; /* adresa ulozena v pa se zkopiruje do a */ printf("\na=%u b=%d pa=%u pb=%u\n", a, b, pa, pb); *pa=200; /* 200 se zapise na adresu ulozenou v pa */ printf("\na=%u b=%d pa=%u pb=%u\n", a, b, pa, pb); return (0); } 19

Pole Obsahuje prvky stejného typu, které se adresují indexem (od 0 do size-1). Deklarace: type name [size]; Inicializace: name[index]=value; Příklad: int a[100]; a[0]=12; a[99]=7+2; int b [ ] = {3, 4, 5}; a[1] =b[0] + b[1]; 20

Načtení vstupních dat Interaktivně pomocí funkce scanf() #include <stdio.h> scanf( format, arg1, arg2,...); Z příkazové řádky int main(int argc, char *argv[ ]) { argc argv[0] argv[argc-1] } 21

Příklad: girth.c Program interaktivně načte poloměr kruhu a na standardní výstup vypíše obvod kruhu. #include <stdio.h> /* preprocesor sem vlozi obsah souboru stdio.h */ #define PI 3.14256 /* definice symbolicke konstanty */ int main() { float r; /* deklarace cisla typu float */ printf("\nzadej polomer:"); /* vypis na st. vystup */ scanf("%f", &r); /* cteni ze st. vstupu */ printf("\nobvod kruhu je %f\n\n", 2*PI*r); return (0); /* navratovy kod programu */ } 22

Příklad: sqrt.c Program vypočte druhou odmocninu z čísla zadaného na příkazové řádce. #include <stdio.h> #include <math.h> int main(int argc, char *argv[]) { int a; double o; a=atoi( argv[1] ); /* prevod retezce na int */ o=sqrt(a); /* funkce pro vypocet odmocniny */ printf("\nodmocnina z %d je %10.2f\n\n", a, o); return (0); } 23

Úkol Napište program, který přečte ze vstupní řádky 5 celých čísel a vypíše jejich součet. 24