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

Projekt- Kalkulator

Ostatnio zmodyfikowano 2009-11-28 22:18
Autor Wiadomość
naiL
Temat założony przez niniejszego użytkownika
» 2009-11-28 21:50:53
Doszedłem do momentu zamiany Double w string. Zakładam, że kalkulator będzie obsługiwał 10 cyfrowy wyświetlacz z dwu cyfrowym wyświetlaczem e(tam notacji naukowej czy jak go tam zwał). Czy jest jakaś inna droga niż analiza string na wyłuskanie informacji np czy jest przecinek, czy jest e, jakiego znaku jest liczba(ok tu można prosto:

if(liczba<0)znak=1;
) ale wartosc exp?  jeśli jest większy wykładnik niż 3 cyfry -99/+99. wyświetli się error(za wąski ekran konsoli ;) ale o tym na koniec).
spotykam się z przykładami wyświetlania jakiś wartości z %%f coś tam nawet nie wiem jak to się określa fachowo, żeby nikomu nie poszarpać przez przypadek uczuć religijnych. A możliwe że są jakieś formuły zapytań, określeń wartości double/float o to czy jest przecinek(ustawiam precision na 10 ale nie wiem czy to jest ilosc wyswietlanych znaków czy cyfr.. np 0.000000001 czy 0.00000001)?
C/C++
#include <iostream>
#include <string>
#include <sstream>
#include <stdio.h>
int main()
{
    using namespace std;
    cout.precision( 10 );
    // dzialanie liczba a i b
    double a = 1237987e - 95;
    double b = 2138970897;
    double liczba_Ad = a / b;
    int przecinek = 0;
    int ilosc_cyfr = 0;
    char test;
    int exp = 0;
    int exp_znak = 0;
    int licznik_exp = 0;
    int znak = 0;
    int error = 0;
    string exp_wartosc;
    ostringstream back_up;
    back_up << liczba_Ad;
    string prima_liczba = back_up.str();
    string liczba = prima_liczba;
    // próba string
    test = liczba[ 0 ];
    if( test == '-' )
    {
        znak = 1;
        liczba = liczba.substr( 1, liczba.size() );
    }
    for( int i = 0; i <= liczba.size(); i++ )
    {
        test = liczba[ i ];
        if( test == '.' )
        if( test == 'e' )
        {
            exp = 1;
            if( liczba[ i + 1 ] == '-' )
                 exp_znak = 1;
           
            if( liczba[ i + 2 ] != '0' )
                 error = 1;
           
            exp_wartosc = liczba.substr( i + 2, i + 4 );
            liczba = liczba.substr( 0, i );
        }
    }
    for( int i = 0; i <= liczba.size(); i++ )
    {
        test = liczba[ i ];
        if( test >= 48 && test <= 57 ) ilosc_cyfr++;
       
    }
    // wyniki
    cout << prima_liczba << "\n obrobka string daje:\n";
    cout << liczba << "\n";
    cout << "ilosc_cyfr " << ilosc_cyfr << "\n";
    if( znak == 1 ) cout << "znak -";
   
    if( znak == 0 ) cout << "znak +";
   
    if( przecinek == 1 ) cout << "\nw .precision(10) wystapi przecinek";
   
    if( exp == 1 )
    {
        cout << "\nwystepuje exp wartosci ";
        if( exp_znak == 1 ) cout << "-";
       
        if( exp_znak == 0 ) cout << "+";
       
        cout << exp_wartosc;
    }
    cout << "\n" << "error-" << error;
    return( 0 );
}
w jaki sposób mam odczytać że wynik działania był czy raczej nie był.
Znalazłem INF ,-INF,NaN(not a number).
1/0->#INF.
rozumiem tyle że są to "specjalne" określenia wyniku działania?
czy jeszcze są jakieś inne określenia?
P-11878
DejaVu
» 2009-11-28 21:59:07
Po prostu kocham takie długie tematy... aż się odechciewa czytać następujących po sobie postów. Proponuję tworzyć mniejsze tematy i bardziej konkretne, bo obecnie leci już czwarta strona i wygląda na to, że co i rusz inne problemy są poruszane pod jednym ogólnym hasłem 'kalkulator'.

http://kursy.ddt.pl/?LessonId=127
P-11880
naiL
Temat założony przez niniejszego użytkownika
» 2009-11-28 22:18:12
Co rusz napotykam na inny problem pod wspólnym tytułem "kalkulator". Raz to raz tamto. Program ma się prawie ku końcowi całe szczęście...
P-11882
1 2 3 « 4 »
Poprzednia strona Strona 4 z 4