440 likes | 654 Views
C/C++ a Pascal. Ing . Peter Pi štek , Ceng . Obsah. Vsuvka na základe podnetu z minulého stretnutia Fotky fakulty Vývojové prostredia Porovnanie príkazov C/C++ s Pascalom Príklady. Vsuvka z minulého stretnutia. Projekty súvisiace s grafikou 3D budova - http://147.175.159.181/HTML/
E N D
C/C++ a Pascal Ing. Peter Pištek, Ceng.
Obsah • Vsuvka na základe podnetu z minulého stretnutia • Fotky fakulty • Vývojové prostredia • Porovnanie príkazov C/C++ s Pascalom • Príklady
Vsuvka z minulého stretnutia Projekty súvisiace s grafikou • 3D budova - http://147.175.159.181/HTML/ • Je nutný O3Dplugin • mc2 – prvá študentská online televízia – www.mc2.sk • Multimediálne centrum STU
Vývojové prostredia • VisualStudio 2010 (MS) • http://www.softy.sk/clanok-21-microsoft-visual-studio-2010-express-web-developer.aspx • Turbo C++ Explorer (Borland) • http://www.turboexplorer.com/cpp • CodeLite • http://codelite.org/LiteEditor/Download
C • Základné konštrukcie jazyka • Základné údajové šruktúry • Funkcie • Cykly a rekurzia • Práca so súbormi • Struct
Prvý pohľad „Helloworld“ • program HelloWorld; • begin • {tuniecovypiseme} • writeln('Hello World'); • end. • { tumamkomentarnaviacriadkov } #include<stdio.h> int main(void) { // tuniecovypiseme printf("hello,world\n"); return 0; } /* tumamkomentar naviacriadkov*/
Identifikátory + premenné • C je casesensitive jazyk ! (pom, Pom, POM, PoM) • Kľúčové slová sú vždy malými písmenami (if, for, ..) • Deklarovanie premenných (v C hocikde) int i, j=1; char c=3, d=‘a’, e=‘\n’; i=4; c=d=j=23; long k; k=12345678LU; j=0xAA; float f =3.14; f=.14; f=7E23;… var i, j: integer; c, d: char; i:=4;
Dátové typy • int • long (longint) • shor (shortint) • char • float • double • longdouble • Slovíčko „unsigned“ – bezznamienkový typ (napr. unsignedint) • Integer • Longint • Shortint • byte/char • Single • Real • Double
Špeciálne znaky \n 0x0A nový riadok (new line, linefeed) \r0x0D návrat na začiatok riadku (carriagereturn) \f0x0C nová stránka (formfeed) \t0x09 tabulátor (tab) \b0x08 posun doľava (backspace) \a0x07 písknutie (allert) \\0x5C spätné lomítko (backslash) \'0x2C apostrof (single quote) \00x00 nulový znak (nullcharacter)
Unárne a binárne operátory • Priradenie je unárny operátor (čiastočne aj + a -) • X= +5; • Sčítanie (+) • Odčítanie (-) • Násobenie (*) • Reálne delenie (/) • Celočíselné delenie (/) • Modulo (%) int/int->celočíselné int/float ->reálne float/int ->reálne float/float ->reálne
Špeciálne operátory a operátory priradenia • Dekrement (--) a inkrement (++) • x++, ++x; -> j=x++; j=++x; • x += vyraz • x -= vyraz • x *= vyraz • x /= vyraz • x %= vyraz
Funkcie a procedúry • C nemá procedúry • Povinná funkcia main() • Ak funkcia nemá mať návratovú hodnotu tak použiť void Návratový_typmeno_f (argumenty) {telofunkcie} intsucet (int a, int b) {return a+b;}
Deklarovanie a použitie funkcií voidmain () {inti,j,k; k=B(i,j); k=A(j,i); } int A (int a, int b) {return B(a,b);} int B (int a, int b) {return a+b;} • int A (int a, int b) • {return B(a,b);} • int B (int a, int b) • {return a+b;} voidmain () {inti,j,k; k=B(i,j); k=A(j,i); } • int A (int a, int b); • int B (int a, int b); voidmain () {inti,j,k; k=B(i,j); k=A(j,i); } • int A (int a, int b) • {return B(a,b);} • int B (int a, int b) • {return a+b;}
Vstup a výstup #include <stdio.h>usescrt; intgetchar () void putchar (int c) scanf(“…”, …)read/readln printf(“…”, …) write/writeln scanf (“%d”, &i); read(i); readln(i); printf (“%d”, i); write (i); scanf (“%d %d %f, &i,&j,&k); printf (“%d je sucetcisel \”%d\” a \”%d\””,i+j,i,j); printf (“Pracovalina 120%%”);
Špeciálne znaky formátovacieho reťazca cznak d desiatkové číslo typu signedint ld desiatkové číslo typu signedlong u desiatkové číslo typu unsignedint lu desiatkové číslo typu unsignedlong f float (pre printf() tiež double) Lflongdouble lfdouble x hexadecimálne číslo malými písmenami X hexadecimálne číslo veľkými písmenami o osmičkové číslo s reťazec Všade treba samozrejme uviesť „%“ printf(“Znak ‘%c’ ma ASCII kod %d (%XH)\n”,c,c,c); Znak ‘A’ ma ASCII kod 65 (41H) – a odentruje
Formátovanie špeciálnych reťazcov • %2d i:2 • 1 • 12 • %6:2f i:6:2 • printf("Kolko stalo %s pivo?\n", "jedno");
Booleovské výrazy C PascalTypu int – FALSE=0 TRUE=1 == =/extrémne častá chyba != <> && AND || OR ! NOT < < > > <= <= >= >=
Zátvorky a podmienené výrazy • (y != 0) && (x / y < z) • ((c >= 'A') && (c <= 'Z')) • j= j && (i==1); • podmienka ? vyraz_1: vyraz_2; • Akpodmienkatak vyraz_1 inak vyraz_2 • k = (i > j) ? i : j; • Operátor čiarky • j=(i++,i-j);
Podmienka if if (podmienka) prikaz; if podmienka then prikaz if (podmienka) if podmienka then { begin prikaz_1; prikaz_2; … prikaz_1; prikaz_2;… } end; if (podmienka) prikaz_1; if podmienka then prikaz_1 else prikaz_2; else prikaz_2; if ((c = getchar())>= 'A' && c <= 'Z') printf("%d\n” ,c );
Switch (case) podmienka switch (podmienka){ case hodnota1: prikaz_1; break; case hodnotan: prikaz_n; break; default: prikaz; break; } case podmienka of hodnota1: prikaz_1; hodnotan: prikaz_n; else prikaz; end;
while • break, continue C Pascal while (podmienka) while (podmienka)do prikaz; prikaz; • {} a begin/end • Testujepodmienkupredprechodom int c; while ((c = getchar()) != '*') { if (c != ' ') putchar(c); }
do-while • Testujepodmienkupredprechodom (minimálne 1x) do prikazy; while (podmienka);
For cyklus • Výhodou v C, že môže byť nekonečný for (start_vyraz;stop_vyraz;iter_vyraz) prikaz; for (inti=1;i<=10;i++) {prikazy} for i:=1 to 10 do begin prikazy; end; for (i=1;j<=10;k++) for (i=1,j=5;(j<=10)&&(i>5);k++)
Transformácia na while for (vyraz_start; vyraz_stop; vyraz_iter) prikaz; vyraz_start; while (vyraz_stop) { prikaz; vyraz_iter; }
Rekurzia intfakt(int n) { return ((n <= 0) ? 1 : n * fakt(n - 1)); }
Mini opakovanie switch(getchar()) { case 'a' : putchar('a'); case 'b' : putchar('b'); case 'c' : putchar('c'); default : putchar('x'); } x, y: double; printf("Zadajte2realnecisla: "); scanf("%lf %lf", x, y); printf("%.2lf\n", (x > y) ? x : y); for (i = 1,i <= n,i++) { for (j = 2, j <=i,j++) printf("%d ", &j); putchar('\n'); }
Súbory • Zo súboru, z obrazovky ( CTRL + Z – koniec súboru) • Štruktúra FILE FILE *s; var s:text; s=fopen(“meno”,”r”); assign (f,’meno’); fflush (s); fclose (s); close (s); • Režimy“r”, “w”, “rb”, “wb”, “a”, “r+”, “w+”, “a+” if (s==NULL) printf (“chyba”); EOLN = \n EOF = EOF (-1 musí byť int) feof () – true/false – používa sa pri binárnych súboroch 0xFF = EOF
Súbory c = getc(f); c = getchar(); putc(c, f); putchar(c); fscanf(f, "format", argumenty); Readln (f,premenna);/read fprintf(f, "format", argumenty); Writeln (f,premenna);/write • Súbory treba zatvárať ! • funkcia fscanf() vracia počet úspešne prečítaných položiek (v prípade konca súboru vracia hodnotu EOF)
Štandardný vstup a výstup • stdin, stdout, stderr • getc (stdin) == getchar() • fprintf (stdout, ....) == printf (....) • Význam – presmerovanie na iné vstupy/výstupy • Načítate znak, ktorý už viete, že nechcete ? ungetc(c, fr) -> vráti znak späť do bufferu
Typové konverzie • implicitná/explicitná + funkcie atoi,.. int unsignedint unsignedint long long unsignedlong unsignedlong float float double double longdouble int i=‘a’ + 2; (int)char_vyraz- prevod znaku na ordinálne číslo (char) int_vyraz- prevod ordinálneho čísla na znak (int) double_vyraz- odrezanie desatinnej časti (double) int_vyraz- prevod celého čísla na reálne (double) float_vyraz- zväčšenie presnosti
Definovanie konštánt • #define MAX 100 • #define MOD % • #define SUBOR “meno.txt” • printf (“toto je MAX”); printf (“toto je %d”,MAX); • #define cena 50 • #undefcena • #define cena 49 • #define ERROR {printf (“ejbistu ..chyba\n”);} • #define getchar() getc(stdin)
Preddefinované makrá • makrá v ctype.h - makránaurčenietypuznaku • isalnum - vrátiznak, ak je znakčíslicaalebopísmeno • isalpha - vrátiznak, ak je znakmaléaleboveľképísmeno • isascii - vráti 1, ak je znak ASCII znak (0 až 127) • iscntrl - vrátiznak, ak je znak Ctrl znak (1 až 26) • isdigit - vrátiznak, ak je znakčíslica • isprint - vráti 1, ak je znaktlačiteľný (32 až 126) • isspace - vrátiznak, ak je znakbielyznak (medzera, tabulátor...) • isupper - vrátiznak, ak je znakveľképísmeno • islower - vrátiznak, ak je znakmalépísmeno • tolower - konverzia na malé písmeno • toupper - konverzia na veľké písmeno • toascii - prevod na ASCII - len najnižších 7 bitov je významných
Typedef a polia • Definuje nový typ (Pascal type) • Vhodný pri definovaní vlastných/zložitejších typov typedefintinteger; typedef float *P_foat; P_float f; • typpremenna[rozsah] • Vždy indexácia od 0 po rozsah-1 • „rozsah“ musí byť známy už v čase prekladu
Príklady definície polí Pascal X: array[0..9] of integer; #defineN 10 int x[N], y[N+1], z[N*2]; • x má 10 prvkov (0..9), y má 11 prvkov (0..10), z má 20 prvkov (0..19) • Inicializácia v definícií – int x [3]={1,2,3}; • Pole ako parameter funkcie – void funkcia (int pole[]) • Viacrozmerné polia – int x [5][4][5][7];
Reťazce • Poliatypu char • Ukončené sú vždy \0 – ukončovací znak • Ak by chýbal tak číta reťazec až kým nenarazí naň niekde v pamäti char c [4]=“ahoj” – chyba char c [5]=“ahoj” – ok scanf (“%s”,c) – tunemusí byť & %10s – načíta 10 znakov char s[11]; for(i = 0; i < 11-1; i++) s[i] = '*'; s[10-1] = '\0';
Práca s reťazcami • <string.h> • intstrlen(char *s); • char *strcpy(char *s1, char *s2); • char *strcat(char *s1, char *s2); • char *strchr(char *s, char c); • intstrcmp(char *s1, char *s2); • char *strstr(char *s1, char *s2); • char *strncpy(char *s1, char *s2, int max); • char *strrchr(char *s, char c); • intatoi(char *s); • longatol(char *s); • floatatof(char *s);
Práca s reťazcami • char *gets(char *s); (fgets) • intputs(char *s); (fputs)
Štruktúry typedefstructmiery{ intvyska; float vaha; } MIERY; MIERY pavol, jan, peter; TBookRec = Record Title, Author, ISBN : String; Price : Real; End; Kniha: TBookRec typedefstruct { intvyska; float vaha; }MIERY; MIERY pavol,jan, peter; struct{ intvyska[20]; float vaha; } peter,pavol,jan; struct miery { intvyska; float vaha; }; struct mierypeter; structmiery{ intvyska; float vaha; } peter,pavol,jan; Prisupnapr. peter.vyska[1]=198;
Vymenované typy typedefenum{ MODRA, CERVENA, ZELENA, ZLTA } FARBY; FARBY c; c=MODRA; c=2; typedefenum{ MODRA = 0, CERVENA = 4, ZELENA = 2, ZLTA } FARBY;
Príklad #include <stdio.h> int main(intargc, char *argv[]) { if(argc == 2 && !strcmp(argv[1], "-h")) printf("help\n"); else printf("program\n"); return 0; }
int main(intargc,char** argv){ int o; while ((o = getopt(argc, argv, "hif:")) != -1) { switch (o) { case 'h': //help help(); exit(0); case 'f': //spracovaniesuboru printf("Using file name: %s\n",optarg); read_subor(optarg); break; case 'i': //z klavesnice createMatrix(); break; default: printf("Neznamy argument: %c\n",o); break; }}return 0;}
Ďakujem za pozornosť Nabudúce pointery, základy C++, základy práce zo sieťou Úvod do sieti