Engleski izraz
Opis zadatka:
Potrebno je napisati program koji ce vršiti izračunavanje (evaluaciju) brojnih izraza sa
osnovnim računskim operacijama. U ulaznoj datoteci će se nalaziti izraz na engleskom jeziku
koji (riječima) opisuje izraz koji potrebno evaluirati. Izraz se nalazi u formi:
<broj> {<operator> <broj>}
Dakle, izraz se sastoji od jednog ili više brojeva izmedu kojih se nalaze operatori. Broj i
operator su odvojeni jednim razmakom (space simbolom).
Brojevi koji se nalaze u ulaznoj datoteci su napisani na engleskom jeziku (npr.
broj 22222 je zapisan kao
twenty two thousand two hundred twenty two), s tim da se ne koriste rijec
and (two hundred forty umjesto two hundred and forty) i znak "-"
(thirty six umjesto thirty-six) za odvajanje pojedinih dijelova samog broja,
nego u tu svrhu sluzi razmak (simbol space).
Svi ulazni podaci kao i svi međurezultati neće preći opseg 16-bitnog cijelog broja
(-32768 do 32767, tj. minus thirty two thousand seven hundred sixty
eight do thirty two thousand seven hundred sixty seven).
Hiljade se pišu u sljedećem obliku: <broj hiljada> thousand
Primjeri: one thousand (ne samo thousand),
eleven thousand, twenty nine thousand ...
Stotice se pišu u sljedecem obliku: <broj stotica> hundred
Primjeri: one hundred (ne samo hundred), three hundred,
nine hundred ...
Dio broja manji od 100 se zapisuje na sljedeci način:
1 = one,
2 = two,
16 = sixteen,
30 = thirty,
52 = fifty two,
99 = ninety nine
Ukoliko je broj negativan ispred njega stoji prefiks minus
Primjeri:
-1 = minus one,
-50 = minus fifty,
-134 = minus one hundred thirty four
Nula se označava sa zero i nema predznaka, tj. ne minus zero nije dozvoljeno.
Dozvoljeni operatori su:
- plus - sabiranje;
- minus - oduzimanje, ili predznak za negativan broj;
- multiply - množenje;
- divide - cjelobrojno dijeljenje.
Nikada se neće naći dva operatora jedan iza drugog, osim ako se iza operatora nalazi predznak
za negativan broj (npr. one multiply minus two), ali u ovom slucaju minus nije
operator, nego znak za predznak.
U samom izrazu se neće nalaziti nikakve zagrade i slični simboli. Nije potrebno provjeravati
valjanost izraza, jer se pretpostavlja da su uvijek u skladu sa gore opisanim. Prilikom
evaluacije izraza treba voditi računa o prioritetu operatora, tj. množenje i dijeljenje imaju
veći prioritet (npr. one plus two multiply three kao rezultat daje seven).
Ulazna datoteka:
Ulazna datoteka IZRAZ.IN koja se nalazi u tekućem direktoriju ima samo
jedan red u kojem se nalazi izraz koji je potrebno evaluirati. Red je terminiran sa oznakom
kraja datoteke (EOF markerom), tj. na kraju reda se ne nalazi oznaka kraja linije (EOL marker).
Dozvoljeni simboli u datoteci su mala slova (a-z) i razmak (ASCII kod 32), koji služi za
razdvajanje pojedinih riječi. Nikada se neće pojaviti dva ili više razmaka jedan za drugim.
Veličina ulazne datoteke nije ogranicena.
Izlazna datoteka:
Program, koji se mora zvati IZRAZ.EXE, treba da kreira izlaznu
datoteku IZRAZ.OUT u tekućem direktoriju. Datoteka treba da sadrži samo
jedan red koji predstavlja rezultat izraza koji se nalazi u ulaznoj datoteci u obliku kako je
opisano iznad, dakle slovima. Ukoliko je rezultat nula u izlaznoj datoteci treba da stoji
zero. Dijelove broja je potrebno odvajati jednim razmakom. Na početku datoteke i na
kraju ne smije se nalaziti nijedan razmak. Na kraju reda ne treba stajati oznaka kraja reda
(simbol EOL).
Vremensko ograničenje:
Za svaki testni primjer program treba da ponudi rješenje za najviše 10 sekundi.
Primjeri:
IZRAZ.IN
one plus one
IZRAZ.OUT
two
IZRAZ.IN
twenty six plus ten multiply sixteen divide eight minus one hundred
IZRAZ.OUT
minus fifty four
IZRAZ.IN
three divide two plus five divide two
IZRAZ.OUT
three
IZRAZ.IN
eleven thousand one hundred eleven minus minus eleven thousand one hundred eleven
IZRAZ.OUT
twenty two thousand two hundred twenty two
Napomena:
Sve što trebate znati iz engleskog jezika o brojevima za ovaj zadatak je slijedeća tablica:
| 0 = zero | 10 = ten | 20 = twenty |
| 1 = one | 11 = eleven | 30 = thirty |
| 2 = two | 12 = twelve | 40 = forty |
| 3 = three | 13 = thirteen | 50 = fifty |
| 4 = four | 14 = fourteen | 60 = sixty |
| 5 = five | 15 = fifteen | 70 = seventy |
| 6 = six | 16 = sixteen | 80 = eighty |
| 7 = seven | 17 = seventeen | 90 = ninety |
| 8 = eight | 18 = eighteen | 100 = hundred |
| 9 = nine | 19 = nineteen | 1000 = thousand |
[Testni podaci]
[Rješenje (Pascal)]
[Rješenje (C++)]