T É MA a) Příkazy pro větvení b) Příkazy pro cykly c) Příkazy pro řízení přenosu d) Příklad BPC1E: Počítače a programování 1 pro obor EST PŘEDNÁŠKA 3 Prezentace vznikla za podpory projektu: Komplexní inovace studijních programů a zvyšování kvality výuky na FEKT VUT v Brně OP VK CZ.1.07/2.2.00/28.0193
Počítače a programování 1. P řednáška 3 7 .10.2013 Jiří Šebesta. T ÉMA. Číselné soustavy Základní struktura programu Algoritmy Data a proměnné. Číselné soustavy (1/2). Používané soustavy :. Obecná definice vyjádření :. Číselné soustavy (2/2). - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
TÉMAa) Příkazy pro větvení
b) Příkazy pro cykly
c) Příkazy pro řízení přenosu
d) Příklad
BPC1E: Počítače a programování 1 pro obor EST
PŘEDNÁŠKA 3
Prezentace vznikla za podpory projektu:
Komplexní inovace studijních programů a zvyšování kvality výuky na FEKT VUT v BrněOP VK CZ.1.07/2.2.00/28.0193
Příkazy pro větvení (1/7)Příkazy pro větvení (1/7)
if(day<48 || day >57) printf("Not a number\n");else if(day>48 && day<56) // 1,2,3,…7 printf("Now is the %cth day\n", day); else printf("An invalid day number\n");
• Podmíněný příkaz:
podmínka - pravdivá - nepravdivá
příkaz
• Větvení typu if
Příkazy pro větvení (2/7)Příkazy pro větvení (2/7)
• Větvení typu if - else
Příkazy pro větvení (3/7)Příkazy pro větvení (3/7)
• Kombinované větvení if – else if – else
Příkazy pro větvení (4/7)Příkazy pro větvení (4/7)
Test ? Statement_this : Statement_that;
• Podmínkový operátor ?:
podmínkapříkaz pro pravdivost
příkaz pro nepravdivost
Výběr z větší hodnoty:
Příklad: BPC1E_Ex19.c
int a, b, c;
a = 3; b = 9; c = (a > b) ? a : b; // c = 9// if (a>b) c = a;// else c = b;
Příkazy pro větvení (5/7)Příkazy pro větvení (5/7)
• Přepínač swich-case: pro případy, kdy vybíráme z více než dvou možností
výraz s výsledkem celočíselné hodnoty
switch(value){ case 1 : statement_1; break; case 2 : statement_2; break; case 3 : statement_3; break; case 4 : statement_4; break; default: statement_other;}
vystoupení z přepínače
- není povinnépříkaz vykonaný v případě jakékoli jiné hodnoty value
Příkazy pro větvení (6/7)Příkazy pro větvení (6/7)
printf("Which girl should go to the cinema with me?\n"); srand(time(NULL));switch(rand()%9) // random number from 0 to 8{ case 0: printf("Jana"); break; //if rand()%9 is 0 case 1: printf("Eva"); break; //if rand()%9 is 1 case 2: printf("Klara"); break; //if rand()%9 is 2 case 3: printf("Milena"); break; //if rand()%9 is 3 case 4: printf("Dominika"); break; //if rand()%9 is 4 case 5: printf("Erika"); break; //if rand()%9 is 5 case 6: printf("Petra"); break; //if rand()%9 is 6 case 7: printf("Zuzana"); break; //if rand()%9 is 7 default: printf("alone"); //if rand()%9 is not from 0
to 7, i.e. 8 }
• Přepínač – příklad
Příklad: BPC1E_Ex20.c
Příkazy pro větvení (7/7)Příkazy pro větvení (7/7)
Příkazy pro cykly (1/9)Příkazy pro cykly (1/9)
• Ani jeden parametr není povinný: for( ; ; ) je nekonečná smyčka
for(init; test; update) statement;
char text[] = "Vjku\"oguucig\"ku\"ugetgv#";unsigned int n;
for(n=0; text[n]!='\0'; n++) // loop for all chars if(text[n]!=' ') // excluding space
text[n] -= 2; // character code shift
printf("%s\n", text);
• Cyklus for
Příklad: BPC1E_Ex21.c
• for
Příkazy pro cykly (Příkazy pro cykly (22/9)/9)
• Lichoběžníková aproximace: obsah pro jeden úsek:
• Příklad - numerická integrace
2
)()( 010100101
xfxfxxxfxxS xx
2
)()( 111)()1(
nnnnnnnnxnx
xfxfxxxfxxS
• Obecně:
• Integrál: je součet všech dílčích ploch pro jednotlivé úseky
Příkazy pro cykly (Příkazy pro cykly (33/9)/9)
• Výpočet:
• Příklad - numerická integrace sin(x) pro interval 0 až π
2)11(0coscos)cos()sin( 00
xdxx
• Program:#include <stdio.h>#include <stdlib.h>#include <math.h>#define pi 3.141529
int main(void){
double a[101], f[101]; //a = angle, f = func. value
int n, i;double sum = 0, step; //step = lenght of intervalint start = 3, stop = 100; // max. is 100
} step = pi/(1.0*n); for(i=0; i<n; i++) sum += f[i]*step + (f[i+1]-f[i])*step/2.0; printf("\nFor %d intervals is integral %10.8f.",
n, sum); } return 0;}
Příkazy pro cykly (Příkazy pro cykly (55/9)/9)
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: BPC1E_Ex23.c
Příkazy pro cykly (6/9)Příkazy pro cykly (6/9)
• while
Příkazy pro cykly (7/9)Příkazy pro cykly (7/9)
do statement; while(test);
int code; // number for passworddo{ printf("Insert access code:\n");
scanf("%d", &code); //number from stdin to variable code
}while(code != 12345); // test of proper password 12345printf("\n\nAccess allowed");printf("\n\nInsert <space>+ENTER for exit");do //exit after <space> insertion
c=getchar();while (c!=' ');return 0;
• Cyklus do - while
Příklad: BPC1E_Ex24.c
Příkazy pro cykly (8/9)Příkazy pro cykly (8/9)
• do - while
Příkazy pro cykly (9/9)Příkazy pro cykly (9/9)
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 trialsdo{
printf("Insert access code:\n");scanf("%d", &code); //number from stdin to
variable coden--; //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: BPC1E_Ex25.c
Příkazy pro přenos řízení (2/3)
int num; //input numberint test, n, m=0;printf("Input number:");scanf("%d", &num); //number from stdin to variable numfor(n=2; n<=100; n++) //loop for n from 2 to 100{
test = (num%n==0); //test if n is dividerif(!test)
continue; //if not, next nprintf("\n%d", n); //if yes, print nm++; //number of dividers – incr.
}printf("Number of dividers: %d\n", m);
• continue – př. hledání dělitelů
Příklad: BPC1E_Ex26.c
Příkazy pro přenos řízení (3/3)
• Sestavte program pro simulaci dopravní situace. Ze simulované světelné křižovatky (jeden příjezd) 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 kdy došlo ke kolapsu.
Příklad (Příklad (11/4)/4)
int main(){ int rcars = 10; int wcars = 5; int ncars[30] = {7, 8, 8, 9, … 5, 6};
Příklad (2/4)Příklad (2/4) int mcars=95; int hours=7; //start at 7:50 int mins=50; int inc=30; 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; }