Pomocný text pro výuku výpočetní techniky
Stručný úvod do základů programovacího jazyka
C++
-pk-
1
Dva motivační programy namísto úvodu 1. Jak se jmenuješ … ? /* * Prvni program v jazyce C++ * ========================== */ #include <stdio.h> #include #include int main (void) { char Jmeno[30];
Alt + 92 Alt + 35 Alt + 39 Alt + 62 Alt + 123 Alt + 125 Alt + 40 Alt + 41 Alt + 91 Alt + 93 Alt + 37 Alt + 179 Alt + 124 Alt + 60
… \ … # …‘ … > … { … } … ( … ) … [ … ] … % …| …¦ … <
printf("Jak se jmenujes ?"); scanf("%s", Jmeno); printf("\n"); printf("Tak at zije %s ! \n", Jmeno); printf("A tady je Tvuj prvni program v jazyce C++. \n"); printf("\n"); printf("Dobry den, overil jsem si Vaši totožnost. Jste opravdu %s... \n", Jmeno); printf ("Vážený pane %s, \n", Jmeno); printf ("Je vysloveně otázkou času, kdy jméno %s vstoupi do dějin ! \n", Jmeno); printf ("Jméno %s bude slavné! \n", Jmeno); printf (" %s ! \n", Jmeno); printf (" %s !! \n", Jmeno); printf (" %s !!! \n",Jmeno); printf(„\n\n konec = ENTER“); whilw(toupper(getch()) == ‚A‘); (void) getch (); return 0; } 2. Program pro převod ze stupnice Fahrenheitovy do Celsiovy A) #include <stdio.h> int main() { short dolniMez, horniMez, krok; float Fahr, Cels; dolniMez = 0; horniMez = 100; krok = 10; printf ("Fahrenheit Celsius\n"); Fahr=dolniMez; while (Fahr<=horniMez) { Cels = (5.0f/9.0f)*(Fahr-32.0f); printf("%4.0f %6.1f\n", Fahr, Cels); Fahr=Fahr+krok; }
2
return 0; } B) #include <stdio.h> #include #include int main (void) { short dolniMez, horniMez, krok; float Fahr, Cels; do { clrscr(); printf("Zadej teplotu v Celsiove stupnici : "); scanf("%f", &Cels); Fahr = (( Cels * 20.0f - Cels * 2.0f)/10) + 32; printf ("Teplota pýevedena do Fahrenheitovy stupnice je %f řF", Fahr); printf("\n\n Dalsi vypocet? [A/N]"); }while(toupper(getch())=='A'); (void) getch(); return 0; } -------------------------------------------------------------------------C) #include <stdio.h> #include #include int main (void) { short dolniMez, horniMez, krok; float Fahr, Cels; do { clrscr(); printf("Zadej teplotu ve Fahrenheitově stupnici : "); scanf("%f", &Fahr); Cels = ((Fahr - 32) / 9) * 5; printf ("Uveden teplota prevedena do Celsiovy stupnice je %f řC", Cels); printf("\n\n Dalsi vypocet? [A/N]"); while(toupper(getch())=='A'); (void) getch(); return 0; }
3
Jazyk C patří mezi tzv. kompilační jazyky. Nemá příkazy jako interpretační jazyky – např. TurboBasic. C++ má asi dvacet klíčových slov. Na každou operaci voláme funkci, která je v některé z knihoven. Název knihovny je nutno v programu uvést, aby bylo možno zadanou funkci najít. Program je hledá v hlavičce. Každý program se skládá z několika základních prvků. Jsou jimi klíčová slova (např. char, for nebo return), která tvoří množinu, která představuje slovní zásobu jazyka. Dále se v programu objevují různé názvy proměnných (např. Jmeno), případně názvy funkcí. Nedílnou součástí programu jsou výrazy jako např. a=b+c , kdy pomocí operací zpracováváme potřebná data. K provedení operací patří také množina operátorů, mezi které řadíme i operátor + sloužící k sečtení dvou čísel. Další součástí programu v jazyce C jsou interpunkční znaky – např středník ukončující příkaz, nebo složená závorka vymezující např. tělo funkce. Program v jazyce C tedy obsahuje: klíčová slova jména (identifikátory) konstanty řetězové proměnné (literály) operátory interpunkční znaky Jazyk C rozlišuje mezi velkými a malými písmeny. Jako příklad uveďme slovo while. Ve spojení s nějakou podmínkou – (může jí být v motivačním programu použité Fahr<=horniMez) představuje jednoznačný příkaz „opakuj vše, co následuje ve složených závorkách, dokud je podmínka splněna“ (zde: dokud proměnná Fahr menší nebo rovna proměnné horniMez). Zapíšeme-li však do programu wHiLe nebo WhilE, nebude je kompilátor C chápat jako klíčové slovo, ale jako názvy dvou různých proměnných. Pro oddělování jednotlivých klíčových slov užíváme vhodných mezer, aby bylo možno zdrojový text dobře číst. Ukázka dobře čitelného kódu
Ukázka hůře čitelného kódu
for(i=0; i<0; i=i+1) { y=y+1; }
for(i=0; i<0; i=i+1) {y=y+1}
(zapsano zacatecnikem) nebo for(i=0; i<10; i++) y++; (zapsano profikem). Součástí zdrojového kódu jsoou také komentáře programátora. Uvádí jej lomítko a hvězdička. printf („Tisk výsledku:“)
/*Tiskne informaci na obrazovku */
případně dvě lomítka printf („Tisk výsledku:“)
//Tiskne informaci na obrazovku
4
Komentáře jsou kompilátorem považovány za oddělovací znaky Mohou se vyskytovat i uprostřed výrazu a kompilátor je vypustí… Například: int /*nazev typu / pocitadlo / idetifikator promenne*/; k = i /* radek*/ + j /* sloupec*/ Klíčová slova v jazyce C těchto slov nesmí použít programátor jako identifikátorů – tedy jako jmen funkcí, proměnných nebo symbolických konstant. Seznam klíčových slov v jazyce C auto const double float int short struct unsigned
break continue else for long signed swich void
case default enum goto register sizeof typedef volatile
char do extern if return static union while
Identifikátor Všem typům jmen se v jazyce C říká idetifikátory. Pro vytvoření jména lze použít pouze: 1) písmene a…z a A…Z 2) číslice 0…9 3) znak podtržítka (_) 4) prvním znakem nesmí být číslice Délka identifikátoru je omezena na 6 u externího identifikátoru a pro tzv. interní identifikátory na hodnotu 31. int toto_je_velmi_dlouhy_identifikator_promenne_typu_int; float toto_je_velmi_dlouhy_identifikator_promenne_typu_float; Podle normy ANSI C je zpracováno z uvedeného řetězce pouze prvních 31 znaků. Poněvadž se názvy proměnných liší až za úrovní 31. znaku, bude je ANSI identifikátor považovat za stejné a bude hlásit chybu. Použijeme-li Visual C, identifikátor bude řetězce rozlišovat, protože rozpoznává 247 znaků. Použitím Visual C by chybové hlášení nenásledovalo, řetězce by byly odlišeny. Konstanta. Konstatnta je číslo, znak nebo řetězec znaků, který můžeme použít v programu jako hodnotu. Jazyk C podporuje čtyři typy konstant: Reálné konstanty Celočíselné konstanty Výčtové konstanty
5
Znakové konstanty Konstanty mají svůj typ určený syntaxí jejich zápisu. Ukázka použití konstanty v programu #include <stdio.h> int main() { double PI =3.1415926535892384636433832795; /*realna konst, konst v plovouci radove carce*/ double polomer, obvod, obsah; printf ("Zadej polomer kruhu: "); /*Konstantni retezec*/ scanf ("%lg", &polomer); if (polomer<=0.0) /*realna konstanta - logicky test*/ { printf ("%s", "Polomer musi byt cislo vetsi nez nula !"); return 1; } obvod = 2 * PI * polomer; obsah = PI * polomer * polomer; printf ("\n Obvod kruhu = %g, Obsah kruhu = %g\n", obvod, obsah); return 0; }
Toto ovšem není ukázka použití konstanty v pravém toho slova smyslu, nýbrž proměnné, jejíž hodnota se běhen programu náhodou nemění. Konstanta v pravém slova smyslu se použije následovně: #include <stdio.h> #define PI 3.1415926535892384636433832795 int main() { double polomer, obvod, obsah; printf ("Zadej polomer kruhu: "); /*Konstantni retezec*/ scanf ("%lg", &polomer); if (polomer<=0.0) /*realna konstanta - logicky test*/ { printf ("%s", "Polomer musi byt cislo vetsi nez nula !"); return 1; } obvod = 2 * PI * polomer; obsah = PI * polomer * polomer; printf ("\n Obvod kruhu = %g, Obsah kruhu = %g\n", obvod, obsah); return 0; }
Zde PI není deklarovaná proměnná, ale všude v programu, kde je napsáno PI, překladač nahradí tento řetězec řetězcem 3,141592654. Celočíselné konstanty Celočíselné konstanty mohou být v jazyce C vyjádřeny ve třech různých číselných soustavách: desítkové (dekadické), osmičkové (oktalové) a šestnáctkové (hexadecimální). Oktalová a hexadecimální soustava mají za základ mocninu čísla 2. Desítkové konstanty jsou zadávány pomocí číslic 0….9. Oktalové číslice mohou používat čísel 1.…7.
6
Desítkové číslo, které běžně používáme představuje posloupnost řádů. Kupř. 625 v desítkové soustavě představuje zápis 6 . 102+ 2 . 101 + 5 . 100 Jedná se tedy vlastně o zápis cifer „6“ „2“ „5“ v místech přiřazujících jim určitý řád. Obdobně konstruujeme číslo ve dvojkové soustavě : převádíme-li tedy (625)10 do dvojkové soustavy, pak si musíme uvědomit, že řád takového čísla určuje vhodná mocnina ne už čísla „deset“, ale čísla „dvě“. 29 = 512 28 = 256 27 = 128 26 = 64 25 = 32 24 = 16 23 = 8 22 = 4 21 = 2 20 = 1
1 . 29 0 . 28 0. 27 1 . 26 1 . 25 1 . 24 0 . 23 0 . 22 0 . 21 1 . 20 512 + 0 + 0 + 64 + 32 + 16 + 0 + 0 + 0 + 1 576 608 624 625
83 = 512 82 = 64 81 = 8 80 = 1
1.83 + 1.82 + 6.81 + 1.80 = 625
162 = 256 161 = 16 160 = 1
2.162 + 7.161 + 1.160 = 625
Hledané dvojkové číslo je tedy (1 0 0 1 1 1 0 0 0 1)2
(1011100001)2
Hledané osmičkové číslo je (1161)8
Hledané šestnáctkové číslo je tedy (271)16
Šestnáctková soustava má oproti předchozím soustavám z principu dané symboly navíc. Písmenu A odpovídá hodnota 10, B=11, C=12 D=13, E=14 a F=15. Použijme nyní ke zpětnému převodu do desítkové soustavy šestnáctkové číslo215E. (215E)16 = (2.163) + (1.162) + (5 . 161) + (14.160) = (2 . 4096) + (1 . 256) + (5 . 16) + (14 . 1) = (8542)10
Nebo (37BC)16 = (3.163) + (7.162) + (11 . 161) + (12.160) = (3 . 4096) + (7 . 256) + (11 . 16) + (12 . 1) = (14268)10
V následujícím textu se nachází výpis programu, který řeší převod z desítkové do dvojkové, osmičkové a šestnáctkové soustavy. /* Prevod cisla do dvojkove soustavy */ #include #include <stdio.h> #include void Prevod(unsigned long X, int Z);
7
void main(void) { char c; unsigned long X10; do { clrscr(); printf("Zadej cele cislo v desitkove soustave\n"); scanf("%lu",&X10); printf("Hledane dvojkove cislo je "); Prevod(X10,2); printf("Hledane osmickove cislo je "); Prevod(X10,8); printf("Hledane sestnactkove cislo je "); Prevod(X10,16); printf("\nDalsi prevod? (A/N)"); c=toupper(getch()); } while(c=='A'); } void Prevod(unsigned long X, int Z) /* Funkce pro prevod cisla z desitkove soustavy do jine X...prevadene cislo Z...zaklad pozadovane soustavy */ { int *Y,i=0; while(X) { Y[++i]=X%Z; // % = modulo X/=Z; } for(;i>0;i--) { if(Y[i]<10) printf("%c",Y[i]+48); else printf("%c",Y[i]+55); } printf("\n"); }
A nyní již opravdu začínáme … Po úvodní motivaci do práce s C++ si předvedeme některé ze základních funkcí. Další program ukazuje způsob použití C++ k zobrazení prostého textu. Naučíme se používat funkci printf a formátování textového výstupu. Dalším prvkem k vysvětlení je použití knihovny. Příkazy, kterých bude v programu použito, se načítají z knihovny, kde mají své tzv. prototypy. Naší knihovnou je „Standart input output“ hlavičkový soubor, který se jmenuje stdio.h a slouží k informování překladače jazyka C, že budeme používat existující
8
knihovní funkce pro načtení dat z klávesnice a následný výpis výsledků na obrazovku. Dále si povšimněme, že /* Každý program v jazyce C musí obsahovat alespoň jednu funkci, která se jmenuje main. Tato funkce nemá žádné parametry. Proto jsou za ní uvedeny prázdné kulaté závorky. Případně v nich může být klíčové slovo void. Deklarace main jako funkce typu int (celé číslo) souvisí s příkazem return na konci programu (funkce main vrací hodnotu 0, ovšem v tomto případě nikoli jiné (volajici) funkci, ale systému – v našem případě (DOSu). V zásadě platí, že návratová hodnota 0 znamená bezchybné ukončení programu. Vyšší hodnoty jsou ruzné druhy předpokládaných chyb, které lze takto vygenerovat. Osobní zkušenost autora: Já obvykle deklaruji main jako void, tj. bez návratové hodnoty. V mém podání by tedy prvni řádek programu zněl: void main(void)
/* program v jazyce C++ Zobrazeni latinskych citatu */ #include <stdio.h> int main() { printf ("\n"); // vynechame radek v textu printf ("\n Slavne vyroky mudrcu z reckych spisovatelu,\n"); printf ("ktere se zachovaly v prekladu Erasma Rotterdamskeho\n\n"); printf ("Periandres z Korinthu... \n\n\n"); printf ("Veritati adhaereto ............Pravdy se pridrz \n"); printf ("Laudato honesta .............Chval poctive veci \n"); printf ("A vitiis abstine ..Od neslechetnosti se vzdaluj \n"); printf ("Beneficium repende ....Za dobrodini se odplacuj \n"); printf ("Litem oderis ............Svar mej v nenavisti\n "); printf ("Magistratum metue ................Ouradu se boj \n"); printf ("Litem oderis ..............Svar mej v nenavisti \n"); printf ("Ne quavis de re doleas..Nermut se pro kazdou vec\n"); printf (" \n"); printf ("Periandres z Ausonia \n "); printf ("\n"); printf ("Multis terribilis, caveto multos ..Koho se mnozi boji, ten se mnohych boji \n "); printf (" \n"); printf (" \n"); return 0; }
Použití textů v hlavičkách programů -text lze pomocí grafických znaků snadno orámovat.
9
/*Text, ktery vyuziva grafickych znaku k oramovani */ /*Program v jazyce C++ */ #include <stdio.h> #include #include /* /* /*
alt + 35 = # alt + 62 = > alt + 60 = <
*/ */ */
int main() { clrscr(); /* prototyp funkce clrscr(); je v knihovne #include */ /* alt + 123 = { */ /* alt + 125 = } */ printf printf printf printf printf printf printf printf printf printf printf printf printf printf printf printf printf printf printf printf printf printf
("\n"); /* vynechany radek */ (" * * * * * * * * * * * * * * * * * * * * * * * * (" * (" * Program – vyuzivajici oramovani (" * --------------------------------(" * (" * (" * Pomoci grafickeho znaku – napr. hvezdicky byl (" * (" * tento text na obrazovce monitoru oramovan. (" * (" * Tak lze napr. zviditelnit hlavicky programu. (" * (" * Program je pres veskerou svou narocnost zatím (" * (" * volne siritelny. Pripadny zajemce mi vsak (" * (" * muze presto zaslat libovolnou financni (" * (" * castku. :o) (" * (" * * * * * * * * * * * * * * * * * * * * * * * *
*\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n"); *\n");
return 0; }
Následující programy ukazuje použití jednoduchých výpočtů v C++ /* Plocha obdelnika */ #include <stdio.h> #include #include <math.h> #include float a, b, plocha, obvod;
10
int main { // zde zacina do { clrscr(); printf("Zadej printf("Zadej
(void) vypocet
a : "); scanf("%f", &a); b : "); scanf("%f", &b); plocha = a*b; printf("\n Plocha obdelnika je
= %f",
plocha); printf("\n\n Dalsi vypocet? [A/N]"); }while(toupper(getch())=='A'); (void) getch(); return 0; } /* Potencialni energie */ #include <stdio.h> #include #include <math.h> #include float m, g, h, energie; int main (void) // zde zacina vypocet
{ do { clrscr();
printf("Zadej hmotnost : "); scanf("%f", &m); printf("Zadej tihove zrychleni : "); scanf("%f", &g); printf("Zadej vysku nad nulovou hladinou : "); scanf("%f", &h); energie = m*g*h; printf("\n Potencialni energie je = %f", energie); printf("\ J"); printf("\n\n Dalsi vypocet? [A/N]"); }while(toupper(getch())=='A'); (void) getch(); return 0; }
/* Hranol */ #include #include #include #include
<stdio.h> <math.h> float a, b, c, objem; int main (void)
11
{ // zde zacina vypocet do { clrscr(); printf("Zadej a : "); scanf("%f", &a); printf("Zadej b : "); scanf("%f", &b); printf("Zadej c : "); scanf("%f", &c); objem = a*b*c; printf("\n Objem = %f", objem); printf("\n\n Dalsi vypocet? [A/N]"); }while(toupper(getch())=='A'); (void) getch(); return 0; } /* Vypocet elektrickeho odporu */ #include #include #include #include
<stdio.h> <math.h> float i, u, r; int main (void)
{ // vypocet do { clrscr(); printf("Zadej proud v amperech : "); scanf("%f", &i); printf("Zadej napeti ve voltech : "); scanf("%f", &u); r = u/i; printf("\n Odpor = %f", r); printf("\ Ohm"); printf("\n\n Dalsi vypocet? [A/N]"); }while(toupper(getch())=='A'); (void) getch(); return 0; }
Program pro výpočet spotřeby s logickou kontrolou reálné konstatnty /* Spotreba paliva automobilu na 100 km jizdy */ #include <stdio.h> #include #include <math.h> #include float cenab,litry,kilometru,spotreba,cenaj,cenak,cenaz,cenav; int main (void) { do
12
{ printf("\n\n\n"); printf("Cena 1 litru paliva : "); scanf("%f", &cenab); if (cenab<=0.0) /*realna konstanta - logicky test*/ { printf ("%s", "Sporeba musi byt cislo vetsi nez nula !"); return 1; } printf("Kolik bylo ujeto kilometru : "); scanf("%f", &kilometru); if (kilometru<=0.0) /*realna konstanta - logicky test*/ { printf ("%s", "Vzdalenost musi byt cislo vetsi nez nula !"); return 1; } printf("Spotreba benzinu na uvedenou vzdalenost : "); scanf("%f", &litry); if (litry<=0.0) /*realna konstanta - logicky test*/ { printf ("%s", "Spotrebovany benzin musi byt cislo vetsi nez nula !"); return 1; } spotreba = 100*litry/kilometru; cenaj = cenab*litry; cenak = cenab*litry/kilometru; cenaz = 30*cenak; cenav = 200*cenak; printf("\n Spotreba vozu = %f litru na 100 km", spotreba); printf("\n Celkova cena jizdy = %f Kc", cenaj); printf("\n Cena jednoho kilometru jizdy = %f Kc", cenak); printf("\n Cena cesty do Zlina a zpet = %f Kc", cenaz); printf("\n Cena cesty na 200 km = %f Kc", cenav); printf("\n\n Dalsi vypocet? [A/N]"); } while(toupper(getch())=='A'); (void) getch(); return 1; }
Barevný text na barevném pozadí – program řešící goniometrické funkce povšimněme si, že C++ zpracovává goniometrické funkce z míry zadané v radianech. Na tuto skutečnost je třeba brát zřetel. Proto je proveden převod ze stupňů na radiany. /* Goniometricke funkce */
{
#include <stdio.h> #include #include <math.h> #include float x, x1, x2, x3, a, b, c; int main (void) // zde zacina vypocet
13
do { textbackground(LIGHTCYAN); textcolor(BLUE); // “BLACK","BLUE","GREEN","CYAN","RED","MAGENTA","BROWN","LIGHTGRAY", //“DARKGRAY","LIGHTBLUE","LIGHTGREEN","LIGHTCYAN","LIGHTRED", //“ LIGHTMAGENTA","YELLOW","WHITE"
clrscr(); printf("\n\n\n\n\n\n\n"); printf(" Uhel (stupne) : "); scanf("%f", &x1); printf(" Uhel (minuty) : "); scanf("%f", &x2); printf(" Uhel (vteriny): "); scanf("%f", &x3); if (x1<0.0)/*realna konstanta - logicky test*/ { printf("\n\n"); printf(" Uhel musi byt cislo vetsi nez nula !\n"); printf(" --------------------------------------"); } if (x2<0.0) { printf("\n\n"); printf(" Uhel musi byt cislo vetsi nez nula !\n"); printf(" --------------------------------------"); } if (x3<0.0) { printf("\n\n"); printf(" Uhel musi byt cislo vetsi nez nula !\n"); printf(" --------------------------------------"); } x = ((3600*x1+60*x2+x3)/3600); a = sin (3.1415926535892384636433832796 * x/180); b = cos (3.1415926535892384636433832796 * x/180); c = tan (3.1415926535892384636433832796 * x/180); printf("\n\n\n SIN X = %f", a); printf(" COS X = %f", b); printf(" TAN X = %f", c); printf(" -------------------"); printf(" ------------------"); printf(" -----------------"); printf("\n\n\n\n\n Dalsi vypocet? [A/N]"); } while(toupper(getch())=='A'); (void) getch(); return 0; }
Výpočet velikosti úhlu ze známé hodnoty goniometrické funkce /* Urceni velikosti uhlu z hodnoty goniometricke funkce */ #include #include #include #include
<stdio.h> <math.h>
float x, x1, x2, x3, a, b, c, alfa, beta, gama; void Hlavicka(void); int main (void) { Hlavicka(); do {
14
clrscr(); printf("\n\n\n\n\n\n\n"); printf(" sinus : "); scanf("%f", &x1); printf(" cosinus : "); scanf("%f", &x2); printf(" tangens : "); scanf("%f", &x3); if (x1<0.0)/*realna konstanta - logicky test*/ { printf("\n\n"); printf(" printf(" } if (x2<0.0) { printf("\n\n"); printf(" printf(" } if (x3<0.0) { printf("\n\n"); printf(" printf(" }
Uhel musi byt cislo vetsi nez nula !\n"); --------------------------------------");
Uhel musi byt cislo vetsi nez nula !\n"); --------------------------------------");
Uhel musi byt cislo vetsi nez nula !\n"); --------------------------------------"); x = ((3600*x1+60*x2+x3)/3600); a = asin (x1); b = acos (x2); c = atan (x3);
alfa=a*(180/3.1415926535897932384626433832795); beta=b*(180/3.1415926535897932384626433832795); gama=c*(180/3.1415926535897932384626433832795); printf("\n\n\n printf(" printf(" printf(" printf(" printf(" printf("\n\n\n\n\n
alfa beta gama
= %f", alfa); = %f", beta); = %f", gama);
-----------------"); -----------------"); -----------------"); Dalsi vypocet? [A/N]");
} while(toupper(getch())=='A'); (void) getch(); return 0; }// ohraniceni hlavicka(void) void Hlavicka(void) // zahlavi nove funkce {// ohraniceni hlavicka(void) clrscr(); // prototyp funkce clrscr() je v knihovne conio.h printf ("\n"); // vynechany radek printf (" |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n"); printf (" | |\n"); printf (" | |\n"); printf (" | |\n"); printf (" | Program pro vypocet funkci sin, cos, tan |\n"); printf (" | ---------------------------------------|\n"); printf (" | |\n"); printf (" | |\n"); printf (" | Nejprve zadame zvoleny uhel ve stupnich |\n"); printf (" | pak se program dotazuje na hodnotu v minutach |\n"); printf (" | a nakonec ve vterinach. |\n"); printf (" | |\n"); printf (" | |\n"); printf (" | |\n"); printf (" | |\n"); printf (" | |\n"); printf (" | Stisknete libovolnou klavesu, program |\n"); printf (" | bude pokracovat ... |\n"); printf (" | Free, only for you... :o) |\n"); printf (" | Program byl vytvoren v jazyce C++. |\n"); printf (" | ZS Komenskeho 78 Zlin - Malenovice; tel.: 57 710 21 87 |\n"); printf (" | |\n"); printf (" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); getch(); }// uzavrena prvni
15
Okénko pro text – příkaz if – podmínka ohraničující výběr v intervalu
#include<stdio.h> main() { int c; if ((c = getchar()) >='A'&& c <= 'Z') /* if ((c = getchar()) >='a'&& c <= 'z') */ printf("%d\n", c); /* /* /* /* /*
&& je logicky soucin AND*/ povel printf("%d\n", c); zabezpeci psani ordinarniho cisla*/ pro vsechna velka pismena od A do Z*/ pro kontrolu lze v textovem editoru napsat Alt + ordinarni cislo*/ vysledek sve práce muzeme spatřit v prostředí DOS-Shell*/
} Počítáme cenu hovoru v síti T- Mobile /* nazev programu C++: Mobil */ #include <stdio.h> #include #include <math.h> #include void Hlavicka (void); void main (void) { // prvni Hlavicka(); do {// druha uvozuje cyklus do float x, y, rozdil; textbackground(LIGHTCYAN); textcolor(BLUE); clrscr(); char jmeno[30]; char cislo[11]; char prijmeni[30]; printf("\n\n Zadejte Vase jmeno: printf("\n
Zadejte Vase prijmeni:
"); scanf("%s", jmeno); "); scanf("%s", prijmeni);
printf("\n Zadejte (prosim bez mezer) cislo sveho T-Mobile: "); scanf ("%s", cislo); printf("\n -------------------------------------------------------------- "); printf("\n\n Tak at zije %s %s s mobilem cislo %s ! \n", jmeno, prijmeni, cislo); printf("\n\n\n Zavolejte *101# a zadejte konto pred hovorem (pred odeslanim SMS): "); scanf("%f", &x);
16
printf("\n Zavolejte *101# a zadejte stav konta po hovoru (po odeslani SMS): scanf("%f", &y);
");
printf(" \n ------------------------------------------------------------------------- "); printf("\n\n Cena hovoru z Vaseho mobilu cislo %s je %f Kc", cislo, rozdil); printf("\n\n\n Dalsi vypocet? [A/N]"); } // druha uyavrena - ukonceni cyklu do while(toupper(getch())=='A'); }// ohraniceni hlavicka(void) void Hlavicka(void) // zahlavi nove funkce {// ohraniceni hlavicka(void) clrscr(); // prototyp funkce clrscr() je v knihovne conio.h printf ("\n"); // vynechany radek printf (" |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n"); printf ("| |\n"); printf (" | |\n"); printf ("| |\n"); printf ("| Program pro vypocet ceny hovoru popr. SMS |\n"); printf ("| ----------------------------------------|\n"); printf (" | |\n"); printf (" | Zejmena pri komunikaci mezi T-Mobile * Eurotel, nebo |\n"); printf (" | T-Mobile * Oskar dochazi k nepresnostem v urcovani ceny |\n"); printf (" | hovoru ci odeslane SMS. |\n"); printf (" | Tento program resi problem zadanim vyse konta, ktere si |\n"); printf (" | uzivatel site T-Mobile bezplatne vyvola na cisle *101# |\n"); printf (" | a zjisti stav konta pred hovorem a po hovoru. |\n"); printf (" | Z rozdilu stavu konta pred a po cinnosti naseho telefonu |\n"); printf (" | urci program skutecnou cenu, kterou nam uctuje operator. |\n"); printf (" | |\n"); printf ("| Program byl vytvoren v jazyce C++. |\n"); printf ("| ZS Komenskeho 78 Zlin - Malenovice; tel.: 57 710 21 87 |\n"); printf (" | |\n"); printf (" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); getch(); }// uzavrena prvni
Rozměry koule určené z měření na jejím povrchu /* nazev programu C++ Planetka */ #include #include #include #include
<stdio.h> <math.h>
void Hlavicka (void); void main (void) { // prvni Hlavicka(); do {// druha uvozuje cyklus do float x, w, polomer, polomerkm, objem, hmotnostzul, hmotnostfe, hmotnostvod, zrychlenizul, zrychlenife, zrychlenivod, objemkm, zrychleniz, hmotnostzem; textbackground(LIGHTCYAN); textcolor(BLUE); clrscr(); printf("\n scanf("%f", &x);
Zadej vzdalenost L v metrech, odkud vidis tycku vysky H: ");
if (x<=0.0) /*realna konstanta - logicky test*/ { printf ("%s", "Vzdalenost musi byt cislo vetsi nez nula !"); } printf("
Zadej vysku tycky H (v metrech): "); scanf("%f", &w);
17
if (w<=0.0) /*realna konstanta - logicky test*/ { printf ("%s", "Polomer musi byt cislo vetsi nez nula !"); } polomer = (((x/2*x/2)-(w*w)) + w*w)/(2*w); polomerkm = polomer/1000; objem = 4/3 * 3.1415926535892384636433832795 * (polomer * polomer * polomer); objemkm = objem/1000000000; hmotnostzul = 2500 * objem; hmotnostfe = 7800 * objem; hmotnostvod = 1000 * objem; hmotnostzem = 5520 * objem; zrychleniz = hmotnostzem/(polomer*polomer)*0.0000000000667; zrychlenizul = hmotnostzul/(polomer*polomer)*0.0000000000667; zrychlenife = hmotnostfe/(polomer*polomer)*0.0000000000667; zrychlenivod = hmotnostvod/(polomer*polomer)*0.0000000000667; printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); printf("\n\n Polomer = %f m", polomer); printf(" Polomer = %f km", polomerkm); printf("\n\n Objem koule = %f m*m*m", objem); printf("\n Objem koule = %f km*km*km", objemkm); printf("\n\n printf("\n
Hmotnost zelezne koule = %f kg", hmotnostfe); Zrychleni = %f N/kg", zrychlenife);
printf("\n\n printf("\n
Hmotnost koule o hustote Zeme = %f kg", hmotnostzem); Zrychleni = %f N/kg", zrychleniz);
printf("\n\n printf("\n
Hmotnost kamenne koule = %f kg", hmotnostzul); Zrychleni = %f N/kg", zrychlenizul);
printf("\n\n Hmotnost koule z vodniho ledu = %f kg", hmotnostvod); printf("\n Zrychleni = %f N/kg", zrychlenivod); printf("\n\n\n Dalsi vypocet? [A/N]"); } // druha uzavrena - ukonceni cyklu do while(toupper(getch())=='A'); }// ohraniceni hlavicka(void) void Hlavicka(void) // zahlavi nove funkce {// ohraniceni hlavicka(void) clrscr(); // prototyp funkce clrscr() je v knihovne conio.h printf ("\n"); // vynechany radek printf (" |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n"); printf (" | |\n"); printf (" | |\n"); printf (" | |\n"); printf (" | Program pro vypocet polomeru nezname planetky ... |\n"); printf (" | --------------------------------------------------|\n"); printf (" | |\n"); printf (" | Snad kazdy z nas nekdy vystupoval vzhuru do kopce, |\n"); printf (" | kolem mohla byt mlha a samotny kopec mohl vypadat jako |\n"); printf (" | osirela planetka, domov Exuperyho Maleho prince. |\n"); printf (" | Jak muze byt planetka - hora - asi velika? Jakou by |\n"); printf (" | mela asi pritazlivost? Jakou by mela asi hmotnost? Jeji |\n"); printf (" | rozmery muzeme napr. urcit tak, ze odkrokujeme vzdalenost |\n"); printf (" | mezi dvema tyckami. Vzdalenost je dana bodem, kde vidime |\n"); printf (" | jejich vrcholky v jedne primce s bodem zakriveni nami me|\n"); printf (" | rene koule. Hodnoty zadame do programu. |\n"); printf (" | |\n"); printf (" | ~~~~~~~~~~~~~~~~~~ |\n"); printf (" | Program byl vytvoren v jazyce C++. |\n"); printf (" | ZS Komenskeho 78 Zlin - Malenovice; tel.: 57 710 21 87 |\n"); printf (" | |\n"); printf (" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); getch(); }// uzavrena první
Použití „Switch“, „Case“ a „Break“ – větvení programu na sekce #include #include #include #include
<stdio.h> <math.h>
18
float x, y,plus,minus, krat, deleno; char zn; void Hlavicka(void); // prototyp funkce "Hlavicka" void main (void) { Hlavicka(); do { textbackground(LIGHTCYAN); textcolor(BLUE); clrscr(); printf ("\n Mala kalkulacka"); printf ("\n ---------------"); printf ("\n Priklady zadavej ve tvaru napr. -1.23 + 4.68"); printf ("\n -0.72 * 3.41"); gotoxy (20,8); printf("\n Zadej priklad : "); scanf ("%f%c%f",&x,&zn,&y); gotoxy (20,11); switch (zn) { case '+': printf ("\n\nScitam"); plus = x+y; printf ("\n Vysledek prikladu %f + %f je: %f", x,y,plus); (void)getch(); break; case '-': printf ("\n\nOdcitam"); minus = x-y; printf ("\n Vysledek prikladu %f - %f je: %f", x,y,minus); (void)getch(); break; case '*': printf ("\n\nNasobim"); krat = x*y; printf ("\n Vysledek prikladu %f * %f je: %f", x,y,krat); (void)getch(); break; case '/': printf ("\n\nDelim"); if (y != 0) printf ("\n Vysledek prikladu %f / %f je: %f", x,y,deleno= x/y); else printf ("\n ERROR ............ jmenovatel se rovna 0"); (void)getch(); break; } printf("\n\n Dalsi vypocet? [A/N]"); }while(toupper(getch())=='A'); } void Hlavicka(void) // zahlavi nove funkce { clrscr(); // prototyp funkce clrscr() je v knihovne conio.h printf ("\n"); // vynechany radek printf (" |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|\n"); printf (" | |\n"); printf (" | |\n"); printf (" | |\n"); printf (" | Program pro vypocet souctu, rozdilu, podilu a soucinu |\n"); printf (" | ------------------------------------------------------|\n"); printf (" | |\n"); printf (" | |\n"); printf (" | Program pozaduje zadani prikladu. Resi scitani |\n"); printf (" | odcitani, nasobeni a deleni pouze mezi dvema cisly. |\n"); printf (" | Po potvrzeni klavesou ENTER hlasi program provadenou |\n"); printf (" | operaci a nasledne napise vysledek nami zadane ulohy. |\n"); printf (" | |\n"); printf (" | |\n"); printf (" | |\n"); printf (" | |\n"); printf (" | Stisknete libovolnou klavesu, program bude pokracovat ... |\n"); printf (" | Free, only for you... :o) |\n"); printf (" | Program byl vytvoren v jazyce C++. |\n"); printf (" | ZS Komenskeho 78 Zlin - Malenovice;tel.: 57 710 21 87 |\n"); printf (" | |\n"); printf (" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"); getch(); }// uzavrena první
19
20