OSNOVA: a) Úvod a klasifikace b) Funkce main() s argumenty c) Souborový vstup a výstup d) Programování WAV Jiří Šebesta Ústav radioelektroniky, FEKT VUT.

Slides:



Advertisements
Podobné prezentace
Standardní knihovní funkce pro práci s textovými řetězci
Advertisements

Programování v C jazyku - SEMINÁŘ
Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Přednáška 11 Jiří Šebesta
Programování 2 Cvičení 5.
Příkazy Přednáška č. 4. Příkazy (statements)  Příkaz – dílčí krok programu (část kódu – zpravidla jeden řádek)  Program – posloupnost příkazů  Příkazy.
VISUAL BASIC Práce se soubory.
Algoritmy I. Cvičení č. 10.
Programování v Pascalu Přednáška 9 RNDr. Hana Havelková.
PHP Práce se soubory v PHP - 13
C# pro začátečníky Mgr. Jaromír Osčádal
Programování v C++ Cvičení.
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
( vstupy a výstupy v Matlabu na konzolu [ do Command Windows]
MATLAB® ( Funkce v Matlabu ).
Struktury, qsort, mergesort BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií.
Práce se soubory. * soubory patří k základním datovým prvkům v počítači * převážná většina programovacích jazyků má podporu určité formy práce se soubory.
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro práci se soubory 13 Verze
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B8 Autor Ing. Jiří Kalousek Období vytvoření listopad.
Vyučovací hodina 1 vyučovací hodina: Opakování z minulé hodiny 5 min Nová látka 20 min Procvičení nové látky 15 min Shrnutí 5 min 2 vyučovací hodiny: Opakování.
OSNOVA: a) Řetězce v C b) Funkce stdio.h pro řetězce c) Funkce string.h pro řetězce d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
A1PRG - Programování – Seminář Ing. Michal Operátory (2. část) 4 Verze
Seminář C cvičení STL, Trolltech Ing. Jan Mikulka.
PHP – Základy programování
Práce se soubory Soubory se používají pro ukládání dat pro pozdější použití. Dalším a lepším způsobem jak ukládat data je použití databáze. Soubory se.
A1PRG - Programování – Seminář Ing. Michal Ukazatele a pole 10 Verze
Cvičení.
3. Příkazy  Příkazy dělíme na jednoduché a strukturované.  Jednoduché příkazy - žádnou jejich dílčí částí neni příkaz - přiřazovací, vstupu a výstupu,
OSNOVA: a)Programování se soubory b)Záloha databáze v souboru c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování.
OSNOVA: a) Úvod do OOPb) Třídy bez metod c) Třídy s metodamid) Konstruktory a destruktory e) Metody constf) Knihovní třídy g) Třídy ve tříděh) Přetížení.
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Příklady v jazyku C – část 4
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro vstup a výstup 12 Verze
OSNOVA: a) Přetížení členských funkcí b) Dědičnost tříd Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
OSNOVA: a) Příkazy pro cykly II. b) Příkazy pro řízení přenosu c) Příkazy – příklad d) Řetězce v C e) Funkce “stdio.h“ pro řetězce f) Funkce “string.h“
OSNOVA: a) Příkazy pro větvení b) Příkazy pro cykly c) Příkazy pro řízení přenosu d) Příklad Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Gymnázium prof. Jana Patočky Jindřišská Praha 1 „Praha & EU: Investujeme do vaší.
OSNOVA: a)Funkce – úvod b) Hlavičky funkcí c) Rekurze funkcí d)Knihovny funkcí e)Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače.
Databázové modelování
Algoritmizace a programování Textové soubory - 13 Mgr. Josef Nožička IKT Algoritmizace a programování
1 Počítače a programování 1 13.přednáška. 2 Obsah přednášky Vstupy a výstupy – 1.část.
Problémy s češtinou České znaky se standardně nepovažují za alfanumerické znaky (\w) Vadí to při třídění vyhodnocování regulárních výrazů Je třeba použít.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
OSNOVA: a) Ukazatel b) Pole a ukazatel c) Pole ukazatelů d) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro.
Ukazatele, řetězce Přednáška č. 3. Ukazatele  Ukazatel (pointer) – typ o velikosti 4 bajty (v 32bit. systémech) pro uložení adresy objektu na který ukazuje.
Soubory BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Počítače a programování 2 pro obor EST KPC2E TUTORIÁL 1
Pokročilé datové typy (struktury, unie, dynamické proměnné)
OSNOVA: a)3D grafické výstupy – doplnění b)Práce se soubory Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST.
Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření.
Algoritmizace a programování Soubory. Oč jde? Vytvoření externího souboru Vytvoření externího souboru Tento soubor může být: Tento soubor může být: Textový.
Batové dávky Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Vojtěch Mrózek. Dostupné z Metodického portálu ISSN: ,
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
Počítače a programování 2
Vícerozměrná pole (1) Jazyk C povoluje, aby pole mělo více rozměrů (dimenzí) než jeden Z vícerozměrných polí bývá nejčastěji použí-váno pole dvourozměrné.
Úvod do Pythonu – IO operace se soubory.
Výukový materiál zpracován v rámci projektu
Vzorové řešení zápočtového testu
Programovací jazyk C Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jitka Vlčková. Dostupné z Metodického portálu ISSN.
Programování v jazyce C++
Funkce výstupu (2) Funkce printf: deklarována v: stdio.h
TNPW1 JavaScript Ing. Jiří Štěpánek.
Oblast platnosti identifikátoru (1)
C# přehled vlastností.
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

