Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část I.

Slides:



Advertisements
Podobné prezentace
A1PRG - Programování – Seminář Ing. Michal Typová konverze, oblast platnosti, paměťové třídy 9 Verze
Advertisements

Programování v C jazyku - SEMINÁŘ
Funkce Připomeňme si program pro výpočet faktoriálu:
Programovací jazyk C++
Programování funkcí v Excelu
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.
Třetí cvičení Podmíněné příkazy Cykly Break a Continue Switch Return
Pole, ukazatele a odkazy
Strukturované datové typy
Metody (funkce, procedury)
Algoritmy I Cvičení č. 2. Cíl hodiny Datové typy a přetypování (int, float, double, bool, char, long, short) Konstanty – Celočíselné Desítkové – 15, 0,
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
Počítače a programování 1. Obsah přednášky Výjimky - základní typy výjimek Způsoby zpracování výjimek.
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í.
Cvičení 2 Proměnné(jednoduché a složené) a konstanty První program Zápis výrazů.
Programování v C++ Cvičení.
Algoritmizace a programování
Druhé cvičení Vytváření identifikátorů Datové typy
Programování v Pascalu Přednáška 7
Materiály k přednášce Úvod do programování Ondřej Čepek.
Větvení cykly J a v a Začínáme programovat Lucie Žoltá.
J a v a Začínáme programovat Lucie Žoltá metody, objekty, konstruktor.
J a v a Začínáme programovat Lucie Žoltá. Odkazy - oficiální stránky (překladače, help, metody, vývojové prostředí NetBeans,...)
Kapitoly z metodologie pedagogického výzkumu Prostředí pro výuku algoritmů Vojtěch Ouška.
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í Obsluha výjimek Ing. Jan Mikulka.
Alg91 Textové soubory Na rozdíl od jiných typů souborů jsou textové soubory určené pro gramotné lidské oko. Textový soubor je posloupnost znaků členěná.
Počítače a programování 1
Cvičení.
Příklady v jazyku C – část 3
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
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.
Dědičnost - inheritance dědičnost je jednou z forem znovupoužitelnosti dědičnost je jednou z forem znovupoužitelnosti B A Třída A je předkem třídy B Třída.
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 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.
Realloc a qsort examples BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky © Miroslav Balík Fakulta informačních technologií České vysoké.
C – switch Mgr. Lenka Švancarová. switch syntaxe switch (výraz) { case hodnota_1: příkaz(y)_ve_větvi_1; case hodnota_2: příkaz(y)_ve_větvi_2; … default:
Šesté cvičení Výjimky Balíky.
Rozklad problému na podproblémy, rekurze
Začínáme vážně programovat Řídící struktury Přetypování Vstupně výstupní operace Vlastní tvorba programů.
1 Počítače a programování 1 13.přednáška. 2 Obsah přednášky Vstupy a výstupy – 1.část.
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.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Pokročilé programování v C++ (část B)
PŘÍKAZ while úkol 1_42.
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é.
ZÁKLADNÍ POJMY. ZDROJOVÝ TEXT PROGRAMU Tvoří: klíčová slova komentáře identifikátory.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Počítače a programování 1 2.přednáška. Základní lexikální struktura programu Program v jazyce Java je tvořen symboly a oddělovači Program Java je psán.
Pokročilé datové typy (struktury, unie, dynamické proměnné)
Funkce Přednáška č. 5. Funkce (functions)  posloupnost příkazů uvedená hlavičkou  využití – opakovaně volaná sekvence – strukturování programu – ošetření.
Řízení běhu programu, řídící struktury A0B36PRI - PROGRAMOVÁNÍ
Procedurální programování,
Programování KONSTANTY, ČTENÍ PO JEDNOM ZNAKU GETCHAR() FORMÁTOVANÝ VÝSTUP POMOCÍ PRINTF, VÝVOJOVÉ DIAGRAMY, CYKLY.
Praha & EU: Investujeme do vaší budoucnosti Evropský sociální fond Gymnázium, Praha 10, Voděradská 2 Projekt OBZORY Datové typy a operátory Základní programové.
Překladače 6. Sémantická analýza
Programování ÚVOD, PROMĚNNÉ, OPERÁTORY A PODMÍNĚNÝ PŘÍKAZ ERIK KRÁL.
Programování OPERÁTOR SIZEOF, FUNKCE, POLE JAKO PARAMETRY FUNKCÍ ERIK KRÁL.
Počítače a programování 2
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.
Opakování základních příkazů a syntaxí v programovacím jazyce Pascal
Opakování ze 3. cvičení deklarace proměnných výpis na monitor (výstup)
C# přehled vlastností.
Proměnné (1) Proměnná: Definice proměnných:
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Opakování ze 4. cvičení int a; printf("Zadej číslo: ");
Transkript prezentace:

Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část I. České vysoké učení technické Fakulta elektrotechnická V 2.01

C - Literatura Herout,P.: Učebnice jazyka C. 3.vyd., Kopp, 2003 Herout,P.: Učebnice jazyka C. 2.díl, Kopp, 2002 Prinz,U.-Prinz,P.: C Pocket Reference. O’Reilly, 2002 Kernighan,B.-Ritchie,D.: The C Programming Language.2nded.1989 Müldner,T.: C for Java Programmers. Addison Wesley. 2000 Johnson,M.P.: Programming Language C. 2003, www.columbia.edu/~mpj9/3101 Alonso,G.: Programming in C. ETH Zurich, www.inf.ethz.ch/department/IS/iks A0B36PRI „PROGRAMOVÁNÍ“ 13

Použité barevné značení Rozlišení jazyka Srovnatelné vlastnosti Java “C” Java “C” 1 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

C - Charakteristika Univerzální programovací jazyk střední až nižší úrovně Strukturovaný (funkce + data) Zdrojový kód přenositelný (portable), překladač ne (je závislý na platformě) Rychlý, efektivní, kompaktní kód Pružný a výkonný, stabilní Podpora konstrukcí jazyka vysoké úrovně (funkce, datové struktury) Podpora operací blízkých assembleru (ukazatele, bitové operace,…) Slabá typová kontrola Málo odolný programátorovým chybám Dává velkou volnost programátorovi v zápisu programu Výhoda: dobrý programátor vytvoří efektivní, rychlý a kompaktní program Nevýhoda: špatný nebo unavený programátor pak nepřehledný program náchylný k chybám Použití: číslicové zpracování signálů (DSP), řídicí systémy, operační systémy, grafika, databáze,… ,… A0B36PRI „PROGRAMOVÁNÍ“ 13

C vs C++ vs Java C Rychlý, kompaktní, málo bezpečný Kompilovaný kód Rychlý, málo bezpečný, velmi složitý Java Bezpečná, elegantní ale pro některé aplikace pomalá Interpretovaný kód (bytecode) s možnou částečnou podporou kompilovaných částí (JIT) A0B36PRI „PROGRAMOVÁNÍ“ 13

C a Java - Co je stejné nebo podobné v C je stejné (podobné) Program začíná funkcí main() Stavba funkcí / metod, Jméno funkce, formální parametry, návratová hodnota, vymezení těla funkce, vymezení bloku, vlastnosti lokálních proměnných (jsou v zásobníku), předávání primitivních typů parametrů hodnotou, return. Množina znaků pro konstrukci identifikátorů Primitivní typy proměnných se znaménkem (Java nezná proměnné bez znam.) char, short, int, long, float, double Aritmetické, logické, relační, bitové operátory Podmíněný příkaz if() / if() else Příkazy cyklů while() , do while(), for(;;), break, continue Programový přepínač switch(), case, default, break A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA vs C 1 JAVA public class PrvniProgram { 2 public static void main(String[] args) { System.out.printf("Nazdar Svete \n"); } C int main (int argc, char** argv) { printf("Nazdar Svete \n"); return (0); Neni “class”, “public static”, printf() stejne jako v JAVA 2 1 2 Podobnost není A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA /podobné/ (1) // Druhy program public class DruhyProgram { public static void main(String[] args) { int x = 10, y; y = x + 20; System.out.println("Hodnota proměnné x je "+x); System.out.println("Hodnota proměnné y je "+y); } 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

C /podobné/ (1) // Druhy Program int main(int argc, char** argv) { int x = 10, y; y = x + 20; printf("Hodnota promenne x = %3d\n",x); printf("Hodnota promenne y = %3d\n\n",y); return (0); } Neni “class”, “public static”, Java/println() jiné formátování výstupu než C/printf() Ale Java/printf() stejné jako C/printf() 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA /jiné/ (2) // Treti program public class TretiProgram { import java.util.*; // Scanner je v knihovně java.util // Treti program public class TretiProgram { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int x, y, z; System.out.println("Zadejte dvě celá čísla"); x = sc.nextInt(); y = sc.nextInt(); z = x + y; System.out.println("Součet čísel:"+x+" + "+y+" = "+z); } 1 2 Neošetřené chyby 3 A0B36PRI „PROGRAMOVÁNÍ“ 13

C /jiné/ (2) #include <stdlib.h> // Tretí Program #include <stdio.h> #include <stdlib.h> // Tretí Program int main(int argc, char** argv) { int x, y, z; printf("Zadejte dve cela cisla \n"); scanf("%d", &x); scanf("%d", &y); z = x + y; printf("Soucet cisel%3d +%3d =%3d \n\n",x,y,z); return (EXIT_SUCCESS); } Vstup z klávesnice Java/nextInt() vs C/scanf() Pozor: výstup ze scanf() voláním odkazem ..&x, &y Java/import… vs C/#include… - význam podobný 1 2 Neošetřené chyby 3 A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA /podobné/ (3) import java.util.*; // Scanner // Tridu Math neni treba importovat // Prepona pravouhleho trojuhelnika public class Prepona { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Zadejte odvesny pravouhl.trojúhelníka"); double x = sc.nextDouble(); double y = sc.nextDouble(); double z = Math.sqrt(x*x+y*y); System.out.println("Délka přepony je "+z); } 1 2 A0B36PRI „PROGRAMOVÁNÍ“ 13

C /podobné/ (3) #include <stdio.h> #include <stdlib.h> #include <math.h> // sqrt() // Prepona pravouhleho trojuhelnika int main(int argc, char** argv) { double x, y, z; printf("Zadejte odvesny pravouhleho trojuhelnika \n"); scanf("%lf", &x); scanf("%lf", &y); z = sqrt(x*x+y*y); printf("Delka prepony = %5.2f \n\n", z); return (EXIT_SUCCESS); } Pozor: deklarace lokálních proměnných možná pouze na začátku bloku tj. např. na začátku funkce 1 2 A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA /podobné/ (4) import java.util.*; // Scanner // Tridu Math neni treba importovat // Obvod kruhu public class ObvodKruhu { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("zadejte poloměr kruhu"); double r = sc.nextInt(); System.out.println("obvod kruhu je "+2*Math.PI*r); } 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

C /podobné/ (4) #include <stdio.h> #include <stdlib.h> // Obvod kruhu int main(int argc, char** argv) { const double PI = 3.1416; double r; printf("Zadejte polomer kruhu \n"); scanf("%lf", &r); printf("Obvod kruhu = %5.2f \n\n", 2*PI*r); printf("Obvod kruhu = %f \n\n", 2*PI*r); return (EXIT_SUCCESS); } Deklarace konstanty – const typ jmeno = hodnota 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA – if else /shodné/ (5) import java.util.*; // Prestupny rok public class Rok { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int rok; System.out.println("zadejte rok"); rok = sc.nextInt(); System.out.println("rok "+rok); if (rok > 1582){ if ((rok%4==0 && rok%100!=0) || rok%400==0) printf(" je prestupny \n\n"); else printf(" neni prestupny \n\n"); }else{ if((rok >= 8) && rok%4 == 0) } 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

C – if else /shodné/ (5) 1 #include <stdio.h> #include <stdlib.h> // Prestupny rok int main(int argc, char** argv) { int rok; printf("Zadejte rok = "); scanf("%d", &rok); printf("\nRok %4d",rok); if (rok > 1582){ if ((rok%4==0 && rok%100!=0) || rok%400==0) printf(" je prestupny \n\n"); else printf(" neni prestupny \n\n"); }else{ if((rok >= 8) && rok%4 == 0) } return (EXIT_SUCCESS); 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA – while /shodné/ (6) public class Faktorial { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("zadejte přirozené číslo"); int n = sc.nextInt(); if (n < 1) { System.out.println(n + " není přirozené číslo"); System.exit(0); } int i = 1; int f = 1; while (i < n) { i = i + 1; f = f * i; System.out.println (n + "! = " + f); 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

C – while /shodné/ (6) 1 // Faktoriál int main(int argc, char** argv) { int n, i, f; printf("Zadejte prirozene cislo (max 12) n = "); scanf("%d", &n); if(n < 1){ printf("\n n = %d neni prirozene cislo \n\n", n); exit(EXIT_FAILURE); } i = 1; f = 1; while(i < n){ i = i + 1; f = f * i; printf("\n %3d! = %d \n\n", n, f); return (EXIT_SUCCESS); Pozor: deklarace lokálních proměnných možná pouze na začátku bloku tj. např. na začátku funkce 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA – for /podobné/ (7) import java.util.*; // Zpracovani posloupnosti public class Suma1 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int dalsi, suma; System.out.println ("zadejte 5 čísel"); suma = 0; for (int i = 1; i <= 5; i++) { dalsi = sc.nextInt(); suma = suma+dalsi; } System.out.println ("součet je " + suma); 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

C – for /podobné/ (7) 1 #include <stdio.h> #include <stdlib.h> // Zpracovani posloupnosti int main(int argc, char** argv) { int i, suma, dalsi; printf("Zadejte 5 cisel \n"); suma = 0; for(i = 1; i <= 5; i++){ scanf("%d", &dalsi); suma = suma + dalsi; } printf("suma = %d \n\n", suma); return (EXIT_SUCCESS); Pozor: deklarace lokálních proměnných možná pouze na začátku bloku tj. např. na začátku funkce viz JAVA,kde int i možno založit až uvnitř závorky for() 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA – switch, break, continue /shodné/ (8) public class Prepinac { public static void main(String[] args) { . . . int v, x=6; v = 500; switch(x) { case 2: v = 300; break; case 6: v = 400; default: v = 0; } 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

C – switch, break, continue /shodné/ (8) // Prepinac int main(int argc, char** argv){ int v, x=6; . . . v = 500; switch(x) { case 2: v = 300; break; case 6: v = 400; default: v = 0; } Pozor: Nelze použít break a continue s návěštím (JAVA umožňuje) 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

C a Java - Co C nemá C nemá: Interpret kódu (JVM) (C je kompilovaný) Objektovou podporu Třídy, objekty, zapouzdření, dědičnost, polymorfismus Jednotnou metodiku vytváření a použití strukturovaných proměnných referenční proměnná, new() Automatickou správu paměti Garbage collector Ošetření výjimek metodikou chráněných bloků try, catch, finally Velikost proměnných nezávislou na platformě Standardní podporu grafického uživatelského rozhraní GUI Standardní podporu řízení událostí (events, talkers, listeners) Standardní podporu webovských aplikací (aplety, síťové připojení) Standardní podporu (semi)paralelního zpracování úloh threads, multitasking, multithreading A0B36PRI „PROGRAMOVÁNÍ“ 13

C a Java - Co C nemá nebo je jinak v C je jinak: C je kompilovaný jazyk Zdrojový kód je nezávislý (portable) na platformě (málo závislý) Spustitelný kód je závislý na platformě Členění programu na moduly, určení jejich vazeb (interface) Import knihoven (systémových i uživatelských) Určení viditelnosti proměnných (scope), modifikátory přístupu Určení doby života proměnných Předávání některých parametrů do funkcí Vytváření strukturovaných proměnných (mohou být i statické) Definování konstant Ošetření běhových chyb (run-time errors) odpovědný programátor, překladač nevynucuje Správa paměti (heap management) odpovědný programátor, malloc / free Práce s booleovskými proměnnými a řetězci (přímo boolean a String není) A0B36PRI „PROGRAMOVÁNÍ“ 13

C a Java - Co je v C navíc nebo jinak v C je navíc: Preprocessor Vkládání hlavičkových souborů (header file) do zdrojového kódu Podmíněný překlad Makra #pragma – doplňující příkazy závislé na platformě Linker – spojování přeložených modulů a knihoven do spustitelného kódu struct a bitová pole (strukturované proměnné z různých prvků) union – překrytí proměnných různého typu (sdílení společné paměti) typedef – zavedení nových typů pomocí již známých typů sizeof – určení velikosti proměnné (i strukturovaného typu) enum – výčtové typy (množina číslovaných pojmenovaných konstant) Parametr funkce jako seznam proměnné délky Ukazatele (pointer) jako prostředek nepřímého adresování proměnných Jiné názvy i parametry funkcí ze standardních knihoven (práce se soubory, znaky, řetězci, matematické funkce, ….) A0B36PRI „PROGRAMOVÁNÍ“ 13

C - Model kompilace soubor2.h Header soubor1.c soubor3.c Source code Preprocessor 1) Zdroj.kód C Compiler 2) soubor4.asm Source code Assembly code Assembler 3) Zdroj.kód ASM soubor5.lib Object code Libraries Linker Knihovny 4) Executable code Spustitelný kód A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA – statické metody /podobné/ (1) Faktoriál pomocí metod (rozklad na dílčí problémy) import java.util.*; public class Faktorial { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); System.out.println (n + "! = " + faktorial(n)); } static int ctiPrirozene() { Scanner sc = new Scanner(System.in); System.out.println ("zadejte přirozené číslo"); int n = sc.nextInt(); if(n < 1) { System.out.println (n + " není přirozené číslo"); System.exit(0); } return n; } static int faktorial ( ){. . . .} 1 2 3 4 A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA – statické metody /podobné/ (1) Faktoriál pomocí metod (rozklad na dílčí problémy) – pokrač. static int faktorial(int n) { int i = 1; int f = 1; while (i < n) { i = i + 1; f = f * i; } return(f); 5 A0B36PRI „PROGRAMOVÁNÍ“ 13

C – funkce /podobné/ (1) Faktoriál pomocí funkcí (rozklad na dílčí problémy) #include <stdio.h> #include <stdlib.h> int ctiPrirozene(void); // Function prototype int faktorial(int f); // Function prototype int main(int argc, char** argv) { int n, f; n = ctiPrirozene(); printf("\n %d! = %d \n\n", n, faktorial(n)); return (EXIT_SUCCESS); } 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

C – funkce /podobné/ (1) Faktoriál pomocí funkcí (rozklad na dílčí problémy) – pokrač. int ctiPrirozene(void){ int n; printf("Zadejte prirozene cislo (max 12) n = "); scanf("%d", &n); if(n < 1){ printf("n = %d neni prirozene cislo \n\n", n); exit(EXIT_FAILURE); } return(n); 2 3 4 A0B36PRI „PROGRAMOVÁNÍ“ 13

C – funkce /podobné/ (1) Faktoriál pomocí funkcí (rozklad na dílčí problémy) – pokrač. int faktorial(int n) { int i = 1; int f = 1; while (i < n) { i = i + 1; f = f * i; } return(f); 5 A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA – statické metody /podobné/ (2) Nejmenší společný dělitel - NSD import java.util.*; public class Nsd { public static void main(String[] args) { int a=sc.nextInt(); int b=sc.nextInt(); System.out.println(“Nejvetsi spolecny delitel” + a + ”, “ + b + “je “ + nsd(a,b)); } static int nsd(int x, int y) { while (x != y) if (x > y) x = x - y; else y = y - x; return x; 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

C – funkce /podobné/ (2) Nejmenší společný dělitel - NSD #include <stdio.h> #include <stdlib.h> int nsd(int x, int y); // Function prototype int main(int argc, char** argv) { int m, n, delitel; scanf("%d", &m); scanf("%d", &n); printf("\nNejmensi spol.delitel = %d \n\n",nsd(m,n)); return (EXIT_SUCCESS); } int nsd(int x, int y) { while (x != y) if (x > y) x = x - y; else y = y - x; return x; 1 A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA – vstup čísel z klávesnice /jiné/ (3) import java.util.*; public class CtiKlavesnici { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); System.out.println ("n = " + n); double d = sc.nextDouble(); System.out.println (“d = " + d); } } 1 2 3 4 5 6 7 A0B36PRI „PROGRAMOVÁNÍ“ 13

C – vstup čísel z klávesnice /jiné/ (3) Funkce scanf() s ošetřením chybných vstupních dat int nextInt(int *cislo); // Function prototypes int nextDouble(double *cislo); int main(int argc, char** argv) { int n; double d; if (!nextInt(&n)){ printf("Neni cele cislo \n"); return (EXIT_FAILURE) } if(!nextDouble(&d){ printf("Neni realne cislo \n"); printf(“n = %d, d = %f \n“, n, d); Return(EXIT_SUCCESS); 1 3 4 5 A0B36PRI „PROGRAMOVÁNÍ“ 13

C – vstup čísel z klávesnice – nextInt() /jiné/ (3) Funkce scanf() s ošetřením chybných vstupních dat – pokrač. #include <stdio.h> #include <stdlib.h> int nextInt(int *cislo){ // === Bezpecne pro libovolny zadany pocet znaku === // Navratova hodnota: // TRUE - zadano cele cislo // FALSE - neplatny vstup enum boolean {FALSE,TRUE}; const int BUF_SIZE = 80; char vstup[BUF_SIZE],smeti[BUF_SIZE]; fgets(vstup,sizeof(vstup),stdin); if(sscanf(vstup,"%i%[^\n]",cislo,smeti) != 1) return(FALSE); // Input error return(TRUE); } 2 6 A0B36PRI „PROGRAMOVÁNÍ“ 13

C – vstup čísel z klávestnice – nextDouble() /jiné/ (3) Funkce scanf() s ošetřením chybných vstupních dat – pokrač. #include <stdio.h> #include <stdlib.h> int nextDouble(double *cislo){ // === Bezpecne pro libovolny zadany pocet znaku === // Navratova hodnota: // TRUE - zadano realne cislo // FALSE - neplatny vstup enum boolean {FALSE,TRUE}; const int BUF_SIZE = 80; char vstup[BUF_SIZE],smeti[BUF_SIZE]; fgets(vstup,sizeof(vstup),stdin); if(sscanf(vstup,"%lf%[^\n]",cislo,smeti) != 1) return(FALSE); // Input error return(TRUE); } 7 A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA - Hra NIM /podobné/ (4) import java.util.*; public class Nim { static int pocet; // aktuální počet zápalek static boolean stroj; // =true znamená, že bere počítač public static void main(String[] args) { zadaniPoctu(); stroj = false; // zacina hrac do { if (stroj) bereStroj(); else bereHrac(); stroj = !stroj; } while (počet > 0); if(stroj) System.out.println("Vyhrál jsem"); else System.out.println("Vyhrál jste, gratuluji"); } static void zadaniPoctu() { … } static void bereHrac() { … } static void bereStroj() { … } 1 2 3 4 5 A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA - Hra NIM /podobné/ (4) static void zadaniPoctu() { Scanner sc = new Scanner(System.in); do { System.out.println("Zadejte pocet zapalek (15-35)"); pocet = sc.nextInt(); } while (pocet<15 || pocet>30); } static void bereStroj() { System.out.println(„Pocet zapalek " +pocet); int x = (pocet - 1) % 4; if (x == 0) x = 1; System.out.println(„Odebiram " +x); pocet -= x; 6 7 A0B36PRI „PROGRAMOVÁNÍ“ 13

JAVA - Hra NIM /podobné/ (4) static void bereHrac() { Scanner sc = new Scanner(System.in); int x; boolean chyba; do { chyba = false; System.out.println("Pocet zapalek " + pocet); System.out.println(„Kolik odeberete" ); x = sc.nextInt(); if (x<1) { System.out.println(„Prilis malo" ); chyba = true; } else if (x>3 || x>pocet) { System.out.println(„Prilis mnoho" ); } while (chyba); pocet -= x; 8 9 A0B36PRI „PROGRAMOVÁNÍ“ 13

C - Hra NIM /podobné/ (4) 1 2 3 4 5 #include <stdio.h> #include <stdlib.h> #define TRUE 1 // Constants #define FALSE 0 int zadaniPoctu(void); // Function prototypes int bereStroj(int pocet); int bereHrac(int pocet); int main(int argc, char** argv) { int pocet, stroj=FALSE; pocet = zadaniPoctu(); do { if (stroj) pocet = bereStroj(pocet); else pocet = bereHrac(pocet); stroj = !stroj; } while (pocet > 0); printf("Vsechny zapalky odebrany \n"); if (!stroj) printf("Vyhral jsem \n\n"); else printf("\nVyhral jste, gratuluji \n\n"); return (EXIT_SUCCESS); } 1 2 3 4 5 A0B36PRI „PROGRAMOVÁNÍ“ 13

C - Hra NIM /podobné/ (4) int zadaniPoctu(void) { int pocet = 0; 6 printf("Zadejte pocet zapalek (od 15 do 35) = "); scanf("%d", &pocet); } while (pocet < 15 || pocet > 30); return (pocet); } int bereStroj (int pocet) { int x; printf("Pocet zapalek = %d \n\n", pocet); x = (pocet - 1) % 4; if(x == 0) x = 1; printf("Odebiram %d \n", x); pocet -= x; return(pocet); 6 7 A0B36PRI „PROGRAMOVÁNÍ“ 13

C - Hra NIM /podobné/ (4) int bereHrac(int pocet) { int x, chyba; do { chyba = FALSE; printf("Pocet zapalek = %d \n\n", pocet); printf("Kolik odeberete (1..3) ? "); scanf("%d", &x); if (x < 1) { printf("Prilis malo \n"); chyba = TRUE; } else if (x > 3 || x > pocet) { printf("Prilis mnoho \n"); } } while (chyba); pocet -= x; return (pocet); 8 9 A0B36PRI „PROGRAMOVÁNÍ“ 13

Další informace k této přednášce hledejte např. v: Herout, P.: Učebnice jazyka C, Kopp, Č.Budějovice, 2008, ISBN: 978-80-7232-351-7. A0B36PRI „PROGRAMOVÁNÍ“ 13

Jazyk C Konec A0B36PRI - PROGRAMOVÁNÍ Část I. České vysoké učení technické Fakulta elektrotechnická