Difference between revisions of "LU-LSP-b11:MD2"

From DiLab
Jump to: navigation, search
(New page: {{TocRight}} =MD2= ===Mērķi=== * Darbs ar komandu rindas argumentiem * Sistēmas programmatūras izstrāde, kas atbild uz standarta un specifiskiem parametriem. * Darbs ar failu ievadu ...)
 
(No difference)

Revision as of 11:23, 27 September 2011

MD2

Mērķi

  • Darbs ar komandu rindas argumentiem
  • Sistēmas programmatūras izstrāde, kas atbild uz standarta un specifiskiem parametriem.
  • Darbs ar failu ievadu un izvadu.
  • Vienkāršas datu bāzes izveide


Uzdevums

Uzdevumu var izstrādāt uz MD1 bāzes.

Izstrādāt sistēmas lietojumprogrammu md2, kas darbināma no komandu rindas ar sekojošiem parametriem un funkcionalitāti:

  • Izdrukā versijas numuru programmatūrai, iekļaujot kompilācijas datumu:
md2 -v
  • Izdrukā lietošanas instrukciju (uz abiem pieprasījumiem):
md2 -h
md2 --help
  • Pievieno datus ģimenes koka datubāzei. Dati nāk no faila, ja tas norādīts, vai no stdin, ja tāds nav norādīts. Ievaddatu formāts ir tāds pats, kā MD1, vienīgi vārds var būt viena līdz triju vārdu garumā: "vārds", vai "vārds uzvārds", vai "vārds otrais vārds uzvārds".
md2 -i
md2 -i filename

Ja ievaddati ir kļūdaini (piemēram, persona ar vienu vārdu atkārtojas vairākas reizes, kādai personai ir vairāki tēvi vai mātes, kāda persona ir gan tēva, gan mātes lomā), tad jāizdrukā kļūdas paziņojums un programmai jābeidz darbs ar kodu -1. Visos citos gadījumos, kas nav īpaši atrunāti, programmai jābeidz darbs ar kodu 0.

  • Izdrukā datu bāzes saturu alfabētiskā secība pēc vārda:
md2 -n
  • Izdrukā datu bāzes saturu pēc vecuma:
md2 -y

Šoreiz nav obligāta prasība, ka vecāki būtu jādrukā vispirms! Ja personu vecumi sakrīt, vai arī, ja tie nav zināmi, tad arī šajā gadījumā personas jāsakārto alfabētiski.

  • Ja norādīti kādi citi, neatpazīti parametri, tad jāizdrukā lietošanas instrukcija un programmai jābeidz darbs ar kodu -1.


Datu bāzes formāts

Izveidotas datu bāzes (DB) saturs ir teksta fails, kur pirmā rindiņa (galvene) var saturēt jūsu specifisko informāciju vai arī ir tukša ja jums nav nepieciešama, bet visas pārejās rindiņas ir datu bāzes raksti.

DB Raksts sastāv no laukiem, kas atdalīti ar DB_FIELD_DELIMITER simbolu. Raksti atdalīti ar DB_REC_DELIMITER simbolu. Ieteicams tos definēt programmas sākumā un lietot kā konstantes:

#define DB_FIELD_DELIMITER  '\t'
#define DB_REC_DELIMITER  '\n'

DB raksta formāts ir sekojošs:

  • Indekss - 5 simboli kā "int" vērtība. Katram rakstam unikāls. Izmantots tēva un mātes laukos.
  • Vārds - simbolu virkne, mainīgs garums
  • Gads - 4 simboli
  • Tēvs - 5 simboli, kas satur indeksu uz tēva rakstu.
  • Māte - 5 simboli, kas satur indeksu uz mātes rakstu.
  • Raksta beigu simbols - DB_REC_DELIMITER

Indeksu un skaitļu vērtībām var būt nedefinētā vērtība, kas nozīmē ka šī vērtība nav zināma. To indicē ar DB_VAL_UNDEF kā pirmo simbolu un parējos kā tukšumus. Tas definēts šādi:

#define DB_VAL_UNDEF '@'


Piezīmes

Nav jārealizē datu bāzes raksta izmešana.

Datu bāzes rakstu vērtības var nākties mainīt, izņemot tos kas ir kā ieraksta indekss un personas vārds. Piemērs ir gadījums, kad vispirms definēts bērns, kam norādīti vecāki, kas nav datu bāzē, un vēlāk vecāki. Vispirms vecākiem tiek radīti raksti ar nedefinētam vērtībām, izņemot indeksu un vārdus. Pēc tam arī pārējie lauki tiek aizpildīti.


Jāiesniedz

  • Jāiesniedz C programmas pirmkods.
  • Iesniedzamais fails jānosauc šādi: LSP_MD2_vards_uzvards.c
  • Fails sūtāms pa epastu piekabē, ar sekojošu "Subject:" LKP MD2 vards uzvards


Vērtējums

Uzdevums tiks vērtēts sekojoši:

  1. 10% - Komandrindas parametru apstrāde, -h un -v parametri.
  2. 30% - Algoritms datu ielasei datubāzē - vai nesatur kļūdas, vai apstrādā visus gadījumus, realizācijas efektivitāte (subjektīvs koda novērtējums!)
  3. 20% - Datu izvads alfabētiskā secībā
  4. 20% - Datu izvads vecuma secībā
  5. 20% - Nekorektu ievaddatu atpazīšana, un kļūdas paziņojuma izdruka.

Par pietiekoši efektīvu tiek uzskatīts jebkurš risinājums, kuram N personu ielasei datubāzē ir nepieciešams mazāk par O(N2) laika.

Piemēri

Derīga informācija

  • Ieteikums: izstrādājiet programmatūru pakāpeniski. Piemēram, vispirms ielasiet un izdrukājiet datus. Tad pievienojiet datu analīzi un reģistrēšanu savās datu struktūrās. Tad pievienojiet datu analīzi lai tos sakārtotu izdrukai. Testējiet vispirms uz pareiziem datiem. tad uz kļūdainiem datiem.

J&A (jautājumi un atbildes)

J: Uzdevums pārāk grūts, vai var pagarināt termiņu?

A: Noteiktais termiņš paliek spēkā. Iesaku risināt savlaicīgi, lai pietiek laika neparedzētu problēmu risināšanai.


Uz LSP kursa sākuma lapu.