03 kontrola toka programa

15
STRUKTURE PODATAKA I ALGORITMI 1 Kontrola toka

Upload: mirnes83

Post on 15-Sep-2015

239 views

Category:

Documents


2 download

DESCRIPTION

informatika

TRANSCRIPT

  • STRUKTURE PODATAKA I ALGORITMI 1Kontrola toka

  • NAREDBE I BLOKOVI;znak za zavretak naredbex = 0;i++;printf(...);

    { i }oznaavaju poetak i kraj bloka naredbiIza znaka } kojim se zavrava blok ne stavlja se znak ;

  • IF-ELSENaredba grananjaSintaksaif (izraz)naredba1elsenaredba20 netano, razliito od 0 tanoif (izraz) umesto if (izraz != 0)

  • else se pridruuje najbliem ifif (n > 0)if (a > b)z = a;elsez = b;Za nametanje drugaijeg tumaenja koristite velike zagradeif (n > 0){if (a > b)z = a;}elsez = b;Dvosmislenost moe biti opasnaif (n > 0)for (i = 0; i < n; i++)if (s[i] > 0){printf("...");return i;}else /* POGRESNO*/printf("error -- n is negative\n");

  • ELSE-IFSintaksaif (izraz)naredbaelse if (izraz)naredbaelse if (izraz)naredbaelse if (izraz)naredbaelsenaredba

  • BINARNO PRETRAIVANJE/* binsearch: find x in v[0]
  • SWITCHSintaksaswitch (izraz){case konst-izraz: naredbecase konst-izraz: naredbedefault: naredbe}Prekid izvravanja naredbe switch se vri naredbom break

  • BROJANJE POJAVLJIVANJA POJEDINIH KARAKTERA#include main() /* count digits, white space, others */{int c, i, nwhite, nother, ndigit[10];

    nwhite = nother = 0;for (i = 0; i < 10; i++) ndigit[i] = 0;

    while ((c = getchar()) != EOF){switch (c){case '0': case '1': case '2': case '3': case '4':case '5': case '6': case '7': case '8': case '9':ndigit[c-'0']++;break;case ' ': case '\n': case '\t':nwhite++;break;default:nother++;break;}}

    printf("digits =");for (i = 0; i < 10; i++) printf(" %d", ndigit[i]);

    printf(", white space = %d, other = %d\n",nwhite, nother);

    return 0;}

  • PETLJE WHILE I FORPetlja while se izvrava sve dok je izraz taan. Tanost izraza se proverava pre poetka svakog ciklusa.while (izraz)naredbaforfor (izraz1; izraz2; izraz3)naredba

    je isto to i

    izraz1;while (izraz2){naredbaizraz3;}beskonana for petljafor ( ; ; ){...}

  • OPERATOR ZAPETA "," U FOR PETLJINavoenje vie izrazaFunkcija za preokretanje stringa

    #include

    /* reverse: reverse string s in place */void reverse(char s[]){int c, i, j;

    for (i = 0, j = strlen(s)-1; i < j; i++, j--){c = s[i];s[i] = s[j];s[j] = c;}}

    Ne garantuju izvravanje sa leva na desno

  • WHILE ILI FOR?while ((c = getchar()) == ' ' || c == '\n' || c = '\t'); /* skip white space characters */

    for (i = 0; i < n; i++)...

    Indeks i granica for petlje se mogu menjatiIndeks zadrava svoju vrednost nakon izlaska iz petlje

  • KONVEZIJA STRINGA U BROJDozvoljava postojanje vodeeg praznog prostora i znaka + ili

    #include

    /* atoi: convert s to integer; version 2 */int atoi(char s[]){int i, n, sign;

    for (i = 0; isspace(s[i]); i++); /* skip white space */

    sign = (s[i] == '-') ? -1 : 1;if (s[i] == '+' || s[i] == '-') i++; /* skip sign */

    for (n = 0; isdigit(s[i]); i++)n = 10 * n + (s[i] - '0');

    return sign * n;}

  • PETLJA DO-WHILEPetlja do-while se izvrava dok je izraz taanTanost izraza se proverava nakon zavretka svakog ciklusa donaredbawhile (izraz);Funkcija za konverziju broja u string/* itoa: convert n to characters in s */void itoa(int n, char s[]){int i, sign;

    if ((sign = n) < 0) /* record sign */n = -n; /* make n positive */

    i = 0;do /* generate digits in reverse order */{ s[i++] = n % 10 + '0'; /* get next digit */} while ((n /= 10) > 0); /* delete it */

    if (sign < 0) s[i++] = '-';s[i] = '\0';reverse(s);}

  • NAREDBE BREAK I CONTINUEbreak omoguava prevremeni izlazak iz petlji for, while, do-while i switchFunkcija koja uklanja prazna mesta, tabulatore i nove redove sa kraja stringa/* trim: remove trailing blanks, tabs, newlines */int trim(char s[]){int n;

    for (n = strlen(s)-1; n >= 0; n--)if (s[n] != ' ' && s[n] != '\t' && s[n] != '\n')break;

    s[n+1] = '\0';

    return n;}continue izaziva prestanak izvravanja trenutne iteracije i zapoinje izvravanje sledee iteracije petljefor (i = 0; i < n; i++){if (a[i] < 0) /* preskoci negativne elemente */continue;

    ... /* obradi pozitivne elemente */}

  • NAREDBA GOTO I OZNAKE (LABELE)Korienje naredbe goto i oznaka (labela) je loa programerska praksa i zato ih ovde neemo obraivatiKorienje naredbe goto dovodi do nepreglednog koda ije je izvravanje teko pratiti, pa je samim ti est uzrok greaka koje se teko otkrivajuNaredba goto nije neophodna i svaki program je mogue napisati i bez nje