Pesquisar este blog

Livros Recomendados

Mostrando postagens com marcador 1958. Mostrar todas as postagens
Mostrando postagens com marcador 1958. Mostrar todas as postagens

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;
}

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