30 Mar 2010, 14:14
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.
#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;
}