0
what needs to be done: develop an algorithm where calculates from file input values . txt or values entered by the user, a value in percentage that is outside the allowed, in case +-3 for all cases, where the program performs a media and compares value by value if it is inside or outside the expected, which it should, show the result in percentage of what was not expected;
So far, I’ve accomplished this:
#include<stdio.h>
#include<string.h>
int main(void)
{
//decalara entrada de file.txt
float file_ent[]={0};
//declara saida de file.txt
float saida;
// declara entrada de temperatura
float vetor[15000]={0};
//declara contador e entrada de menu
int ent, ent_aux, cont,/* cont_aux,*/ cont_ex /*, cont_out*/;
//declara saida onde apresenta resultado obtido
float ex, cont_out, cont_aux,media;
//variaveis para log-in
int num_key;
//cabecalho inicial insercao de senha
do
{
puts("\n\n\t*********************************************");
puts("\t* *");
puts("\t* Calculador de temperatura *");
puts("\t* *");
puts("\t* *");
puts("\t* *");
puts("\t* DIGITE SUA SENHA *");
puts("\t* *");
puts("\t* *");
puts("\t* *");
puts("\t* DIGITE 0 PARA SAIR *");
puts("\t*********************************************");
scanf("%i",&num_key);
if(num_key == 0)
{
return 0;
}
if (num_key!= 123456)
{
printf(" TENTE NOVAMENTE ");
}
}while(num_key!=123456);
//cabecalho de escolha de entrada de arquivo ou digitacao
do
{
puts("\n\n\t*********************************************");
puts("\t* *");
puts("\t* Calculador de temperatura *");
puts("\t* *");
puts("\t* *");
puts("\t* *");
puts("\t* Escolha entre importar o arquivo *");
puts("\t* ou digitar manualmente os valores, caso *");
puts("\t* digite 1 (SIM) para importar e 0 (NAO) *");
puts("\t* para nao importar o arquivo. *");
puts("\t* *");
puts("\t* *");
puts("\t* Lembrando que o arquivo deve estar *");
puts("\t* nomeado como \"entrada.txt\" *");
puts("\t* *");
puts("\t* *");
puts("\t* DIGITE 0 PARA SAIR *");
puts("\t*********************************************");
scanf("%i",&num_key);
// importar o arquivo para o programa
if(num_key == 1)
{
printf(" VOCE OPTOU POR IMPORTAR O ARQUIVO ");
FILE *file_ent;
file_ent = fopen("entrada.txt", "r");
for(cont=0;file_ent != NOF; cont++)
{
fscanf("%f",&file_ent);
}
}
// nao importar e digitar manualmente
if (num_key== 0)
{
}
// caso nao 1 e caso nao 0
if((num_key!=1) && (num_key!=0))
{
printf(" *** OPCAO INVALIDA ***");
}
}while((num_key!=1) && (num_key!=0));
do
{
//cabecalho
puts("\n\n\t*********************************************");
puts("\t* *");
puts("\t* Calculador de temperatura *");
puts("\t* *");
puts("\t* Calculador de temperatura *");
puts("\t* mostrando somente a porcentagem de desvio *");
puts("\t* *");
puts("\t* SELECIONE UMA OPCAO DESEJADA: *");
puts("\t* *");
puts("\t* 1 3 graus celcius *");
puts("\t* 2 -3 graus celcius *");
puts("\t* 3 -5 graus celcius *");
puts("\t* 4 -8 graus celcius *");
puts("\t* 5 -12 graus celcius *");
puts("\t* 6 -15 graus celcius *");
puts("\t* 7 -18 graus celcius *");
puts("\t* *");
puts("\t* *");
puts("\t* Digite 66 para sair *");
puts("\t* *");
puts("\t* *");
puts("\t* Caso erre algum valor no meio digite 999 *");
puts("\t* onde abrira alguma opcoes para alterar o *");
puts("\t* que voce errou. Apenas siga os passos *");
puts("\t* *");
puts("\t* Selecione uma opcao: *");
puts("\t*********************************************");
//le valor digitado e atribui a ent
scanf("%i",&ent);
//se ent == 0 programa finaliza
if(ent==66)
{
return 0;
}
// se entrada for numeros de 1 a 7 entra no codigo
if((ent==1)||(ent==2)||(ent==3)||(ent==4)||(ent==5)||(ent==6)||(ent==7))
{
//mostar opcao selecionada
printf("\nVOCE SELECIONOU A OPCAO: %i\n\n",ent);
/*
laço for onde cont menor ou igual a 15000
ele repete ate o contador atingir valor desejado
*/
for (cont; cont<=15000;cont++)
{
printf("Digite os valores de temperaturas desejadas: ");
printf(" INDICIE: %i : ",cont);
cont_aux=cont;
cont_ex=cont;
ex=ex+cont;
/*
le os valores do usuario e atribui ao vetor na variavel
escolhida pelo contador (cont)
juntamente compara se for zero cai fora da operacao dando fim ao algoritmo
caso o usuario tenha digitado algum valor errado
ele podera alterar este valor e corrigir
conforme sua necessidade
*/
scanf("%f",&vetor[cont]);
if(vetor[cont]==66)
{
cont--;
break;
}
if(vetor[cont]==999)
{
// cabeçalho correcao de valor por indicie
puts("\n\n\t***********************************************");
puts("\t* -- ATENCAO -- *");
puts("\t* Neste momento voce pode altar algum *");
puts("\t* valor que foi digitado errado, preste *");
puts("\t* muita atencao no indicie do valor desejado *");
puts("\t* e siga os passos para que possamos auxuliar *");
puts("\t* na correcao do mesmo *");
puts("\t* *");
puts("\t* *");
puts("\t* *");
puts("\t* *");
puts("\t* Digite o valor do indicie desejado: *");
puts("\t* *");
puts("\t* Digite 66 para sair *");
puts("\t***********************************************");
// le entrada
scanf("%i",&cont);
printf(" Voce digitou o indicie: %i",cont);
printf(" Digite o novo valor para este indicie: ");
//le o indicie do valor errado
scanf("%i",&vetor[cont]);
printf("\n\t *** CONTINUANDO ***\n");
//contador principal recebe ultimo contador armazenado por auxiliar
cont=cont_aux;
/*
decrementa em 1 o contador para repor o valor aonde foi digitado
o numero magico para alterar o valor errado e continuar de onde parou
*/
cont--;
}
if (vetor[cont]==66)
{
cont=15002;
}
}
//cabecalho de entrada de temperatura
puts("\n\n\t***********************************************");
puts("\t* *");
puts("\t* Apos digitar todos os valores desejados *");
puts("\t* vamos prosseguir com mais alguns passos *");
puts("\t* Primeiramente voce devera entrar com o *");
puts("\t* valor da temperatura em questao que deseja *");
puts("\t* calcular. *");
puts("\t* *");
puts("\t* Digite a temperatura desejada *");
puts("\t* *");
puts("\t* Digite 66 para sair *");
puts("\t***********************************************");
scanf("%i",&ent_aux);
/*
para contador de 0 ate auxiliar aque recebe ultimo valor de contador
faça, contador + 1 no laço comparando se os valores do vetor forem maior
ou menor do que 3 acrescenta +1 no contador de saida com objetivo calcular
qual a porcentagem que ficou fora do calculado
*/
for(cont=0;cont<=cont_aux;cont++)
{
if((vetor[cont]>(ent_aux-3))&&(vetor[cont]<(ent_aux+3)))
{
cont_out++;
}
/*else
{
cont_out++;
}*/
}
//calcula resultado
cont_out*100;
ex=cont_out/cont_aux;
ex=ex*100;
/*
//calcula media de temperatura
for(cont=0;cont<=cont_aux;cont++)
{
media=vetor[cont]+media;
}
cont--;
media=media/cont;
media=media/2;
*/
//imprime em tela o resultado final
printf("\n\t\nVOCE OBETEVE: %.2f porcento dentro do esperado\n\n",ex);
//printf("\n\t\nMEDIA DE TEMPERATURA: %.2f",media);
}
// caso a entrada nao seja um valor de 1 a 7 imprime mensagem
else
{
printf ("\n\n\tValor invalido!\n\n");
}
//zera os valores dos contadores a cada fim de programa
cont=0;
cont_aux=0;
cont_out=0;
}while (ent!=66);
return 0;
}
As far as my knowledge was concerned I did a good part, just need that in a few moments the user enters with certain values, and in others he can import a file . txt with "input.txt" name and at the end of the calculation return "output.txt" with the final result and in some moments, it can enter values manually.
Up to a point I tried declaring a FILE but I don’t quite know how it does, and finally it didn’t work! I ask you to help me and explain how to proceed.
but in case it can vary the input value, today can be 1000 values tomorrow 15000 never know exactly, and I will make available to an end user the . exe, where neither I nor he can keep changing accordingly, with the input. If we put the EOF in the case, and left the vector with [15000], it would not work?
– AGenaro
Well, given that you want something dynamic, why not ask the user this size at the time of execution?
scanf
and the declaration of the vector asfile_ent[variavel]
, beingvariavel
what you will "scan" with the scanf.– Bertolino