domingo, 29 de dezembro de 2013

Compilador Experimental

Este Compilador experimental pode ser testado e utilizados por iniciantes em linguagem C.
O programa compila por linha de comando, e os compiladores usados foram o g++ do MinGW, e o g++ do Borland.
Está mais que claro que o utilizador deste programa precisa ter estes compiladores instalados e configurados corretamente no computador pra que este programa possa funcionar.
Você pode observar que na linha de comando do g++ do MinGW, já estão
lincados as bibliotecas libconio.a para chamar a biblioteca conio2.h, ncurses adaptada para o windows e as libs, da biblioteca graphics.h.
Note nas imagens que o mesmo programa foi utilizado para testes, e que no compilador do MinGW,
saiu colorido, no da Borland ficou em vermelho, isto porque no borland, teria que usar a função printf(); com c no início, Ex: cprintf();
Alterações podem ser feitas, adaptações, melhoramentos, em fim, depende da criatividade de cada um, o ponta pé inicial foi dado, quem quiser, pode continuar com o jogo.

Veja algumas imagens do Programa em Execução:







Veja o código do programa abaixo:

#include <stdio.h>
#include <conio.h>
#include <windows.h>
void Abre();void Fecha();int main();
void Janela5(){
    int lin, col;
    for ( lin = 0; lin <= 25; lin++ ){
        for ( col = 0; col <= 80; col++ ){
            gotoxy( col, lin );
            if ( lin == 2 ){textbackground(LIGHTBLUE);printf( " ");}
            if ( col == 1 ){textbackground(LIGHTBLUE);printf(" ");}
            if ( lin == 25 ){textbackground(LIGHTBLUE);}
            if ( col == 80 ){textbackground(LIGHTBLUE);printf(" ");}
        }
    }textbackground( BLACK );
}
void Cria_MinGW(){
    system("cls");Janela5();
    textcolor(LIGHTRED);gotoxy(31,3);printf ("Compilador Experimental");
    textcolor(LIGHTBLUE);gotoxy(31,5);printf ("Compilando com o MinGW");
    textcolor(YELLOW);gotoxy(29,7);printf ("Criando um novo executavel");
    printf ("\n\n");textcolor(LIGHTGREEN);
    system("g++ -ansi -pedantic -Wall main.cpp -o main -lconio -lcurses -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32 ");getche();
    Abre();
}
void Cria_Borland(){
    system("cls");Janela5();
    textcolor(LIGHTRED);gotoxy(31,3);printf ("Compilador Experimental");
    textcolor(LIGHTBLUE);gotoxy(31,5);printf ("Compilando com o Borland");
    textcolor(YELLOW);gotoxy(29,7);printf ("Criando um novo executavel");
    printf ("\n\n");textcolor(LIGHTGREEN);
    system("bcc32 -Lc:\Borland\BCC55\lib -Ic:\Borland\BCC55\include main.cpp");
    getche();
    Abre();
}
void Abre(){
    system("cls");Janela5();
    textcolor(LIGHTRED);gotoxy(31,3);printf ("Compilador Experimental");
    textcolor(LIGHTBLUE);gotoxy(31,5);printf ("Abrindo o executavel");
    system("start main.exe");
    getche();
    Fecha();
    getche();
    main();
}
void Fecha(){
    system("cls");Janela5();
    textcolor(LIGHTRED);gotoxy(31,3);printf ("Compilador Experimental");
    textcolor(LIGHTBLUE);gotoxy(31,5);printf ("Fechando o executavel");
    printf ("\n\n");
    system("taskkill.exe /IM main.exe");
}
int main(){
    system ("title COMPILADOR EXPERIMENTAL");
    int opc;
    system("cls");do{Janela5();
    textcolor(LIGHTRED);gotoxy(31,3);printf ("Compilador Experimental");
    textcolor(LIGHTBLUE);gotoxy(34,5);printf ("Escolha uma opcao ");
    textcolor(LIGHTRED);gotoxy(26,7);printf("[ 1 ]");
    textcolor(YELLOW);gotoxy(33,7);printf ("Para Compilar com MinGW");
    textcolor(LIGHTRED);gotoxy(26,9);printf("[ 2 ]");
    textcolor(YELLOW);gotoxy(33,9);printf ("Para Compilar com Borland");
    textcolor(LIGHTRED);gotoxy(26,11);printf("[ 3 ]");
    textcolor(YELLOW);gotoxy(33,11);printf ("Para Sair");
    textcolor(LIGHTRED);gotoxy(33,13);
    scanf("%d", &opc);fflush ( stdin );
    if (opc == 1){
        Cria_MinGW();
    }
    if (opc == 2){
        Cria_Borland();
    }
    if (opc == 3){
        textcolor(LIGHTCYAN);gotoxy(35,22);printf("O ROCCO AGRADECE!");
        Sleep(1800);exit(0);
    }
    else{
        textcolor(LIGHTCYAN);gotoxy(37,20);printf("\aOPCAO ERRADA");
        Sleep(1800);system("cls");
    }
    }while( 1 );
}


