počítače a programování 1
DESCRIPTION
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 PresentationTRANSCRIPT
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(test) statement; if(test) statement_this;else statement_that;
char day = '1';
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
Příkazy pro cykly (Příkazy pro cykly (44/9)/9)
Příklad: BPC1E_Ex22.c
for(n=start; n<=stop; n++) { sum = 0; for(i=0; i<=n; i++) { a[i] = 180.0*i/(n*1.0); f[i] = sin(a[i]*pi/180.0);
} 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; }
Příklad (3/4)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říklad (4/4)Příklad (4/4) • Výstup dopravní simulace:
Příklad: BPC1E_Ex27.c
Téma následující přednášky
DĚKUJI ZA POZORNOST
– Řetězce – Funkce stdio.h pro řetězce– Funkce string.h pro řetězce– Příklady