EDSAC proqramlaşdırılması#3553

EDSAC proqramlaşdırılması

1 saniyə
64 meqabayt
Orta

Dünyanın ilk tam miqyaslı elektron rəqəmsal kompüteri EDSAC (Elektron Gecikmə Xətləri Avtomatik Hesablayıcısı) idi. EDSAC, 17 bitlik sözlər (və 35 bitlik ikiqat sözlər) ilə işləyən komanda dəstinə malik idi və məlumatların daxil edilməsi və çıxarılması üçün 5 bitlik teleqraf kodundan istifadə edirdi.

EDSAC proqramlaşdırılması sadə assembler dili vasitəsilə həyata keçirilirdi: bir hərf əməliyyat kodunu təmsil edirdi, ardından işarəsiz onluq ünvan və "F" (tam söz üçün) və ya "D" (ikiqat söz üçün) hərfi gəlirdi. Məsələn, "A 128 F" təlimatı "128 akkumulatorda tam sözü əlavə et" mənasını verirdi və 17 bitlik ikili koda çevrilirdi: 11100000100000000, 5 bitlik əməliyyat kodundan (11100="add"), 11 bitlik operanddan (00010000000 = 128) və tam söz üzərində əməliyyatı göstərən bir 0 bitindən ibarət idi (1 biti ikiqat söz üzərində əməliyyatı göstərirdi).

EDSAC-da arifmetika sabit nöqtəli idi, lakin bu, sadəcə tam ədədi arifmetika deyildi (müasir adi maşınlarda olduğu kimi). EDSAC-da onluq nöqtənin aparat səviyyəsində ən sol bit ilə onun sağındakı bit arasında yerləşdiyi qəbul edilirdi. Beləliklə, aparat səviyyəsində yalnız -1.0 ≤ x < 1.0 aralığında olan dəyərlərlə işləmək mümkün idi. Məsələn:

Göründüyü kimi, mümkün olan ən böyük müsbət dəyər:

01111111111111111 = 0.9999847412109375

və mümkün olan ən kiçik müsbət dəyər:

00000000000000001 = 2^{-16} = 0.0000152587890625

(EDSAC-da ardıcıl iki dəyər arasındakı artım da buna bərabərdir).

Maraqlı təsadüf (və ya zərif dizayn həlli) olaraq, toplama əməliyyatının kodu (11100) teleqrafın "A" hərfinin kodu ilə üst-üstə düşürdü. Çıxarma əməliyyatının kodu teleqrafın "S" (01100) hərfinin kodu ilə üst-üstə düşürdü və s. Bu, assembler proqramlaşdırmasını sadələşdirirdi (onun komandaları cəmi 31 təlimatdan ibarət idi). EDSAC teleqraf əlifbası "PQWERTYUIOJ#SZK*?F@D!HNMLXGABCV" idi (burada "P"=00000, "Q"=00001, və s. "V"=11111 qədər).

Təəssüf ki, EDSAC assembleri məlumatların işlənməsi üçün xüsusi direktivlərə malik deyildi. Digər tərəfdən, adi komandaların bunun üçün istifadə edilə bilməyəcəyinə dair heç bir əsas yox idi. Buna görə də, EDSAC proqramçısı 3/4 sabitini (təmsil olunan 01100000000000000 kimi) rezerv etmək istədikdə "S O F" təlimatını, 1/3 sabitini (təxminən 00101010101010101 kimi təmsil olunan) rezerv etmək istədikdə isə "T 682 D" təlimatını istifadə edirdi və s.

Sizdən onluq dəyərləri uyğun EDSAC komandalarına çevirən proqram yazmağınız tələb olunur.

Giriş

Birinci sətir bir tam ədəd P (1 ≤ P ≤ 1000) - testlərin sayını ehtiva edir. Hər bir test bir sətirdən ibarətdir və iki ədəd N və D ehtiva edir. N testin nömrəsini təmsil edir. D isə sd.ddd.... formatında onluq dəyəri təmsil edir, burada s mənfi işarə ola bilər, d isə onluq rəqəmlərdən (0-9) hər hansı biri ola bilər. Onluq nöqtədən sonra ən azı 1 və ən çox 16 rəqəm mövcuddur.

Çıxış

Hər bir test üçün bir sətir çıxarın. O, testin nömrəsini (N), boşluq və verilmiş sabiti təyin etmək üçün kifayət edən EDSAC komandasını ehtiva etməlidir. Komanda aşağıdakı kimi çıxarılmalıdır: əməliyyat kodunun "opcode" simvolu, operand (mənfi olmayan onluq tam ədəd), boşluq və 'F' və ya 'D' simvolu (lazım olduqda). Əgər sabit 17 bitlə dəqiq təmsil edilə bilmirsə, dəyər sıfıra doğru yuvarlanmalıdır (mənfi üçün yuxarı və müsbət üçün aşağı). Əgər D dəyəri -1.0 ≤ D ≤ 1.0 aralığında deyilsə, EDSAC komandası əvəzinə "INVALID VALUE" sətirini çıxarın.

Nümunələr

Nümunə 1

Loading
Loading