sábado, 2 de março de 2013

Imprimindo Números Repetidos numa Sequência

Meu tempo está muito curto, más como vi um tópico noutro forum, sobre isto, gostei da idéia e resolvi fazer o exercício.
Tudo começa com a declaração do vetor dinâmico int *vet; onde temos a função malloc
que reserva memória para este vetor,veja como cai bem este tipo de vetor aqui neste
código, onde a variável tam recebe o tamanho máximo do vetor, e a sequência digitada é finalizado por -1
previamente declarei um ponteiro de char e inicializei com -1.
A variável num colhe os números da sequência, e quando -1 é digitado ele é comparado com a variável ponteiro
e sendo igual a função atoi da biblioteca stdlib.h, converte este -1 para inteiro, e a sequência é interrompida
pelo comando break;
Já no próximo bloco bem otimizado por um laço for, temos a variável aux que auxilia a variável num,
onde a finalidade é a separação dos dígitos digitado na sequência.
Então o vetor *vet; entra em ação recebendo da variável aux, os dígitos já separados e entrega a printf que imprime esta sequência separada.
os números da sequência são outra vez imprimido, agora pelo vetor vet [i]; Não há nenhuma necessidade de imprimir isto,
más fiz só para provar que os valores já estão armazenados no vetor. No bloco seguinte, a sequência digitada
entra no processo de ordenação, onde usei o método da bolha, que é fácil de imprementar, e a sequência é imprimida em ordem.
Também não havia necessidade de fazer isto, más fiz.
O último bloco que é a razão deste código finaliza mostrando os números digitados com todos os seus repetentes.

Eis as saídas deste programa no cmd:







Eis o código abaixo, montado no eclipse, onde não mostrou nenhum warnings, o programa está rodando leve livre e solto.

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
int tam;
int main(){
    system ("title IMPRIMINDO NUMEROS REPETIDOS NUMA SEQUENCIA");
    int *vet, i, j, num = 0, aux, ord, vezes;
    vet = (int*) malloc (tam* sizeof(int)); // Alocando Memoria
    char *numStr = "-1";
    textcolor(LIGHTRED);gotoxy(21,3);printf("IMPRIMINDO NUMEROS REPETIDOS NUMA SEQUENCIA");
    textcolor(LIGHTMAGENTA);gotoxy(34,5);printf("sa_sp10@hotmail.com");
    textcolor(LIGHTBLUE);gotoxy(25,7); printf("Informe o tamanho maximo do Vetor: "); // 01/03/2013
    textcolor(YELLOW); scanf("%d", &tam);fflush(stdin);
    textcolor(LIGHTGREEN);gotoxy(21,9);printf("Digite um numero inteiro de %d algarismo: ", tam); // Para finalizar digite -1
    for (i = 0; i < tam; i++) {
        textcolor(YELLOW);scanf("%d", &num );fflush (stdin);
        if ( num ==  atoi (numStr) ) { break; } // Finaliza a entrada de valores
        textcolor(LIGHTBLUE);gotoxy(21,11); printf("Numeros Digitados: ");
textcolor(YELLOW);gotoxy(21,13);
        for (i = 0; i < tam; i++){
            aux = num % 10;
            num = num / 10;
            vet [i] = aux;
            vet [i] = aux;
            printf(" %d ", vet [i]);
        }
        getche();
        textcolor(LIGHTBLUE);gotoxy(21,15); printf("Numeros Armazenadosdos Num Vetor");
        textcolor(YELLOW);gotoxy(21,17);
        for(i = 0; i < tam; i++){
            printf("  %d",vet [i] );
        }
        getche( );
        textcolor(LIGHTBLUE);gotoxy(21,19); printf("Numeros Ordenados: ");
        ord = 0;
        while ( ord == 0 ){
            ord = 1;
            for ( i = 0; i < tam; i++ ){
                if ( vet [i]  >
                vet [ ( i + 1 ) ] ){
                    aux = vet [i];
                    vet [i] = vet [ (i + 1) ];
                    vet [(i + 1)] = aux;
                    ord = 0;
                }
            }
        }
        textcolor(YELLOW);for(i = 0; i < tam; i++)
            printf(" %d ",vet [i] );
        textcolor(WHITE);gotoxy(31,21);printf("PRESSIONE QUALQUER TECLA");
        getche();
        system("cls");
        textcolor(LIGHTRED);gotoxy(21,3);printf("IMPRIMINDO NUMEROS REPETIDOS NUMA SEQUENCIA");
        textcolor(LIGHTBLUE);gotoxy(9,5);printf("ESTES são OS NUMEROS DA SEQUENCIA");
        textcolor(LIGHTRED);gotoxy(44,5);printf("==>");
        textcolor(YELLOW);gotoxy(48,5);
        for(i = 0; i < tam; i++)
            printf(" %d ",vet [i] );
        textcolor(LIGHTGREEN);gotoxy(23,7);printf("ESTES são OS NUMEROS COM SEUS REPETENTES");
        textcolor(LIGHTBLUE);gotoxy(21,8);
        for (i = 0; i < tam; i++) {
            vezes = 1;
            j = i + 1;
            while (j < tam)
                if (vet [j] != vet [i])
                    j++;
                else {
                    vezes++;
                    tam--;
                    vet [j] = vet [tam];
                }
            printf("\n\t\t\t\t");
            printf("O Numero ");
            textcolor(LIGHTRED);printf("%d", vet [i]);
            textcolor(LIGHTBLUE);printf(" ocorre");
            textcolor(LIGHTRED);printf(" %d ", vezes);
            textcolor(LIGHTBLUE);printf("vezes");
        }
        getche();
    }
    textcolor(LIGHTRED);gotoxy(35,23);printf ("O ROCCO AGRADECE");
    getche();exit(0);
}