Ir ao conteúdo

Posts recomendados

Postado
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>


/*Elabore um programa em C com 2 entradas de dados de um motor, a temperatura e vibracao. Gerar
os valores de forma randomica. Uma entrada sao os valores de temperatura entre 10 graus a 45
graus Celsius. A outra entrada de dados sao os valores representando se ha ou não vibracao (ha=1,
não ha=0). Com estes valores de entrada, gere um vetor de saida (manter ligado (1) ou desligar o
motor (0)). Devem ser gerados 100 valores de temperatura e 10 valores de vibracao. A cada 10
valores de temperatura deve ser calculada a media e gerar um vetor de temperatura media com 10
valores. Com o vetor de temperatura media e vibracao, gerar um vetor de saida com 10 valores para
dizer se vai manter o motor ligado ou desligar. Faca um menu a seu criterio para gerenciar o
programa.

Regra para decidir se precisa manter ligado ou desligar:

1- tem vibracao e temperatura acima de 27 graus ¨ desligar
2- tem vibracao e temperatura abaixo ou igual a 27 graus ¨ manter ligado
3- não tem vibracao ¨ manter ligado*/



//opção 1: Temperaturas

void temp(float *tempmedia)
{
	
int a,i,j,temperatura[100];
float media;
	
system("cls");	
srand( (unsigned)time(NULL));

for(i=0;i<101;i++)
{
temperatura[i]=10+rand()%36;

if(i==9)
{
	for(j=0;j<10;j++)
	{
	float media=0;
	media=media+temperatura[j];
	}
}
tempmedia[0]=media/10;

if(i==19)
{
	for(j=10;j<20;j++)
	{
	float media=0;
	media=media+temperatura[j];
	}
}
tempmedia[1]=media/10;

if(i==29)
{
	for(j=20;j<30;j++)
	{
	float media=0;
	media=media+temperatura[j];	
	}
}
tempmedia[2]=media/10;

if(i==39)
{
	for(j=30;j<40;j++)
	{
	float media=0;
	media=media+temperatura[j];	
	}
}
tempmedia[3]=media/10;

if(i==49)
{
	for(j=40;j<50;j++)
	{
	float media=0;
	media=media+temperatura[j];	
	}
}
tempmedia[4]=media/10;

if(i==59)
{
	for(j=50;j<60;j++)
	{
	float media=0;
	media=media+temperatura[j];	
	}
}
tempmedia[5]=media/10;

if(i==69)
{
	for(j=60;j<70;j++)
	{
	float media=0;
	media=media+temperatura[j];	
	}
}
tempmedia[6]=media/10;

if(i==79)
{
	for(j=70;j<80;j++)
	{
	float media=0;
	media=media+temperatura[j];	
	}
}
tempmedia[7]=media/10;

if(i==89)
{
	for(j=80;j<90;j++)
	{
	float media=0;
	media=media+temperatura[j];	
	}
}
tempmedia[8]=media/10;

if(i==99)
{
	for(j=90;j<100;j++)
	{
	float media=0;
	media=media+temperatura[j];	
	}
}
tempmedia[9]=media/10;
	
}
printf("Temperaturas Registradas!");
sleep(3);
}




//opção 2: Vibração
void vib(int *vibracao)
{
	
int i;
	
system("cls");	
srand( (unsigned)time(NULL));

for(i=0;i<10;i++)
{
vibracao[i]=0+rand()%2;
printf("\n%d %d\n",i,vibracao[i]);
}
printf("Vibracoes Registradas!");
sleep(3);
}


//opção 3: Verificar
void verificar(float *tempmedia, int *vibracao)
{
	
int i;

system("cls");	

for(i=0;i<10;i++)
{

if(tempmedia[i]>27 && vibracao[i]==1)
{
	printf("%d Temperatura de %.2f e motor vibrando: Desligando motor!\n\n",i+1,tempmedia[i]);
	sleep(1);
}
else if(tempmedia[i]<=27 && vibracao[i]==1)
{
	printf("%d Temperatura de %.2f e motor vibrando: Manter motor ligado!\n\n",i+1,tempmedia[i]);
	sleep(1);
}
if(vibracao[i]==0)
{
	printf("%d Temperatura de %.2f e motor sem vibracao: Manter motor ligado!\n\n",i+1,tempmedia[i]);	
	sleep(1);
}

}

sleep(3);
}





