# $Author: saulius $ # $Revision: 9750 $ # $Date: 2022-02-08 06:24:00 +0000 (Tue, 08 Feb 2022) $ Vektorių skaliarinės sandaugos programa ======================================= PROGRAMA ======== Parašykite Perl programą, kuri suskaičiuoja duotų vektorių skaliarinę sandaugą ortogonaliose koordinatėse (angl. "dot product"). Programos vardas: vdot Programos iškvietimas: vdot vektoriai1.dat [vektoriai2.dat ...] Įvesties failai vektoriaiN.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: - failai vektoriaiN.dat arba standartinė įvestis: kiekvienoje duomenų eilutėje yra po 2*M slankaus kablelio arba sveikų skaičių, pvz.: # Pirma failo 'vektoriai.dat' eilutė; duomenys: 1 2 3 1 0.25 0 0.3333 1.0 1 0 0 0 0 0 0 1 # Paskutinė failo 'vektoriai.dat' eilutė. Kiekviena vektorių failo eilutė -- tai dviejų vektorių koordinatės, surašytos viena paskui kitą. == 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: vdot 1 2011-09-28 07:41:19Z author Toliau pateikiami duomenys. Kiekvienoje eilutėje turi būti spausdinamas vienas skaičius -- atitinkamoje duomenų eilutėje esančių vektorių skaliarinė sandauga. Papildomi komentarai leistini, bet neprivalomi. == Pastaba == Jei vektoriai užrašyti skirtinguose failuose, juos galima pateikti komandai 'vdot' *x komandos 'paste' pagalba: paste v1.dat v2.dat | vdot Ši komanda veiks su sąlyga, jei v1.dat ir v2.dat failuose vektoriai, skirti daugybai, turės vienodai išdėstytas duomenų, komentarų ir tuščias eilutes. Jei ne, galima sugalvoti komandą 'vpaste': vpaste v1.dat v2.dat | vdot Šios komandos realizuoti nebūtina, tačiau rekomenduojama pasvarstyti, koks turėtų būti šios komandos elgesys. ĮVESTIES IR IŠVESTIES PAVYZDYS ============================== == Pavyzdinis programos iškvietimas == vdot matrica.dat vektoriai1.dat vektoriai2.dat == Failas 'vektoriai1.dat' == # Pirma failo 'vektoriai1.dat' eilutė; duomenys: 4 3 2 1 1 9 8 4 # Komentarai ir tuščios eilutės turėtų būti # ignoruojami -0.5 0.5 -1.5 1.5 2 8 9 7 # Paskutinė failo 'vektoriai1.dat' eilutė. == Failas 'vektoriai2.dat' == # Pirma failo 'vektoriai2.dat' eilutė; duomenys: -1 -1 -1 -1 2 3.5 8.9 9.8 # Paskutinė failo 'vektoriai2.dat' eilutė == Išvestis == # Id: mvmultiply 1 2011-09-28 07:41:19Z author 51 0.0 -24.2 # 3 vectors pairs were multiplied in total DIAGNOSTIKA =========== Programa turi pranešti apie šias klaidas: - vektorių failo eilutėje nurodytas nelyginis 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). 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ė.