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“

Slides:



Advertisements
Podobné prezentace
Pro začátek něco lehčího
Advertisements

Vstup a výstup Ing. Lumír Návrat  katedra informatiky, A-1018 
Počítače a programování 1 Přednáška 13 Jiří Šebesta.
Funkce Připomeňme si program pro výpočet faktoriálu:
Třetí cvičení Podmíněné příkazy Cykly Break a Continue Switch Return
Algoritmy I. Cvičení č. 10.
Preprocess Úvod do tvorby funkcí Princip preprocesoringu Direktivy preprocesoru Podmíněný překlad Základy tvorby funkcí Zjednodušený popis principu předávaní.
Programování v C++ Cvičení.
Algoritmizace a programování
JavaScript - 5. část Pole Ústav automatizace inženýrských úloh a informatiky FAST VUT v Brně 0U2 - Základy informatiky a výpočetní techniky 2.
Větvení cykly J a v a Začínáme programovat Lucie Žoltá.
Sbírka úloh CNC programování – SURFCAM Vypracoval: Bc. Milan Samec Dis. CZ.1.07/1.1.1O/
PHP PHP – základy syntaxe (část 1) - 03 Mgr. Josef Nožička IKT PHP
Seminář C++ 9. cvičení Šablony Ing. Jan Mikulka. Šablony ► template – vzory, podle kterých může překladač tvořit skupiny podobných tříd nebo funkcí, které.
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
PŘEDNÁŠKA 0. Jiří Šebesta MRAR – Radiolokační a radionavigační systémy
Koncepce moderního zesilovače pro audio aplikace
Algoritmy vyhledávání a řazení
DEKLARACE PROMĚNNÝCH A KONSTANT
Představení VUT v Brně a FEKT
Cvičení.
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í.
PB161 PB161 – Programování v jazyce C++ Objektově Orientované Programování Šablony, Návrhové principy a (anti-)vzory PB161 | Šablony, Návrhové principy.
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í.
Příklady v jazyku C – část 3
A1PRG - Programování – Seminář Ing. Michal Standardní knihovní funkce pro vstup a výstup 12 Verze
PŘEDNÁŠKA 5 Jiří Šebesta MRAR – Radiolokační a radionavigační systémy
ZADÁNÍ Sestavte program, který vypočítá obvod a obsah čtverce o straně a. Zajistěte, aby výpočet byl realizován pouze v případě, kdy strana a bude mít.
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.
OSNOVA: a) Preprocesor b) ANSI-C knihovny c) Příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro obor EST BPC1E.
C – cyklus while Mgr. Lenka Švancarová.
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.
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.
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.
A1PRG - Programování – Seminář Ing. Michal Řízení běhu programu 5 Verze
Typy cyklů Do...Loop For...Next For Each...Next.
Cykly Cykly umožňují provádět určitou část kódu opakovaně až do nastaveného počtu cyklování nebo splnění podmínky. Cykly umožňují provádět určitou část.
PROGRAMOVÁNÍ V PHP PERSONAL HOME PAGES CYKLY V PHP.
POSLOUPNOST úkol 1_41. ZADÁNÍ Sestavte program, který doplní tabulku nepřímé úměrnosti pro hodnoty proměnné x = 1, …, n. Nepřímá úměrnost je zadána uživatelem.
C – jak na procedury Mgr. Lenka Švancarová. C – procedury #include int main() { printf("Ahoj\n"); return(0); } #include void pozdrav(void) { printf("Ahoj\n");
Počítače a programování 1 pro obor EST BPC1E PŘEDNÁŠKA 1
PŘÍKAZ CYKLU S PODMÍNKOU NA ZAČÁTKU
OSNOVA: a) Algoritmy třídění b) Třídění dynamických záznamů Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro obor EST.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B5 Autor Ing. Jiří Kalousek Období vytvoření listopad.
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ PODMÍNĚNÝ PŘÍKAZ – PŘEVOD ČASOVÉHO ÚDAJE Vytvořila: RNDr. Ivanka Dvořáčková Gymnázium K. V. Raise, Hlinsko, Adámkova.
PŘÍKAZ while úkol 1_42.
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.
ZÁKLADNÍ POJMY. ZDROJOVÝ TEXT PROGRAMU Tvoří: klíčová slova komentáře identifikátory.
Počítače a programování 2 pro obor EST KPC2E TUTORIÁL 1
C – cyklus do-while Mgr. Lenka Švancarová.
ROOT
ALGORITMIZACE A ZÁKLADY PROGRAMOVÁNÍ PROCEDURY BEZ PARAMETRŮ – EUKLEIDŮV ALGORITMUS Vytvořila: RNDr. Ivanka Dvořáčková Gymnázium K. V. Raise, Hlinsko,
Úvod do programování2 Vyučující: Mgr. Vítězslav Jersák Web: xjv.webnode.cz.
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.
Počítače a programování 2 pro obor EST BPC2E PŘEDNÁŠKA 8
Počítače a programování 2 pro obor EST BPC2E PŘEDNÁŠKA 11
Algoritmizace a programování Algoritmy 4 – Vývojové diagramy (cykly)
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Algoritmizace a programování Cykly - For. FOR Předem známe počet opakování Předem známe počet opakování Syntaxe: Syntaxe: for proměnná in range(rozpětí):
Algoritmizace a programování Cykly – While 1. Test Příští hodina test na větvení Konstrukce IF..ELSE případně IF..ELIF..ELSE.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně AUTOR: Ing. Adéla Tomalová NÁZEV: Podpora výuky v technických oborech TEMA: Objektově orientované.
Počítače a programování 2
Algoritmizace a programování
Výukový materiál zpracován v rámci projektu
Výukový materiál zpracován v rámci projektu
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Kinematika hmotný bod: těleso s nekonečně malými rozměry, ale nenulovou hmotností, tj. žádné otáčení, žádná deformace atd. = bodová hmotnost popis pohybu.
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

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“ pro řetězce h) Řetězce – příklady Jiří Šebesta Ústav radioelektroniky, FEKT VUT v Brně Počítače a programování 1 pro obor EST KPC1E TUTORIÁL 3

