# $Author: saulius $ # $Revision: 9750 $ # $Date: 2022-02-08 06:24:00 +0000 (Tue, 08 Feb 2022) $ Vektorių atimties programa ========================== PROGRAMA ======== Parašykite Perl programą, kuri suskaičiuoja duotų vektorių skirtumą. Programos vardas: vsub Programos iškvietimas: vsub 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 'vect.dat' eilutė; duomenys: 1 2 3 1 0.25 0 0.3333 1.0 1 0 0 0 0 0 0 1 # Paskutinė failo 'vect.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į tokiu pat formatu, kaip ir duomenys įvesties vektorių failuose. Pirmoji eilutė turi būti komentaras, kuriame užrašytas panaudotos programos SVN (ar kitos versijų kontrolės sistemos) Id: # Id: vsub 1 2011-09-28 07:41:19Z author Toliau turi būti pateikiami duomenys. Kiekvienoje eilutėje turi būti vienas vektorius -- atitinkamoje duomenų eilutėje esančių vektorių skirtumas. Pastaba: ======== Jei vektoriai užrašyti skirtinguose failuose, juos galima pateikti komandai 'vsub' *x komandos 'paste' pagalba: paste v1.dat v2.dat | vsub Ši komanda veiks su sąlyga, jei v1.dat ir v2.dat failuose vektoriai, skirti apdorojimui, turės vienodai išdėstytas duomenų, komentarų ir tuščias eilutes. Jei ne, galima sugalvoti komandą 'vpaste': vpaste v1.dat v2.dat | vsub (koks turi būti šios komandos elgesys?). 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ė.