# $Author: saulius $ # $Revision: 9750 $ # $Date: 2022-02-08 06:24:00 +0000 (Tue, 08 Feb 2022) $ Matricų sandaugos programa ========================== PROGRAMA ======== Parašykite Perl programą, kuri padaugina duotus vektorius iš matricos. Programos vardas: mvmultiply Programos iškvietimas: mvmultiply matrica.dat vektoriai1.dat [vektoriai2.dat ...] Failas 'matrica.dat' yra būtinas. Failai vektoriai1.dat yra nebūtini; jei jų nėra, programa turi skaityti iš savo standartinės įvesties. DUOMENŲ FORMATAI ================ == Įvesties formatas == Visuose įvesties failuose: -- eilutė, kurios *pirmas simbolis* yra '#' (numerio simbolis, arba "grotelės") reiškia 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; -- visos kitos eilutės yra duomenų eilutės; jų formatas nurodomas žemiau. Duomenys pateikiami tokiu formatu: - failas 'matrica.dat': kiekvienoje duomenų eilutėje yra po N slankaus kablelio arba sveikų skaičių, atskirtų bet kokio ilgio tarpo simbolio sekomis; faile yra M tokių eilučių su tokiais skaičiais. Pvz: # Pirmoji failo 'matrica.dat' eilutė; matrica: 0 -1 0 0 -1 0 0 0 0 0 1 0.5 0 0 0 1 # Paskutinė failo 'matrica.dat' eilutė. - failai vektoriaiN.dat arba standartinė įvestis: kiekvienoje duomenų eilutėje yra po M slankaus kablelio arba sveikų skaičių, atskirtų bet kokio ilgio tarpo simbolio sekomis. Pvz.: # Pirma failo 'vektoriai1.dat' eilutė; duomenys: 1 2 3 1 0.25 0 0.3333 1.0 # Paskutinė failo 'vektoriai1.dat' eilutė. Kiekviena vektorių failo eilutė -- tai vektoriaus koordinatės toje pat bazėje, kaip ir matrica M. == Išvesties formatas == Duomenys turi būti išvedami į standartinę išvestį. Komentarai žymimi taip pat, kaip ir įvesties failuose. Pirmoji išvesties eilutė turi būti komentaras, kuriame užrašytas naudojamos versijų kontrolės sistemos (SVN ar kitos) programai suteiktas Id: # Id: mvmultiply 1 2011-09-28 07:41:19Z author Toliau pateikiami duomenys. Duomenys išvedami tokiu pat formatu, koks buvo naudotas įvesties vektorių failuose. Papildomi komentarai leistini, bet neprivalomi. ĮVESTIES IR IŠVESTIES PAVYZDYS ============================== == Pavyzdinis programos iškvietimas == mvmultiply matrica.dat vektoriai1.dat vektoriai2.dat == Failas 'matrica.dat' == # Pirmoji failo 'matrica.dat' eilutė; matrica: 0 7 0 -3 2 0 0 0 # Komentarai ir tuščios eilutės turėtų būti # ignoruojami 0 0 2 0.5 0 0 0 8.5 # Paskutinė failo 'matrica.dat' eilutė. == Failas 'vektoriai1.dat' == # Pirma failo 'vektoriai1.dat' eilutė; duomenys: 4 3 2 1 # Komentarai ir tuščios eilutės turėtų būti # ignoruojami -0.5 0.5 -1.5 1.5 # Paskutinė failo 'vektoriai1.dat' eilutė. == Failas 'vektoriai2.dat' == # Pirma failo 'vektoriai2.dat' eilutė; duomenys: -1 -1 -1 -1 # Paskutinė failo 'vektoriai2.dat' eilutė == Išvestis == # Id: mvmultiply 1 2011-09-28 07:41:19Z author 6 28 4 -2.5 1 -3 -3 13.5 -2 -7 -2 -6 # 3 vectors were multiplied in total DIAGNOSTIKA =========== Programa turi pranešti apie šias klaidas: - matrica pirmajame faile nėra stačiakampė (t.y. ne visos matricos eilutės turi vienodą ilgį); - vektorių failo eilutėje nurodytas vektoriaus komponenčių skaičius nesuderinamas su pateikta matrica; - 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). 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ė.