int main()
{
	
int opcao,vibracao[10];
float tempmedia[10];

do
{	
printf("\n1- Temperatura");
printf("\n2- Vibracao");
printf("\n3- Resultado");
printf("\n4- Sair\n\n");

printf("\nQual e a sua escolha: ");

scanf("%d",&opcao);	

		
	switch(opcao)
	{
		case 1:

		temp(tempmedia);
        system("cls");
		break;
		
		case 2:
        vib(vibracao);
        system("cls");
		break;
		
		case 3:
        verificar(tempmedia,vibracao);

		sleep(5);
        system("cls");
		break;
		
		case 4:
	    system("cls");
	    printf("Ate a proxima!");
		break;
		
		default:
		printf("\nOpcão invalida");
        system("cls");
		break;
	}	
}while(opcao!=4);
	
	return 0;
}

O vetor tempmedia, não está sendo armazenado, apenas o vetor vibração, quando seleciono a opção 3 para realizar o teste, penas o vetor vibração aparece, mas o vetor temp media, que é para mostrar as 10 temperaturas não é mostra as 10 temperaturas armazenadas anteriormente. Como faço para que os dois vetores continuem armazenados na memória, e quando seleciono uma opção diferente, eu ainda consiga ter os valores armazenados, para utiliza-los?

  • Amei 1
Postado

Seu programa não está bom, e está longe do enunciado também.

 

Escreva em torno dos dados

 

Seus dados são 100 amostras de dados de temperatura e 10 dados de vibração, está nas 2 primeiras linhas de sua descrição. E os dados devem ser gerados aleatoriamente.

 

Os dados de temperatura devem ser agrupados a cada dez para serem usados com os 10 dados de vibração e gerar os 10 pares de dados para gerar a saída.

 

O menu pode ser escrito a seu criterio, e não precisa de um. E não deve ter um enquanto seu programa não está pronto. Nunca escreva um programa interativo se puder evitar. Só vai perder tempo.

 

E não se esqueça que o menu segue seu critério então pode ser algo trivial. E deve.

 

Sobre seu código

 

tem muitos erros ainda. já no primeiro loop vai de 0 a 100 sendo que só tem 100 no vetor. usa system() no meio das coisas. Limpa a tela entre cálculos. usa srand(time(NULL)) como todo mundo, sem pensar. Não é isso que você quer. use uma constante conhecida.

 

Mostre o vetor original de temperaturas, já em grupos de 10 e depois o vetor das médias, ou nem você vai saber se o programa funcionou...

 

Retorne os resultados ou eles vão claro sumir dentro das funções.

 

 

  • Obrigado 1
Postado

@Marcelo dos Santos     e o seu vetor tempmedia não armazena nada ,  mas apenas o último valor de temperatura ,  pois você criou e inicializou a variáveL  media=0 , dentro do Loop ,

for(j=0;j<10;j++)
  {
    float media=0;              /// vai zerar toda as vezes que repete o loop 
    media=media+temperatura[j]; /// soma com que esta no vetor
  }
}
tempmedia[0]=media/10;          /// armazena Apenas o ultimo 

e poderia ser assim  :

float media = 0;           /// cria e inicializa a variaveL media com valor zero
for( j=0; j<10; j++ )
{
  media += temperatura[j]; /// soma com o que esta no vetor
}
tempmedia[0] = media / 10; /// armazena A Media
 

 

Postado

 

Passar disso
 

for(j=0;j<10;j++)
  {
    float media=0;              /// vai zerar toda as vezes que repete o loop 
    media=media+temperatura[j]; /// soma com que esta no vetor
  }
}
tempmedia[0]=media/10;

 

para

 

float media = 0;           /// cria e inicializa a variaveL media com valor zero
for( j=0; j<10; j++ )
{
  media += temperatura[j]; /// soma com o que esta no vetor
}
tempmedia[0] = media / 10; /// armazena A Media

 

seria um progresso, como @devair1010 disse, já que a média é zerada dentro do loop. Mas de pouco adianta sem rever o programa.

 

Mais sobre essa função temp()

 

  • A ideia descrita no enunciado é agrupar os 100 valores de temperatura em grupos de 10 e juntar com os dados de vibração, formando 10 pares [temperatura, vibração] para gerar a saída
  • o programa escrito tenta usar nada menos que 10 loops idênticos para fazer a mesma coisa, separados por constantes (o valor de i) ao invés de usar simplesmente um contador e mar em i a cada 10.
  • i e j são globais na função, uma ideia ruim também
  • media devia ser inicializada com 0. ou 0F, o é int.
  • a variável media não é a media e sim a soma. E tempmedia tem as médias. Mais uma vez tem nos 10 loop uma conversão implícita, 0 é int.
  • tem chamadas a sleep() dentro de uma função que faz cálculos
  • as chamadas a srand() estão em lugar errado. Devia haver uma só chamada, provavelmente no início do programa.
  • o mias complicado: o loop externo vai de 0 a 100, 101 valores.

 

Melhor rever o programa todo. É pequeno e não está bom

 

 

  • Obrigado 1

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