# $Author: saulius $ # $Revision: 9750 $ # $Date: 2022-02-08 06:24:00 +0000 (Tue, 08 Feb 2022) $ Vektorių "suklijavimo" programa =============================== PROGRAMA ======== Parašykite Perl programą, kuri "suklijuoja" keliuose failuose esančius vektorius taip, kad visos atitinkamų vektorių komponentės būtų vienoje eilutėje. Ši programa turi paruošti tinkamus failus programoms 'vadd', 'vsub', 'vcross', 'vdot' ir pan. Suliedama vektorius, programa turi ignoruoti komentarus ir tuščias eilutes; t.y. pirmo failo pirmosios *duomenų eilutės* vektorius turi būti "suklijuojamas" su visų kitų failų *pirmų duomenų eilučių* komponentėmis, antrosios duomenų eilutės vektorius -- su antrosiomis duomenų eilutėmis ir t.t. Programos vardas: vpaste Programos iškvietimas: vpaste vektoriai1.dat [vektoriai2.dat ...] Įvesties failai vektoriaiN.dat yra nebūtini; jei jų nėra, programa turi skaityti iš savo standartinės įvesties. Jei nurodomas tik vienas failas, programa jo vektorius pateikia nepakeistus (bet prideda savo komentarus, žr. žemiau). 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: vpaste 1 2011-09-28 07:41:19Z author Toliau turi būti pateikiami duomenys. Kiekvienoje eilutėje turi būti pateikta n*M skaičių, kur M yra vektoriaus komponenčių skaičius, o n -- apdorojamų failų skaičius. Pradžioje pateikiamos pirmojo failo vektorių komponentės, po to -- antrojo ir t.t. DIAGNOSTIKA =========== Programa turi pranešti apie šias klaidas: - skiriasi sugretinamų vektorių komponenčių skaičius (perspėjimas); - kuriame nors faile trūksta komponenčių (perspėjimas; trūkstamos komponentės pakeičiamos simboliu "-" (vienas brūkšnelio simbolis, be kabuč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ė.