Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

trust

c

Mensagens Recomendadas

trust

Boas pessoal, será que me sabem dizer o que esta mal neste programa??

#include <stdio.h>
int g; /*variavel global*/ 
int ler_horas (int h);
int ler_minutos (int min);
int media_dur (int TI[], int TF[]);
int custo_dur (int TI[], int TF []);

int main ()
{
int h, min, TI[100], TF[100], media, custo, op, n, CI[100], CM[100], Dur[100], i;
printf ("\n  MENU \n\n");
printf("\n 1 - Calcular a duracao de cada manutencao.");
printf("\n 2 - Calcular a media da duracao de cada manutencao.");
printf("\n 3 - Listagem do custo de cada manutencao.");
printf("\n 4 - Terminar programa.\n");
printf("\n Por favor, seleccione uma opcao:");
scanf("%d", &op);
i=0;

printf("Introduza o numero de assistencias realizadas:");
scanf("%d", &n);
g=n;
for (i=0; i<n; ++i)
{
	printf("\n %d manutencao:\n", i+1);
	printf("Insira o codigo da manutencao:");
	scanf("%d", &CM[i]);
	printf("Insira o codigo do instrumento utilizado:");
	scanf("%d", &CI[i]);
	printf("Hora inicial:");
	h=ler_horas(h);
	printf("Minutos iniciais:");
	min=ler_minutos(min);
	TI[i]=h+min;
	printf("Hora final:");
	h=ler_horas(h);
	printf("Minutos finais:");
	min=ler_minutos(min);
	TF[i]=h+min;
}
switch (op)
{
case 1:
	{
		for(i=0;i<n; ++i)
		{
			Dur[i]=TF[i]-TI[i];
		}
		for (i=0;i<n;++i)
		{
			printf("A duracao da %d manutencao e de %d minutos.", i+1, Dur[i]);
		}
		break;
	}
case 2:
	{
		media=media_dur (TF, TI);
		printf("A media dos tempos de manutencao e de %d minutos.", media); break;
	}
case 3:
	{
		custo=custo_dur(TI,TF);
	}

	{
		printf("Opcao invalida! Por favor, tente novamente inserindo uma opcao correcta!!");
	}
default:
	{
		if (op==4)
		{
			printf("\n PROGRAMA TERMINADO!!");
			break;
		}
		else
		{
			printf("\n Por favor, seleccione uma opcao válida.");
			break;
		}
	}
	}
return 0;
}

int ler_horas (int h)
{

scanf("%d", &h);
if ((h<0)||(h>23))
{
	printf("HORAS INVALIDAS!!! Por favor, insira as horas correctas!");
	scanf("%d", &h);
}
h=h*60;
return h; 
} 
int ler_minutos (int min) 
{ 

scanf("%d", &min);
if((min<0)||(min>59))
{
printf("MINUTOS INVALIDOS!!! Por favor, insira os minutos correctos!");
scanf("%d", &min);
   }
return min; 
} 



int custo_dur ( int TI[], int TF[] )
{
float custo, Dur[100];
int i;


for (i=0; i<g; i++)
{
	Dur[i] = TF[i] - TI[i];
	if (TF[i]<TI[i])
	{
		Dur[i]=1440 - (-Dur[i]);
	}

}

for (i=0; i<g; i++)
{
	custo = (Dur[i]/60) * 10;
	printf("\n \n O custo da %d reparacao e %.2f euros.\n", i+1, custo); 
}
}
int media_dur(int TI[], int TF[])
{
int media, d, i, Dur[100];
for(i=0;i<g;++i)
{
	Dur[i]=TF[i]-TI[i];
}
d=0;
for (i=0; i<g;++i)
{
	d = d + Dur[i];
}
media=d/g;
return media;
}

Nao me deixa inserir as horas!

Ajudem me se puderem!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
IceBrain

Dica: põe o código inicial entre tags [code=c] e [/code] para ser mais fácil de ler. Ah, e dá um título melhor ao tópico, sff.

Quanto ao código, tens alguns problemas:

Na linha 34, estás a usar o TI, que é um vector de ints, como se fosse um número.

TI=h+min;

Suponho que o que queiras é adicionar o valor (h+min) a uma nova posição do TI. Sendo assim, devias fazer:

TI[i] = h+min

Ou seja, adicionar "h+m" à posição "i" do vector "TI".

O mesmo se passa na linha 39.

Na linha 47, tens um erro parecido. Estás a somar dois vectores como se fossem ints, e a guardar isso num vector.

O que tens que fazer é aceder a cada posição dos vectores:

for(i=0;i<n; ++i)
{
       Dur[i] =TF[i] - TI[i];
}

Assim, vai somar a posição "i" dos vectores TF e TI, e guardar na posição "i" do vector Dur.

Já agora, só por curiosidade: o compilador deixou-te compilar isso, e criar um executável? Que compilador usas?


❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mogers

O problema não deve ser esse. Isso aconteceu porque como ele não usou as tags para postar código, o [ i] é o atalho para escrever em itálico :\


"What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine

Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
IceBrain
55ms9.gif Tens razão, nem me ocorreu.

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
IceBrain

A mim deixa:

  MENU

1 - Calcular a duracao de cada manutencao.

2 - Calcular a media da duracao de cada manutencao.

3 - Listagem do custo de cada manutencao.

4 - Terminar programa.

Por favor, seleccione uma opcao:2

Introduza o numero de assistencias realizadas:2

1 manutencao:

Insira o codigo da manutencao:1

Insira o codigo do instrumento utilizado:54

Hora inicial:8

Minutos iniciais:30

Hora final:11

Minutos finais:0

2 manutencao:

Insira o codigo da manutencao:2

Insira o codigo do instrumento utilizado:11

Hora inicial:16

Minutos iniciais:

0

Hora final:18

Minutos finais:00

A media dos tempos de manutencao e de -135 minutos.

Tens é o cálculo mal feito: não devias somar as horas com os minutos diretamente, porque senão ficas com:

8:30 -> 38

11:00 -> 11

E depois ao fazer as contas do tempo decorrido, é feito 11-38, o que dá -27 minutos :confused:

Devias fazer:

 TI[i] = (h*60)+min

Assim já fica:

8:30 -> 510

11:00 -> 660

E o tempo decorrido é 660-510 = 150 minutos :cheesygrin:


❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.