Programovanie v jazyku C++


Témy zápočtových programov

V prípade nejasnosti zadania témy kontaktujte prednášajúceho. V témach uvedené príklady použitia sú informačné a nie sú pre Vás záväzné.


1. Matice

Predmetom témy je vytvorenie dátového typu Matrix, od objektov ktorého požadujeme chovanie podľa zákonov lineárnej algebry. Prvkami matice môžu byť racionálne čísla - objekty typu Ratio a komplexné čísla - objekty typu Complex. Dátový typ Matrix bude mať implementované nasledujúce operácie:

Matrix v1(3);                      // vytvorenie vektora 3x1, vsetky prvky nulove
Matrix v2(1,3,Complex(1,2));       // vytvorenie vektora 1x3, vsetky prvky (1+2*i)
Matrix m1("I",3);                  // vytvorenie jednotkovej matice 3x3
Matrix m2=m1;                      // copy konstruktor

m2(1,1)=Ratio(1,2);                // cislovanie maticovych prvkov je v poradi od 1...
m2(1,2)=85.3;
m1(1,3)=m2(1,3)=Complex(2.1,3.3);

Matrix m3=m2*m1;
cout<<m3.determinant()<<endl;

Počet prvkov matice je obmedzený len technickými možnosťami počítača.


2. Lineárne zoznamy

Predmetom témy je tvorba množiny lineárnych zoznamov: Prvkami ľubovolného zoznamu môžu byť objekty tried String, Ratio, Complex, ale aj iný zoznam. Počet prvkov ľubovolného zoznamu je obmedzený len technickými možnosťami počítača.

List list;
list.add(3);
list.add(Ratio(1,2));

cout<<list<<endl;

Stack stack;
stack.push(String("Hello");
stack.push(list));

cout<<stack.popAll()<<endl;

Popis lineárnych zoznamov nájdete v literatúre:


3. Objektová databáza

Predmetom témy je tvorba prototypu objektovej databázy. Základom databázy je záznam, ktorý môže pozostávať z ľubovolného množstva ľubovolných položiek, v našom prípade objektov tried Ratio, String a iný záznam. Záznamy sú usporiadané v lineárnom zozname. Pre databázu implementujte jednoduché vyhľadávanie. Položky záznamov sú identifikovateľné menom položky a jej hodnotou.

ObjectDatabase ob;

RecordHeader h1;
h1.addItemName(1,String("Meno"));  h1.addItemName(2,String("Priezvisko"));
h1.addItemName(3,String("Vek"));   h1.addItemName(4,String("Adresa"));

RecordHeader h2;
h2.addItemName(1,String("Ulica")); h2.addItemName(2,String("Cislo"));
h2.addItemName(3,String("Mesto"));

Record r(&h1);
r.addItem(1,String("Janko"));      r.addItem(1,String("Hrasko"));
r.addItem(1,Ratio(23));

Record q(&h2);
q.addItem(1,String("Dolna"));      q.addItem(2,Ratio(18));
q.addItem(3,String("Horna Dolna"));

r.addItem(4,q);

ob.addRecord(r);
...
cout<<ob.search(String("Dolna"))<<endl;
...
--------
Vysledok hladania "Dolna"
Najdene v zazname cislo 1
            polozka/zaznam 4 "Adresa" 
                   polozka 1 "Ulica"

Počet prvkov databazy je obmedzený technickými prostriedkami počítača. Nie je potrebné obsah databázy ukladať na disk. Pri implementácii využite jednoduchý lineárny zoznam typu List. Poradie záznamov databázy je dané poradím pri jej vytváraní a nie je potrebné implementovať metódy na zmenu tohoto poradia a ani metódy na triedenie záznamov databázy.

Popis lineárnych zoznamov a vyhľadávacích algoritmov nájdete v literatúre:


4. Kmity atómovej mriežky

Predmetom témy je simulácia dvojrozmerného kryštálu zloženého z rovnakých atómov. Atómy sú popísané ich hmotnosťou, polohou a rýchlosťou, spolu tvoria množinu. Atómy sú vzájomne previazané van der Waalsovou interakciou, z dôvodu jednoduchosti každý atóm interaguje s každým. Veľkosť mriežky je obmedzená technickými prostriedkami počítača, z praktických dôvodov neprekračujte veľkosť mriežky 100 atómov.  Implementujte vhodný mechanizmus tlmenia pohybu atómov.

Postup simulácie

Výsledok simulácie zaznamenávajte do súboru a zobrazte nejakým programom pre spracovanie dát

Výber vhodných konštánt, popis kovalentnej väzby a kmitov mrižok nájdete v literatúre: