[QGHG-it-dev-list] Zadatak 42 - primena serializacije double u string i obrnuto

Marko Vojinovic vmarko at ipb.ac.rs
Sun May 10 21:27:47 CEST 2026


Popraviti implementaciju sledece cetiri funkcije, koje su vec definisane u fajlovima color.cpp i .hpp:

    string VolumeSquaredColor::get_color_value_as_str()

    void VolumeSquaredColor::set_color_value_from_str(const string& source)

    string DrawingCoordinatesColor::get_color_value_as_str()

    void DrawingCoordinatesColor::set_color_value_from_str(const string& source)

Ove funkcije su obelezene sa "TODO" komentarom i za sada samo stoje kao placeholder-i. Treba ih implementirati da zapravo rade svoj posao, koristeci se funkcijama za serializaciju iz zadatka 41. Svrha ovih funkcija je da relevantne informacije o bojama serializuju u string, koji ce se zatim snimiti u odgovarajuce polje u XML fajl, i obratno, da string (procitan iz XML fajla) dekodiraju i zabeleze sve informacije o bojama u odgovarajuce varijable date boje. Sve ovo sluzi za snimanje simplicijalnog kompleksa u fajl i rekonstrukciju simplicijalnog kompleksa iz fajla. Ove cetiri funkcije se automatski pozivaju kad je potrebno, u okviru funkcija save_complex_to_xml_file() i read_complex_from_xml_file(), koje su implementirane u fajlovima input_and_output.cpp i .hpp.

Prve dve funkcije su vezane za objekat/boju, instancu klase VolumeSquaredColor (koja je podklasa klase Color). Prva funkcija treba sve podatke o datoj boji da serializuje u string, koji ce se sastojati od nekoliko manjih stringova, od kojih ce svaki biti output funkcije serialize_double_to_string() iz zadatka 41. Boja tipa VolumeSquaredColor sadrzi tri podatka:

    double vsq;
    double vsqMin;
    double vsqMax;

i ta tri podatka treba formatirati u string tako sto se svaki od njih individualno prvo prevede u string pomocu serialize_double_to_string(), a zatim se ta tri stringa na zgodan nacin spoje u jedan veliki, sa markerima koji ce na jasan nacin da razdvoje tri stringa. Te markere ce druga funkcija iskoristiti za inverznu operaciju.

Rezultujuci string vratiti kao output. U string ne treba pamtiti tip boje (int type) koji je definisan u parent klasi Color. Tip boje se vec tretira zasebno u funkcijama za citanje i pisanje u fajl, i ne treba da se pamti u stringu, vec se pamte samo podaci (vsq, vsqMin, vsqMax).

Druga funkcija treba da radi inverznu operaciju od prve, na sledeci nacin. Zadati input string treba da podeli na tri manja stringa, koristeci markere koji se nalaze u stringu. Zatim, svaki od tri manja stringa treba da pretvori u double vrednost pozivanjem serialize_string_to_double() iz zadatka 41. Konacno, za datu instancu boje treba da setuje varijable this.vsq, this.vsqMin i this.vsqMax na dobijene double vrednosti. Drugim recima, podaci iz stringa treba da se zabeleze u instanciranu boju.

Treca i cetvrta funkcija treba da rade isto sto i prva i druga, ali sada za boju klase DrawingCoordinatesColor, koja pamti nekoliko vektora sa double brojevima, i jedan integer:

     vector<double> q;
     vector<double> qMin;
     vector<double> qMax;
     vector<double> x;
     int Damb;

Vektori mogu biti raznoraznih velicina, pa za konstrukciju stringa treba uvesti dva tipa markera --- jedan koji ce da odvaja elemente datog vektora, i drugi koji ce da odvaja jedan vektor od drugog. Svaki vektor treba procitati od pocetka do kraja, koliko god da ima elemenata, bez oslanjanja na bilo kakvu pretpostavku o broju elemenata. String treba da bude formatiran markerima tako da cetvrta funkcija moze da procita i podeli output trece funkcije na jednoznacan nacin, i rekonstruise sve vektore u datoj instanci boje.

Napomena: prva i treca funkcija,

    string VolumeSquaredColor::get_color_value_as_str()

    string DrawingCoordinatesColor::get_color_value_as_str()

vec imaju neku netrivijalnu implementaciju, za potrebe GUI-ja. Zakomentariti taj kod i sacuvati ga u funkcijama, da ga imamo za kasnije, trebace nam za GUI.

Unutar triangulator/test/ putanje dodati novi fajl color_read_write_test.cpp, koji ce da instancira neki mali kompleks (recimo 2-sferu), da ga oboji obema ovim bojama, zatim da pozove funkcije save_complex_to_xml_file() i read_complex_from_xml_file() koje ce da snime kompleks u fajl i zatim ucitaju podatke iz fajla u nov kompleks. Konacno, print_detailed() funkcijom ispisati na stdout sve podatke o pocetnom i o rezultujucem kompleksu, da bi mogli da uporedimo da li su sve boje konvertovane kako treba u stringove i natrag iz stringova.

Ukoliko imate bilo kakva pitanja ili sugestije vezane za ovaj zadatak, slobodno se javite.

:-)
Marko

P.S. Ukoliko vam ovaj zadatak izgleda preveliko (cetiri funkcije), mozete da ga podelite medju sobom, pa da svako uradi po jednu funkciju ili slicno. Vazno je samo da se treca funkcija uradi po ugledu na prvu, a cetvrta po ugledu na drugu, pa ce vam biti zgodnije da ih radite redom jednu po jednu, a ne sve cetiri istovremeno. :-)


Dr. Marko Vojinovic
Group for Gravitation, Particles and Fields
Institute of Physics
University of Belgrade
======================
home page: www.markovojinovic.com
e-mail:    vmarko at ipb.ac.rs




More information about the QGHG-it-dev-list mailing list