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: 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 = zero10 = ten20 = twenty
1 = one11 = eleven30 = thirty
2 = two12 = twelve40 = forty
3 = three13 = thirteen50 = fifty
4 = four14 = fourteen60 = sixty
5 = five15 = fifteen70 = seventy
6 = six16 = sixteen80 = eighty
7 = seven17 = seventeen90 = ninety
8 = eight18 = eighteen100 = hundred
9 = nine19 = nineteen1000 = thousand


[Testni podaci]     [Rješenje (Pascal)]     [Rješenje (C++)]

Nazad na izbor zadataka
Nazad na glavnu stranicu