# $Author: saulius $ # $Revision: 9750 $ # $Date: 2022-02-08 06:24:00 +0000 (Tue, 08 Feb 2022) $ Dviejų kvaternionų sandauga =========================== PROGRAMA ======== Parašykite Perl programą, kuri suskaičiuoja dviejų kvaternionų sandaugą. Programos vardas: qmult Programos iškvietimas: qmult kvaternionai1.dat [kvaternionai2.dat...] Nurodomi įvesties failai, kiekvienoje jų duomenų eilutėje yra nurodoma po du kvaternionus. Įvesties failai yra nebūtini; jei jų nėra, programa turi skaityti duomenis iš savo standartinės įvesties. 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]. 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 kvaternionų vienetai, pvz.: #@ 1 i j k l 1 i j k l -- 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 i j k 1 2 3 4 11 12 13 14 # 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: qmult 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 skaičius -- atitinkamoje duomenų eilutėje esančių kvaternionų sandaugos 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]