OSNOVA: a) Úvod a klasifikace b) Funkce main() s argumenty c) Souborový vstup a výstup d) Programování WAV Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 2 pro obor EST BPC2E PŘEDNÁŠKA 1

Web předmětu, kontakty odkaz v eLearningu (kurz BPC2E 14/15L) vyučující –Doc. Ing. Jiří Šebesta, Ph.D., (garant předmětu, přednášky, –Ing. Tobiáš Malach, konzultační hodiny na Portálu VUT Úvod a klasifikace (1/6)

Přednášky Organizace výuky, preprocesor, funkce main s argumenty. Souborový vstup a výstup, textové a binární soubory, práce s WAV Zpracování obrázků ve formátu BMP, programování seriového portu Úvod do objektového programování, C++, třídy a metody, zapouzdření Objektové programování, přetížení členských funkcí, polymorfismus, dědičnost, specifikace přístupu Vývojové prostředí MS Visual Studio a OOP C++ projekty Grafika ve Windows. Úvod a klasifikace (2/6)

Úvod do Matlabu, reprezentace matic a vektorů, 2D grafy Příkazy a standardní funkce Matlabu, 3D grafy STÁTNÍ SVÁTEK (Velikonoční pondělí). Práce se soubory v Matlabu (samustudium) Vlastní funkce v Matlabu, model komunikačního systému Uživatelské rozhraní v Matlabu Rozbor zápočtového testu Zápočtový test. Úvod a klasifikace (3/6)

Funkce main s argumenty, souborový vstup a výstup, generování BMP souboru (3 b.) Jednoduchá definice objektu s atributy a datovými položkami a metodami (3 b.) Objektové programování, vlastní třída, specifikace přístupu, polymorfismus, dědičnost (3 b.) Test 1 (5 b). Jednoduchý C++ projekt v MS Visual Studio (3 b.) Projekt s grafikou ve Windows (3 b.). Počítačová cvičení Úvod a klasifikace (4/6)

Reprezentace matic a vektorů v Matlabu, zobrazení závislostí ve 2D grafech (3 b.) Funkce Matlabu, zobrazení závislostí ve 3D grafech (3 b.) Práce se soubory v Matlabu, zpracování binárního souboru, 3D parametrické grafy (3 b.) Test 2 (5 b.). Modelování signálů a systémů v Matlabu (3 b.) Uživatelské rozhraní v Matlabu (3 b.) STÁTNÍ SVÁTEK STÁTNÍ SVÁTEK Max. jedna neomluvená neúčast !!! Úvod a klasifikace (5/6)

Klasifikace a bodové hodnocení Předmět je ukončen klasifikovaným zápočtem. Udělení zápočtu je přitom dáno následujícími podmínkami: –získání nejméně 50 bodů –odevzdání a obhájení zápočtového projektu v jazyce ANSI C Maximální bodové hodnocení jednotlivých forem výuky (celkem max. 100 bodů): –max. 30 bodů za hodnocení počítačových cvičení během semestru (10 hodnocených cvičení po 3 bodech) –max. 10 bodů za průběžné testy během semestru (5 + 5 bodů) –max. 20 bodů za zápočtový test na konci semestru –max. 40 bodů za zápočtový projekt v Matlabu Bodování vašich aktivit mají na starosti vaši cvičící, započet vedoucí projektu. Úvod a klasifikace (6/6)

Funkce main() s argumenty (1/6) Definicí argumentů (parametrů) u funkce main() můžeme definovat chování programu při spuštění. Program s parametry se spouští z příkazové řádky názvem programu (projektu) následovaný parametry oddělené mezerou, např. Muj_program 10 input.txt output.txt -x Hlavička funkce main() s argumenty int main(int argc, char *argv[ ]) - proměnné argc a argv jsou lokální proměnné funkce main(), (mohou mít i libovolné jiné názvy, typ musí být zachován) - argc udává počet zadaných parametrů při spuštění programu - argv je pole řetězců s jednotlivými zadanými argumenty

Funkce main() s argumenty (2/6) Po spuštění programu je do proměnné argc uložena hodnota odpovídající počtu řetězců uvedených na příkazovém řádku v okamžiku spuštění programu. Tento počet zahrnuje i vlastní název programu. Proměnná argv je dvourozměrné pole typu char (jednorozměrné pole řetězců). Do tohoto pole řetězců jsou uloženy všechny řetězce uvedené na příkazovém řádku, do argv[0] je tedy uložen název programu. Počet řetězců v poli odpovídá hodnotě uložen v proměnné argc. Délka jednotlivých řádků pole argv odpovídá délce vložených řetězců. Pokud je potřeba jako vstup programu číselná hodnota, musí se v těle funkce main() provést konverze na požadovaný číselný formát.

Funkce main() s argumenty (3/6) Příklad programu, který vypíše počet argumentů a všechny řetězce argumentů int main(int argc, char *argv[]) { int n; printf("Number of arguments: %d\n\n", argc); printf("List of arguments:\n"); for(n = 0; n < argc; n++) printf("argv[%d] = %s\n", n, argv[n]); return 0; } Příklad: BPC2E_Ex90.c

Funkce main() s argumenty (4/6) Příklad programu, který vypíše všechny násobky vstupního argumentu do 1000 včetně int main(int argc, char *argv[]) { int n, m; n = atoi(argv[1]); m = n; while(n <= 1000) { printf("%3d\n", n); n += m; } return 0; } Příklad: BPC2E_Ex91.c

Funkce main() s argumenty (5/6) Příklad kódovacího programu pro textové soubory, který prohodí nižší a vyšší čtveřici bytu znaku – šifra je symetrická int main(int argc, char *argv[]) { char c, a; FILE *ptrfi;// spec. type pointer to input file FILE *ptrfo;// spec. type pointer to output file ptrfi = fopen(argv[1],"r"); // file for reading ptrfo = fopen(argv[2],"w"); // a new file for writing if(ptrfi!=NULL && ptrfo!=NULL) // if both files are open { c = fgetc(ptrfi);

Funkce main() s argumenty (6/6) while(c != EOF) { a = c; c = c & 0x0F; c = c << 4; c = c & 0xF0; a = a & 0xF0; a = a >> 4; a = a & 0x0F; c = a | c; fputc(c, ptrfo); c = fgetc(ptrfi); } fclose(ptrfi); fclose(ptrfo); } return 0; } Příklad: BPC2E_Ex92.c

