Ir ao conteúdo
  • Cadastre-se

C ordenação por recursividade (numeros primos nas primeira posições)


capituamerica

Posts recomendados

Eae galera, beleza? Gostaria de uma ajuda nesse tópico de recursão. Meu professor pediu para que ordenássemos um vetor, onde os numeros primos ficassem nas primeiras posições e os não-primos nas últimas. Eu não faço ideia de como fazer isso. Alguém aí pra dar um help?

Segue abaixo o que consegui fazer até agora: 

<

#include <stdio.h>
#define TAM 10
int ordenar(int *vet, int fim,int ini);
int retorno(int *vet,int fim, int ini);
int main(){
    int vet[TAM] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
        i, fim = TAM-1,ini=0;

    printf("\n\nVetor ANTES da ordenacao:  ");
    for(i = 0; i < TAM; i++)
        printf(" %d", vet);
    ordenar(vet,fim,ini);
    //ordenar(vet,fim,ini);
    printf("\n\nVetor DEPOIS da ordenacao: ");
    for(i = 0; i < TAM; i++)
        printf(" %d", vet);
    printf("\n\n");

    return 0;
}
int ordenar(int *vet, int fim,int ini){
    int troca;
    if (fim == 0) {
            return 1;
    }   
        
    else  if (retorno(vet,fim,ini)==1) {
                if(ini<=fim){

                    troca = vet[ini];
                    vet[ini] = vet[fim ];
                    vet[fim ] = troca;
                    ini++;
                    return ordenar(vet,fim-1,ini);
               }
   }
    else if (retorno(vet,fim,ini)==0){
             return ordenar(vet, fim - 1, ini);
    }
}
int retorno(int *vet, int fim, int ini){ // função q retoro se é primo ou nao
    int i, j, cont=0, cont2;
    for(i=1;i<vet[fim];i++){
        if (vet[fim ] % i == 0)
        cont++;
    }

    if(cont==0){
        return 1;
    }
    else{
         return 0;
    }
}

>

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Veja se assim funcionar:

#include <stdio.h>
#define TAM 10
int ordenar(int *vet, int fim,int ini);
int retorno(int num);
int main(){
    int vet[TAM] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
        i, fim = TAM-1,ini=0;

    printf("\n\nVetor ANTES da ordenacao:  ");
    for(i = 0; i < TAM; i++)
        printf(" %d", vet[i]);
    ordenar(vet,fim,ini);
    //ordenar(vet,fim,ini);
    printf("\n\nVetor DEPOIS da ordenacao: ");
    for(i = 0; i < TAM; i++)
        printf(" %d", vet[i]);
    printf("\n\n");

    return 0;
}
int ordenar(int *vet, int fim,int ini){
    int troca;

    if (fim == 0) {
            return 1;
    }   

    else  if (retorno(vet[fim])==1) {
                if(ini<=fim){

                    troca = vet[ini];
                    vet[ini] = vet[fim];
                    vet[fim] = troca;
                    return ordenar(vet,fim,ini+1);
               }
   }
    else if (retorno(vet[fim])==0){
             return ordenar(vet, fim - 1, ini);
    }
}
int retorno(int num){ // função q retoro se é primo ou nao
    for(int i=2; i <= (num/2);i++){
        if (num % i == 0) return 0; //nao eh primo
    }

    return 1; //eh primo
    
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...