# $Author: saulius $ # $Revision: 9750 $ # $Date: 2022-02-08 06:24:00 +0000 (Tue, 08 Feb 2022) $ Kvaternionų binarinės aritmetinės operacijos (+,-,*,/) ====================================================== PROGRAMA ======== Parašykite Perl programą, kuri suskaičiuoja dviejų kvaternionų aritmetines operacijas. Programos vardas: qarithm Programos iškvietimas: qarithm '+' kvaternionai1.dat [kvaternionai2.dat...] qarithm '-' kvaternionai1.dat [kvaternionai2.dat...] qarithm '*' kvaternionai1.dat [kvaternionai2.dat...] qarithm '/' kvaternionai1.dat [kvaternionai2.dat...] Pirmas parametras yra būtinas – tai yra programos atliekamos operacijos simbolis: '+', '-', '*' arba '/'. Toliau gali būti nurodomi įvesties failai, kurių kiekvienoje duomenų eilutėje yra po du kvaternionus. Įvesties failai yra nebūtini; jei jų nėra, programa turi skaityti duomenis iš savo standartinės įvesties. Su įvesties kvaternionais atliekamos tokios operacijos: -- jei pirmasis programos parametras yra '+', atliekama kvaternionų sudėtis; -- jei pirmasis programos parametras yra '-', atliekama kvaternionų atimtis; -- jei pirmasis programos parametras yra '*', atliekama kvaternionų daugyba; -- jei pirmasis programos parametras yra '/', atliekama kvaternionų dalyba. 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 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 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: qarithm 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čių kvaternionų atliktos aritmetinės 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, klaidingos eilutės numeris ir tyri būti pacituota klaidinga eilutė ar jos klaidinga dalis (bet bendras klaidos pranešimo ilgis, pageidautina, neturi viršyti 80 simbolių). Š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]