Rozmowy na temat tworzenia stron www oraz programowania.
Wyślij odpowiedź

sprawdzenie poprawnosci postaci inzynieryjnej [c++]

30 Mar 2010, 14:14

Witam.
Zwracam sie z prośbą o pomoc w napisaniu tego programu:

Kod:
Napisz program, który na wejsciu bedzie miał ciag znaków a
na wyjsciu odpowie czy podany ciag znaków jest poprawna liczba w postaci
inzynieryjnej czy nie.


Kod:
#include <iostream>
#include <conio.h>
using namespace std;

const int klasa_znak=   0;
const int klasa_cyfra=  1;
const int klasa_kropka= 2;
const int klasa_e=      3;
const int klasa_inne=   4;

int ASCII[256];

int AUT[ 5 ][ 8 ]=
{
    { 1, -1, -1, -1, -1,  6, -1, -1},   // klasa_znak
    { 2,  2,  2,  4,  4,  7,  7,  7},   // klasa_cyfra
    {-1, -1,  3, -1, -1, -1, -1, -1},   // klasa_kropka
    {-1, -1, -1, -1,  5, -1, -1, -1},   // klasa_e
    {-1, -1, -1, -1, -1, -1, -1, -1}    // klasa_inne
};

bool err(int stan)
{
    return stan<0;
}

int main()
{
    int stan;
    unsigned char ch;

    for (ch=0; ch<255; ch++)    ASCII[ch]=klasa_inne;
    for (ch='0'; ch<='9'; ch++) ASCII[ch]=klasa_cyfra;
    ASCII['+']=ASCII['-']=klasa_znak;
    ASCII['e']=ASCII['E']=klasa_e;
    ASCII['.']=klasa_kropka;

    for (stan=0; !err(stan);)
    {
        ch = getch();
        if (ch == 13) break;        // ASCII[13] == enter
        stan = AUT[ASCII[ch]][stan];
        cout << ch;
    }

    cout << "\n\n";

    switch (stan)
    {
    case 0:
        cout << "Nie wprowadzono liczby";
        break;
    case -1:
    case 1:
    case 3:
    case 5:
    case 6:
        cout << "Liczba nieprawidlowa";
        break;
    case 2:
    case 4:
    case 7:
        cout << "Liczba prawidlowa";
        break;
    default :
        cout << "Nieznany bĹ‚Ä…d";
    }
getch();
    return stan;
   
   
}


ale tu są błędy ponieważ program powinien sparwdzic czy ta liczba jst poprawna i wypsiac np. cos takiego:
+5.54e-7 +[znak] 5[liczba] .[kropka] 54[liczba] e[e] -[znak] 7[liczba]

Wstawiajcie jakies komentarze do kodu.

Z góry dziekuje za pomoc
Wyślij odpowiedź