# $Author: saulius $ # $Revision: 9750 $ # $Date: 2022-02-08 06:24:00 +0000 (Tue, 08 Feb 2022) $ Oktonionų unarinės operacijos (1,-,*,/) ======================================= PROGRAMA ======== Parašykite Perl programą, kuri suskaičiuoja vieno oktoniono aritmetines operacijas. Programos vardas: ounary Programos iškvietimas: ounary '1' oktonionai1.dat [oktonionai2.dat...] ounary '-' oktonionai1.dat [oktonionai2.dat...] ounary '*' oktonionai1.dat [oktonionai2.dat...] ounary '/' oktonionai1.dat [oktonionai2.dat...] Pirmas parametras yra būtinas – tai yra programos atliekamos operacijos simbolis. Toliau gali būti nurodomi įvesties failai, kurių kiekvienoje duomenų eilutėje yra po vieną oktonioną. Įvesties failai yra nebūtini; jei jų nėra, programa turi skaityti duomenis iš savo standartinės įvesties. Su įvesties oktonionu atliekamos tokios operacijos: -- jei pirmasis programos parametras yra '1', oktonionas perduodamas į išvestį normuotas; -- jei pirmasis programos parametras yra '-', į išvestį užrašomas priešingas oktonionas (daugyba iš -1); -- jei pirmasis programos parametras yra '*', į išvestį užrašomas jungtinis oktonionas (oktonionų involiucija); -- jei pirmasis programos parametras yra '/', į išvestį užrašomas atvirkštinis oktonionas. OKTONIONŲ ALGEBRA ================= Oktonionų algebra ir jų savybės aprašytos Vikipedijoje [1] ir daugumoje algebros vadovėlių (pvz. [2]). Dėl to, kad oktonionų algebra neasociatyvi, galimi keli daugybos lentelės variantai [1]; programos realizacijai pasirinkite daugybos lentelę, pateiktą šaltinyje [2] (ji turėtų sutapti su lentele, pateikta [1]). DUOMENŲ FORMATAI ================ Įvesties formatas ----------------- Įvesties formatas yra vektorinis oktonionų komponenčių formatas, aprašytas bendru pavidalu faile „formatai/oktonionų-vektorinis-formatas.txt“. Konkrečiai šiam uždaviniui, įvesties formatas yra toks: - visuose įvesties failuose: -- eilutės, kurių *pirmas simbolis* yra '#' (numerio simbolis, arba "grotelės") talpina komentarus; tokios eilutės turi būti ignoruojamos; -- tuščios eilutės, t.y. eilutės neturinčios nei vieno simbolio, arba tik "tuščius" simbolius (angl. "whitespace", t.y. tarpo, tabuliacijos arba "\r" simbolius) turi būti tyliai ignoruojamos; -- Prieš pirmąją duomenų eilutę įvestyje GALI būti nurodyta stulpelių pavadinimų eilutė, prasidedanti simboliais '#@', o toliau išvardinami oktonionų vienetai, pvz.: #@ 1 i j k l il jl kl -- visos kitos eilutės yra duomenų eilutės; kiekvienoje duomenų eilutėje yra šešiolika realių skaičių – pradžioje pirmojo oktoniono koeficientai (komponentės), o po to – antrojo. Skaičiai atskiriame bet kokiu kiekiu tarpų arba tabuliacijos simbolių. Įvesties srauto pavyzdys: # Pirma failo 'oktonionai.dat' eilutė; duomenys: #@ 1 i j k l il jl kl 1 2 3 4 5 6 7 8 # Paskutinė failo 'oktonionai.dat' eilutė. Kiekviena oktonionų failo eilutė -- tai dviejų oktonionų komponentės koordinatės, surašytos viena paskui kitą. Išvesties formatas: duomenys turi būti išvedami į standartinę išvestį tokiu pat formatu, kaip ir duomenys įvesties failuose. Pirmoji eilutė TURI būti komentaras, kuriame užrašytas panaudotos programos SVN (ar kitos versijų kontrolės sistemos) Id: # Id: ounary 1 2011-09-28 07:41:19Z author Antroje eilutėje programa TURI išvesti stulpelių pavadinimų eilutę: #@ 1 i j k l il jl kl Toliau turi būti pateikiami duomenys. Kiekvienoje eilutėje turi būti vienas oktonionas -- atitinkamoje duomenų eilutėje esančio oktoniono operacijos rezultatas. DIAGNOSTIKA =========== Programa turi pranešti apie šias klaidas: - oktonionų failo duomenų eilutėje eilutėje nurodytas netinkamas komponenčių skaičius; - kuriame nors faile pateiktas skaičius neatitinka Perl skaičiaus sintaksės; - nurodyti failai neegzistuoja, negali būti atidaryti, įvyko skaitymo klaida (čia galima pasikliauti Perl 'while(<>) {...' operatoriaus diagnostika). Jei įvesties sraute sutinkama komentaro eilutė su stulpelių pavadinimais, programa turi patikrinti, ar stulpelių pavadinimai jai žinomi. Jei sutinkamas nežinomas stulpelio pavadinimas, programa turi išvesti tinkamą perspėjimą (warning) į STDERR kanalą, bet tęsti darbą toliau. Klaidos pranešimo formatas -- toks, kokį išveda Perl'as savo funkcijomis die() ir warn(). Pranešimuose turi būti nurodytas apdorojamo failo, kuriame rasta klaida, vardas ir klaidinga eilutė. ŠALTINIŲ NUORODOS ================= 1. Wikipedia (2020) Octonion. https://en.wikipedia.org/wiki/Octonion [žiūrėta: 2020-02-15 19:33:49 EET] 2. H.-B. Ebbinghaus et al. (1995) Numbers. Springer, ISBN 3-540-97497-0