# $Author: saulius $ # $Revision: 9750 $ # $Date: 2022-02-08 06:24:00 +0000 (Tue, 08 Feb 2022) $ Vektorių failų tikrinimo programa ================================= PROGRAMA ======== Parašykite Perl programą, kuri patikrina, ar visi failuose nurodyti vektoriai turi tą patį komponenčių skaičių. Programos vardas: vcheckdim Programos iškvietimas: vcheckdim vektoriai1.dat [vektoriai2.dat ...] vcheckdim 3 vektoriai1.dat [vektoriai2.dat ...] Jei pirmas programos parametras yra skaičius, jis nurodo, kokį komponenčių skaičių privalo turėti visi pateikti vektoriai. Priešingu atveju pirmas argumentas laikomas failo vardu, o reikalingas komponenčių skaičius randamas iš pirmos sutikto vektoriaus. Pastaba: jei norima pateikti tikrinimui pirmą failą, kurio vardas yra tiesiog vienas skaičius (ne itin gera praktika...), tą galima padaryti, nurodant jo reliatyvų kelią: pvz. 'vcheck ./3' komanda apdoros failą vardu "3" darbinėje direktorijoje. Į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 M slankaus kablelio arba sveikų skaičių, pvz.: # Pirma failo 'vect.dat' eilutė; duomenys: 1 2 3 1 1 0 0 0 # Paskutinė failo 'vect.dat' eilutė. Kiekviena vektorių failo eilutė -- tai vieno vektoriaus koordinatės. 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, pvz: # Id: vcheckdim 1 2011-09-28 07:41:19Z author Toliau turi būti pateikiami duomenys. Kiekvienoje eilutėje turi būti pateikiamas vektorius, kuris atitiko patikrinimus. Jei vektorius neatitinka patikrinimo, ta eilutė pateikiama taip, kaip buvo parašyta pradiniame faile, prieš tai pridėjus komentaro ženklą "#". DIAGNOSTIKA =========== Programa turi pranešti apie šias klaidas: - kuris nors vektorius turi kitokį komponenčių skaičių, negu reikalaujama; - 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ė.