while(test) statement; Cyklus while float temp[31]={-1.1,-0.3,-7.6,-2.7,-1.2,-2.6,-3.3, … … 2.4 };//day temperatures in January unsigned int day = 1; while(temp[day–1]<=0) // pass the loop while temp<=0 day++; printf("%d. January temperature ovecomes 0, it was %3.1f deg. C!\n", day, temp[day-1]); return 0; Princip totožný s for (inicializace a inkrementace mimo hlavičku) Příklad: KPC1E_Ex23.c Příkazy pro cykly II. (1/4)

while Příkazy pro cykly II. (2/4)

do statement; while(test); int code;// number for password do {printf("Insert access code:\n"); scanf("%d", &code); //number from stdin to variable code } while(code != 12345); // test of proper password printf("\n\nAccess allowed"); printf("\n\nInsert +ENTER for exit"); do//exit after insertion c=getchar(); while (c!=' '); return 0; Cyklus do - while Příklad: KPC1E_Ex24.c Příkazy pro cykly II. (3/4)

do - while Příkazy pro cykly II. (4/4)

Příkazy pro přenos řízení (1/3) Použití: – těla cyklů ( for, do, while ) – tělo přepínače ( switch ). Přerušení vykonávaného iteračního cyklu: – break : vystoupení z celého cyklu – continue : pokračování další iterací Příkazy continue a break for/do/while/switch-case {…; if(…) break; if(…) continue; …; }

char c; int code, test, n=3; // n is the number of trials do { printf("Insert access code:\n"); scanf("%d", &code); //number from stdin to variable code n--; //decrementation of the number of trials test=(code == 12345); // test of proper password ”12345” if((test==0)&&(n==0))break; // if no proper // code and 3 trials done - acces denied } while(!test); // in test is info about access, // 0 means denied, 1 means allowed break – př. test vstupního hesla s omezeným počtem testů Příklad: KPC1E_Ex25.c Příkazy pro přenos řízení (2/3)

