Vektorių atimties programa (2) ============================== PROGRAMA ======== Parašykite Perl programą, kuri suskaičiuoja duotų vektorių skirtumą. Programos vardas: vsubfiles Programos iškvietimas: vsubfiles vektoriai1.dat [vektoriai2.dat] Programa turi apdoroti vieną arba du įvesties failus. Pirmasis įvesties failas vektoriai1.dat yra būtinas; jei pirmąjį failą norime skaityti iš standartinės įvesties, nurodome failo vardą "-" (vienas brūkšnelis; komandų eilutėje, be abejo, be kabučių). Failas vektoriai2.dat yra nebūtinas; jei jo nėra, programa turi skaityti iš savo standartinės įvesties. Vektorių atimties operacija turi būti vykdoma tarp vektorių, įrašytų atitinkamose dviejų skirtingų failų (ar standartinės įvesties) duomenų eilutėse -- t.y. pirmasis vektorius iš antrojo failo turi būti atimamas iš pirmojo vektoriaus iš pirmojo failo, antrasis vektorius iš antrojo failo atimamas iš antrojo vektoriaus iš pirmojo failo ir taip toliau. Įvesties failų duomenų eilutės formatas pateiktas skyrelyje "DUOMENŲ FORMATAI". == Pastaba == Kadangi atimties operacija yra antikomutatyvi, failų tvarka komandų eilutėje svarbi. Pirmajame faile užrašyti vektoriai atitinka kairiuosius atimties operandus (turinius), antrajame -- dešiniuosius (atėminius). 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 M slankaus kablelio arba sveikų skaičių, pvz.: # Pirma failo 'vect.dat' eilutė; duomenys: 0.25 0 0.3333 1.0 0 0 0 1 # Paskutinė failo 'vect.dat' eilutė. Kiekviena vektorių failo eilutė -- tai vektoriaus komponentės ortogonaliose koordinatėse. == 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: vsubfiles 1 2011-09-28 07:41:19Z author Toliau pateikiami duomenys. Kiekvienoje eilutėje turi būti spausdinamas vienas vektorius -- atitinkamose duomenų eilutėse esančių vektorių skirtumas. DIAGNOSTIKA =========== Programa turi pranešti apie šias klaidas: - nenurodytas bent vienas failo vardas; - sudauginami vektoriai turi skirtingą komponenčių skaičių; - 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ė.