Pesquisar este blog

Livros Recomendados

domingo, 28 de fevereiro de 2021

URI (BEECROWD) - 1958 - Notação Científica - Iniciante - C e C++

O problema intitulado "Notação Científica" pode ser resolvido de algumas formas! Eu optei por usar estruturas de formatação disponíveis nas linguagens. Confira na sequência!

Plataforma: URI (BEECROWD)

Problema1958

Enunciado:

Números em ponto flutuante podem ser bastante extensos para mostrar. Nesses casos, é conveniente usar a notação científica.

Você deve escrever um programa que, dado um número em ponto flutuante, mostre este número na notação científica: sempre mostre o sinal da mantissa; sempre mostre 4 casas decimais na mantissa; use o caractere 'E' para separar a mantissa do expoente; sempre mostre o sinal do expoente; e mostre o expoente com pelo menos 2 dígitos.

Linguagens: C e C++


Solução: 

Código em C:

Para utilizar notação científica com "E" maiúsculo e no formato desejado para a saída, basta formatar o printf com %.4E. Há um teste antes para saber se o primeiro caractere é "-"; isso é feito para acrescentar o "+" caso o valor não seja negativo. A função strtold faz a conversão do texto para double, necessário para utilizar a formatação %.4E.

#include <stdio.h>
#include <stdlib.h>

int main () {
    
    char entrada[112];
    char *parada;
    double x;
      
    fgets(entrada, sizeof(entrada), stdin);

    if (entrada[0] != '-')
        printf("+");
     
    x = strtold(entrada, &parada);
    printf("%.4E\n", x);

    return 0;
}

Código em C++:

Utilizando a mesma lógica do código em C, o exercício foi resolvido aqui com stold (semelhante a strtold), disponível em <string>.  cout.precision(4) delimita a quatro casas decimais e foi passado para cout o valor scientific com uppercase, assim o "E" fica maiúsculo também.
 
#include <iostream>
#include <string>

using namespace std;

int main () {
    
    string entrada;    
    long double x;
      
    getline(cin, entrada);
    
    if (entrada[0] != '-')
        cout << "+";
    
    x = stold(entrada);
      
    cout.precision(4);
    cout << scientific;
    cout << uppercase;
    cout << x << endl;
      
    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