Vytvorte program, který bude ze standardního vstupu císt výrazy slozené z císla, predpony a fyzikální jednotky a na standardní výstup vypíse tento výraz upravený do základního tvaru (tj. predpona se nahradí vynásobením odpovídající mocninou 10; napríklad 11 km/s se prevede na 11000 m/s, 0.3 aF na 3e-19 F.)
P, T, G, M, k, h, D (deka místo normalizovaného
da), d, c, m, u (nahrazuje recké písmeno mí pro
mikro), n, p, f, a. >> to vsak osetrí. main v prípade
zjistení chyby vrátit na konci nenulové císlo, i kdyz po indikaci
chyby pokracuje zpracováním dalsích dat.
e nebo E bez následujícího císla (napr.
12E je povazováno za 12E0). Pred predponou
E (exa) je proto nutno psát mezeru.
#include <iostream>
using namespace std;
int i,ind,chyba=0; // ind=index prdpony v poli
float vstupne_cislo,prevedene_cislo;
char
predpony[]={'Y','Z','E','P','T','G','M','k','#','m','u','n','p','f','a',
'z','y', //3. mocniny
'h','D','#','d','c'}; //1. mocniny
string jednotka;
//================================ MAIN =======================================
int main(void)
{
cout<<"Program na prevod jednotiek do zakladneho tvaru"<< endl;
cout<<"Zadaj jednotku v tvare: \"cislo jednotka(km) \" "<< endl;
cout<<"Zadaj vyraz: ";
while((cin >> vstupne_cislo >>jednotka))
{
ind=-1;prevedene_cislo=1;
cout <<vstupne_cislo<<" "<<jednotka;
for(i=0;i<22;i++) if (jednotka[0]==predpony[i]) {ind=i; break;}
if ((ind==-1) || (jednotka[0]=='#')||(jednotka[1]==0))
{ // --------------- CHYBA ---------
if (jednotka[1]==0)
cout<<"| CHYBA: Po predpone nie je jednotka!!"<<endl;
else
cout<<"| CHYBA: predpona nebola najdena!!"<<endl;
chyba++;
}
else // -------- existuje predpona -----------
{
jednotka[0]=' ';
if (ind<17)
{
ind=0-(ind-8)*3;
}
else ind=0-(ind-19);
if(ind>0) for(i=0;i<ind;i++) prevedene_cislo*=10;
else for(i=0;i>ind;i--) prevedene_cislo/=10;
cout <<" -> "<<vstupne_cislo*prevedene_cislo << jednotka<<endl;
};
cout <<"Zadaj vyraz: ";
}
return chyba;
}