[Ajuda] Programa em C

PHP, Java, JavaScript, XML, XHTML, HTML, CSS, ASP, Delphi, Assembly, LaTeX, C, UML, Flash, Perl, SQL, Python, Zope, Pascal, WML. Se conhece mais de 3 siglas referidas, este é o forum para si.

Moderadores: Administradores, Moderadores

[Ajuda] Programa em C

Mensagempor Jedi Gu@rdi@n » Segunda Nov 23, 2009 14:15

Boas amigos tenho k elaborar um programa que efectue as seguintes operacoes:

Um fabricante instrumentos de medição contratou ao nosso departamento o desenvolvimento de uma sistema informático para a gestão da sua secção de manutenção.

Para cada serviço de manutenção é controlada a sua duração.

a) A leitura das horas (horas e minutos) deverá ser feita em duas sub rotinas distintas. Para isso, criar uma sub rotina para ler uma dada hora e outra para ler os minutos. Ambas deverão realizar a validação dos valores introduzidos.
b) Elaborar uma sub rotina que receba a hora início e hora fim de um serviço de manutenção, e retorne o tempo da reparação em minutos.
c) Pretende-se um programa que fazendo uso das sub rotinas anteriores, leia os dados de n assistências e imprima a duração total dessas assistências, em horas e minutos, e o seu custo, sabendo que cada hora de assistência é de 10€.

De momento tenho as funcoes p validar a leitura das horas e minutos, mas algo nao esta bem, porque o programa mal comeca a correr diz k a variavel 'hora' esta a ser usada sem ser inicializada. Entao a variavel nao e definida quando o user insere um valor para a hora?
O k e k ta mal aki sff?

Código: Seleccionar todos
#include <stdio.h>

/*////////////////////////////////////////////////////////////////////////*/
/*                        FUNCOES                             */
/*////////////////////////////////////////////////////////////////////////*/

int ler_horas()
{   
   int hora;

   printf("Insira o tempo em horas: ");
   scanf(hora);

   while (hora <= 0 && hora >= 24)
   {
   printf("Por favor insira uma hora valida (0h - 24h): ");
   scanf(hora);
   }
   
   
return hora;
}

int ler_minutos()
{
   int min;

   printf("Insira o tempo em minutos: ");
   scanf(min);

   while (min <= 0 && min >= 59)
   {
   printf("Por favor insira minutos validos (0min - 59min)!!!");
   scanf(min);
   }
   
   

return min;
}

//===============================================================================================

int tempo_servico()
{

//funcao p calcular o tempo e valor a receber do servico

return;
}

/*////////////////////////////////////////////////////////////////////////*/
/*                   PROGRAMA PRINCIPAL                          */
/*////////////////////////////////////////////////////////////////////////*/



int main()
{
   int h,m;
   printf("Insira o tempo em horas: ");
   h = ler_horas();
   printf("Insira o tempo em minutos: ");
   m = ler_minutos();
   
   printf("O tempo total foi de: %dh:%dmin",h,m);

return 0;

}


Eu leio a hora e minutos das funcoes e atribu-o na main as variaveis 'h' e 'm' e imprimo as horas usando estas variaveis. Aparentemente parece-me bem, mas com certeza ha algo k falha aki algures.

Agradecia ajuda sff.

Abraço ;)
Imagem
Jedi Gu@rdi@n
Membro de Prata
Membro de Prata
 
Mensagens: 401
Registado: Domingo Mar 13, 2005 19:36

Mensagempor MetalFatigue » Segunda Nov 23, 2009 20:23

Eu nunca trabalhei com C, mas parece-me Ok do que conheço. A hora é criada, logo no inicio, dentro da função ler_horas que é chamada na Main. Não consegues fazer um debug step by step para perceberes exactamente onde ele acha que está a ser chamada antes de ser criada?
*-ASUS P5K-PRO
-Intel Core 2 Duo E8200
-2x2GB PC6400 Team Elite
-RAID0 2xSeagate SP 500GB + WD Green 1TB
-GF 9600GT
-MSI TV @nywhere Master
*-Toshiba A200-21T

http://souprimeiroministro.pt.vu
MetalFatigue
Membro de Ouro
Membro de Ouro
 
Mensagens: 654
Registado: Quarta Out 20, 2004 14:31
Localização: Bobadela

Mensagempor MetalFatigue » Segunda Nov 23, 2009 20:46

Ok, acho que já detectei o teu problema. Usando aqui um Compiler online :)

O scanf acho que não está a ser usado correctamente pelo menos pelo que percebi pela rapida pesquisa que fiz http://en.wikipedia.org/wiki/Scanf
*-ASUS P5K-PRO
-Intel Core 2 Duo E8200
-2x2GB PC6400 Team Elite
-RAID0 2xSeagate SP 500GB + WD Green 1TB
-GF 9600GT
-MSI TV @nywhere Master
*-Toshiba A200-21T

http://souprimeiroministro.pt.vu
MetalFatigue
Membro de Ouro
Membro de Ouro
 
Mensagens: 654
Registado: Quarta Out 20, 2004 14:31
Localização: Bobadela

Mensagempor vamosAeles » Segunda Nov 23, 2009 21:51

Boas,