Souborový vstup a výstup (1/13) ANSI-C používá tzv. bufferovaný přístup k souborům pomocí proudu (stream) nebo-li ukazatele na strukturu typu FILE (definice v knihovně stdio.h ) V ANSI-C není rozdíl mezi souborem a zařízením (portem) – přistupuje se stejně Binární vs. textový soubor Binární soubor - překladač neprovádí žádnou úpravu čtených a zapisovaných dat - uspořádání dat v souboru je nezávislé a specifické pro dané využití

Souborový vstup a výstup (2/13) Textový soubor - uspořádán po řádcích, každý zakončen znakem \n - v některých OS se před \n vkládá \r (úpravu zajišťují funkce ze standardní knihovny stdio.h. - lze zobrazit libovolným editorem - přenositelnost binárních souborů mezi různými systémy může být omezena rozdílnou délkou základních typů v těchto různých systémech – nutno vždy vhodně ošetřit

Souborový vstup a výstup (3/13) Otevření souboru: FILE *fopen(char *file_name, char *mode) - mode reprezentuje řetězec pro režim otevření souboru (viz BPC1E), pro binární soubory je doplněn do řetězce znak b, např.: " rb " = otevření binárního souboru pro čtení " wb " = otevření prázdného binárního souboru pro zápis "ab" = otevření binárního souboru pro zápis na konec stávajícího souboru

Souborový vstup a výstup (4/13) Rozšířené režimy: "r+" = otevření existujícího souboru pro čtení a zápis, pokud soubor neexistuje vrací se NULL "w+" = otevření nového prázdného souboru pro zápis i čtení, pokud soubor existuje, je původní obsah smazán "a+" = otevření existujícího souboru pro zápis na konec a čtení kdekoli

Souborový vstup a výstup (5/13) Souhrnné vlastnosti režimů otevření souborů Charakteristika/požadavek Režim otevření souboru rr+ww+aa+ soubor musí existovat existující soubor je smazán existující soubor bude rozšiřován neexistující soubor bude vytvořen data lze číst odkudkoli data lze zapisovat kamkoli data lze zapisovat jen na konec

Souborový vstup a výstup (6/13) Uzavření souboru: int *fclose(FILE *fptr) - v případě správného uzavření se vrací 0 - v případě neúspěšného uzavření se vrací EOF - podle ANSI-C se při správném ukončení programu otevřené soubory automaticky uzavřou, v případě havárie programu však není jednoznačně definováno, co se s otevřeným souborem stane

Souborový vstup a výstup (7/13) Formátované vstupy/výstupy: int fprintf(FILE *fptr, const char *form, …) = zápis řetězce form do souboru fptr, pokud je obsahem řetězce hodnota číselné proměnné, zapisuje se jeho vyjádření řetězcem int fscanf(FILE *fptr, const char *form, …) = čtení řetězce ze souboru fptr a uložení do řetězce form

Souborový vstup a výstup (8/13) Neformátované vstupy/výstupy: int fputc(int c, FILE *fptr ) = zápis znaku c do souboru fptr int fgetc(FILE *fptr) = čtení znaku ze souboru fptr jako návratová hodnota Možno použít i makra (význam stejný, jen rychlejší, ale může být větší program): int putc(int c, FILE *fptr) int getc(FILE *fptr)

Souborový vstup a výstup (9/13) Příklad: Kopírování binárního souboru in.bin do out.bin po bytech int main() { FILE *frptr, *fwptr; int ch; frptr = fopen("in.bin", "rb"); fwptr = fopen("out.bin", "wb"); while((ch = fgetc(frptr)) != EOF) fputc(ch, fwptr); fclose(frptr); fclose(fwptr); return 0; } Příklad: BPC2E_Ex93.c

Souborový vstup a výstup (10/13) Čtení/zápis celého řádku najednou (jen pro textové soubory): char *fgets(char *str, int max, FILE *fptr) = přečte celý řádek v textovém souboru fptr a uloží jej jako řetězec do str a to do maximálního počtu znaku max, pokud je řádek v souboru delší než max, zbytek řádku může být přečten následujícím čtením, vrací ukazatel na řetězec str, v případě dočtení posledního řádku souboru vrací NULL, do řetězce jsou ukládány i znaky \n. int fputs(char *str, FILE *fptr) = zápis řádku z řetězce str do souboru fptr

Souborový vstup a výstup (11/13) Příklad: Kopírování textového souboru in.txt do out.txt po řádcích #define LEN_OF_ROW 10 int main() { FILE *frptr, *fwptr; char txt[LEN_OF_ROW]; frptr = fopen("in.txt", "r"); fwptr = fopen("out.txt", "w"); while(fgets(txt, LEN_OF_ROW, frptr) != NULL) fputs(txt, fwptr); fclose(frptr); fclose(fwptr); return 0; } Příklad: BPC2E_Ex94.c

Souborový vstup a výstup (12/13) Čtení/zápis celého bloku najednou (pro binární soubory): size_t fread(void *ptr, size_t size, size_t cnt, FILE *fptr) = přečte celý blok položek o velikosti size v souboru fptr o celkovém počtu cnt a uloží jej jako pole elementů do pole v paměti referencovaného ukazatelem ptr, vrací se počet skutečně načtených položek

Souborový vstup a výstup (13/13) size_t fwrite(const void *ptr, size_t size, size_t cnt, FILE *fptr) = uloží celý blok položek definovaných jako pole elementů v paměti referencovaného ukazatelem ptr o velikosti size do souboru fptr o celkovém počtu cnt, vrací se počet skutečně úspěšně uložených položek

Programování WAV (1/8) Soubor typu WAV – bezkompresní audio Struktura souboru WAV (podmnožina RIFF):

Programování WAV (2/8) Příklad: Vygenerujte soubor typu WAV, který bude obsahovat jeden tón dané frekvence, amplitudy, doby trvání a jména cílového WAV souboru (argumenty při spouštění programu) #define TPI int fwrite_int(int val, char len, FILE *p) { char byte; while (len-- > 0) { byte = val & 0xFF; fwrite(&byte, 1, 1, p); val >>= 8; } return 0; } Pomocná funkce pro zápis různě dlouhých dat hlavičky do WAV souboru jako little endian

Programování WAV (3/8) int main(int argc, char *argv[]) { double ph, deltaph, tdur, ampl, freq; int numsa, srate; unsigned char sig; FILE *ptrf; if(argc == 5) { srate = 8000; // fixed sample rate 8 kHz freq = atof(argv[1]); // tone freq - 1. argument in Hz ampl = atof(argv[2]); // tone amplitude - 2. argument tdur = atof(argv[3]); // tone duration - 3. argument in s

Programování WAV (4/8) numsa = tdur*srate; // overall number of samples ph = 0; // initial phase 0 rad deltaph = TPI * freq /srate; // delta phase ptrf = fopen(argv[4], "wb"); fwrite("RIFF", 4, 1, ptrf); // chunk_id RIFF fwrite_int(36 + numsa, 4, ptrf); // chunk_size fwrite("WAVE", 4, 1, ptrf); // spec. RIFF form for WAV fwrite("fmt ", 4, 1, ptrf); // subchunk1id – format fwrite_int(16, 4, ptrf); // subchunk1size 16 for PCM fwrite_int(1, 2, ptrf); // audio_format, 1 = PCM fwrite_int(1, 2, ptrf); // channels, 1 = mono

Programování WAV (5/8) fwrite_int(srate, 4, ptrf); // sample rate fwrite_int(srate * 1 * 8 /8, 4, ptrf); // byte rate fwrite_int(1 * 8/8, 2, ptrf); // block align fwrite_int(8, 2, ptrf); // bits per sample, 8 bits fwrite("data", 4, 1, ptrf); // subchunk2id - data fwrite_int(numsa * 1 * 8 / 8, 4, ptrf); // subchunk2 size

Programování WAV (6/8) while(numsa-- > 0) { sig = 128*(ampl*sin(ph)+1); fwrite(&sig, 1, 1, ptrf); ph += deltaph; } fclose(ptrf); } else printf("Wrong number of arguments!!!!\n"); return 0; } Příklad: BPC2E_Ex95.c

Programování WAV (7/8) Příklad – domácí úloha: Vygenerujte soubor typu WAV, který bude měnit tón od zadané frekvence do zadané frekvence, s danou amplitudou, dobou trvání a jménem cílového WAV souboru (argumenty při spouštění programu). Příklad: BPC2E_Ex96.c – bude zveřejněn 16.2.

Programování WAV (8/8) 1209 Hz1336 Hz1477 Hz1633 Hz 697 Hz123A 770 Hz456B 852 Hz789C 941 Hz*0#D Příklad – domácí úloha: Sestavte program, který vygeneruje soubor typu WAV, který bude obsahovat DTMF signální volbu podle zadaného kódu. Kód a cílový soubor jsou argumenty při spouštění programu. V programu proveďte rovněž korekci možných znaků DTMF kód, nepovolené znaky vylučte. Jeden dvojtón trvá 50 ms následuje mezera 50 ms. Příklad: BPC2E_Ex97.c – bude zveřejněn 16.2.

Téma následující přednášky – Programování BMP – Práce se sériovým portem DĚKUJI ZA POZORNOST