Macros en C

– Prog075

/* Prog075.cpp */

#include <stdio.h>
#include «c:TuCarpetaFich003.c»
#define mcm(x,y) ((x*y)/MCD(x,y))
void main()
{
int f1[2],f2[2]; int mcd,num;

printf(«Escribe la 1ª fracción: n»); scanf(«%d %d»,&f1[0],&f1[1]); printf(«Escribe la 2ª fracción: n»); scanf(«%d %d»,&f2[0],&f2[1]); mcd=mcm(f1[1],f2[1]);

num=(mcd/f1[1])*f1[0]+(mcd/f2[1])*f2[0];
printf(«nn Suma de %d/%d + %d/%d = «,f1[0],f1[1],f2[0],f2[1]); printf(» %d / %d»,num,mcd);
printf(«nn»);
simplifica(num,mcd);
}

Estudio del PROG075:

– El programa suma dos funciones pero utiliza una macro para el cálculo del m.c.m.
– La macro está definida en la línea:

#define mcm(x,y) ((x*y)/MCD(x,y))

Y no es más que una función, pero resumida, es decir no es necesario definir el tipo de variables.

– Observa que la macro contiene una llamada a la función MCD que tenemos enFich003.c, que funciona sin ningún problema siempre y cuando tengamos en el programa la línea: #include“c:TuCarpetaFich003.c” 

Escribe a partir del Fich003 el siguiente:

– Fich004.c

/* Fich004.c */
/* Determinación de un número primo
*/ int primo(int num)
{
int resto,i,result; for(i=2;i<num-1;i++)
{
resto=num % i;
if ((resto==0) && (num != 2)) return 0;
}
return 1;
}
/* Determinación del M.C.D de dos números
*/ int MCD(int x,int y)
{
int aux;
int resto;
if (x<y)
{
aux=x;
x=y;
y=aux;
}
if ((x % y)==0) resto=y;
while ((x % y) != 0)
{
resto=x-
y*(x/y); x=y;
y=resto;
}
return resto;
}
/* Simplifica una fracción
*/ void simplifica(int a,int b)
{
int div; div=MCD(a,b);
printf(«nFracción Simplificada: %d / %d»,a/div,b/div);
}
/* Macro que calcula el m.c.m.
*/ #define mcm(x,y) ((x*y)/MCD(x,y))

Vamos a hacer el mismo programa PROG075, pero con la macro en el fichero Fich004.c

– Prog076

/* Prog076.cpp */

#include <stdio.h>
#include «c:TuCarpetaFich004.c»
void main()
{
int f1[2],f2[2];
int mcd,num;
printf(«Escribe la 1ª fracción: n»); scanf(«%d %d»,&f1[0],&f1[1]);
printf(«Escribe la 2ª fracción: n»); scanf(«%d %d»,&f2[0],&f2[1]); mcd=mcm(f1[1],f2[1]);num=(mcd/f1[1])*f1[0]+(mcd/f2[1])*f2[0];
printf(«nn Suma de %d/%d + %d/%d = «,f1[0],f1[1],f2[0],f2[1]); printf(» %d / %d»,num,mcd); printf(«nn»);
simplifica(num,mcd);
}

Crea a partir del Fich004.c el siguiente fichero:

– Fich005.c

/* Fich005.c */
/* Determinación de un número primo */ int primo(int num)
{
int resto,i,result;
for(i=2;i<num-1;i++)
{
resto=num % i;
if ((resto==0) && (num != 2)) return 0;
}
return 1;
}
/* Determinación del M.C.D de dos números */ int MCD(int x,int y)
{
int aux; int resto; if (x<y)
{
aux=x;
x=y;
y=aux;
}
if ((x % y)==0) resto=y;
while ((x % y) != 0)
{
resto=x-
y*(x/y); x=y;
y=resto;
}
return resto;
}
/* Simplifica una fracción
*/ void simplifica(int a,int b)
{
int div;
div=MCD(a,b);
printf(«nFracción Simplificada: %d / %d»,a/div,b/div);
}
/* Macro que calcula el m.c.m.
*/ #define mcm(x,y) ((x*y)/MCD(x,y))
/* Macro que calcula el numerador de la suma de dos fracciones */
#define SumaFracNum(n1,d1,n2,d2)
(((mcm(d1,d2)/d1)*n1+(mcm(d1,d2)/d2)*n2))

– Prog077

/* Prog077.cpp */

#include <stdio.h>
#include «c:TuCarpetaFich005.c»
void main()
{
int f1[2],f2[2];
int den,num;
printf(«Escribe la 1ª fracción: n»); scanf(«%d %d»,&f1[0],&f1[1]);
printf(«Escribe la 2ª fracción: n»); scanf(«%d %d»,&f2[0],&f2[1]); num=SumaFracNum(f1[0],f1[1],f2[0],f2[1]);
den=mcm(f1[1],f2[1]);
printf(«nn Suma de %d/%d + %d/%d = «,f1[0],f1[1],f2[0],f2[1]);
printf(» %d / %d»,num,den);
printf(«nn»);
simplifica(num,den);
}

Está claro lo que hemos conseguido en el Fich005.c, una biblioteca de funciones y macros que podemos utilizar en nuestros programas sin más que incluir:#include “c:TuCarpeta.Fich005.c”.

Todo programador, según el tipo de programas que debe hacer dispone de su propia biblioteca de funciones y macros, de todas formas hay muchas “bibliotecas de funciones y macros” que son de dominio público y que puedes bajarte de Internet.

Fuente: Programación en C/C++ (Manual FV) de Fermí Vilà