EDSAC Məlumatlarının Dekodlanması#3554

EDSAC Məlumatlarının Dekodlanması

1 saniyə
64 meqabayt
Orta

Dünyanın ilk tam miqyaslı, yaddaşda saxlanılan proqramlı, elektron, rəqəmsal kompüteri EDSAC (Electronic Delay Storage Automatic Calculator) idi. EDSAC, 17-bitlik sözlər (və 35-bitlik ikiqat sözlər) üzərində işləyən akkumulyator əsaslı təlimat dəstinə malik idi və giriş və çıxış üçün 5-bitlik teleprinter kodundan istifadə edirdi.

EDSAC çox sadə bir yığma dili ilə proqramlaşdırılmışdı: bir hərf əmri, ardınca imzasız onluq ünvan, ardınca isə "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ı "akkumulyatora 128 yerindəki tam sözü əlavə et" mənasını verirdi və 17-bitlik ikili dəyərə 11100000100000000 yığılırdı, bu da 5-bitlik əmrdən (11100="əlavə et"), 11-bitlik operanddan (00010000000 = 128) və tam söz əməliyyatını göstərən bir 0 bitindən ibarət idi (bir 1 biti ikiqat söz əməliyyatını göstərərdi).

EDSAC-da arifmetika sabit nöqtəli iki tamamlayıcı ikili idi, lakin bu, müasir maşınlarda olduğu kimi sadəcə tam ədəd arifmetikası deyildi. EDSAC avadanlığı sol tərəfdəki bit ilə onun dərhal ardıcılı arasında bir ikili nöqtə olduğunu qəbul edirdi. Beləliklə, avadanlıq yalnız -1.0 ≤ x < 1.0 aralığında dəyərləri idarə edə bilirdi. Məsələn:

Gördüyünüz 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

(Bu, həmçinin EDSAC-da ardıcıl dəyərlər arasındakı artımdır).

Maraqlı bir təsadüf (və ya zərif bir dizayn qərarı) olaraq, əlavə əməliyyatının əmri (11100) "A" hərfi üçün teleprinter kodu ilə eyni idi. Çıxarma əmri üçün əmri "S" hərfi üçün teleprinter kodu ilə eyni idi (01100) və s. Bu, yığma proqramı üçün proqramlaşdırmanı sadələşdirdi (bu arada, cəmi 31 təlimatdan ibarət idi). EDSAC teleprinter əlifbası "PQWERTYUIOJ#SZK*?F@D!HNMLXGABCV" idi (burada "P"=00000, "Q"=00001, və s., "V"=11111 qədər).

Təəssüf ki, EDSAC yığma proqramında məlumat dəyərləri üçün xüsusi direktivlər yox idi. Digər tərəfdən, adi təlimatların bunun üçün istifadə olunmaması üçün heç bir səbəb yox idi, beləliklə, EDSAC proqramçısı 3/4 sabitini (təmsil olunan 01100000000000000) saxlamaq üçün "S O F" təlimatını və 1/3 üçün (təxminən 00101010101010101 ilə təmsil olunan) "T 682 D" təlimatını istifadə edərdi və s.

Sizin işiniz EDSAC təlimatlarını müvafiq onluq kəsrlərə çevirmək üçün bir proqram yazmaqdır.

Giriş

Girişin ilk sətri bir ədəd P (1 ≤ P ≤ 1000) ehtiva edir, bu da ardınca gələn məlumat dəstlərinin sayıdır. Hər bir məlumat dəsti bir sətirdən ibarətdir və N (məlumat dəsti nömrəsi), ardınca bir boşluq, ardınca isə c d s formasında bir EDSAC təlimatı ehtiva edir, burada c EDSAC əlifbasında bir simvoldur, d imzasız onluq ədəd (0 ≤ d < 2^11), və s ya 'D' ya da 'F'dir.

Çıxış

Hər bir məlumat dəsti üçün bir çıxış sətri var. O, məlumat dəsti nömrəsini (N) ardınca bir boşluq, ardınca isə EDSAC təlimatı ilə təmsil olunan dəqiq onluq kəsri, mənfi dəyərlər üçün mənfi işarə daxil olmaqla ehtiva edir. Onluq kəsr üçün format: sb.ddd..., burada s isteğe bağlı mənfi işarədir, b ya 1 ya da 0-dır, və d hər hansı bir onluq rəqəmdir (0-9). Onluq nöqtədən sonra ən az 1 və ən çox 16 rəqəm olmalıdır. Kəsrdəki son sıfırlar çıxarılmalıdır.

Nümunələr

Nümunə 1

Loading
Loading