domingo, 22 de dezembro de 2013

Matriz Estática Para Matriz Dinâmica


Algumas vêzes precisamos passar uma Matriz Estática para Matriz dinâmica, e se você tem
dificuldade de fazer isto, mostro neste código como pode ser feito.
O programa imprime a Matriz Estática inicializada com limites de um a cem, e conta o total de elementos contido,
depois, imprime os mesmos números já na Matriz Dinâmica e conta o total de elementos contido.
No bloco seguinte, cria um arquivo .txt e escreve a Matriz Dinâmica que foi inicializado na Matriz Estática.
Usando um recurso do Dos, abre fisicamente o notepad.exe, contendo a Matriz Dinâmica imprimida e fecha.
Em seguida, mostra a leitura do arquivo .txt contendo imprimido nossa Matriz Dinâmica.
E então o programa se encerra.

Veja algumas imagens do programa em execução:






Veja abaixo o código do programa:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <windows.h>
#define tam 10
void Janela5(){
    int lin, col;
    for ( lin = 0; lin <= 25; lin++ ){
        for ( col = 0; col <= 80; col++ ){
            gotoxy( col, lin );
            if ( lin == 2 ){textbackground(LIGHTBLUE);printf( " ");}
            if ( col == 1 ){textbackground(LIGHTBLUE);printf(" ");}
            if ( lin == 25 ){textbackground(LIGHTBLUE);}
            if ( col == 80 ){textbackground(LIGHTBLUE);printf(" ");}
        }
    }textbackground( BLACK );
}
void Titulo(){int i;Janela5();
char *titulo = {"MATRIZ ESTATICA PARA MATRIZ DINAMICA"
        "CRIADO POR SAMUEL LIMA"
        "sa_sp10@hotmail.com"
        "PRESSIONE QUALQUER TECLA"};
textcolor(YELLOW);gotoxy(18,7);for ( i = 0; i < 27; i++){
    printf ("%c ",titulo [ i ]  );Sleep(50);
}
textcolor(LIGHTRED);gotoxy(34,9);for ( i = 27; i < 36; i++){
    printf ("%c ",titulo [ i ]  );Sleep(100);
}
textcolor(LIGHTGREEN);gotoxy(33,11);for ( i = 36; i < 46; i++){
    printf ("%c ",titulo [ i ]  );Sleep(100);
}
textcolor(LIGHTBLUE);gotoxy(29,13);for ( i = 46; i < 58; i++){
    printf ("%c ",titulo [ i ]  );Sleep(100);
}
textcolor(WHITE);gotoxy(23,15);for ( i = 58; i < 77; i++){
    printf ("%c ",titulo [ i ]  );Sleep(100);
}
textcolor(LIGHTCYAN);gotoxy(20,19);for ( i = 77; i < 101; i++){
    printf ("%c ",titulo [ i ]  );Sleep(100);
}
getche();
}
int main(){
     system ("title MATRIZ ESTATICA PARA MATRIZ DINAMICA nnn");
     Titulo();
    char Linha [ 100 ];int result;
    char str [ 1 ] [ 50 ] = {"IMPRIMINDO A MATRIZ DINAMICA NUM ARQUIVO .TXT\n\n"};
    int Vet [ tam ] [ tam ] =
    {{ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 },
            { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 },
            { 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 },
            { 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 },
            { 41, 42, 43, 44, 45, 46, 47, 48, 49, 50 },
            { 51, 52, 53, 54, 55, 56, 57, 58, 59, 60 },
            { 61, 62, 63, 64, 65, 66, 67, 68, 69, 70 },
            { 71, 72, 73, 74, 75, 76, 77, 78, 79, 80 },
            { 81, 82, 83, 84, 85, 86, 87, 88, 89, 90 },
            { 91, 92, 93, 94, 95, 96, 97, 98, 99, 100 }};
    int **matriz;
    int i, j, v = 0, t = 0, f = 0;
    gotoxy(27,3);clrscr();Janela5();
    matriz = ( int** ) malloc ( tam * sizeof ( int** ) );
    textcolor(LIGHTRED);gotoxy(26,3);printf("MATRIZ ESTATICA PARA MATRIZ DINAMICA  ");
    textcolor(LIGHTBLUE);gotoxy(29,5);printf("IMPRIMINDO A MATRIZ ORIGINAL");
    textcolor(YELLOW);
    FILE *arq = fopen ("Matriz.txt", "w");
    result = fprintf( arq, str [ 0 ] );
    for( i = 0; i < Vet [ 0 ] [ 9 ]; i++ ){  // Faz a leitura das linhas
        gotoxy(23, i + 8);
        for( j = 0; j < Vet [ 0 ] [ 9 ]; j++ ){  // Faz a leitura das colunas
            matriz [ t ] [ v ] = Vet [ i ] [ j ];
            printf(" %d ",  Vet [ i ] [ j ] ); // Imprime linhas e colunas
            f = Vet [ i ] [ j ];
        }
    }
    textcolor(LIGHTBLUE);gotoxy(24,19);
    printf ("Quantidade de elementos na Matriz:  %d", f );
    getche();clrscr();Janela5();
    textcolor(LIGHTRED);gotoxy(26,3);printf("MATRIZ ESTATICA PARA MATRIZ DINAMICA  ");
    textcolor(LIGHTBLUE);gotoxy(29,5);printf("IMPRIMINDO A MATRIZ DINAMICA");
    textcolor(LIGHTGREEN);printf("\n\n");
    for( i = 0; i < Vet [ 0 ] [ 9 ]; i++ ){  // Faz a leitura das linhas
        gotoxy(23, i + 8);
        for( j = 0; j < Vet [ 0 ] [ 9 ]; j++ ){  // Faz a leitura das colunas
            matriz [ t ] [ v ] = Vet [ i ] [ j ];
            f = matriz [ t ] [ v ];
            printf( " %d ", matriz [ t ] [ v ] );// Imprime linhas e colunas
            fprintf(arq," %d ", matriz [ t ] [ v ] );
        }
    }
    fclose( arq );
    textcolor(LIGHTBLUE);gotoxy(24,19);
    printf ("Quantidade de elementos na Matriz:  %d", f );
    getche();clrscr();
    textcolor(LIGHTRED);gotoxy(26,3);printf("MATRIZ ESTATICA PARA MATRIZ DINAMICA  ");
    textcolor(LIGHTBLUE);gotoxy(22,5);printf("Abrindo o arquivo .txt contendo a Matriz");getche();
    system("start Matriz.txt");getche();
    textcolor(LIGHTBLUE);gotoxy(20,7);printf("Fechando agora o arquivo .txt contendo a Matriz");getche();
    system("taskkill.exe /IM notepad.exe");gotoxy(1,7);clreol (); // Usando a funcao clreol (); que junto com gotoxy, apaga uma linha
    textcolor(LIGHTBLUE);gotoxy(23,7);printf("Abaixo, a leitura da Matriz num arquivo .txt");
    gotoxy(22,7);
    arq = fopen("Matriz.txt","rb");
    while (!feof(arq)){
        fgets(Linha, 100, arq);
        if (result) {
            textcolor(WHITE);printf("%s",Linha );
        }
    }
    getche();textcolor(LIGHTCYAN);gotoxy(33,23);printf("O ROCCO AGRADECE!");getche();
    free ( matriz );
}

