Minha resolução para o exercício "Precisão do Sensor"!
Plataforma: URI (BEECROWD)
Problema: 2774
Enunciado:
O professor está te ensinando sobre sensores. Este é um elemento muito importante em diversas aplicações. Para aprender melhor os conceitos de precisão o professor pediu para realizar uma montagem prática do sensor Termo Ind v4.0 no novo laboratório de Automação.
Você como bom aluno anotou a fórmula para o cálculo da precisão de um sensor:
Onde QT é a quantidade de vezes que foi realizado o teste, o valor medido em cada teste e a média dos valores.
Para realizar o teste você ficou H horas fazendo testes, e a cada M minutos você verificou o valor X da temperatura entregue pelo sensor.
Agora que você tem as medidas, e como você tem a habilidade de programar, faça um programa que entregue a precisão do sensor.
Linguagens: C e C++
Solução:
As entradas de dados foram separadas em tokens (o separador é o espaço em branco). Dessa forma, "qt" sabe a quantidade de valores lidos, e "r" soma os valores de "valores[i] - média" ao quadrado. Ao final, a raíz quadrada de r/(qt-1) será a resposta.
Código em C:
#include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { int h, m, pos, qt, i; char linha[4000000], sep[] = " ", *token; double valores[100000], media, r; while (scanf("%d %d ", &h, &m) != EOF) { fgets(linha, 1000000, stdin); pos = 0; qt = 0; media = 0.0; token = strtok(linha, " "); while (token != NULL) { valores[qt] = atof(token); media += valores[qt]; token = strtok(NULL, " "); qt++; } media /= qt; for (i = 0, r = 0; i < qt; i++) r += pow(valores[i] - media, 2); printf("%.5lf\n", sqrt(r/(qt-1))); memset(valores, 0, sizeof(valores)); } return 0; }
#include <cmath> #include <iostream> #include <iomanip> #include <vector> #include <string> using namespace std; int main() { int h, m, pos, qt, i; string linha, sep = " ", token; vector<double> valores; double media, r; while (cin >> h >> m) { cin.ignore(); getline(cin, linha); pos = 0; qt = 1; media = 0.0; while ((pos = linha.find(sep)) != string::npos) { token = linha.substr(0, pos); valores.push_back(stod(token)); media += stod(token); linha.erase(0, pos + sep.length()); qt++; } valores.push_back(stod(linha)); media = (media + stod(linha)) / qt; for (i = 0, r = 0; i < qt; i++) r += pow(valores.at(i) - media, 2); cout << fixed << setprecision(5) << sqrt(r/(qt-1)) << endl; valores.clear(); } return 0; }
Nenhum comentário:
Postar um comentário