Pesquisar este blog

Livros Recomendados

sexta-feira, 19 de março de 2021

URI (BEECROWD) - 2774 - Precisão do Sensor - Iniciante - C e C++

Minha resolução para o exercício "Precisão do Sensor"!

Plataforma: URI (BEECROWD)

Problema2774

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:

σ=1QT(XiX¯)2QT1

Onde QT é a quantidade de vezes que foi realizado o teste, X o valor medido em cada teste e X¯ 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;
}

Código em C++:

#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

Postagem em destaque

URI (BEECROWD) - 2158 - Helping Uncle Cláudio (Ajudando o Tio Cláudio) - Matemática - C, C++ e Haskell

Buenas! Estou aqui mais uma vez para resolver um problema de Matemática! Agora tenho resolvido alguns dessa categoria, pra que vocês possam ...

Postagens mais visitadas