sábado, 21 de dezembro de 2013

Matriz Dinâmica para Vetor Dinâmico

Algumas vêzes precisamos passar uma Matriz dinâmica para um Vetor dinâmico, e se você tem
dificuldade de fazer isto, mostro neste código como pode ser feito.
O programa imprime a Matriz dinâmica inicializada com limites de um a cem,
e depois imprime os mesmos números já no Vetor dinâmico. No bloco seguinte, cria um arquivo .txt e escreve o vetor dinâmico,
que foi inicializado na Matriz Dinâmica.
Usando um recurso do Dos, abre fisicamente o notepad.exe, contendo o vetor dinâmico imprimido e fecha.
Em seguida, mostra a leitura do arquivo .txt contendo imprimido nosso Vetor dinâmico.
E então o programa se encerra.
Veja algumas imagens do programa em execução:







Abaixo, o código do programa:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define tam 10
void Janela5(){
    int lin, col;
    for ( lin = 0; lin <= 25; lin++ ){
        for ( col = 0; col <= 80; col++ ){
            gotoxy( col, lin );
            if ( lin == 2 ){textbackground(LIGHTBLUE);printf( " ");}
            if ( col == 1 ){textbackground(LIGHTBLUE);printf(" ");}
            if ( lin == 25 ){textbackground(LIGHTBLUE);}
            if ( col == 80 ){textbackground(LIGHTBLUE);printf(" ");}
        }
    }textbackground( BLACK );
}
void Titulo(){int i = 0;Janela5();
system ("title MATRIZ DINAMICA PARA VETOR DINAMICO");
char *titulo = {"MATRIZ DINAMICA PARA VETOR DINAMICO"
        "CRIADO POR SAMUEL LIMA"
        "sa_sp10@hotmail.com"
        "PRESSIONE QUALQUER TECLA"};
textcolor(YELLOW);gotoxy(18,7);for ( i = 0; i < 26; i++){
    printf ("%c ",titulo [ i ]  );Sleep(50);
}
textcolor(LIGHTRED);gotoxy(34,9);for ( i = 26; i < 35; i++){
    printf ("%c ",titulo [ i ]  );Sleep(100);
}
textcolor(LIGHTGREEN);gotoxy(33,11);for ( i = 35; i < 45; i++){
    printf ("%c ",titulo [ i ]  );Sleep(100);
}
textcolor(LIGHTBLUE);gotoxy(29,13);for ( i = 45; i < 57; i++){
    printf ("%c ",titulo [ i ]  );Sleep(100);
}
textcolor(WHITE);gotoxy(23,15);for ( i = 57; i < 76; i++){
    printf ("%c ",titulo [ i ]  );Sleep(100);
}
textcolor(LIGHTCYAN);gotoxy(20,19);for ( i = 76; i < 100; i++){
    printf ("%c ",titulo [ i ]  );Sleep(100);
}
getche();
}
int main(){
    Titulo();
    int i, j; // Matriz dinamica bidimensional e inicializada 10 x 10 contagem ate 100
    int  cont = 0;int x = 0;clrscr();Janela5();
    textcolor(LIGHTRED);gotoxy(27,3);printf("MATRIZ DINAMICA PARA VETOR DINAMICO  ");
    textcolor(LIGHTBLUE);gotoxy(30,5);printf("IMPRIMINDO A MATRIZ ORIGINAL");
    textcolor(YELLOW);printf("\n\n");
    int **matrix;int *vetor, fim = 100;
    matrix = (int**) malloc ( tam * sizeof ( int** ) );
    vetor = ( int* ) malloc ( tam * sizeof ( int ) );
    for ( i = 0; i < tam; i++ ) {
        gotoxy(23, i + 8);
        matrix [ i ] = ( int* ) malloc( tam * sizeof(int* ) );
        for ( j = 0; j < tam; j++ ) {
            cont++;
            matrix [ i ] [ j ]  = cont;
            vetor  [ x ] = matrix [ i ] [ j ];
            x++;
            printf(" %d ",matrix [ i ] [ j ] );
        }
        printf("\n");
    }
    getche();clrscr();
    textcolor(LIGHTRED);gotoxy(27,3);printf("MATRIZ DINAMICA PARA VETOR DINAMICO  ");
    textcolor(LIGHTBLUE);gotoxy(30,5);printf("IMPRIMINDO O VETOR DINAMICO");
    textcolor(LIGHTGREEN);printf("\n\n");
    for( x = 0; x < fim; x++ ){
        printf(" %d ", vetor [ x ] ); // Agora temos um vetor simples e dinamico
    }
    getche();
    char Linha [ 100 ];int result = 0;
    char str [ 1 ] [ 47 ] = {"IMPRIMINDO O VETOR DINAMICO NUM ARQUIVO .TXT\n\n"};
    FILE *arq = fopen ("Serial.txt", "w");
    result = fprintf( arq, str [ 0 ] );
    for ( x = 0; x < fim; x++ ){
        fprintf( arq, " %d ", vetor [ x ] );
    }
    fclose( arq );
    textcolor(LIGHTBLUE);gotoxy(22,13);printf("Abrindo o arquivo .txt contendo o Vetor");getche();
    system("start Serial.txt");getche();
    textcolor(LIGHTBLUE);gotoxy(20,13);printf("Fechando agora o arquivo .txt contendo o Vetor");getche();
    system("taskkill.exe /IM notepad.exe");gotoxy(2,13);clreol (); // Usando a funcao clreol (); que junto com gotoxy, apaga uma linha
    textcolor(LIGHTBLUE);gotoxy(23,13);printf("Abaixo, a leitura do Vetor num arquivo .txt");
    gotoxy(22,15);
    arq = fopen("Serial.txt","rb");
    while (!feof(arq)){
        fgets(Linha, 100, arq);
        if (result) {
            textcolor(WHITE);printf("%s",Linha );
        }
    }
    getche();
    textcolor(LIGHTCYAN);gotoxy(33,23);printf("O ROCCO AGRADECE!");getche();free(vetor);
}

