sábado, 18 de abril de 2015

VETOR SEM REPETIÇÕES

Quando precisamos agrupar elementos de um mesmo tipo
numa variável, recorremos aos vetores, que em C são
matrizes unidimensionais.Um vetor também é uma estrutura
de dados, e é muito utilizado no C, devido sua
facilidade de uso e eficiência quando usado adequadamente.
Quando declaramos um vetor como no exemplo abaixo:
tipo nome_da_variavel_vetor [ total de elementos ];
O C reserva a quantidade de memória suficiente para
armazenar os elementos em total de elementos.
Como nosso vetor é de tamanho 15, bastou multiplicar
4 x 15, pra saber que nosso vetor ocupa 60 bytes de memória de maneira contígua.
No C a contagem começa sempre em zero, sendo assim, os
dados serão armazenados em posições de 0 14, e que podem
ser acessados independemente um dos outros.
Más no programa proposto aqui, nosso vetor só pode ser
preenchido dentro de limitações que coloquei, para
mostrar na prática aos iniciante como proceder em
situações em que sejam exigidas estas limitações.
O programa recusa números abaixo de 5 e números acima de
15, recusa também caracteres e números que não sejam inteiros.
Observe as duas funções que criei para agir auxiliando a
entrada de dados barrando estas condições.

Veja abaixo imagens do programa em execução:








Veja abaixo o código do programa:


#include <stdio.h>
#include <conio.h>
#define tam 15
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 cnmemadc ( char num [ 3 ], int n, int x, int y ) {
     if ( n > x && n < y ) {
         return 0;
     }
     if ( n < 0 ) {
         printf ( "\aNegativos não são válidos" );
         return 0;
     }
     if ( n > x ) {
         printf ( "\aNúmero acima do permitido" );
         return 0;
     }
     if ( *num < '0' || *num > '9' ) {
         printf ( "\aCaracteres não são aceitos" );
         return 1;
     } else {
         if ( n < y ) {
              printf ( "\aNúmero abaixo do permitido" );
              return 0;
         }
     }
     return ( 0 );
}
float Inte_iro ( float y ) {
     int inteiro = 0;
     inteiro = y;
     if ( y == ( float ) inteiro ) {
         return 1;
     } else {
         return 0;
     }
}
int main ( ) {
     system ( "title VETOR SEM REPETIÇÕES" );
     char n_um [ 4 ];
     float h = 0;
     int Vetor [ tam ];
     int aut, *A, i, j, k = 0, n1 = 0, x = 0;
     A = ( int* ) malloc ( tam * sizeof(int) );
     for ( i = 0; i < 10; i++ ) {
         do {
              do {
                   do {
                        system ( "cls" );
                        Janela5 ( );
                        textbackground ( WHITE );
                        textcolor ( LIGHTRED );
                        gotoxy ( 33, 3 );
                        printf ( "VETOR SEM REPETIÇÕES" );
                        textcolor ( LIGHTBLUE );
                        gotoxy ( 33, 5 );
                        printf ( "Digite o" );
                        textcolor ( LIGHTRED );
                        gotoxy ( 40, 5 );
                        printf ( " %do ", i + 1 );
                        textcolor ( LIGHTBLUE );
                        gotoxy ( 44, 5 );
                        printf ( " Número" );
                        textcolor ( LIGHTRED );
                        gotoxy ( 52, 5 );
                        gets ( n_um );
                        fflush ( stdin );
                        n1 = atoi ( n_um );
                        h = atof ( n_um );
                        if ( Inte_iro ( h ) == 1 ) {
                            break;
                        } else {
                            textcolor ( BLACK );
                            gotoxy ( 30, 9 );
                            printf ( "O Numero %.1f Não é inteiro", h );
                            textcolor ( YELLOW );
                            gotoxy ( 31, 15 );
                            Sleep ( 1000 );
                            printf ( "PRESSIONE QUALQUER TECLA" );
                            getche ( );
                        }
                   } while ( 1 );
                   gotoxy ( 30, 9 );
                   cnmemadc ( n_um, n1, 4, 16 );
                   getche ( );
              } while ( ( n1 < 5 ) || ( n1 > tam ) );
              aut = 0;
              for ( j = 0; j < 10; j++ )
                   if ( n1 == A [ j ] )
                        aut = 1;
              if ( aut == 0 ) {
                   A [ i ] = n1;
                   Vetor [ x ] = A [ i ];
                   x++;
              } else {
                   textcolor ( LIGHTBLUE );
                   gotoxy ( 22, 7 );
                   printf ( "Você já digitou o número" );
                   textcolor ( LIGHTRED );
                   gotoxy ( 47, 7 );
                   printf ( " %d", n1 );
                   textcolor ( LIGHTBLUE );
                   gotoxy ( 22, 9 );
                   printf ( "Veja abaixo os Números digitados até aqui " );
                   k = x;
                   textcolor ( LIGHTRED );
                   gotoxy ( 22, 11 );
                   for ( x = 0; x < k; x++ )
                        printf ( " %i ", Vetor [ x ] );
                   textcolor ( YELLOW );
                   gotoxy ( 32, 15 );
                   printf ( "PRESSIONE QUALQUER TECLA" );
                   getche ( );
              }
         } while ( aut == 1 );
     }
     textcolor ( LIGHTBLUE );
     gotoxy ( 22, 7 );
     printf ( "Números digitados" );
     textcolor ( LIGHTRED );
     gotoxy ( 22, 9 );
     for ( i = 0; i < 10; i++ ) {
         printf ( " %d ", A [ i ] );
     }
     Sleep ( 1800 );
     textcolor ( BLACK );
     gotoxy ( 30, 21 );
     printf ( "Criado por: Samuel Lima " );
     textcolor ( LIGHTRED );
     gotoxy ( 36, 23 );
     printf ( "MUITO OBRIGADO" );
     getche ( );
     exit ( 0 );
     return ( 0 );
}