Креирање сопствене библиотеке функција¶
Приликом решавања задатака приметио си да многе функције које смо креирали користимо
више пута и у различитим задацима. То смо заправо и желели, то и јесте сврха функција.
Функцију за унос елемената низа смо користили у сваком задатку у коме смо обрађивали
низ. Слично као што користимо библиотечке функције printf
и scanf
.
Да не бисмо стално писали функције као што су unos
, ispis
, zbir
, лакше их је сместити у
једно заглавље и његовим позивањем заправо позивамо и те функције. Тако и навођењем
#include<stdio.h>
позивамо функције printf
и scanf
које су дефинисане у њему.
Како креирати сопствену библиотеку функција? За пример ћемо навести познате функције за рад са низовима:
void invert(int a[], int n)
{
int i, j, b;
for (i = 0, j = n - 1;i < j; i++, j--)
{
b = a[i];
a[i] = a[j];
a[j] = b;
}
}
void sort(int a[], int n) {
int i, j, tmp;
for (i = 0; i < n - 1; i++)
for (j = i + 1; j < n; j++)
if (a[i] > a[j]) {
tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
void unos_niza(int a[20], int n)
{
int i;
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
printf("\n");
}
void ispis_niza(int a[], int n)
{
int i;
for (i = 0; i < n; i++)
printf("%d ", a[i]);
printf("\n\n");
}
Све ове функције треба сместити у један фајл и снимити са екстензијом .h
(скр. header),
на пример nizovi.h
. Овде имамо две могућности:
Ову датотеку можемо да сместимо у директоријум где се налази програм који се преводи. У
том случају, заглавље у главном програму позивамо са #include "nizovi.h"
.
Други начин је да заглавље сместимо у директоријум где се налазе остале системске
библиотеке као што су stdio.h
, math.h
. У том случају наше заглавље и функције у њима позивамо
са #include <nizovi.h>
.
Главни програм би онда изгледао овако:
#include<stdio.h>
#include "nizovi.h" // или <nizovi.h>
int main(void)
{
int a[50], n, i;
printf("Unesi broj elemenata niza n: ");
scanf("%d", &n);
unos_niza(a, n);
printf("Izgled pocetnog niza: \n");
ispis_niza(a, n);
invert(a, n);
printf("Izgled invertovanog niza: \n");
ispis_niza(a, n);
sort(a, n);
printf("Izgled sortiranog niza: \n");
ispis_niza(a, n);
return 0;
}
Овде се виде све предности функција. Програм је урађен ефикасније, прегледније, са мање линија кода. Овако креирана заглавља, а самим тим и функције у њима, могу се позвати у неограниченом броју програма.
Креирање сопствене библиотеке функција је основа модуларног програмирања. Наиме, савремени програми су углавном сложени, имају велики број линија кода. Врло често на једном програму ради више програмера. Свако је задужен за решавање неког проблема, креирајући свој програмски модул, кроз креирање сопствених библиотека. Сви ти појединачни модули се могу објединити позивањем у главном програму на овде описан начин. О овоме ћеш више учити касније, изучавајући више програмске језике.