int num; //input number int test, n, m=0; printf("Input number:"); scanf("%d", &num); //number from stdin to variable num for(n=2; n<=100; n++) //loop for n from 2 to 100 { test = (num%n==0); //test if n is divider if(!test) continue; //if not, next n printf("\n%d", n); //if yes, print n m++; //number of dividers – incr. } printf("Number of dividers: %d\n", m); continue – př. hledání dělitelů Příklad: KPC1E_Ex26.c Příkazy pro přenos řízení (3/3)

Sestavte program pro simulaci dopravní situace. Ze simulované světelné křižovatky (z jednoho příjezdu) odjede každou minutu rcars automobilů, v proměnné wcars je počáteční stav čekajících aut, v poli ncars je uveden počet aut, které každou minutu přijedou ke křižovatce a v proměnné mcars je maximální počet aut čekajících před křižovatkou, aniž by došlo ke kolapsu (auta by zůstali stát v předcházející křižovatce). V proměnných hours a mins je aktuální čas počátku simulace. Simulátor nechť zobrazuje graficky i číselně stav aut stojících před křižovatkou a současně určuje, zda nedošlo ke kolapsu a nebo došlo kolapsu a kdy. Příkazy – příklad (1/4) int main() { int rcars = 10; int wcars = 5; int ncars[30] = {7, 8, 8, 9, … 5, 6}; int mcars = 95; int hours = 7; //start is at 7:50 int mins = 50; int inc = 30;

Příkazy – příklad (2/4) int i, j; for(i=0; i<inc; i++) { wcars += ncars[i] - rcars; if(wcars<0) wcars = 0; mins++; if(mins==60) { mins = 0; hours++; if(hours==24) hours = 0; }

Příkazy – příklad (3/4) if(mins>=10) printf("%d:%d ", hours, mins); else printf("%d:0%d ", hours, mins); for(j=0; j<wcars; j++) printf("%c", 219); printf(" %d\n", wcars); if(wcars>mcars) { printf("Traffic breakdown arises at %d:%d.\n", hours, mins); break; } if(wcars<=mcars) printf("Traffic breakdown will not arise.\n"); return 0; }

Příkazy – příklad (4/4) Výstup dopravní simulace: Příklad: KPC1E_Ex27.c

Řetězce v C (1/9) Řetězec: pole znaků (v paměti: 1 byte/znak – kód ASCII) zakončený terminátorem null (ASCII hodnota 0) ASCII kódy znaků v rozsahu 0 až 127 celosvětově standardizo- vané ASCII kódy znaků v rozashu 128 až 255 ( unsigned ) nebo záporné ( signed ) závislé na aktuálně nastavené znakové sadě (národní znaky apod. UTF-8, Windows-1250, ISO-8859-x) – tzv. Extended ASCII Znaky pro číslice mají ASCII kódy 48 až 57, tj. hexadecimálně 0x30 až 0x39, postup pro vygenerování znaku: char ch; int num=5; ch = num|0x30; //or ch = num+0x30; printf("%d %c", ch, ch);

Řetězce v C (2/9) písmena velké anglické abecedy jsou uspořádaně od kódu 65, hexadecimálně 0x41 písmena malé anglické abecedy jsou uspořádaně od kódu 97, hexadecimálně 0x61 (rozdíl vůči stejným velkým písmenům je 32 nebo-li hexadecimálně 0x20)

int main(void) { unsigned char c; printf("Actual character set: \n\n"); for(c=32; c =32; c++) printf("ASCII code %d = character %c\n", c, c); scanf("%c", &c); return 0; } Př. Tisk všech tisknutelných znaků včetně Extended ASCII Řetězce v C (3/9) Extended znaky jsou dány nastavením OS (Win), std. UTF-8

Výpis na obrazovku: Příklad: KPC1E_Ex28.c Řetězce v C (4/9)

Způsoby deklarace: char strA[5] = {’A’,’B’,’C’,’D’,’\0’}; – 4 znaky + znak null char strB[5] = ”ABCD”; – 4 znaky, znak null vložen automaticky - na stejném principu se definuje řetězec v parametru printf() – počet prvků nemusí být uveden, kompilátor sám dopočítá char *strC = ”ABCD”; - ukazatel na první znak, první znak ukazuje na následující, atd. až do null (nedoporučeno – možné kolize v paměti) Řetězce v C (5/9)

char S[7], T[7], c; char R[7]="ABCDEF"; int n; for(n=0; n first, R[n] != ’\0’ S[5-n] = R[n]; //or S[5-n] = *(R+n); S[6]='\0'; // S[n] = '\0' printf("%s\n", S); for(n=0; n small T[n] = R[n]+32; //or *(T+n) = *(R+n)+32; T[n]='\0'; printf("%s\n", T); Př. Převrácení textu, malá písmena => velká písmena Řetězce v C (6/9) Příklad: KPC1E_Ex29.c

Př. Aritmetická manipulace se znaky - nad znaky lze provádět libovolné matematické a logické operace, přičemž pracujeme s jejich ASCII hodnotami char text[]={92, 135, … 57, 100, 34, 0}; unsigned int n; printf("Input: %s\n", text); for(n=0; text[n]!='\0'; n++)// all chars in string if(n%5!=0) text[n]+=text[n-1]-102; else text[n]=160-text[n]; printf("Output: %s\n", text); return 0; } Řetězce v C (7/9) Příklad: KPC1E_Ex30.c

Př. Řetězec překódovaný do desítkového vyjádření ASCII kódů int main() { char texti[21]="Hello world!\n"; char textc[61]; char textd[21]; unsigned int n, m, p; printf("%s\n\n", texti); for(n=0, m=0; texti[n]!='\0'; n++) { p=texti[n]/100; textc[m++]=p+'0'; textc[m++]=texti[n]/10-p*10+'0'; textc[m++]=texti[n]%10+'0'; } textc[m]='\0'; printf("%s\n\n", textc); Řetězce v C (8/9)

a dekódování zpět for(n=0, m=0; textc[n]!='\0'; n++) { textd[m]=(textc[n++]-'0')*100; textd[m]+=(textc[n++]-'0')*10; textd[m++]+=textc[n]-'0'; } textd[m]='\0'; printf("%s\n", textd); return 0; } Řetězce v C (9/9) Příklad: KPC1E_Ex31.c Výstup:

Funkce pro řetězce (1/3) Funkce stdio.h pro řetězce (1/3) int main(void) { char c; puts("Is C language easy?"); // unformated printing of string to stdout followed by new line c=getchar(); // get char.from the standard input if (c=='y') puts("Right,..."); if (c=='n') puts("I disagree,..."); do c=getchar(); while(c!=' ');// wait for space return 0; } Funkce neformátovaného výstupu řetězce puts() a vstupu znaku getchar() Příklad: KPC1E_Ex32.c

int main(void) { char c; for(c='A'; c<='Z'; c++) // loop for all alphabet { putchar(c); // printing character to // the stdout - capital putchar(c+32); // small putchar('\n'); // new line } doc=getchar(); while(c!=' '); // wait for space return 0; } Funkce pro výstup znaku putchar() Funkce pro řetězce (2/3) Funkce stdio.h pro řetězce (2/3) Příklad: KPC1E_Ex33.c

int main(void) { char fname[20], sname[20], c; printf("Insert your first name: "); gets(fname); // reading characters from stdin and // stores them as a string - first name printf("\nInsert your surname: "); gets(sname); // reading surname printf("\nYour whole name is: %s %s", fname, sname); scanf("%c", &c); return 0; } Funkce pro vstup neformátovaného řetězce gets() Funkce pro řetězce (3/3) Funkce stdio.h pro řetězce (3/3) Příklad: KPC1E_Ex34.c Funkce gets() automaticky vynechává znak ’\n’

#include #include //library for ops. with strings int main(void) { char s_inp[6]={'a','b','c','d','e','\0'}; // or char s_inp[6] = "abcde"; char s_out[6], c; strcpy(s_out, s_inp); //copying of string, not possible s_out = s_inp; printf("%s\n", s_out); scanf("%c", &c); return 0; } Funkce pro kopírování řetězců strcpy() Funkce pro řetězce (1/5) Funkce string.h pro řetězce (1/5) Příklad: KPC1E_Ex35.c

char S[20], T[20], c; char R[20]="ABCDEF"; int n; for(n=0; n first S[strlen(R)-n-1]=R[n]; S[n]='\0'; printf("%s\n", S); for(n=0; n small T[n]=R[n]+32; T[n]='\0'; printf("%s\n", T); Funkce pro určení délky řetězce (návratová hodnota) strlen() Příklad: KPC1E_Ex36.c Funkce pro řetězce (2/5) Funkce string.h pro řetězce (2/5)

char final[30]; char first[]="wine"; char second[]="women"; char third[]="songs"; strcpy(final, first); strcat(final, second); // appends a copy of the // source string to the destination string strcat(final, third); printf("%s\n", final); Funkce pro spojování řetězeců strcat() Funkce pro řetězce (3/5) Funkce string.h pro řetězce (3/5) Příklad: KPC1E_Ex37.c Modifikovaná funkce strncat(str1,str2,n) připojí řetězec str2 k řetězci str1, přičemž se použije jen prvních n znaků Znak null se vkládá automaticky na konec spojeného řetězce

char number [11], c; char *ptr, digit='8'; strcpy(number, " "); printf("Original string: %s\n", number); ptr=strchr(number, digit); while(ptr) { *ptr='x'; ptr=strchr(number, digit); } printf("Modified string: %s", number); Funkce pro vyhledání znaku v řetězci strchr() Funkce pro řetězce (4/5) Funkce string.h pro řetězce (4/5) Náhrada všech znaků 8 v řetězci za znak x : Příklad: KPC1E_Ex38.c

char txt1[51], txt2[5], txt3[5]="----", *ptr; int n; printf("Insert text1: "); gets(txt1); printf("Insert text2 (searched): "); gets(txt2); n=strlen(txt2); ptr=strstr(txt1, txt2); while(ptr) { strncpy(ptr,txt3,n); ptr=strstr(txt1, txt2); } printf("Modified string: %s", txt1); Funkce pro vyhledání řetězce v řetězci strstr() a kopírování n znaků řetězce strncpy() Funkce pro řetězce (5/5) Funkce string.h pro řetězce (5/5) Příklad: KPC1E_Ex39.c

Řetězce – příklady (1/2) Př. Řetězec num obsahuje neznámý počet celých a desetinných čísel. Každé číslo je ukončeno středníkem. Spočítejte, kolik je zapsáno v řetězci čísel a kolik z nich je čísel celých. char num[30]="12;3.8;100;94.5;33;44;"; int n, total=0, rat=0; printf("Numbers: %s\n\n", num); for(n=0; n<strlen(num); n++) { if(num[n]==';') // total number of num. total++; if(num[n]=='.') // number of rational n. rat++; } printf("Total number of num.: %4d\n", total); printf("Integer numbers: %4d\n", total-rat); Příklad: KPC1E_Ex40.c

Př. Řetězec num obsahuje neznámý počet celých čísel. Každé číslo je ukončeno středníkem. Čísla vypište do sloupce pod sebe a zarovnejte je. char num[30]="12;4;100;95;33;44;", part[10]; int m=0, n; printf("Numbers: %s\n\n", num); for(n=0; n<strlen(num); n++) if(num[n]!=';') part[m++]=num[n]; else { part[m]='\0'; printf("%6s\n", part); m=0; } Řetězce – příklady (2/2) Příklad: KPC1E_Ex41.c

Téma následujícího tutoriálu DĚKUJI ZA POZORNOST – Ukazatel a adresace paměti – Pole a ukazatelé – Pole ukazatelů – Ukazatele – příklady – Funkce – Hlavičky funkcí – Rekurze funkcí – Knihovny funkcí – Funkce – příklady