gRoOvE 0 Denunciar post Postado Julho 28, 2008 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
iron_soul 0 Denunciar post Postado Julho 28, 2008 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
Kandrade 7 Denunciar post Postado Julho 28, 2008 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
gRoOvE 0 Denunciar post Postado Julho 29, 2008 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
Kandrade 7 Denunciar post Postado Julho 29, 2008 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
gRoOvE 0 Denunciar post Postado Julho 31, 2008 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
José Enésio 4 Denunciar post Postado Julho 31, 2008 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
gRoOvE 0 Denunciar post Postado Julho 31, 2008 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
_Isis_ 202 Denunciar post Postado Julho 31, 2008 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
gRoOvE 0 Denunciar post Postado Julho 31, 2008 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
_Isis_ 202 Denunciar post Postado Julho 31, 2008 Esquisito por que? Se a funcao é void nao tem nada que atribuir. Compartilhar este post Link para o post Compartilhar em outros sites
gRoOvE 0 Denunciar post Postado Agosto 1, 2008 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