Модуларно програмирање

Ради што веће ефикасности, сложени програмски системи се разбијају на мање целине. Те целине се називају програмски модули. Програмске модуле могу да чине:

  • групе функција опште намене за остваривање често коришћених елементарних обрада из неке области, а које могу да се искористе у више различитих програмских система

  • групе функција или појединачне функције за остваривање дела сложеног програмског система, а које су намењене за употребу само у том систему

Изворни текстови појединих модула смештају се у једну или више засебних датотека. Такве датотеке називају се јединице превођења, јер се преводе независно (после превођења добијају се тзв. објектне верзије). После успешног превођења садржаја свих потребних датотека, врши се повезивање преведених облика фунција и добија се извршна верзија програма. Преведени облици (објектне верзије) модула опште намене могу да се користе у више програмских система, тако што се изврши њихово повезивање са модулима тог другог система!

За успешан рад са програмским системима, односно програмским модулима, потребно је дефинисати неке појмове:

глобални идентификатори

дефиниција и декларација података и функција

структура програмског система

рад са пројектима у програмском језику C

Наводимо пример програма који претвара правоугле у поларне координате. Решићемо га на више начина:

1. програм који користи функцију:

/* funkcija za pretvaranje pravouglih u polarne koordinate */
#include<math.h>
void polar (double x, double y, double *r, double *fi)/*parametri r i fi su pokazivaci, njihove vrednosti predstavljaju bocne efekte koji se vracaju u glavni program*/
{
	*r=sqrt(x*x+y*y);
	*fi=(x==0&&y==0)?0:atan2(y,x);
}
/* nalazenje polarnih koordinata pomocu funkcije polar */
#include<stdio.h>
int main()
{
	double x,y,r,fi;
	while(printf("x,y?"),scanf("%lf%lf",&x,&y),x!=1E38)/*lanac izraza, gde je poslednji izraz - uslov while petlje!!!*/
	{
		polar(x,y,&r,&fi);/*posto su r i fi pokazivaci, pri pozivu funkcije moraju se koristiti ADRESE, funkcija se poziva u posebnoj naredbi zato sto koristimo njene bocne efekte, tj. ne vraca nikakvu vrednost! */
		printf("r,fi=%f, %f\n",r,fi);
	}
	return 0;
}

2. програм који користи глобалне параметре:

/* izmena podataka pomocu globalnih promenljivih */
#include<stdio.h>
#include<math.h>
double x,y,r,fi; /* definicija globalnih podataka*/
void polar ()/*definicija funkcije, radi sa globalnim promenljivim pa zato nema parametre!*/
{
	r=sqrt(x*x+y*y);
	fi=(x==0&&y==0)?0:atan2(y,x);
}
int main()
{
	while(printf("x,y?"),scanf("%lf%lf",&x,&y),x!=1E38)
	{
		polar();/*funkcija polar nema parametre, zato se poziva sa polar() */
		printf("r,fi=%f, %f\n",r,fi);
	}
	return 0;
}

3. програм који користи декларисане глобалне променљиве:

/* izmena podataka pomocu deklarisanih globalnih promenljivih */
#include<stdio.h>
#include<math.h>
int main()
{
	extern double x,y,r,fi; /* deklaracija globalnih podataka, podaci se definisu kasnije, ali se MORAJU deklarisati pre prve upotrebe!!!*/
	void polar (void);/*deklaracija (prototip) funkcije, funkcija se definise iza glavnog programa, ali se MORA deklarisati pre upotrebe u programu! void u zagradi oznacava da funkcija polar nema parametre!*/
	while(printf("x,y?"),scanf("%lf%lf",&x,&y),x!=1E38)
	{
		polar();/*funkcija polar nema parametre, zato se poziva sa polar() */
		printf("r,fi=%f, %f\n",r,fi);
	}
	return 0;
}
void polar ()/*definicija funkcije*/
{
	extern double x,y,r,fi; /* deklaracija globalnih podataka*/
	r=sqrt(x*x+y*y);
	fi=(x==0&&y==0)?0:atan2(y,x);
}
double x,y,r,fi; /* definicija globalnih podataka*/

4. модуларни програм:

/* podaci.h - globalni podaci u zasebnoj datoteci*/
double x,y,r,fi; /*definicija globalnih podataka*/
void polar (); /* deklaracija, odnosno prototip funkcije */
/* podaci.c - definicija funkcije */
#include"podaci.h"
#include<math.h>
	extern double x,y,r,fi; /* deklaracija globalnih podataka, nije neophodna ako se globalne promenljive definisu u posebnoj datoteci!!!*/
void polar ()/*definicija funkcije*/
{
		r=sqrt(x*x+y*y);
		fi=(x==0&&y==0)?0:atan2(y,x);
}
/* glavni program */
#include <stdio.h>
#include <stdlib.h>
#include"podaci.h"
int main()
{
extern double x,y,r,fi; /* deklaracija globalnih podataka, ni ova deklaracija nije neophodna ako se podaci definisu u posebnoj datoteci, ali da bi se ispostovao princip "sve se mora deklarisati pre prve upotrebe" bolje ih je deklarisati (u datoteci sa ekstenzijom .c deklaraciju mozemo preskociti, jer direktno ukljucujemo datoteku gde su definisani podaci!)*/
void polar (void);/*deklaracija (prototip) funkcije*/
	while(printf("x,y?"),scanf("%lf%lf",&x,&y),x!=1E38)
	{
		polar();
		printf("r,fi=%f, %f\n",r,fi);
	}
   return 0;
}

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се /  Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се /  Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се /  Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се /  Промени )

Повезивање са %s