O MetalFatigue tem razão,
já nao mexo em C à uns anos, mas do que acho q me lembro:
o scanf recebe o endereço (de memoria) para onde o valor a ler deve ser guardado, assim como em que que formato.

no caso de um inteiro:
int a;
scanf("%d", &a);

1)o "%d" para o valor lido ser interpretado (ie, 'parseado') como um int
2)o &a, para o valor ser guardado na posição de memoria onde está a variável a, se pores scanf("&d", a), o valor vai ser colocado no endereço de memoria indicado no 'conteudo' da variável a

Já agora, no caso de char* não coloques o '&', porque o 'conteudo' da var char* já deverá ser o endereço onde a 'string' propriamente dita está (ou irá estar, lol).


Cumps,
vamosAeles
Membro de Prata
Membro de Prata
 
Mensagens: 206
Registado: Quarta Jan 04, 2006 21:29
Localização: Lisboa/Proença

Mensagempor Jedi Gu@rdi@n » Terça Nov 24, 2009 14:29

Prob resolvido ficou assim:

Código: Seleccionar todos
#include <stdio.h>

/*////////////////////////////////////////////////////////////////////////*/
/*                        FUNCOES                             */
/*////////////////////////////////////////////////////////////////////////*/

int ler_horas()
{   
   int hora;

   printf("Insira o tempo em horas: ");
   scanf("%d",&hora);

   while (hora < 0 || hora > 24)
   {
   printf("Por favor insira uma hora valida (0h - 24h): ");
   scanf("%d",&hora);
   }
   
   
return hora;
}

int ler_minutos()
{
   int min;

   printf("Insira o tempo em minutos: ");
   scanf("%d",&min);

   while (min < 0 || min > 59)
   {
      printf("Por favor insira minutos validos (0min - 59min): ");
   scanf("%d",&min);
   }
   
   

return min;
}

//===============================================================================================

int tempo_servico()
{


return;
}

/*////////////////////////////////////////////////////////////////////////*/
/*                   PROGRAMA PRINCIPAL                          */
/*////////////////////////////////////////////////////////////////////////*/



int main()
{
   int h,m;
   h = ler_horas();
   m = ler_minutos();
   
   printf("O tempo total foi de: %dh:%dmin \n",h,m);

return 0;

}


Que estupidez nem me aprecebi do scanf k tava mal. lol
Imagem
Jedi Gu@rdi@n
Membro de Prata
Membro de Prata
 
Mensagens: 401
Registado: Domingo Mar 13, 2005 19:36

Mensagempor zeitgeist » Quarta Jan 06, 2010 17:05

Boas,tive o mesmo já vi que és do isep :) tive o mesmo problema que tu,mas agora na 2 parte do trabalho é que não me estou a safar mesmo,se alguem souber como isto se faz agradecia imenso... aqui está o problema,obrigado


Reescrever o programa para guardar os dados em vectores, como é o caso do código de cada manutenção e o código de cada instrumento para reparação, para além das horas início e fim (em minutos) que deverão ser guardadas noutros dois vectores.


a)Elaborar uma sub rotina que, usando as rotinas de leitura da Parte I, leia dados de n manutenções.
b)Desenvolver uma sub rotina que usando a sub rotina da Parte I calcule a duração de cada manutenção e a coloque num vector de durações.
c)Elaborar uma subrotina que usando o vector da alínea anterior calcule a média dos tempos de manutenção
d)Criar um menu para a chamada de cada funcionalidade, nomeadamente, leitura, cálculo da média, cálculo das durações, listagem do custo de cada assistência, terminar, etc. Criar o menu usando a instrução switch.


urgente pf
zeitgeist
Novato
Novato
 
Mensagens: 2
Registado: Quarta Jan 06, 2010 16:58
Localização: Maia

Mensagempor LMX » Quarta Jan 06, 2010 22:29

boas..
trata-se do 1º trabalho não é?
cumps
De pé mas...Cansado!!!
LMX
Membro de Ouro
Membro de Ouro
 
Mensagens: 786
Registado: Quarta Out 20, 2004 21:16
Localização: Lisboa

Mensagempor zeitgeist » Quarta Jan 06, 2010 23:06

Não este é a 2ª parte,a que eu nao sei fazer.. :/ a 1ª parte era esta:


Um fabricante instrumentos de medição contratou ao nosso departamento o desenvolvimento de uma sistema informático para a gestão da sua secção de manutenção.

Para cada serviço de manutenção é controlada a sua duração.

a) A leitura das horas (horas e minutos) deverá ser feita em duas sub rotinas distintas. Para isso, criar uma sub rotina para ler uma dada hora e outra para ler os minutos. Ambas deverão realizar a validação dos valores introduzidos.
b) Elaborar uma sub rotina que receba a hora início e hora fim de um serviço de manutenção, e retorne o tempo da reparação em minutos.
c) Pretende-se um programa que fazendo uso das sub rotinas anteriores, leia os dados de n assistências e imprima a duração total dessas assistências, em horas e minutos, e o seu custo, sabendo que cada hora de assistência é de 10€.
zeitgeist
Novato
Novato
 
Mensagens: 2
Registado: Quarta Jan 06, 2010 16:58
Localização: Maia


Voltar para Programação

Quem está ligado:

Utilizadores a ver este Fórum: Nenhum utilizador registado e 0 visitantes

cron