OSNOVE C JEZIKA skripta sauradjenim primjerima

Embed Size (px)

Citation preview

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    1/49

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    2/49

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    3/49

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    4/49

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    5/49

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    6/49

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    7/49

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    8/49

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    9/49

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    10/49

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    11/49

    }

    20./*Napisati program za izraunavanje faktorijela zadatog broja n korienjem funkcijefakt().*/#includeint fakt(int n)

    { int p=1,i;for(i=2;i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    12/49

    =

    =

    0n,x/1

    0n,xx

    0n,1

    xn

    1nn

    moe se izvriti sledea rekurzivna formula:

    ( ) ( )( ) =

    =

    0n,n,xs t e p e n/1

    0n,1n,xs t e p e nx

    0n,1

    n,xs t e p e n

    na osnovu ovoga se formira sledea rekurzivna funkcija:#includedouble stepen(double x, int n)

    {if (n==0) return 1;if(n>0) return x*stepen(x,n-1);if(n

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    13/49

    {int i,ocena[10];printf("Uneti ocene ucenika\n");for(i=0;i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    14/49

    {int i;printf("Uneti niz \n");for(i=0;i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    15/49

    {int i=0;float s=0;while(i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    16/49

    {int i;for(i=0;i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    17/49

    int k,i,j;for(i=0;i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    18/49

    a[i]=a[j];a[j]=pom;j--;

    }}

    }

    void pisi(float a[],int n){int i;printf("Formirani niz\n");for(i=0;i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    19/49

    {for(kol=0;kol

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    20/49

    citaj(a,n);printf("Uneti elemente matrice b\n");citaj(b,n);printf("Zbir matrica a i b je:\n");zbir(a,b,c,n);

    }

    32./*Program za mnoenje dve zadate matrice*/#includevoid citaj(float m[][10],int n){

    int i,j;for(i=0;i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    21/49

    33./*Program za transponovanje matrice a dimenzije n*/#include void citaj(int a[][10],int n){

    int i,j;printf("Uneti elemente matrice \n");

    for(i=0;i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    22/49

    int i,j;for(i=0;i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    23/49

    POKAZIVAI (POINTERI)

    Pokazivai omoguavaju formiranje sloenih dinamikih struktura podataka (liste, magacini,stabla, redovi i dr.) i s tim u vezi dinamiko dodeljivanje memorije, prenos argumenata funkcijereferisanjem, efikasniji rad sa vektorima i prenos funkcija kao argumenata u druge funkcije.Proizvoljna programska promenljiva memorisana je u odreenom memorijskom bloku, na odreenoj

    programskoj lokaciji ili adresi. Pokazivai omoguavaju indirektni nain za pristupanjeprogramskim promenljivim, korienjem i manipulacijom adresama promenljivih. U C jezikumoemo deklarisati promenljivu, prom:

    int *prom;koja omoguava da se indirektno pristupi vrednosti promenljive prom. Karakter zvezdica *deklarie promenljivu kao pokaziva, a tip int da je promenljiiva prom pokaziva na celobrojnupromenljivu, to znai, ovo predstavlja indirektan pristup celobrojnim promenljivim. Adresnioperator & se koristi u funkciji scanf za prenos uitane vrednosti u pozivajuu funkciju main().

    Operator indirekcije * omoguava indirektno pristupanje promenljivoj koristei pokaziva natu promenljivu. Ako je x deklarisana kao int, tada se iskazom

    x=*prom;promenljivoj x dodeljuje vrednost promenljive na koju pokazivaj prom ukazuje. Operatori * i &su inverzni.U C jeziku postoji specijalni operator za indirektnu selekciju lanova strukture. To je operator ->.Operator -> je operator selekcije lanova strukture sa pokazivaem na strukturu.

    Dinamike strukture podatakaDinamike strukture zahtevaju eksplicitno rezervisanje i oslobaanje memorije. U sistemskojbiblioteci svakog C prevodioca postoje funkcije malloc, calloc, realloc i free, kojima se rezervie ioslobaa mimorijski blok. Definicija ovih funkcija je sledea:

    1. char *malloc(size). Rezervie memorijski blok veliine size bajtova, koji se inicijalizuje na0. Argument size je unsigned. U sluaju uspene rezervacije malloc vraa pokaziva narezervisani memorijski blok. U protivnom, vraa 0.

    2. char *calloc(n, size). Rezervie memorijski blok dovoljan za memorisanje n elemenatasvaki veliine size bajtova, znai n*size. Rezervisan memorijski blok je inicijalizovan na 0.U sluaju uspene rezervacije calloc vraa pokaziva na char, koji pokazuje na rezervisanmemorijski blok. U protivnom, vraa 0.

    3. void free(pokaz).Oslobaa memorijski blok, koji je rezervisan funkcijama calloc i malloc.Argument pokaz je pokaziva na char, koji pokazuje na memorijski blok za oslobaanje.Funkcija free ne vraa nikakvu vrednost.

    4. char *realloc(pokaz, size).Oslobaa rezervisani memorijski blok i rezervie novi veliinesize bajtova. Argument pokaz je pokazatelj na char i defimnie memorijski blok, koji serealocira. Argument size je unsigned i odreuje veliinu realociranog memorijskog bloka.Ako je realociranje uspoeno realloc vraa pokaziva na char, koji pokazuje na memorijskiblok. U protivnom, realloc vraa 0.

    35./*Izraunati zbir i razliku dva broja koristei pokazivae na funkciju*/#includeint zbir(int *a,int *b){

    return *a+*b;}int razlika(int *a,int *b){

    23

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    24/49

    return *a-*b;}void main(void){

    int a=10, b=5, r_zbir, r_razlika;int (*pointer[2])(int *,int *);

    pointer[0]=zbir;pointer[1]=razlika;r_zbir=(*pointer[0])(&a,&b);r_razlika=(*pointer[1])(&a,&b);printf("zbir =%d razlika=%d\n",r_zbir,r_razlika);

    }

    36./*Stranice a i b pravougaonika su prirodni brojevi. Odrediti, na koliko se kvadratamaksimalne povrine moe isei dati pravougaonik. Ispisati dimenzije kvadrata. Na primer zaa=12 i b=7 se ispisuje:1 kvadrata stranice: 71 kvadrata stranice: 52 kvadrata stranice: 22 kvadrata stranice: 1#includevoid razmeni(int *a, int *b){

    int t;t=*a;*a=*b;*b=t;

    }void main(){

    int a,b;printf("Uneti stranice pravougaonika\n");scanf("%d%d",&a,&b);if(a==b)

    printf("Jedan kvadrat stranice %d\n",a);else

    while(a){

    if(a

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    25/49

    char tekst[]={"Ovo je znakovni niz\n"};char *p_tekst;int i;p_fniz=fniz;a=*p_fniz;b=*(p_fniz+2);

    p_fniz=&fniz[2];c=*(p_fniz+2);printf("a=%f b=%f c=%f\n",a,b,c);for(i=0;tekst[i]!='\0';++i)putchar(tekst[i]);for(p_tekst=tekst;*p_tekst!='\0';++p_tekst)putchar(*p_tekst);

    }

    38. /*Program za odredjivanje duzine stringa*/#includeint duzina(char *p_string);void main(int argc,char *argv[]){

    char *p_text={"ovo je znakovni niz\n"};int i;for(i=1;i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    26/49

    }

    void razmeni (int *x,int *y){

    int p;p=*x; *x=*y; *y=p;

    }void f(int a[][10],int n, int k){

    int i,j;for(i=0;i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    27/49

    STRINGOVIStandardni fajlovi zaglavljaPrototipovi bibliotecnih funkcija su dati u nekoliko standardnih fajlova zaglavlja. Npr. standardnifajlovi su:stdio.h-sadrzi definisane funkcije printf , scanf , putchar i getchar assert.h-assertions

    ctype.h-definisane su funikcije za ispitivanje karakterafloat.h-ogranienja sistema za realne tipove podatakalimits.h-ogranienja sistema za celobrojne tipove podatakamath.h - matematicke funkcijesetjmp.h-nelokalni skokovisignal.h-javljanje greaka i signalastdarg.h-lista parametara promenljive duinestdlib.h-utility functions; number conversions, memory allocation, exit and system, Quick Sortstring.h-funkcije stringovatime.h-vremenske i datumske funkcije

    Nizovi karaktera su jednodimenzionalni vektori tipa char.

    U standardnom zaglavlju stdio.hdefinisane su sledee funkcije:getchar() - ita sledei znak, ukljuujui i bele znakove, preko tastature. Vrednost funkcije je

    kod proitanog znaka ili simbolika konstanta EOF (end of file) ukoliko je proitan signal za krajdatoteke kao i u sluaju greke u toku itanja.

    putchar(c) - funkcija za ispisivanje znaka c na ekranu.gets(s) - funkcija za itanje jednog reda tekstaputs(s)-funkcija za ispisivanja jednog reda tekstagetc(c)-unos jednog karaktereputc(c)-tampanje jednog karakterastdin-standardni ulazni tok stdout-standardni izlazni tok stderr-standardne grekeEOF-end of fileprintf(format, arg1,...)-tampanje formatiranih podatakasprintf(s,format, arg1,...)-tampanje u string sscanf(format, &ime1,...)-unos formatiranih podatakasscanf(s,format, &ime1,...)-unos iz stringa sFILE *fp-deklaracija pokazivaa na fajlfopen(ime,mod-reim)-pokaziva na ime fajla (mod: r-itanje, w-upis, a-dodavanje)fprintf(fp,format,arg1,...)-upis u fajlfscanf(fp,format,arg1,...)-itanje iz fajlafclose(fp)-zatvaranje fajlaferror(fp)-nenulta vrednost ukoliko je grekafeof(fp)-nenulta vrednost ukoliko je kraj datotekefgets(s,max,fp)-ita liniju u string s (< max karaktera) iz datoteke fpfputs(s,fp)-ispisuje string s u datoteku fp

    U standardnom zaglavlju string.h definisane su sledee funkcije:strlen(cs)-vraa duzinu cs-a.

    27

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    28/49

    strcmp(cs,st)-uporeuje niz cs sa nizom ct; vraa ct.

    strcpy(s, c)-kopira niz c u niz s.strcpy(s, c,n)-kopira niz c u niz s prvih n karaktera.srtcat(s, c)-povezuje niz karaktera c iza niza ssrtcat(s, c,n)-povezuje niz karaktera c iza niza s poevi od n-tog karaktera

    srtcmp(s, c)-uporeuje niz karaktera s sa nizom csrtcmp(s, c)-uporeuje prvih n karaktera niza s sa nizom cstrchr(s, c)-pokaziva na prvi karakter niza c u nizu sstrrchr(s, c)-pokaziva na poslednji karakter niza c u nizu smemcpy(s, c, n)-kopira n karaktera iz niza c u niz smemmove(s, c, n)-kopira n karaktera iz niza c u niz s sa mogunou preklapanjamemchr(s, c, n)-pozakizva na prvi c u privih n karaktera u nizu smemset(s, c, n)-smeta c u prvih na karaktera niza s

    U standardnom zaglavlju ctype.hdefinisane su sledee funkcije:isalnum(c)-ispituje da li je c alfanumeriki karakter isalpha(c)-ispituje da li je c alfabetski karakter isalnum(c)-ispituje da li je c alfanumeriki karakter iscntrl(c)-ispituje da li je c kontrolni karakter isdigit(c)-ispituje da li je c cifraisgraph(c)-ispituje da li je c tampani karakter (ne ukljuuje prezninu)islower(c)-ispituje da li je c malo slovoisprint(c)-ispituje da li je c karakter (samo da nije praznina)ispunct (c)- ispituje da li je c izuzimajui praznine, slovo ili brojisspace(c)-ispituje da li je c praznina, formfeed, nova linija, vertikalni, horizontalni karaker isupper(c)-ispituje da li je c veliko slovoisxdigit(c)-ispituje da li je c heksadecimalni brojtolower(c)-pretvara c u malo slovotoupper(c)-pretvara c u veliko slovo

    40. /*Prikazivanje tablice ASCII kodova*/#includevoid main(){

    char c; int i;printf("\t\t Tablica ASCII kodova\n\n");for(c=' ';c

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    29/49

    char ch;int praznina = 0, nl = 0,ostalo = 0;while ((ch = getchar()) != '#'){

    if (ch == ' ')praznina++;

    else if (ch == '\n')nl++;else

    ostalo++;}printf(" Broj praznina: %d\n Novih linija: %d\n Ostali karakteri: %d\n", praznina, nl, ostalo);

    }

    42. /*Program za odredjivanje duzine nizova karaktera*/#includeunsigned strlen(s)

    char *s;{

    unsigned i;for(i=0;*s!='\0';++s,++i);return(i);

    }main(){

    char demo[]="Uvod u C jezik";printf("Duzina niza demo je %d\n",strlen(demo));

    }

    43. /*Program za ilustraciju brojanja reci u nizu karaktera*/#includeunsigned wc(s)char *s;{

    unsigned n=0;while(*s){

    while(*s==' '||*s=='\n'||*s=='\t')++s;

    if(*s){

    ++n;while(*s!=' '&&s!='\n'&&*s!='\t'&&*s!='\0')

    ++s;}

    }return(n);

    }main()

    29

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    30/49

    {static char string[]="Ilustracija procesiranja nizova\t karaktera\n\t\n";printf("Broj reci je %u\n",wc(string));

    }

    return l;

    }44./*Napisati program za odredjivanje broja velikih i malih slova u unetom tekstu.*/#include void main(){

    int ch;int uct = 0,lct = 0;while ((ch = getchar()) != EOF)

    if (isupper(ch))uct++;

    else if (islower(ch))lct++;

    printf("\n");printf("velikih slova: %d\n", uct);printf("malih slova: %d\n", lct);

    }

    45./*Napisati program za odredjivanje ukupnog broja karaktera u unetom tekstu.*/#include int main(void){

    int ch;int ct = 0;

    while ((ch = getchar()) != EOF)

    ct++;printf("\n");

    printf("Uneto je %d karaktera\n", ct);}

    46./*Napisati program kojim se iz stringa s brie svaki znak koji odgovara bilo kom znakstringa t.*/#include #include void main(){

    char s[50], t[50];int i,j;gets(s);

    gets(t);for(i=j=0;s[i];i++)

    30

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    31/49

    if(!strchr(t,s[i]))s[j++]=s[i];

    s[j]='\0';puts(s);

    }

    47./*Napisati program koji iz datog stringa s izbacuje sve komentare oblika /*...*/, s tim tokomentaru nema komentara*/#include #include void main(){

    char s[100], *p,*q;gets(s);

    while(p=strstr(s,"/*")){

    q=strstr(s,"*/");strcpy(p,q+2);

    }puts(s);

    }

    48./*Napisati program koji iz datog stringa s odreuje prosean broj slova u reima parneduine*/#include void main(){

    char s[100];int i,k=0,br=0;float q=0;gets(s);for(i=0;s[i];i++)

    if(s[i]!=' ') k++;else

    if(k>0){

    if(k%2==0){

    br++; q+=k;}k=0;

    }if(k>0)

    if(k%2==0){

    br++;q+=k;

    }printf("Prosecan broj simbola u recima parne duzine je %f\n",q/br);

    31

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    32/49

    }49. /*Napisti program za ucitavanje neuredjenog spiska imena prekog glavnog ulaza, po jednime iz svakog reda, sve dok umesto prezimena i imena ne procita dve tacke sa znakomrazmaka izmedju. Po zavrsetku citanja imena treba urediti i potom ispisati na glavnom izlazupo jedno ime u svakom redu*/

    #include#include#define N 100#define D 40void main(){

    char ljudi[N][D+1];int i, n=0;

    /*Citanje neuredjenog niza imena*/printf("Neuredjen niz prezimena i imena?\n\n");dogets(ljudi[n]);while(strcmp(ljudi[n++],". .")!=0);n--;

    /*Uredjivanje niza imena*/for(i=0; i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    33/49

    int atoi(s)char *s;{

    int value=0,sign=1;char c;if(*s=='-')

    { ++s;sign=-1;

    }else if(*s=='+')

    ++s;while(isspace(*s))

    ++s;while(isdigit(c=*s++))

    value=10*value+c-'0';return(sign*value);

    }void main(){

    char niz[81];printf("Ukucajte broj:\n");scanf("%s",niz);printf("\"%s\"=%d\n",niz,atoi(niz));

    }

    33

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    34/49

    STRUKTURE PODATAKA

    Strukture su skupovi heterogenih elemenata (jedan elemenat je char, drugi je int itd.). U Cjeziku postoji mogunost grupisanja logiki povezanih promenljivih razliitog tipa u jednu celinu,strukturu. Koristei kljunu re struct moemo definisati strukturu datum sa tri celobrojnekomponente, koje predstavljaju dan, mesec i godinu. Ovo se deklarie:

    struct datum {int dan;int mesec;int godina;};

    Struktura datum sadri tri elementa tipa int: dan, mesec i godina, koji se nazivajulanovima strukture. Kljuna re struct definie strukturu tako da promenljive mogu biti deklarisanekao tip struct datum. Za selekciju lanova strukture koristi se operator .(taka), tako to sespecificira ime promenljive, operator taka i ime lana. Operator . ima najvii prioritet meuoperatorima C jezika i istog je prioriteta sa operatorom selekcije elementa vektora (uglaste zagrade).Selekcija lana strukture ima optu formu

    ime_promenljive.ime_clanaInicijalizacija strukture je slina inicijalizaciji vektora. Inicijalizacione vrednosti se navode

    izmeu vitiasti zagrada razdvojene zarezom.

    51. /*Program koji za za zadato tekue vreme odreuje naredno vreme.*/#includevoid main(){

    struct vreme{int sat;int minut;int sekund;

    }tekuce_vreme,naredno_vreme;printf("Unesite tekuce vreme?[cc:mm:ss]");scanf("%d:%d:%d",&tekuce_vreme.sat,

    &tekuce_vreme.minut,&tekuce_vreme.sekund);

    naredno_vreme=tekuce_vreme;if(++naredno_vreme.sekund==60){

    naredno_vreme.sekund=0;if(++naredno_vreme.minut==60){

    naredno_vreme.minut=0;if(++naredno_vreme.sat==24)naredno_vreme.sat=0;

    }}printf("Naredno vreme je %02d:%02d:%02d\n", naredno_vreme.sat,naredno_vreme.minut, naredno_vreme.sekund);

    }

    34

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    35/49

    52. /*Napisati program za formiranje strukture student sa karakteristikama Ime, Prezime,broj indeksa, srednja ocena. Za uneti broj studenata n, sortirati studente prema srednjoj ocenii ispisati na ekranu*/#includetypedef struct student{

    char Ime[20],Prezime[20];

    int broj_indeksa;float srednja_ocena;};void razmeni(struct student *a, struct student *b){

    struct student pom;pom=*a;*a=*b;*b=pom;

    }void sort(struct student STF[], int n){

    int i, j;for(i=0;i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    36/49

    printf("Broj indeksa: %d\n",STF[i].broj_indeksa);printf("Srednja ocena: %5.2f\n\n\n",STF[i].srednja_ocena);

    }}

    53. /*Program za prevodjenje srpskih reci na engleske (srpsko-engleski recnik)*/

    #includestruct element {char srpski[20];char engleski[50];

    };int strcmp(char*s1,char*s2){

    while(*s1==*s2){

    if(!*s1)return(0);

    ++s1;++s2;

    }return(*s1-*s2);

    }int bin_search(struct element recnik[],char*ukaz_niz,unsigned n){

    int low=0;int mid,high=n-1;int result;while(low

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    37/49

    int n=10;char rec[20];printf("Ukucajte rec:\n");scanf("%s",rec);j=bin_search(recnik,rec,6);if(!j)

    printf("Zalim, rec %s nije u recniku\n",rec);elseprintf("%s\n",recnik[j-1].engleski);

    }54./* Napisati program koji pravi rang listu studenata koji su polagali prijemni ispit. Sa standardnoulaza se unose sledeci podaci: ime studenta, cetiri ocene iz prethodnog skolovanja i broj bodova prijemnom ispitu.*/

    #include#define DIM 10typedef struct student{

    char ime[20];

    int brBodova; /*Ukupna suma bodova svakog studenta: ocene + prijemni*/};void razmeni(struct student *a, struct student *b){

    struct student tmp;tmp=*a;*a=*b;*b=tmp;

    }void sort(struct student niz[], int n){

    int i, j;for(i=0; i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    38/49

    nizStudenata[i].brBodova=sumaOcena[i]+bodovi;printf("Ukupna suma bodova svakog studenta: ocene + prijemni je: %d\n",

    nizStudenata[i].brBodova);}sort(nizStudenata, n);printf("Rang lista studenata je:\n\n");

    for(i=0; i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    39/49

    56. /*Napisati program za formiranje strukture podataka telefonski_imenik sa poljima: prezime, broi adresa. Napisati program za sortiranje imenika prema prezimenu pretplatnika.*/#include#define DIM 10typedef struct telefonski_imenik{

    char prezime[20];char broj[10];

    char adresa[20];};void razmeni(struct telefonski_imenik *a, struct telefonski_imenik *b){

    struct telefonski_imenik tmp;tmp=*a;*a=*b;*b=tmp;

    }void sort(struct telefonski_imenik niz[], int n){

    int i, j;for(i=0; i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    40/49

    RAD SA DATOTEKAMA

    Datotekama se pristupa korienjem pokazatelja na strukturu FILE, koja je definisana uinclude datoteci stdio.h. Datoteka stdio.h se ukljuuje u program iskazom # include. U stdio.hdefinisane su i konstante EOF i NULL. Konstanta EOF oznaava kraj datoteka i najee imavrednost -1. Konstanta NULL ima vrednost 0, i vraa se kao rezultat nekih funkcija za upravljanje

    datotekama u sluaju neuspenog izvravanja funkcija.fopenvraa pokazatelj na strukturu FILE, koji se dodeljuje promenljivoj in_file istog tipa. Usluaju neuspenog otvaranja fopen, vraa vrednost NULL. Iz tog razloga neophodno je ispitativraenu vrednost, odnosno, dodati iskaz

    if(in_file==NULL)printf(Datoteka file1 ne moze biti otvorena\n);Da bi se izvrila neka operacija datoteka mora biti otvorena, pozivanjem odgovarajue

    funkcije i specificiranjem imena datoteke. Prilikom otvaranja datoteke, mora se specificirati tipeljene ulalzno/izlazne operacije. Npr. ako se eli proitati sadraj datoteke, specificira se reimitanja "r"(eng. read mode); ako se neki sadraj upisuje u datoteku, specificira se reim upisa "w"(eng. write mode); ako se eli dodati neki sadraj, specificira se reim dodavanja "a" (eng. appendmode). Da bi se aurirao sadraj datoteke (naizmenino itanje i pisanje), prethodnim oznakama sedodaje znak +, nezavisno koji je osnovni reim rada. Pri radu sa binarnim datotekama prethodnimoznakama se dodaje i slovo b.

    Zatvaranje datotekevri se funkcijom fcloseija je deklaracija:int fclose(FILE *dat);

    dat je pokaziva datoteke koji je pridruen datoteci koja se zatvara. Vrednost funkcije je nula usluaju uspeha, a smibolika konstanta EOF u sluaju otkrivanja greke.

    Funkcija koja ita iz datoteke dat najvie br podataka veliine vel bajtova u memoriju poevod adrese niz:

    int fread(void *niz, int vel, int br, FILE *dat);Primer za itanje niza od najvie n_max celobrojnih podataka iz datoteke podaci:

    n=fread(vektor, sizeof(int), n_max, podaci);int fwrite(const void *niz, int vel, int br, FILE *dat);

    Funkcije za tampanje i unos podataka:fprintf-za tampanje podataka u datoteci (fajlu)sprintf-za tampanje znakovnog nizafscanf-za unos podataka u datotekusscanf-za unos znakovnog niza.

    Funkcija getc()uitava jedan karakter iz specificirane datoteke. Ova funkcija je vrlo slinave opisanoj funkciji getchar, s tom razlikom to se uitavanje ne obavlja sa terminala nego izdatoteke. getcvraa vrednost EOF, ako je dosegnut kraj datoteke.

    Funkcija putc upusuje karakter u specificiranu datoteku. Zaglavlje funkcije jeint putc(c,file_pointer)char c;FILE*file_pointer;

    Na pr. pozivom putc(z,in_file);u datoteku in_file upisujemo karakter z.Pozicioniranje na mesto u datotecidat ija je udaljenost pomeraj bajtova od oznaene

    reperne take data je funkcijom:int fseek (FILE*dat, long pomeraj, int reper);

    Mogue reperne take obeleavaju se sibmolikim konstantama SEEK_SET (poetak datoteke),SEEK_CUR (trenutna pozicija u datoteci) ili SEEK_END (kraj datoteke). Sledee itanje ili pisanje

    40

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    41/49

    vrie se poevi od ovako odabrane pozicije u datoteci. Funkcija za pozicioniranje na poetak datoteke dat je:

    void rewind(FILE *dat);

    57. /*Odrediti broj linija u tekstualnom fajlu sa imenom knjiga.txt.*/#include

    void main(){int k=0;FILE *fp;char s[256];if((fp=fopen("knjiga.txt","r"))==NULL){

    perror("Greska");return;

    }while(fgets(s,256,fp)!=NULL)k++;printf("Fajl ima %d linija\n",k);fclose(fp);

    }

    58. /*Napisati program kojim se sadraj fajla test.dat formiran od velikih slova alfabetaifriran alje u fajl sifra.dat. Znak se ifrira tako to se zamenjuje sledeim ASCII znakom, znak Z zamenjuje sa A.*/#includevoid main(){

    int c;FILE *inf,*outf;inf=fopen("test.dat","r");outf=fopen("sifra.dat","w");while((c=fgetc(inf))!=EOF){

    if('A'

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    42/49

    char s[256],maxs[256];FILE *fp;if((fp=fopen("test.txt","r"))==NULL){

    printf("Greska\n ");return;

    }maxl=0;while(fgets(s,256,fp)!=NULL)

    if(strlen(s)>maxl){

    maxl=strlen(s);strcpy(maxs,s);

    }printf("Najduza linija\n%s\n ima duzinu %d\n",maxs,maxl);fclose(fp);

    }

    60. /*Napisati program koji poredi dva fajla i ispisuje prvu liniju u kojoj se razlikuju.*/#include#include#include#define MAXLINE 100void main(){

    FILE *fp1;FILE *fp2;void filecomp(FILE *fp1, FILE *fp2);if((fp1=fopen("prvi.txt","r"))==NULL){

    perror("Ne moze se otvoriti prvi.txt");return;

    }if((fp2=fopen("drugi.txt","r"))==NULL){

    perror("Ne moze se otvoriti drugi.txt");return;

    }filecomp(fp1,fp2);fclose(fp1);fclose(fp2);

    }void filecomp(FILE *fp1,FILE *fp2){

    char line1[MAXLINE], line2[MAXLINE];char *lp1,*lp2;do{

    lp1=fgets(line1, MAXLINE, fp1);

    42

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    43/49

    lp2=fgets(line2, MAXLINE, fp2);if(lp1==line1&&lp2==line2){

    if(strcmp(line1,line2)!=0){

    printf("Prva razlika je u liniji\n%s\n",line1);

    lp1=lp2=NULL;}}else

    if(lp1!=line1&&lp2==line2)printf("Kraj prvog fajla u liniji \n%s\n",line2);

    elseif(lp1==line1&&lp2!=line2)printf("Kraj drugog fajla u liniji \n%s\n",line1);

    }while(lp1==line1&&lp2==line2);

    }

    61./*Napisati program za uitavanje datoteke pod imenom ulaz.dat i formiranje datoteke snazivom izlaz.dat koja sadri samo one redove ulazne datoteke ulaz.dat u kojima se nalazi refakultet.*/#include#includevoid main(){

    FILE *ulaz;FILE *izlaz;char buffer[80];char trazenaRec[]="fakultet";if((ulaz=fopen("ulaz.dat","r"))==NULL)

    printf("Datoteka ulaz.dat nije otvorena.");if((izlaz=fopen("izlaz.dat","w"))==NULL)

    printf("Datoteka izlaz.dat nije otvorena.");while(!feof(ulaz)){

    fgets(buffer,80,ulaz);if(strstr(buffer,trazenaRec)!=NULL){

    printf("%s",buffer); /*stamanje na ekranu*/fprintf(izlaz,"%s",buffer);

    }}fclose(ulaz);fclose(izlaz);

    }

    62. /*Napisati program koji cita podatke iz datoteke ULAZ.TXT (ime studenta, broj bodova nprijemnom ispitu), broji sve studente koji imaju broj bodova veci od proseka i upisuje podatke takvim studentima u datoteku IZLAZ.TXT.*/

    43

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    44/49

    #include#define DIM 10typedef struct student{

    char ime[20];int brBodova;

    };int main(){

    struct student nizStudenata[DIM];int i;int brojStudenata=0;int suma=0;float prosek;FILE *ulaz;FILE *izlaz;ulaz=fopen("ulaz.txt", "r");if(ulaz==NULL){

    printf("Ulazna datoteka nije otvorena!\n");return 1;

    }

    izlaz=fopen("izlaz.txt", "w");if(izlaz==NULL){

    printf("Izlazna datoteka nije kreirana!\n");return 1;

    }while(!feof(ulaz)){

    fscanf(ulaz, "%s%d", &nizStudenata[brojStudenata].ime,&nizStudenata[brojStudenata].brBodova);

    suma+=nizStudenata[brojStudenata].brBodova;brojStudenata++;

    }prosek=(float)suma/brojStudenata;

    for(i=0; iprosek)fprintf(izlaz, "%s\t%d\n", nizStudenata[i].ime, nizStudenata[i].brBodova);

    fclose(ulaz);fclose(izlaz);return 0;

    }

    63. /*Napisati program za nalazenje i stampanje na ekranu zbira ASCII kodova svih znakova zadatdatoteke pod imenom ULAZ.TXT*/

    #include

    #includeint main(){FILE *in;int ascii;int suma=0;in=fopen("ulaz.txt", "r");if(in==NULL){

    printf("Ulazni fajl nije otvoren!");return 1;

    }

    44

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    45/49

    while(!feof(in)){ascii=fgetc(in);suma+=ascii;printf("%c=\t%d\n",ascii, ascii);//putc(fgetc(in), stdout);

    }printf("Suma svih znakova je: %d\n",suma);

    fclose(in);return 0;

    }

    64. /*U datoteci IMENIK.TXT nalaze se sledeci podaci: ime, prezime i broj telefona telefonskpretplatnika. Napisati program koji vrsi sortiranje imenika prema prezimenu pretplatnika i za zadatoprezime prikazuje telefonski broj pretplatnika na standardnom izlazu.*/

    #include#include#define DIM 10typedef struct telefonski_imenik{

    char ime[10];char prezime[20];char broj[10];

    };void razmeni(struct telefonski_imenik *a, struct telefonski_imenik *b){

    struct telefonski_imenik tmp;tmp=*a;*a=*b;*b=tmp;

    }void sort(struct telefonski_imenik niz[], int n){

    int i, j;

    for(i=0; i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    46/49

    sort(nizImenik, n);printf("\nTelefonski imenik sortiran po prezimenu pretplatnika je:\n\n");for(i=0; i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    47/49

    minimalnoRastojanje=nizRastojanja[0];/*Pretpostavimo da je minimalno rastojanje izmedju prvetacke*/

    for(i=0; i

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    48/49

    SEEK_SET);/*Upisivanje podataka u datoteku*/

    fwrite(&stedisa, sizeof stedisa, 1, stednja);rewind(stednja); fwrite(&veldat, sizeof veldat, 1, stednja);

    }}

    67. /*Ispisivanje sadrzaja datoteke o stedisama*/ stedpisi.c

    #include#include"stedisa.h"typedef struct{char prezime[16], licno_ime[16];} Ime_i_prezime;typedef struct{Ime_i_prezime ime; double stanje;} Stedisa;void main(){

    FILE*stednja;Stedisa stedisa;unsigned int sifra;unsigned int veldat;unsigned int i, k;

    /*Otvaranje datoteke o stedisama*/if((stednja=fopen("stedise.dat","r+b"))==NULL) exit(1);fread(&veldat, sizeof veldat, 1, stednja);

    /*Ispisivanje podataka o pojedinim stedisama*/for(sifra=1;sifra

  • 8/7/2019 OSNOVE C JEZIKA skripta sauradjenim primjerima

    49/49

    /*Otvaranje datoteke o stedisama*/if((stednja=fopen ("stedise.dat", "r+b"))==NULL) exit(1);fread(&veldat, sizeof veldat, 1, stednja);

    /*Azuriranje stanja uloga pojedinih stedisa*/while(1){

    /*Citanje sifre sledeceg stedise za obradu*/

    printf("\nSifra stedise?", " ");scanf("%d",&sifra);if(sifra==0)break;if(sifra