Ir ao conteúdo
  • Cadastre-se

Retornar mais de um valor numa funçao


heronsaba

Posts recomendados

Boa noite galera. Tava resolvendo uma listinha de funções do professor e me bati c essa questao aqui :
"Faça uma função em C que receba dois numeros e imprima todos os numeros primos entre eles"
Consegui fazer ele sem utilizar funçao.. Quando tentei fazer ele com uma função eu nao consegui fazer retornar mais de um valor pra função main, ces podem dar alguma dica do que fazer?

Link para o comentário
Compartilhar em outros sites

Você não precisa utilizar diretamente o return para passar valores, já que ele é limitado e passa apenas valores únicos, mas você poderia passar um argumento e modificar a partir dele, assim ambas funções já poderão utiliza-lo, uma para modifica-lo outra para mostra-lo, ou vice-versa, nesse método você pode utilizar vetor de int que pode resolver seu problema em passar mais de um valor, exemplo:

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

void arrint(int vet[]){
register int c;
for(c = 0; c<3; c++){
    printf("Numero:");
    scanf("%d",&vet[c]);
}
  //como usei void(tipo da funcao) nao preciso usar return, ja estou modificando o endereco do vetor
}

int main(int argc, char *argv[]) {
    register int v = 0;
    int vetor[3];
	//Passando o endereco para funcao modificar o vetor
    arrint(vetor);
	//Mostra valores
    for(v = 0; v < 3; v++)
    printf(" %d",vetor[v]);

    getchar();
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

@heronsaba Você pode retornar mais de um valor criando um vetor dinâmico dentro da função e retornando o endereço desse vetor.

 

Como você não vai ter como retornar o tamanho do vetor, você pode usar algum número que defina o final do vetor.

Tem também a opção de retornar um tipo lista, pilha, fila ou qualquer outra estrutura de dados que armazene vários números.

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

@1freakday Olha o programinha que eu fiz. Quero retornar aquele vetor pra imprimir na função main.. como q faço ? 

#include <stdio.h>
#include <stdlib.h>
void primo(int n1,int n2);



int main()
{
    int num1,num2,i;



    }



void primo(int n1,int n2){
    int i,j,menor,maior,prim=0,x=0,dif;
    if(n1>n2){
        menor=n2;
        maior=n1;
    }
    else{
        menor=n1;
        maior=n2;
    }
    dif=maior-menor;//Saber tamanho maximo do vetor.
    int vet[dif];
    for(i=menor;i<=maior;i++){ //Duas funções for para achar todos primos entre os dois numeros e guardar eles num vetor.
        for(j=1;j<=i;j++){
            if(i%j==0){
                prim++;
            }
        }
        if(prim<=2){
            vet[x]=i;
            x++;
            prim=0;
        }
        prim=0;
    }
// Duvida aqui de como retornar os valores obtidos =( .

}

 

Link para o comentário
Compartilhar em outros sites

Segue a demonstração:

#include <stdio.h>
#include <stdlib.h>
int primo(int n1,int n2, int vet[]);



int main()
{
    int num1,num2,i,c;
    printf("Num1:");
    scanf("%d",&num1);
    printf("Num2:");
    scanf("%d",&num2);
  
    //Vetor para receber o resultado
    //num1 > num2 ? num1-num2:num2-num1  é o mesmo calculo do dif = maior-menor; 
    //ou if(num1 > num2) 
    //      result[num1-num2]; 
    //   else  result[num2-num1];  
    //vai determinar o tamanho do vetor.
    int result[num1 > num2 ? num1-num2:num2-num1];
    //Obter o vetor da funcao primo
    i = primo(num1,num2,result);
    //Mostrar o valor do vetor
    for(c = 0; c < i; c++)
        printf(" %d",result[c]);

    return EXIT_SUCCESS;
}



int primo(int n1,int n2, int vet[]){
    int i,j,menor,maior,prim=0,x=0,dif;
    if(n1>n2){
        menor=n2;
        maior=n1;
    }
    else{
        menor=n1;
        maior=n2;
    }
    dif=maior-menor;//Saber tamanho maximo do vetor.
    for(i=menor;i<=maior;i++){ //Duas funções for para achar todos primos entre os dois numeros e guardar eles num vetor.
        for(j=1;j<=i;j++){
            if(i%j==0){
                prim++;
            }
        }
        if(prim<=2){
            vet[x]=i;
            x++;
            prim=0;
        }
        prim=0;
    }
    //Retorna o tamanho do vetor
    return dif;
}

 

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

Visitante
Este tópico está impedido de receber novas respostas.

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...