Ir ao conteúdo
  • Cadastre-se

C Preciso que dois ou mais vetores continuem armazenados em funções diferentes!


Posts recomendados

#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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

@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
 

 

Link para o comentário
Compartilhar em outros sites

 

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
Link para o comentário
Compartilhar em outros sites

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