sábado, 14 de dezembro de 2013

Gerador de seriais - linguagem c

Quem nunca esqueceu uma senha, ou serial, que foi usado para criar um e-mail
login em sites, arquivos criptografados, senhas do windows, wifi, atire a primeira pedra.
Pensando nisto, resolvi criar este programa, que gera sempre os mesmos seriais, sem usar a famosa função rand();causando um grande conforto para o utilizador.
Tudo o que o usuário tem que fazer é digitar números muito simples, como por exemplo, número da casa, os quatro primeiros dígitos da data de nascimento, idade, etc, respeitando os limites do programa que ficou estabelecido em 10 000.
O programa rejeita números negativos, e qualquer caractere indesejado, além de bloquear números acima de 9999.

Breve resumo do funcionamento:

A função strcpy (); faz a cópia de cada parte do serial solicitado que está presente nas Matrizes de char para cada Vetor de char correspondente a solicitação, e a função strcat(); faz a junções destes seriais que já estão nos vetores de char, repassando para o vetor de ponteiro *ais, que foi obrigatoriamente passado como referência nas funções Gera_Seriais(); e Gera_Arquivos();, depois que me deu um bom trabalho, entendi que não funcionaria corretamente se não fosse assim.
Depois do Serial gerado, o usuário tem a opção através de um switch();case,
de imprimi-lo na tela e num arquivo .txt, más se não gostou, tem a opção de gerar outro serial, ou de até mesmo finalizar o programa.

