Programa Mega Sena

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

Programa Mega Sena

Mensagem por MauvadO em Seg Abr 06, 2015 5:17 am

Entendendo claramente o que é variável, que  não passa de uma parte de memória onde se armazena valores de um determinado tipo,
podemos dizer que ponteiro também é uma variável que carrega um endereço de uma posição de outra variável.
Quando uma variável possui o endereço de outra, dizemos em C
que uma variável está apontando para outra.
Para declarar um ponteiro escolhemos primeiro o tipo, adequado permitido e em seguida damos um nome precedendo de um *.
Ex: tipo *nome_da_variavel;
Vale lembrar que podemos criar ponteiros para qualquer tipo aceito no C, e que são usados só dois operadores especiais, que são o * e o &.
O operador que devolve o endereço de memória é o & que é considerado um operador unário, isto é, trabalha sobre uma variável para modificar, ou manter um determinado valor.
A matriz de ponteiro static char *Mat_Mesg [ ] = {}; com a palavra reservada static declarada local, utiliza a passagem de parâmetros por valor, observe o uso do apontador e veja que uma cópia fiel
é passada para a função Sub_Titulos ( int x, char *Mat_Mesg [ ] );
De onde vem as chamadas das mensagens de interação com o usuário do programa.
Em outras funções que também receberam parâmetros forcei o uso de ponteiros, onde foram obrigatoriamente usados para um bom desempenho do programa.
A função Sorteia_Mega_Sena( int *A ); é a mais importante, é nela onde são gerados os números aleatórios dentro  de uma faixa estreita, entre 1 e 60, fiquei muitas horas empenhados nesta função porque os valores se repetiam, não foi fácil fazer isto que parece ser tão simples.
A lógica pra resolver isto foi trabalhar com estas repetições, anulando a sequência e gerando outra, isto é feito automaticamente pelo programa, e duvido que alguém perceba que houve repetições, porque tudo acontece muito rápido.
Fica bem claro que é exigido um bom conhecimento de ponteiros e alocação dinâmica para entender este código, portanto não é indicado a quem está iniciando agora.

Veja abaixo imagens do programa em execução:

