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:
-
Stack (zásobník)
-
List (zoznam)
-
Queue (zásobník)
-
Double Queue (dvojitý zásobník)
-
Container (cyklický dvojitý zoznam)
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:
-
Niklaus Wirth: Algoritmy a štruktúry údajov, Alfa 1987
-
Robert Sedgewick: Algorithms, Addison-Wesley 1991
-
Alfred V. Aho: The Design and Analysis of Computer Algorithms, Addison-Wesley,
1976
-
Jean-Paul Tremblay: Introduction to Computer Science, McGraw-Hill Book
Company, 1989
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:
-
Niklaus Wirth: Algoritmy a štruktúry údajov, Alfa 1987
-
Robert Sedgewick: Algorithms, Addison-Wesley 1991
-
Alfred V. Aho: The Design and Analysis of Computer Algorithms, Addison-Wesley,
1976
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
-
vytvorte vhodnú množinu úpravou niektorého z typov lineárnych zoznamov
-
naplnte množinu objektami atómov, ktoré umiestnite podľa možnosti do vypočítaných
polôh
-
spustite simuláciu a nejaký čas počkajte na ustálenie mriežky. Vaša mriežka
je konečná a atómy sa budú snažiť opraviť Vaše chyby výpočtu a nájsť si
novú polohu
-
skokom posunte vybraný atóm o polovicu medziatómovej vzdialenosti a sledujte
šírenie sa vlny v kryštáli
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:
-
Charless Kittel: Úvod do fyziky pevných látek,Academia, 1985, Kapitola
3 a 4, str. 90...135