Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gRoOvE

[Resolvido] retornar mais de um valor em função

Recommended Posts

estou fazendo um exercicio usando função aqui, mas preciso retornar mais de um valor, li em algum lugar que para fazer isso devo passar o argumento por referencia, não consegui entender como vai funcionar "/

 

Exercicio:

Fazer um subalgoritmo que receba o tempo de duração de uma fábrica expressa em segundos e retorne também por parâmetro esse tempo em horas, minutos e segundos.

 

Pelo que entendi, deve retornar o valor em segundos assim: HH:MM:SS.

 

O que consegui fazer:

 

#include <stdio.h>

int Converte(int valor);

void main(void)
{
	int seg;

	printf("\nDigite qtos segundos qr: ");
	scanf("%d",&seg);

	printf("\nConversao: %d", Converte(seg));
}

int Converte(int valor)
{
	int segundo, minuto, hora;
	int resultado = 0;

	hora = valor / 3600;
	resto = valor % 3600;
	minuto = resto / 60;
	resto = resto % 60;
	segundo = resto;
}

Consegui resolver usando argumento por valor:

 

#include <stdio.h>

void Converte(int valor);

void main(void)
{
	int seg;

	printf("Digite qtos segundos qr: ");
	scanf("%d",&seg);

	Converte(seg);
}
void Converte(int valor)
{
	int segundo, minuto, hora;
	int resto;

	if(valor > 86400)
	{
		printf("\nPassou de 24hrs!");
	}
	else
	{
		hora = valor / 3600;
		valor = valor % 3600;
		minuto = valor / 60;
		valor = valor % 60;
		segundo = valor;
		printf("\n%02d:%02d:%02d",hora, minuto, segundo);
	}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu entendi bem o que você precisa fazer, eu faria o seguinte.

 

Use um ponteiro na função principal, e passe-o para a função Converte. Voce pode passar para a função Converte hora e minutos inicializados com 0, e so o valor do segundo como realmente interessa.

 

Após fazer as modificações na função converte os valores originais serão alterados.

 

Não sei se é isso o que você realmente quer, mais dá certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Algumas alternativas são:

 

- montar uma string na função converte e retornar o endereço inicial da string.

O protótipo da função fica assim:

 

char *Converte(int valor)

- Use variáveis globais para hora, minuto e segundo. Com isso voce pode altear o valor dentro da função converte.

 

- Outra maneira é passar argumentos por referencia como voce citou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pois bem, a maneira que me interessa é por referencia, como vou retornar 3 valores, sendo que uma função retorna apenas um valor?

 

Se eu entendi bem o que você precisa fazer, eu faria o seguinte.

 

Use um ponteiro na função principal, e passe-o para a função Converte. Voce pode passar para a função Converte hora e minutos inicializados com 0, e so o valor do segundo como realmente interessa.

 

Após fazer as modificações na função converte os valores originais serão alterados.

 

Não sei se é isso o que você realmente quer, mais dá certo.

Rodou de boa, seria essa a solução para "retornar" mais de um valor por uma função?

#include <stdio.h>

int Converte(int &horas, int &minutos, int &segundos);

void main(void)
{
	int hora = 0, min = 0, seg;

	printf("Digite qtos segundos: ");
	scanf("%d",&seg);

	if(Converte(hora,min,seg) == 0)
	{
		printf("\nPassou de 24hrs!");
	}
	else
	{
		printf("\n%02d:%02d:%02d",hora, min, seg);	
	}
}
int Converte(int &horas, int &minutos, int &segundos)
{

	if(segundos > 86400)
	{
		return(0);
	}
	else
	{
		horas = segundos / 3600;
		segundos = segundos % 3600;

		minutos = segundos / 60;
		segundos = segundos % 60;
	}
	return(1);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo, na verdade voce não retorna e sim altera os valores dentro da função.

Como a função recebeu a referencia das variáveis cada alteração afeta diretamente as variáveis declaradas dentro da "main".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Saquei http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

estou tentando fazer outro exercício aqui:

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

void ConverteDias(int &ano, int &mes, int &dia);

void main(void)
{
	int anos, meses, dias;
	int resposta;
	
	printf("\nDigite sua idade na seguinte ordem AA-MM-DD: ");
	scanf("%d-%d-%d",&anos, &meses, &dias);
	
	
	resposta = ConverteDias(anos, meses, dias);
	printf("\nIdade convertida para dias: %d",resposta);
	
	system("pause");
}

void ConverteDias(int &ano, int &mes, int &dia)
{
	int total_dias;
	total_dias = ano * 365;
	total_dias = total_dias + (mes * 30);
	total_dias = total_dias + dia;
}
Só que o compilador me retorna um erro, dizendo que não posso converter a função que é do tipo void para int, nesse caso o que fazer? Terei que obrigatóriamente usar o return? Pois tentei fazer igual o anterior, só que nesse caso não usei o return

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que passar uma quarta variável por parâmetro para receber o valor.

 

void ConverteDias(int ano, int mes, int dia, int *total_dias)

{

total_dias = ano * 365;

total_dias += (mes * 30);

total_dias += dia;

}

 

 

int total;

ConverteDias(anos, meses, dias, &total);

 

Neste caso aqui não precisa passar dia, mes e ano como referência pra função já que você não vai modificá-los...

Compartilhar este post


Link para o post
Compartilhar em outros sites

hmm, vlw pelas dicas velho, fico certinho a lógica agora, mas o problema que eu citei antes persiste, não posso converter o void da função ConverteDias para int para apresentar o valor da variavel modificada por referência(total) dentro da main.

 

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

void ConverteDias(int ano, int mes, int dia, int *total_dias);

void main(void)
{
	int anos, meses, dias;
	int resposta;
	int total;
	
	printf("\nDigite sua idade na seguinte ordem AA-MM-DD: ");
	scanf("%d-%d-%d",&anos, &meses, &dias);
	
	
	resposta = ConverteDias(anos, meses, dias, &total);
	printf("\nIdade convertida para dias: %d",resposta);
	
	system("pause");
}

void ConverteDias(int ano, int mes, int dia, int *total_dias)
{
	*total_dias = ano * 365;
	*total_dias += mes * 30;
	*total_dias += dia;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
não posso converter o void da função ConverteDias para int para apresentar o valor da variavel modificada por referência(total) dentro da main.

 

Então mude o tipo de retorno,oras!

 

"Retornar por parâmetro" é um tanto quanto contraditorio: se você ta usando passagem por referencia pra modificar um valor,nao precisa retornar nada. Se for passagem por valor, retorna-se o dado modificado na pilha (mas o original continua la).

 

Vamos lá: o que esse ser está querendo é que você passe o argumento por referencia. Não tem chondas de retorno nisso. Se você leu alguma coisa sobre passagem por referencia entao deve saber que o valor é alterado diretamente. Entao saca fora aquela atribuicao.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vlw, resolvido :D

 

ficou meio esquisito isso, mas seria isso mesmo:

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

void ConverteDias(int ano, int mes, int dia, int *total_dias);

void main(void)
{
	int anos, meses, dias;
	int total;
	
	printf("\nDigite sua idade na seguinte ordem AA-MM-DD: ");
	scanf("%d-%d-%d",&anos, &meses, &dias);
	
	ConverteDias(anos, meses, dias, &total);

	printf("\nIdade convertida para dias: %d",total);
	
	system("pause");
}

void ConverteDias(int ano, int mes, int dia, int *total_dias)
{
	*total_dias = ano * 365;
	*total_dias += mes * 30;
	*total_dias += dia;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso sim, falo pq aquela função fico "perdida" ali no meio...sei lah vai ver é pq nao estou acustumado a trabalhar com funções ainda :D

Vlw pela ajuda ^^

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.