Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wyświetlanie w Notacji Naukowej

Ostatnio zmodyfikowano 2016-02-02 22:35
Autor Wiadomość
Nitr0Skay
Temat założony przez niniejszego użytkownika
Wyświetlanie w Notacji Naukowej
» 2016-02-02 19:59:16
Witam. Otóż mam pewien problem z wyświetleniem pewnej informacji w notacji naukowej. Nigdy bowiem tego nie robiłem i nie bardzo znam możliwości edycyjne tego zapisu. Otóż mam takie zadanie:

"Napisz program formatujący wydruki w taki sposób, że wypisuje w kolejnych 15. wierszach potęgi liczby PI (od y=1 do y=15), które będą poprzedzone numerem potęgi:

4. w formacie naukowym, z dokładnością do trzech cyfr znaczących w taki sposób, aby wszystkie kropki dziesiętne znalazły się w jednej kolumnie. Numer potęgi należy drukować tak, jak w po-przednim punkcie."

No i mam taki podprogramik:
C/C++
cout << endl << "Format Naukowy" << endl << hr << endl;
cout << "0.   ";
cout.precision( 2 );
cout << scientific << 1.0 << endl;
for( int y = 1; y <= 15; y++ ) {
    cout.precision( 2 );
    cout << y << ".  ";
    if( y < 10 ) cout << " ";
   
    cout << scientific << pow( M_PI, y ) << endl;
}

Wyniki powinny wyjść takie:

0    1.00e+00
1    3.14e+00
2    9.87e+00
3    3.10e+01
4    9.74e+01
5    3.06e+02
6    9.61e+02
..    ………..
13    2.90e+06
14    9.12e+06

Mi wychodzą takie:
http://imgur.com/sPHVcU9

No i teraz nie bardzo wiem, jak doprecyzować, aby po e+ były zapisane dwie cyfry, dokładnie takie, jakie powinny być. Jako iż pierwszy raz mam napisać coś w notacji naukowej, to jestem otwarty na propozycje. Z góry dziękuję
P-144357
pekfos
» 2016-02-02 21:21:08
Ilość cyfr wykładnika jest zależna od implementacji i raczej nie można jej nigdzie ustawić.
P-144366
carlosmay
» 2016-02-02 21:36:22
Można wyniki zrzutować do stringa i usunąć zbędne zero, jeżeli to ma być dokładnie jak przykład.

Taki mały przykład naskrobałem. Może się przyda.
C/C++
#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include <limits>
#include <cmath>
// ...

for( int y = 1; y <= 15; ++y ) {
    std::ostringstream oss;
    oss.precision( std::numeric_limits < double >::digits10 );
    oss << std::scientific << std::setprecision( 2 ) << pow( M_PI, y );
    std::string scient = oss.str();
    scient.erase( scient.size() - 3, 1 );
    std::cout << scient << std::endl;
}
P-144370
Nitr0Skay
Temat założony przez niniejszego użytkownika
» 2016-02-02 22:35:10
Dziękuję za odpowiedzi i przydatną sugestię ;)
P-144386
« 1 »
  Strona 1 z 1