# $Author: saulius $ # $Revision: 9750 $ # $Date: 2022-02-08 06:24:00 +0000 (Tue, 08 Feb 2022) $ Kvaternionų unarinės operacijos (1,-,*,/) ========================================= PROGRAMA ======== Parašykite Perl programą, kuri suskaičiuoja vieno kvaterniono aritmetines operacijas. Programos vardas: qunary Programos iškvietimas: qunary '1' kvaternionai1.dat [kvaternionai2.dat...] qunary '-' kvaternionai1.dat [kvaternionai2.dat...] qunary '*' kvaternionai1.dat [kvaternionai2.dat...] qunary '/' kvaternionai1.dat [kvaternionai2.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ą kvaternioną. Įvesties failai yra nebūtini; jei jų nėra, programa turi skaityti duomenis iš savo standartinės įvesties. Su įvesties kvaternionu atliekamos tokios operacijos: -- jei pirmasis programos parametras yra '1', kvaternionas perduodamas į išvestį normuotas; -- jei pirmasis programos parametras yra '-', į išvestį užrašomas priešingas kvaternionas (daugyba iš -1); -- jei pirmasis programos parametras yra '*', į išvestį užrašomas jungtinis kvaternionas (kvaternionų involiucija); -- jei pirmasis programos parametras yra '/', į išvestį užrašomas atvirkštinis kvaternionas. KVATERNIONŲ ALGEBRA ================= Kvaternionų algebra ir jų savybės aprašytos Vikipedijoje [1] ir daugumoje algebros vadovėlių (pvz. [2]). DUOMENŲ FORMATAI ================ Įvesties formatas ----------------- Įvesties formatas yra vektorinis kvaternionų komponenčių formatas, aprašytas bendru pavidalu faile [3]. - 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 kvaternionų vienetai, pvz.: #@ 1 i j k -- visos kitos eilutės yra duomenų eilutės; kiekvienoje duomenų eilutėje yra šešiolika realių skaičių – pradžioje pirmojo kvaterniono koeficientai (komponentės), o po to – antrojo. Skaičiai atskiriame bet kokiu kiekiu tarpų arba tabuliacijos simbolių. Įvesties srauto pavyzdys: # Pirma failo 'kvaternionai.dat' eilutė; duomenys: #@ 1 i j k 1 2 3 4 # Paskutinė failo 'kvaternionai.dat' eilutė. Kiekviena kvaternionų failo eilutė -- tai dviejų kvaternionų 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: qunary 1 2011-09-28 07:41:19Z author Antroje eilutėje programa TURI išvesti stulpelių pavadinimų eilutę: #@ 1 i j k Toliau turi būti pateikiami duomenys. Kiekvienoje eilutėje turi būti vienas kvaternionas -- atitinkamoje duomenų eilutėje esančio kvaterniono operacijos rezultatas. DIAGNOSTIKA =========== Programa turi pranešti apie šias klaidas: - kvaternionų 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) Quaternion. https://en.wikipedia.org/wiki/Quaternion [žiūrėta: 2020-02-15 19:33:49 EET] 2. H.-B. Ebbinghaus et al. (1995) Numbers. Springer, ISBN 3-540-97497-0 3. Saulius Gražulis (2020) Hiperkompleksinių skaičių vektorinis formatas. https://saulius.grazulis.lt/~saulius/paskaitos/VU/bioinformatika-III/užduotys-praktikai/1-užduotis/formatai/hiperkompleksinių-skaičių-vektorinis-formatas.txt [žiūrėta: 2020-02-16 12:37:46 EET]