Veja o vídeo de funcionamento do programa:


Veja o código abaixo:



#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <ctype.h>
#include <windows.h>
void Janela5 ( ) {
     int lin, col;
     for ( lin = 0; lin <= 25 ; lin++ ) {
         for ( col = 0; col <= 80 ; col++ ) {
              gotoxy ( col , lin );
              if ( lin == 2 ) {
                   textbackground ( LIGHTBLUE );
                   printf ( " " );
              }
              if ( col == 1 ) {
                   textbackground ( LIGHTBLUE );
                   printf ( " " );
              }
              if ( lin == 25 ) {
                   textbackground ( LIGHTBLUE );
              }
              if ( col == 80 ) {
                   textbackground ( LIGHTBLUE );
                   printf ( " " );
              }
         }
     }
     textbackground ( BLACK );
}
int n = 0, un, de, ce, mi;
int main ( );
char num [ 3 ];
int Gerar_Seriais ( char num [ 3 ] ) {
     unsigned int i;
     for ( i = 0; i < strlen ( num ) ; i++ ) {
         if ( num [ i ] < '0' || num [ i ] > '9' )
              return 0;
     }
     return 1;
}
void Gera_Arquivos ( char *ais );
void Gera_Seriais ( char *ais ) {
     system ( "cls" );
     Janela5 ( );
     textcolor ( LIGHTRED );
     gotoxy ( 29 , 3 );
     printf ( "PROGRAMA GERADOR DE SERIAIS" );
     textcolor ( YELLOW );
     gotoxy ( 24 , 5 );
     printf ( "Programa desenvolvido por:" );
     textcolor ( LIGHTCYAN );
     gotoxy ( 51 , 5 );
     printf ( "Samuel Lima" );
     textcolor ( LIGHTGREEN );
     gotoxy ( 34 , 7 );
     printf ( "sa_sp10@hotmail.com" );
     textcolor ( WHITE );
     gotoxy ( 25 , 9 );
     printf ( "Digite um Numero ou [ -1 ] Para sair: " );
     textcolor ( YELLOW );
     gets ( num );
     fflush ( stdin );
     n = atoi ( num );
     if ( n == 0 ) {
         textcolor ( LIGHTGREEN );
         gotoxy ( 25 , 11 );
         printf ( "\aCaracteres e zero nao sao aceitos !" );
         Sleep ( 1800 );
         textcolor ( LIGHTGREEN );
         gotoxy ( 25 , 13 );
         printf ( "\aVoce digitou: %s" , num );
         Sleep ( 1800 );
         textcolor ( LIGHTGREEN );
         gotoxy ( 25 , 15 );
         printf ( "\a%s Nao e Valido !" , num );
         Sleep ( 1800 );
         Gera_Seriais ( ais );
         system ( "cls" );
     }
     if ( n == -1 ) {
         textcolor ( LIGHTRED );
         gotoxy ( 33 , 20 );
         printf ( "O ROCCO AGRADECE" );
         Sleep ( 1800 );
         exit ( 0 );
     }
     if ( n < 0 ) {
         textcolor ( LIGHTGREEN );
         gotoxy ( 25 , 11 );
         printf ( "\aO Unico Negativo Valido e o -1" );
         Sleep ( 1800 );
     }
     if ( n > 9999 ) {
         textcolor ( LIGHTGREEN );
         gotoxy ( 22 , 11 );
         printf ( "\aSo sao aceitos Numeros menores que 10 000 " );
         getche ( );
         Gera_Seriais ( ais );
         system ( "cls" );
     }
     if ( Gerar_Seriais ( num ) == 0 ) {
         textcolor ( LIGHTGREEN );
         gotoxy ( 25 , 13 );
         printf ( "\aVoce digitou: %s" , num );
         Sleep ( 1800 );
         textcolor ( LIGHTGREEN );
         gotoxy ( 25 , 15 );
         printf ( "\a%s Nao e Valido !" , num );
         Sleep ( 1800 );
         Gera_Seriais ( ais );
         system ( "cls" );
     } else {
         mi = ( n / 1000 ); //separa milhares
         ce = ( ( n - ( mi * 1000 ) ) / 100 ); //separa centenas
         de = ( ( n - ( ( mi * 1000 ) + ( ce * 100 ) ) ) / 10 ); //separa dezenas
         un = ( n - ( ( mi * 1000 ) + ( ce * 100 ) + ( de * 10 ) ) ); //separa unidades
         textcolor ( YELLOW );
         gotoxy ( 35 , 11 );
         printf ( "Voce digitou: " );
         textcolor ( LIGHTRED );
         gotoxy ( 50 , 11 );
         printf ( "%d %d %d %d" , mi , ce , de , un );
         getche ( );
         int x = n;
         system ( "cls" );
         Janela5 ( );
         textcolor ( LIGHTRED );
         gotoxy ( 30 , 3 );
         printf ( "PROGRAMA GERADOR DE SERIAIS" );
         int i = 1, j;
         char u_ge [ 5 ], d_ra [ 5 ], c_se [ 5 ], m_ri [ 5 ];
         char ri [ 9 ] [ 9 ] =
               { " NATXBG ", " TRABZS ", " RKPIVX ", " XURKXT ",
                   " NBMIKT ", " NEGVWC ", " XYVNAB ", " BFYEKJ ", " HFNWTQ " };
         char se [ 9 ] [ 9 ] =
              { " XCVBWE ", " DUZKVF ", " XCVRGV ", " EYARIM ",
                 " QUINRI ", " VFCEKT ", " QETSVP ", " TMCZPK ", " KCRLTP " };
         char ra [ 9 ] [ 9 ] =
              { " DZEBTG ", " QIGXRN ", " BNTFCL ", " QUARHN ",
                 " NCULZJ ", " SEYSQU ", " STETWK ", " WITQSL ", " GPNOKQ " };
         char ge [ 10 ] [ 9 ] =
              { " WQXYAH ", " IXJHPZ ", " OFGHOS ", " WKLFXJ ",
                 " YTRDIZ ", " QAZXKL ", " VBNHOV ", " SKYINM ", " PKFQUT ", " ZYTBFC " };

         textcolor ( LIGHTBLUE );
         gotoxy ( 30 , 5 );
         printf ( "Veja abaixo o Serial Gerado " );
         textcolor ( LIGHTRED );
         gotoxy ( 23 , 7 );
         strcpy ( ais , "" );
         strcpy ( u_ge , "" );
         strcpy ( d_ra , "" );
         strcpy ( c_se , "" );
         strcpy ( m_ri , "" );
         while ( x > 0 && x < 10000 ) {
              j = x % 10;
              x = x / 10;
              switch ( i ) {
                   case 1: {
                        if ( j - 1 >= 0 ) {
                            strcat ( u_ge , ge [ j - 1 ] );
                            i++;
                            break;
                        } else {
                            i++;
                            break;
                        }
                   }
                   case 2: {
                        if ( j - 1 == 0 ) {
                            strcat ( d_ra , ra [ 0 ] );
                            i++;
                            break;
                        } else {
                            if ( j - 1 > 0 ) {
                                 strcat ( d_ra , ra [ j - 1 ] );
                                 i++;
                                 break;
                            } else {
                                 i++;
                                 break;
                            }
                        }
                   }
                   case 3: {
                        if ( j - 1 == 0 ) {
                            strcat ( c_se , se [ 0 ] );
                            i++;
                            break;
                        } else {
                            if ( j - 1 > 0 ) {
                                 strcat ( c_se , se [ j - 1 ] );
                                 i++;
                                 break;
                            } else {
                                 i++;
                                 break;
                            }
                        }
                   }
                   case 4: {
                        if ( j - 1 == 0 ) {
                            strcat ( m_ri , ri [ 0 ] );
                            i++;
                            break;
                        } else {
                            strcat ( m_ri , ri [ j - 1 ] );
                            i++;
                            break;
                        }
                   }
              }
         }
         textcolor ( LIGHTRED );
         strcat ( ais , m_ri );
         strcat ( ais , c_se );
         strcat ( ais , d_ra );
         strcat ( ais , u_ge );
         puts ( ais );
         getche ( );
         textcolor ( LIGHTBLUE );
         gotoxy ( 10 , 9 );
         printf ( "Abaixo o Serial Gerado e Invertido " );
         textcolor ( LIGHTRED );
         gotoxy ( 23 , 11 );
         printf ( "%s" , strrev ( ais ) );
         getche ( );
         textcolor ( LIGHTBLUE );
         gotoxy ( 10 , 13 );
         printf ( "Veja abaixo o Serial Gerado em Minusculo " );
         textcolor ( LIGHTRED );
         gotoxy ( 10 , 15 );
         printf ( " %s" , strlwr ( ais ) );
         getche ( );
         textcolor ( LIGHTBLUE );
         gotoxy ( 10 , 17 );
         printf ( "Abaixo o Serial em Minusculo e Invertido " );
         textcolor ( LIGHTRED );
         gotoxy ( 10 , 19 );
         printf ( "%s" , strrev ( ais ) );
         getche ( );
         textcolor ( YELLOW );
         gotoxy ( 29 , 21 );
         printf ( "PRESSIONE QUALQUER TECLA" );
         getche ( );
         strupr ( ais );
         do {
              system ( "cls" );
              Janela5 ( );
              textcolor ( LIGHTRED );
              gotoxy ( 29 , 3 );
              printf ( "PROGRAMA GERADOR DE SERIAIS" );
              textcolor ( LIGHTBLUE );
              gotoxy ( 13 , 5 );
              printf (
                        "Deseja Imprimir o Serial em um Arquivo, ou quer gerar outro ?" );
              textcolor ( LIGHTGREEN );
              gotoxy ( 8 , 7 );
              printf (
                        "[ I ] Para Imprimir,[ G ] Para Gerar outro Serial,[ S ] Para sair    " );
              char q;
              textcolor ( LIGHTRED );
              q = ( toupper ( getche ( ) ) );
              fflush ( stdin );
              gotoxy ( 75 , 7 );
              switch ( q ) {
                   case 'I':
                        Gera_Arquivos ( ais );
                        break;
                   case 'G':
                        Gera_Seriais ( ais );
                        break;
                   case 'S':
                        textcolor ( LIGHTRED );
                        gotoxy ( 33 , 20 );
                        printf ( "O ROCCO AGRADECE" );
                        Sleep ( 1800 );
                        exit ( 0 );
                        break;
                   default:
                        textcolor ( YELLOW );
                        gotoxy ( 33 , 10 );
                        printf ( "\a Opcao invalida" );
                        getche ( );
                        gotoxy ( 33 , 10 );
                        printf ( "                  " );
                        break;
              }
         } while ( 1 );
     }
}
void Gera_Arquivos ( char *ais ) {
     FILE *arq;
     char str [ 2 ] [ 24 ] = { " Pre - Senha: ", "\n Serial Em Maiusculo: " };
     char str1 [ 1 ] [ 24 ] = { "\n Serial Em Minusculo: " };
     char str2 [ 1 ] [ 37 ] = { "\n Serial Em Maiusculo e Invertido: " };
     char str3 [ 1 ] [ 37 ] = { "\n Serial Em Minusculo e Invertido:" };
     char Linha [ 100 ];
     int result;
     arq = fopen ( "Serial.txt" , "wt" );
     if ( arq == NULL ) {
         printf ( "Problemas na criacao do arquivo\n" );
         return;
     }
     result = fprintf ( arq , str [ 0 ] );
     fprintf ( arq , num );
     fprintf ( arq , str [ 1 ] );
     fprintf ( arq , ais );
     fprintf ( arq , str1 [ 0 ] );
     fprintf ( arq , strlwr ( ais ) );
     fprintf ( arq , str2 [ 0 ] , strrev ( ais ) );
     fprintf ( arq , strupr ( ais ) );
     fprintf ( arq , str3 [ 0 ] , ais );
     fprintf ( arq , strlwr ( ais ) );
     if ( result == EOF )
         printf ( "Erro na Gravacao\n" );
     fclose ( arq );
     textcolor ( LIGHTBLUE );
     gotoxy ( 23 , 9 );
     printf ( "Abrindo o arquivo .txt contendo o Serial" );
     getche ( );
     system ( "start Serial.txt" );
     getche ( );
     textcolor ( LIGHTBLUE );
     gotoxy ( 19 , 11 );
     printf ( "Fechando agora o arquivo .txt contendo o Serial" );
     getche ( );
     system ( "taskkill.exe /IM notepad.exe" );
     gotoxy ( 1 , 11 );
     printf ( "%c" , 219 );
     clreol ( ); // Usando a funcao clreol (); que junto com gotoxy, apaga uma linha
     textcolor ( LIGHTBLUE );
     gotoxy ( 23 , 9 );
     printf ( "Abaixo, a leitura do Serial num arquivo .txt" );
     textcolor ( LIGHTRED );
     gotoxy ( 10 , 13 );
     arq = fopen ( "Serial.txt" , "rb" );
     while ( !feof ( arq ) ) {
         fgets ( Linha , 100 , arq );
         if ( result ) {
              printf ( "%s" , Linha );
         }
         gotoxy ( 10 , 14 );
         fgets ( Linha , 100 , arq );
         if ( result ) {
              printf ( "%s" , Linha );
         }
         gotoxy ( 10 , 15 );
         fgets ( Linha , 100 , arq );
         if ( result ) {
              printf ( "%s" , Linha );
         }
         gotoxy ( 10 , 16 );
         fgets ( Linha , 100 , arq );
         if ( result ) {
              printf ( "%s" , Linha );
         }
         gotoxy ( 10 , 17 );
         fgets ( Linha , 100 , arq );
         if ( result ) {
              printf ( "%s" , Linha );
         }
     }
     fclose ( arq );
     getche ( );
     Gera_Seriais ( ais );
}
int main ( ) {
     system ( "title PROGRAMA GERADOR DE SERIAIS" );
     char *ais [ 5 ];
     Gera_Seriais ( ais [ 5 ] );
     Gera_Arquivos ( ais [ 5 ] );
     getche ( );
}