Ir para conteúdo
Fórum Script Brasil
  • 0

IMPRIMINDO NÚMEROS REPETIDOS NUMA SEQUÊNCIA


roccoC/C++

Pergunta

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 ; 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:

http://4.bp.blogspot.com/-SEuOwTsue1o/UTIO...1600/Img+01.JPG

http://4.bp.blogspot.com/-uF6_1pPAV0U/UTIO...1600/Img+02.JPG

http://4.bp.blogspot.com/-B1Fz_X4JeOY/UTIO...1600/Img+03.JPG

http://3.bp.blogspot.com/-XOU1hW8tIts/UTIO...1600/Img+04.JPG

Eis o link deste código:

http://codigosfontes-ccplus-plus.blogspot....tidos-numa.html

Editado por roccoC/C++
Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Vou postar o programa que eu postei em outro fórum com algumas alterações e o acréscimo do bubble sort.

#include <stdio.h>
#include <stdlib.h>

int **tabela_matriz(unsigned int, unsigned int);
void deleta_matriz(int**, unsigned int);
void ordena(int*, int);

int main(void){
    unsigned int i, n, max, tamanho, colunas = 2, aux = 0;
    int **matriz, *vetor, repete = 0;

    printf("Quantos numeros deseja processar: ");
    scanf("%d", &max);
        
    vetor = (int*)malloc(max * sizeof(int));

    for(i = 0; i < max; ++i){
        printf("Entre com o numero (-1 para sair) #%d ", i + 1);
        scanf("%d", &vetor[i]); 
        if (vetor[i] == -1)
            break;
    }
    
    tamanho = (i + 1) != max ? i : max;
    ordena(vetor, tamanho);
    matriz = tabela_matriz(tamanho, colunas);  
  
    for(i = 0; i < tamanho; ++i){
        for(n = 0; n <= i; ++n)
            if(matriz[n][0] == vetor[i]){  
                ++matriz[n][1];
                repete = 1;
            }
       
        if(!repete){
            matriz[aux][0] = vetor[i];
            ++matriz[aux][1];  
            ++aux;
        }
        repete = 0;
    }

    for(i = 0; i < aux; ++i)
        printf("Numero: %3d | Repete: %2d\n", matriz[i][0], matriz[i][1]);

    free(vetor);
    deleta_matriz(matriz, tamanho);
    return 0;
}

void ordena(int *v, int tamanho){
    int i, continua, aux;
    
    do{
        continua = 0;
        for(i = 0; i < tamanho - 1; ++i)
            if(*(v + i) > *(v + i + 1)){
                continua = 1;
                aux = *(v + i);
                *(v + i) = *(v + i + 1);
                *(v + i + 1) = aux;
            }
    }while(continua);
}

int **tabela_matriz(unsigned int nlinhas, unsigned int ncolunas){
    unsigned int i; 
    int **m;

    m = (int**)malloc(nlinhas * sizeof(int*));

    for(i = 0; i < nlinhas; ++i){
        m[i] = (int*)malloc(ncolunas * sizeof(int));   
        m[i][0] = m[i][1] = 0;
    }

    return m;
}

void deleta_matriz(int **matriz, unsigned int nlinhas){
    unsigned int i;
    for(i = 0; i < nlinhas; ++i)
        free(matriz[i]);
    free(matriz);
}

Editado por vega
Link para o comentário
Compartilhar em outros sites

  • 0

Foi o que escrevi lá em cima:

"Funcionou bem, más não é por sequência como o que eu postei, pode ver nas imagens.

No seu programa tem que dá enter em cada número digitado, más tá valendo."

A sequência é interrompida com a tecla enter, funciona diferente do meu programa, que mostra

os resultados numa sequência única.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...