sexta-feira, 18 de abril de 2014

Preenchendo e Alterando um Vetor

Este programa usa um Vetor dinâmico, declarado e preparado,
para receber até 21 Números, estabelecido pelo macro #tam.
Se informarmos Números acima de 20, o programa rejeita a entrada, retornando para o início, até que se satisfaça os parâmetros solicitados.
Más, o que mais chama a atenção,é a capacidade que o programa tem de rejeitar Números repetidos, e mostrar ainda, os Números que já foram digitados até o momento.
Satisfazendo as solicitações do programa, ele imprime oficialmente os Números preenchidos nas posições do Vetor,
E na tela seguinte imprime novamente numerando-os, e pergunta no lugar de qual daqueles números deseja fazer a alteração.
Fique sabendo que coloquei restrições aqui também, pois a última posição do Vetor não é aceita, deixo bem claro também
que o programa é capaz de identificar se por acaso o usuário digitar um Número que não está enumerado nas posições do Vetor.
Que ótimo programa, até eu mesmo, depois que venci todo os obstáculos encontrado, fico impressionado com o bom desempenho apresentado.

Veja algumas imagens abaixo:










Veja o código abaixo:

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define tam 20
void Janela5(){
    int lin, col;
    col = 0;
    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 main(){
    system ("title PREENCHENDO E ALTERANDO UM VETOR");
    int a, ac, aut, *A, i , k = 0, j , n, p, x = 0;
    int Vetor  [ tam ];
    int n1;
    A = ( int* ) malloc ( tam * sizeof ( int ) );
    do{
        clrscr();Janela5();
        textcolor(LIGHTRED);gotoxy(26,3);printf("PREENCHENDO E ALTERANDO UM VETOR ");
        textcolor(LIGHTBLUE);gotoxy(20,5);printf("Informe o total de Números que vai digitar : ");
        textcolor(LIGHTRED);scanf("%d", &p);fflush(stdin);
        textcolor(LIGHTGREEN);gotoxy(20,9);
        if ( p < 0 || p > tam ){
            printf("\aNúmero Acima de 0 e menor que %d ", tam );
            getche();system("cls");
        }
    }while ( ( p < 0 ) || ( p > tam ) ) ;
    for ( i = 0 ; i <= p ; i++ ){
        do{system("cls");Janela5();
        textcolor(LIGHTRED);gotoxy(26,3);printf("PREENCHENDO E ALTERANDO UM VETOR ");
        textcolor(LIGHTBLUE);gotoxy(32,5);printf("Insira o ");
        textcolor(LIGHTRED);gotoxy(40,5);printf(" %do", i + 1);
        textcolor(LIGHTBLUE);gotoxy(44,5);printf("Número : ");
        textcolor(LIGHTRED); scanf("%d",&n );fflush(stdin);
        aut = 0;
        for ( j = 0 ; j <= p ; j++ )
            if ( n == A [ j ] )
                aut = 1;
        if ( aut == 0 ){
            A [ i ] = n;
            Vetor [ x ] = A [ i ];
            x++;
        }
        else{
            k = x;
            textcolor(LIGHTBLUE);gotoxy(22,7);printf("O Número %d já está inserido No Vetor", n );
            textcolor(LIGHTGREEN);gotoxy(22,9);printf("Veja abaixo os Números Digitados até aqui ");
            textcolor(LIGHTRED);gotoxy(22,11);
            for ( x = 0 ; x < k; x++ ){
                printf(" %d ", Vetor [ x ] );
            }
            getche();
        }
        }while ( aut == 1 );
    }
    textcolor(LIGHTBLUE);gotoxy(22,7);printf("Números Digitados");
    textcolor(LIGHTRED);gotoxy(22,9);
    for ( i = 0 ; i <= p ; i++ ){
        printf(" %d ", A [ i ] );
    }
    getche();
    system("cls");do{Janela5();
    textcolor(LIGHTRED);gotoxy(26,3);printf("PREENCHENDO E ALTERANDO UM VETOR ");
    textcolor(LIGHTBLUE);gotoxy(6,5);printf("Abaixo os %d Números Digitados ", p + 1 );
    a = 0;
    textcolor(LIGHTRED);
    for( i = 0; i <= p; i++ ){
        gotoxy(8, i + 7);
        a = a + 1;
        printf("Nº %d =  %d ", a, A [ i ] );}
    textcolor(LIGHTBLUE);gotoxy(14,17);
    printf("No lugar de qual desses Números deseja Inserir mais um ? : ");
    textcolor(LIGHTRED);scanf("%d",&ac);
    if( ac > p + 1 ){
        textcolor(LIGHTGREEN);gotoxy(14,19);printf("Posição inexistente");
        getch();system("cls");continue;
    }
    if( ac == p + 1 ){
        textcolor(LIGHTGREEN);gotoxy(14,19);printf("A última posição não é válida");
        getch();system("cls");
    }
    else{
        textcolor(LIGHTGREEN);gotoxy(14,19);printf(" Por favor insira o Número : ");
        textcolor(LIGHTRED);scanf("%d",&n1 );
        for( i = p ; i >= ac -1; i-- )
            A [ i + 1] = A [ i ];
        A [ ac -1 ] = n1;
        p = p + 1;
        a = 1;
        textcolor(LIGHTBLUE);gotoxy(46,5);printf("Abaixo, o Vetor alterado");
        textcolor(LIGHTRED);
        for( i = 0; i <= p; i++ ){
            gotoxy(50, i + 7);
            printf("Nº %d = %d ", a, A [ i ] );
            a++;
        }
        getch();break;
    }
    }while( 1 );
    textcolor(LIGHTGREEN);gotoxy(14,19);printf("Com a alteração temos %d Números no Vetor", p + 1 );
    textcolor(LIGHTRED);gotoxy(34,22);printf("Muito obrigado!");
    getch();free( A );
}