Ir ao conteúdo

Posts recomendados

Postado

Tenho um exercício de C que pede para trocar os valores inseridos em duas variáveis através de uma função, mas os valores mostrados no final estão saindo errados. O programa que escrevi ficou assim:

#include <stdio.h>
float troca (float a, float b){
    float aux;   
    aux = a;
    a = b;
    return b = aux;
}

int main() {    
    float x, y;
    printf("Insira um valor para X: ");
    scanf("%f", &x);
    printf("Insira um valor para Y: ");
    scanf("%f", &y);
    printf("X é igual a %f e Y é igual a %f", troca(x,y));
    return 0;
}

 

  • Curtir 1
Postado

@jbiribi    o return só pode retornar um resultado .   você pode usar uma variável global ( aquela que fica lá no início antes da main )  para retornar o outro número .  então seu código ficaria assim: :

#include <stdio.h>
#include <locale.h>
float c;
float troca (float a, float b){
    float aux;
    aux = a;
    a = b;
    b=aux;
    c = b;
    return a;
}

int main() {
    setlocale(LC_ALL,"");
    float x, y;
    printf("Insira um valor para X: ");
    scanf("%f", &x);
    printf("Insira um valor para Y: ");
    scanf("%f", &y);
    printf("\nX é igual a %.2f e Y é igual a %.2f\n\n", troca(x,y),c);
    return 0;
}

 

  • Membro VIP
Postado

Olá a todos.

 

17 horas atrás, devair1010 disse:

o return só pode retornar um resultado .   você pode usar uma variável global ( aquela que fica lá no início antes da main )  para retornar o outro número .  então seu código ficaria assim: :

@devair1010, creio que na verdade o que está errado é a lógica... a função deveria servir para "trocar os valores" e não "retornar algo", ou seja, essa função poderia ser void. A "confirmação" da troca pode ser feita ao mudar de "passagem de parâmetro por valor" para "passagem de parâmetro por referência"...

 

Citação

Na linguagem C a passagem por referência é implementada com o uso de ponteiros.

Fonte: http://linguagemc.com.br/funcao-com-passagem-por-referencia/

ou seja, seguindo a sugestão de @Chrissy Costanza.

 

 

Sobre o processo de troca:

3 horas atrás, Chrissy Costanza disse:

E para trocar valores de duas variáveis não precisa de variável auxiliar, use o operador BIT a BIT XOR.

Creio eu que, apesar de valer a experiência, seja um tema mais avançado e de entendimento pouco trivial... (algo como entrar em arquitetura de computadores ou estudo de números binários...) sugeriria utilizar um auxiliar mesmo! É um processo mais convencional.

 

obs.: a não ser que a troca não funcione com ponteiro....

 

 

No aguardo.

  • Curtir 2
  • Membro VIP
Postado

PS:

 

Aproveitando.. Testei aqui e funcionou com ponteiros:

 

A assinatura da função do procedimento pode ficar assim:

void troca(float *a, float *b) {

}

int main() {

}

Repare que essa "função" não precisa retornar nada... logo fica void.

 

@jbiribi, tente implementar essa função... Daí você tem que chamar o método troca() fora do printf() (já que não é mais uma função, ou seja, "não retorna um valor nele mesmo") e mandar imprimir o x e y, que após serem trocados, estarão com seus valores invertidos entre si.

 

OU

 

Poderia declarar a função para retornar uma string, contendo os valores invertidos... correto?

NÃO, não pode! O enunciado é claro:

19 horas atrás, jbiribi disse:

[...] trocar os valores inseridos em duas variáveis através de uma função[...]

ou seja, os valores em si que tem que ser trocados. Não é uma questão de apenas "exibir trocado"... se fosse assim, bastaria fazer algo assim:

 

printf("X é igual a %f e Y é igual a %f", y,x); //inverti a ordem das variávies :)

Entende? para o usuário o resultado seria correto (iria aparecer invertido), mas para a lógica do algoritmo não... não é só o resultado que importa, mas também como chegou a ele...

 

 


Uma outra forma, tomando como base a sugestão de @devair1010, poderia ser assim:

float x, y;
void troca() {

}

int main() {

}

Declarando as duas variáveis como globais... mas como já citado, é melhor passar por parâmetro... dessa forma também dá a sensação de "reutilização", ou seja, essa mesma função pode servir para qualquer outras variáveis do tipo float... não só para x e y. Se tive por exemplo no mesmo código um a e b, w e z, salarioA e salarioB etc, ou seja, qualquer pares de float, poderia utilizar a mesma função... já se usar sem parâmetro, só vai servir para o x e y (ou que você usou no procedimento).

 

 

No aguardo

 

 

Postado

Muito obrigado pela ajuda! Utilizando as dicas de vocês fiz assim:

 

#include <stdio.h>
void troca (float *a, float *b){   
    float aux;    
    aux = *a;
    *a = *b;
    *b = aux;
}

int main() {
    float x, y;
  
    printf("Insira um valor para X: ");
    scanf("%f", &x);
    printf("Insira um valor para Y: ");
    scanf("%f", &y);
    
    troca(&x,&y);
    
    printf("X é igual a %.2f e Y é igual a %.2f", x, y);
    
    return 0;
}

 

  • Curtir 2

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