[Você precisa estar registrado e conectado para ver esta imagem.]
[Você precisa estar registrado e conectado para ver esta imagem.]
[Você precisa estar registrado e conectado para ver esta imagem.]
[Você precisa estar registrado e conectado para ver esta imagem.]
E assim por diante vocês... até dar os 5 ou os máximo de números desejado pelo criador.
[Você precisa estar registrado e conectado para ver esta imagem.]
Veja abaixo o código do programa:
Código:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define tam 60
#define T 6
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 Sorteia_Mega_Sena ( int *A ){
    int V = 6;
    int i, j, vezes;
    srand ( time ( NULL ) );
    for ( i = 0; i < T; i++ ){
        A [ i ] = rand ( ) % 60;
    }
    for ( i = 0; i < T; i++ ) {
        vezes = 1;
        j = i + 1;
        while ( j < T  )
            if ( A [ j ] != A [ i ] )
                j++;
            else {
                vezes++;
                V--;
                A [ j ] = A [ T ];
            }
        if ( vezes > 1 ){
            return (0);
        }
    }
    return(0);
}
int Me_Ga_Se_na ( int x, int y, int Megasena [ 6 ] [ 10 ] ){
    int **pont;
    pont = ( int** ) malloc ( 60 * sizeof ( int** ) );
    *pont = *Megasena ;
    printf (" %3d ", Megasena [ x ] [ y ] );
    return(0);
}
void Sub_Titulos ( int x, char *Mat_Mesg [ ] ){
    printf ("%s\n", Mat_Mesg [ x ] );
}
int Val_Apos_tas ( int x, int Me_ga [ 10 ]  ){
    int *p_t = 0;
    p_t = Me_ga;
    printf ("%d\n", p_t [ x ] );
    return(0);
}
int Val_Ap_os_tas ( int x, float M_eg_a [ 5 ] ){
    float *ptr = 0;
    ptr = M_eg_a;
    printf ("%.5f\n", ptr [ x ] );
    return(0);
}
int Val_Apostas ( int x, float Mega [ 5 ] ){
    float *pt = 0;
    pt = Mega;
    printf ("%.2f\n", pt [ x ] );
    return(0);
}
int Meg_Sen ( char num [ 4 ] ){
    unsigned int i;
    for( i = 0; i < strlen ( num ); i++ ){
        if ( num [ i ] < '0' || num [ i ] > '9' )
            return 0;
    }
    return 1;
}
int main(){
    system ("title PROGRAMA MEGA SENA");
    char num [ 4 ];char n_um [ 4 ];
    int Vetor [ tam ], Vet_or [ tam ], Vet [ tam ], Vet_o_r [ tam ];
    int aut, *A, i, j, k = 0, h = 0, n = 0, n1 = 0, q = 0, x = 0, y = 0, erro = 0;
    A = ( int* ) malloc ( n * sizeof ( int ) );
    static char *Mat_Mesg [ ] = {
            "PROGRAMA MEGA SENA",
            "Veja abaixo os 60 números da Mega sena",
            "Escolha quantos números deseja jogar ",
            "Não é possível jogar menos de",
            "números",
            "Nem mais que ",
            "num bilhete",
            " Você escolheu jogar",
            " O valor da aposta será ",
            "PRESSIONE QUALQUER TECLA",
            "Jogue o ",
            "Número : ",
            "Números menores que 1 não são aceitos",
            "Nem maiores que 60",
            "Você já escolheu o número ",
            "Veja abaixo os Números jogados até aqui ",
            "Números jogados",
            "Números sorteados",
            "Você não acertou nenhum número",
            "MUITO OBRIGADO",
            "Você acertou ",
            "veja abaixo",
            "Você digitou: ",
            "Isso não é um número válido !",
    };
    int Me_ga [ 10 ] = { 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
    float Mega [ 5 ] = { 2.50, 17.50, 70.00, 210.00, 525.00 };
    float M_eg_a [ 5 ] = { 1.15500, 2.31000, 4.29000, 7.50750, 12.51250 };
    int Megasena [ 6 ] [ 10 ] =
            {{ 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}};
    do{system("cls");Janela5();
    textcolor(LIGHTRED);gotoxy(33,3);Sub_Titulos ( 0, Mat_Mesg  );
    textcolor(LIGHTBLUE);gotoxy(24,5);Sub_Titulos ( 1, Mat_Mesg  );
    textcolor(WHITE);
    for( i = 0; i < 6; i++ ){
        gotoxy(16, i + 7);
        for( j = 0; j < 10; j++ ){
            Me_Ga_Se_na ( i, j, Megasena );
        }
    }
    textcolor(LIGHTBLUE);gotoxy(24,14);Sub_Titulos ( 2, Mat_Mesg  );
    textcolor(LIGHTRED);gotoxy(61,14);gets ( num );fflush(stdin);
    n =  atoi ( num );
    if ( Meg_Sen ( num ) == 0 ){
        textcolor(VERDECLARO);gotoxy(30,16);Sub_Titulos ( 22, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(44,16);printf(" %s", num);
        textcolor(VERDECLARO);gotoxy(30,17);Sub_Titulos ( 23, Mat_Mesg  );
        Sleep(1000);
        gotoxy(30,19);textcolor(AMARELO);Sub_Titulos ( 9, Mat_Mesg  );getche();
        gotoxy(30,16);clreol ();
        gotoxy(30,17);clreol ();
        gotoxy(61,14);clreol ();
        gotoxy(30,19);clreol ();
        erro = 0;continue;
    }
    if ( n < Me_ga [ 0 ] || n > Me_ga [ 9 ] ){
        textcolor(LIGHTBLUE);gotoxy(24,16);Sub_Titulos ( 3, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(53,16);printf(" %d", Me_ga [ 0 ] );
        textcolor(LIGHTBLUE);gotoxy(56,16);Sub_Titulos ( 4, Mat_Mesg  );
        textcolor(LIGHTBLUE);gotoxy(24,17);Sub_Titulos ( 5, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(37,17);printf("%d", Me_ga [ 9 ] );
        textcolor(LIGHTBLUE);gotoxy(40,17);Sub_Titulos ( 6, Mat_Mesg  );
        Sleep(1000);
        gotoxy(30,19);textcolor(AMARELO);Sub_Titulos ( 9, Mat_Mesg  );
        getche();system ("cls");
    }
    }while ( ( n < Me_ga [ 0 ] ) || ( n > Me_ga [ 9 ] ) );
    if ( n == Me_ga [ 0 ] ){
        textcolor(LIGHTBLUE);gotoxy(12,16);Sub_Titulos ( 7, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(33,16);Val_Apos_tas ( 0, Me_ga );
        textcolor(LIGHTBLUE);gotoxy(36,16);Sub_Titulos ( 4, Mat_Mesg  );
        gotoxy(12,17);Sub_Titulos ( 8, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(36,17);Val_Apostas ( 0, Mega );
    }
    if ( n == Me_ga [ 1 ] ){
        textcolor(LIGHTBLUE);gotoxy(12,16);Sub_Titulos ( 7, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(33,16);Val_Apos_tas ( 1, Me_ga );
        textcolor(LIGHTBLUE);gotoxy(36,16);Sub_Titulos ( 4, Mat_Mesg  );
        gotoxy(12,17);Sub_Titulos ( 8, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(36,17);Val_Apostas ( 1, Mega );
    }
    if ( n == Me_ga [ 2 ] ){
        textcolor(LIGHTBLUE);gotoxy(12,16);Sub_Titulos ( 7, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(33,16);Val_Apos_tas ( 2, Me_ga );
        textcolor(LIGHTBLUE);gotoxy(36,16);Sub_Titulos ( 4, Mat_Mesg  );
        gotoxy(12,17);Sub_Titulos ( 8, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(36,17);Val_Apostas ( 2, Mega );
    }
    if ( n == Me_ga [ 3 ] ){
        textcolor(LIGHTBLUE);gotoxy(12,16);Sub_Titulos ( 7, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(33,16);Val_Apos_tas ( 3, Me_ga );
        textcolor(LIGHTBLUE);gotoxy(36,16);Sub_Titulos ( 4, Mat_Mesg  );
        gotoxy(12,17);Sub_Titulos ( 8, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(36,17);Val_Apostas ( 3, Mega );
    }
    if ( n == Me_ga [ 4 ] ){
        textcolor(LIGHTBLUE);gotoxy(12,16);Sub_Titulos ( 7, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(33,16);Val_Apos_tas ( 4, Me_ga );
        textcolor(LIGHTBLUE);gotoxy(36,16);Sub_Titulos ( 4, Mat_Mesg  );
        gotoxy(12,17);Sub_Titulos ( 8, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(36,17);Val_Apostas ( 4, Mega );
    }
    if ( n == Me_ga [ 5 ] ){
        textcolor(LIGHTBLUE);gotoxy(12,16);Sub_Titulos ( 7, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(33,16);Val_Apos_tas ( 5, Me_ga );
        textcolor(LIGHTBLUE);gotoxy(36,16);Sub_Titulos ( 4, Mat_Mesg  );
        gotoxy(12,17);Sub_Titulos ( 8, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(36,17);Val_Ap_os_tas ( 0, M_eg_a);
    }
    if ( n == Me_ga [ 6 ] ){
        textcolor(LIGHTBLUE);gotoxy(12,16);Sub_Titulos ( 7, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(33,16);Val_Apos_tas ( 6, Me_ga );
        textcolor(LIGHTBLUE);gotoxy(36,16);Sub_Titulos ( 4, Mat_Mesg  );
        gotoxy(12,17);Sub_Titulos ( 8, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(36,17);Val_Ap_os_tas ( 1, M_eg_a);
    }
    if ( n == Me_ga [ 7 ] ){
        textcolor(LIGHTBLUE);gotoxy(12,16);Sub_Titulos ( 7, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(33,16);Val_Apos_tas ( 7, Me_ga );
        textcolor(LIGHTBLUE);gotoxy(36,16);Sub_Titulos ( 4, Mat_Mesg  );
        gotoxy(12,17);Sub_Titulos ( 8, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(36,17);Val_Ap_os_tas ( 2, M_eg_a);
    }
    if ( n == Me_ga [ 8 ] ){
        textcolor(LIGHTBLUE);gotoxy(12,16);Sub_Titulos ( 7, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(33,16);Val_Apos_tas ( 8, Me_ga );
        textcolor(LIGHTBLUE);gotoxy(36,16);Sub_Titulos ( 4, Mat_Mesg  );
        gotoxy(12,17);Sub_Titulos ( 8, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(36,17);Val_Ap_os_tas ( 3, M_eg_a);
    }
    if ( n == Me_ga [ 9 ] ){
        textcolor(LIGHTBLUE);gotoxy(12,16);Sub_Titulos ( 7, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(33,16);Val_Apos_tas ( 9, Me_ga );
        textcolor(LIGHTBLUE);gotoxy(36,16);Sub_Titulos ( 4, Mat_Mesg  );
        gotoxy(12,17);Sub_Titulos ( 8, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(36,17);Val_Ap_os_tas ( 4, M_eg_a);
    }
    Sleep(1000);
    gotoxy(30,19);textcolor(AMARELO);Sub_Titulos ( 9, Mat_Mesg  );
    getche();system ("cls");
    for ( i = 0; i < n; i++ ){
        do{do{system("cls");Janela5();
        textcolor(LIGHTRED);gotoxy(33,3);Sub_Titulos ( 0, Mat_Mesg  );
        textcolor(LIGHTBLUE);gotoxy(32,5);Sub_Titulos ( 10, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(40,5);printf("%do", i + 1);
        textcolor(LIGHTBLUE);gotoxy(44,5);Sub_Titulos ( 4, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(53,5);gets ( n_um );fflush(stdin);
        n1 =  atoi ( n_um );
        if ( Meg_Sen ( n_um ) == 0  ){
            textcolor(VERDECLARO);gotoxy(30,16);Sub_Titulos ( 22, Mat_Mesg  );
            textcolor(LIGHTRED);gotoxy(44,16);printf(" %s", n_um);
            textcolor(VERDECLARO);gotoxy(30,17);Sub_Titulos ( 23, Mat_Mesg  );
            Sleep(1000);
            gotoxy(30,19);textcolor(AMARELO);Sub_Titulos ( 9, Mat_Mesg  );getche();
            gotoxy(30,12);clreol ();
            gotoxy(30,13);clreol ();
            gotoxy(53,5);clreol ();
            gotoxy(30,19);clreol ();
            erro = 0;continue;
        }
        if ( n1 < 1 || n1 > 60 ){
            textcolor(LIGHTBLUE);gotoxy(24,7);Sub_Titulos ( 12, Mat_Mesg  );
            textcolor(LIGHTBLUE);gotoxy(24,8);
            Sub_Titulos ( 13, Mat_Mesg  );
            gotoxy(30,10);textcolor(AMARELO);Sub_Titulos ( 9, Mat_Mesg  );
            getche();continue;
        }
        }while ( ( n1 < 1 ) || ( n1 > 60 ) );
        aut = 0;
        for ( j = 0; j < n; j++ )
            if ( n1 == A [ j ] )
                aut = 1;
        if ( aut == 0 ){
            A [ i ] = n1;
            Vetor [ x ] = A [ i ];
            x++;
        }
        else{
            textcolor(LIGHTBLUE);gotoxy(22,7);Sub_Titulos ( 14, Mat_Mesg  );
            textcolor(LIGHTRED);gotoxy(47,7);printf(" %d", n1 );
            textcolor(LIGHTBLUE);gotoxy(22,9);Sub_Titulos ( 15, Mat_Mesg  );
            k = x;textcolor(LIGHTRED);gotoxy(22,11);
            for ( x = 0; x < k; x++ )
                printf(" %i ",Vetor [ x ] );
            textcolor(YELLOW);gotoxy(32,15);Sub_Titulos ( 9, Mat_Mesg  );
            getche();
        }
        }while ( aut == 1 );
    }
    textcolor(LIGHTBLUE);gotoxy(22,7);Sub_Titulos ( 16, Mat_Mesg  );
    textcolor(LIGHTRED);gotoxy(22,9);
    for ( i = 0; i < n; i++ ){
        printf(" %d ", A [ i ] );
        Vet_o_r [ q ] = A [ i ];
        q++;
    }
    getche();
    y = Sorteia_Mega_Sena ( A );
    textcolor(LIGHTBLUE);gotoxy(22,11);Sub_Titulos ( 17, Mat_Mesg  );
    textcolor(LIGHTRED);gotoxy(22,13);
    for ( i = 0; i < T; i++ ){
        printf(" %d ", A [ i ] + 1 );
    }
getche();
    for ( i = 0; i < n; i++ ){
        for ( q = 0; q < n; q++ ){
            if ( A [ i ] + 1 == Vet_o_r [ q ] ){
                Vet [ h ] = Vet_o_r [ q ];
                h++;
            }
        }
    }
    k = h;
    if( k == 0 ){
        textcolor(LIGHTGREEN);gotoxy(23,15);Sub_Titulos ( 18, Mat_Mesg  );
        Sleep(1800);
        textcolor(WHITE);gotoxy(35,23);Sub_Titulos ( 19, Mat_Mesg  );
        getche();exit(0);
    }
    if( k == h ){
        textcolor(LIGHTBLUE);gotoxy(22,15);Sub_Titulos ( 20, Mat_Mesg  );
        textcolor(LIGHTRED);gotoxy(35,15);printf("%d", k);
        textcolor(LIGHTBLUE);gotoxy(38,15);Sub_Titulos ( 4, Mat_Mesg  );
        textcolor(LIGHTBLUE);gotoxy(46,15);Sub_Titulos ( 21, Mat_Mesg  );
    }    textcolor(LIGHTRED);gotoxy(22,17);
    for ( h = 0; h < k; h++ )
        printf(" %i ",Vet [ h ] );Sleep(1800);
    textcolor(WHITE);gotoxy(35,23);Sub_Titulos ( 19, Mat_Mesg  );
    getche();
    return(0);
}

Atenciosamente Equipe WP
Very Happy Very Happy
avatar
MauvadO
Admin
Admin

Mensagens : 23
Data de inscrição : 04/04/2015
Idade : 16

http://worldprogramme.livreforum.com

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo

- Tópicos similares

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum