quinta-feira, 21 de abril de 2016

Macros: uso avançado


Como prometi apresento este segundo exemplo mais avançado sobre Macro.
E falando ainda sobre a diretiva #define um recurso poderoso do C.
Blocos de códigos, rotinas completas e até mesmo funções  podem ser encapsuladas
dentro de uma macro, como é o caso deste exemplo.
Criei algumas Macros, a macro GOT recebe uma função inteira, justamente a que cria
uma moldura na tela do dos, e na macro NPRIM criei uma rotina completa para
mostrar números primos e não primos dentro do vetor que recebe de um contador os
100 primeiros números narurais.
Observe que na macro NPRIM chamamos outras macros, inclusive a função
got_color(2, 25, 3, 79, 2, 15); com seus seis parâmetros.
Aproveite este exemplo prático, copie e guarde o código para estudo, saiba que
dificilmente você encontrará outro exemplo como este e como os outros que já
postei no blog, disponibilizado em público sem querer nada em troca.

Veja abaixo uma imagem do progtrama em execução:



Veja abaixo o código do programa:



#include <stdio.h>
#include <conio.h>
#define VERMELHO textcolor(LIGHTRED);
#define AZUL textcolor(LIGHTBLUE);
#define PRETO textcolor(BLACK);
#define ROXO textcolor(LIGHTMAGENTA);
#define CINZA textcolor(DARKGRAY);
#define got\

void got_color(int tam_lin_ini, int tam_lin_fim, int tam_ini_col,\
         int tam_fim_col, int a, int b) {\
     int i, e;\
     if (a >= 1 && a <= 16) {\
         textcolor(a);\
     }\
     if (b >= 1 && b <= 16) {\
         textbackground(b);\
     }\
     for (i = tam_lin_ini; i < tam_lin_fim; i++) {\
         for (e = tam_ini_col; e < tam_fim_col; e++) {\
              gotoxy(e, i);\
              printf(" ");\
         }\
     }\
}
#define NPRIM\
         int i;\
         got_color(2, 25, 3, 79, 2, 15);\
         system("title MACROS: MAIS AVANÇADO");\
         VERMELHO\
         gotoxy(32, 3);\
         printf("MACROS: MAIS AVANÇADO");\
         CINZA\
         gotoxy(29, 5);\
         printf("Vetor de primos e não primos");\
         for( i = 1; i <= 100; i++ ){\
              Vet [ j  ] = i;\
              j++;\
         }\
         gotoxy(22,7);\
         for (i = 1; i < 100; i++){\
              if ( i == 10){ gotoxy(17,8);}\
              if ( i == 20) {gotoxy(17,9);}\
              if ( i == 30){gotoxy(17,10);}\
              if ( i == 40){gotoxy(17,11);}\
              if ( i == 50){gotoxy(17,12);}\
              if ( i == 60){gotoxy(17,13);}\
              if ( i == 70){gotoxy(17,14);}\
              if ( i == 80){gotoxy(17,15);}\
              if ( i == 90){gotoxy(17,16);}\
              for ( j = 2, primo = 0; j < Vet [ i ]; j++ )\
              if ( ( Vet [ i ] % j ) == 0 )\
              primo = 1;\
              if ( primo ){\
                   AZUL\
                   printf(" %3d ", Vet [ i ] );\
              }\
              else{\
                   VERMELHO\
                   printf(" %3d ", Vet [ i ] );\
              }\
         }\
         AZUL\
         gotoxy(19,18);\
         printf("Em vermelho os números primos entre ");\
         VERMELHO\
         printf("1 ");\
         AZUL\
         printf("e ");\
         VERMELHO\
         printf("100");\
         AZUL\
         gotoxy(19,19);\
         printf("Em azul os números não primos entre ");\
         VERMELHO\
         printf("1 ");\
         AZUL\
         printf("e ");\
         VERMELHO\
         printf("100");\
         Sleep(1800);\
         VERMELHO\
         gotoxy(26, 21);\
         printf("Por: ");\
         AZUL\
         printf("Samuel Lima");\
         PRETO\
         gotoxy(26, 22);\
         printf("sa_sp10@hotmail.com");\
         Sleep(1800);\
         VERMELHO\
         gotoxy(37, 24);\
         printf("MUITO OBRIGADO");
int main(){
     int Vet [ 100 ];
     int j = 0, primo;
     NPRIM
     got
     getche();
}

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.