[QGHG-it-dev-list] Zadatak 2 - bojenje kompleksa
Marko Vojinovic
vmarko at ipb.ac.rs
Tue Feb 22 01:26:15 CET 2022
Pozdrav Dusane,
Potpuno si u pravu da f-je za bojenje ne mogu (i ne treba) da se pozivaju za pojedinacnu boju. Dakle svakako, stavi ih kao static za klasu. Ja sam to zaboravio da naglasim u definiciji zadatka, ali iz smisla tih f-ja je relativno ocigledno. :-)
A taman posla da isti pointer dodeljujes celom kompleksu, to uopste nije bila ideja... ;-)
Sto se tice rekurzivnog ukljucivanja fajlova generalno, slazem se da to moze bolje da se uradi, i to cu da reorganizujem uskoro (veceras ili sutra, poslacu zaseban mail o tome). Reorganizacija ce da pomogne i za Visual Studio --- da se include-uju samo .hpp fajlovi a ne i .cpp fajlovi, da mozete da napravite projekat, mozda cak da koristite i njegov kompajler, itdisl.
A sto se tice rekurzivnog ukljucivanja fajlova u kontekstu zadatka 2, nemoj da se sekiras za to, nego treba samo da uradis sledece --- da deklaracije f-ja stavis u color.hpp fajl (gde im je mesto u njihovoj klasi), a da implementacije tih f-ja stavis u color.cpp, gde se nalaze implementacije i za sve ostale f-je koje su deklarisane u color.hpp. I onda kad si to uradio, testiraj f-je tako sto ces u main.cpp fajlu da obojis ceo tetrahedron (ili samo njegove vertekse, level=0) i da ga ispises ponovo --- tj. nakon pozivanja njegovog tetrahedron->print_compact(), uradi
UniqueIDColor::colorize_entire_complex( tetrahedron );
ili umesto toga uradi
UniqueIDColor::colorize_all_simplices( tetrahedron , 0 );
i onda iza toga jos jednom pozovi tetrahedron->print_compact(). Zatim kompajliraj main.cpp i uporedi output-e ispisivanja tetrahedron-a pre i posle, da vidis kako tvoje f-je menjaju ono sto se ispisuje. I to je to. ;-)
:-)
Marko
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
On Mon, 21 Feb 2022, Dusan Cvijetic wrote:
> Pozdrav,
>
> Konačno jedno pitanje koje se ne tiče Visual Studio-a, već samog koda.
>
> Naime, koliko sam razumeo iz potpisa funkcija, one treba da budu članice klase UniqueIDColor. Pošto je kroz ovu funkciju iz jednog poteza potrebno dodeliti boje celom skupu simpleksa, a
> svaki simpleks dobija svoju jedinstvenu boju, ne vidim kako bi se ona mogla pozivati za pojedinačne objekte ove klase (trebalo bi pozvati konstruktore boje za svaki simpleks), pa sam
> mislio da je realizujem kao statičnu funkciju članicu klase. Da li sam pogrešno razumeo ovaj deo, i zapravo treba dodeliti pokazivač na istu boju celom delu simplicijalnog kompleksa,
> tj. čitavom kompleksu?
>
> Nezavisno od prethodnog tumačenja, imam problem sa hijerarhijom klasa koji ne mogu da savladam. Potrebno je da KSimplex ima vektor pokazivača na objekte klase Color, pa je u classes.hpp
> uključen color.cpp. S druge strane, u color.hpp potrebno je uključiti classes.hpp, da bih mogao da iteriram kroz vektor simpleksa u kompleksu i dodeljujem boje. Ovo vodi do rekurzivnog
> uključivanja fajlova: classes.hpp->color.cpp->color.hpp->classes.hpp. Čak i da se klasa KSimplex deklariše pre #include "color.cpp", ostaje isti problem, pošto bez definicije klase ne
> mogu da pristupam njenim poljima, jer je i dalje nepotpuni tip. Trenutno ne vidim način da se ovo izbegne, osim da se izmeni hijerarhija klasa, ili raspored po .hpp fajlovima. Propuštam
> li nešto ovde? Nikad nisam radio sa tuđim kodom na ovaj način, pa se izvinjavam što mi treba više vremena da savladam sve.
>
> Pozdravi,
> Dušan
>
> пон, 21. феб 2022. у 22:36 Dusan Cvijetic <dusancvijetic2000 at gmail.com> је написао/ла:
> Pozdrav,
>
> Hvala Vam mnogo, ponovio sam korake koje ste naveli u poruci, i Visual Studio sada uspeva da izgradi i izvrši kod, a čak uspeva i da mi farba kod bez dodatnih koraka. Ipak, ne
> vidim koja je razlika u odnosu na ono što sam ja radio (File/New project from existing code), osim što se fajlovi nalaze na drugom mestu. Nije mi jasno zašto isti kod hoće da
> izvrši kada se u projekat unese na jedan način, a baca greške kada se uveze na drugi...
>
> Isprva sam pokušao da ispratim vaše korake bez prethodno kreiranog main.cpp fajla, i video da tada Visual Studio uopšte ne nudi meni Debug/Properties/Configuration Properties/C++,
> pretpostavljam zato što nema koda na osnovu kog bi zaključio u kom jeziku ću pisati (?). Pretpostavljajući da će pronaći ispravan kompajler ukoliko direktno u VS kreiram main
> funkciju, prekopirao sam sve .hpp i .cpp fajlove u direktorijum projekta, prethodno napravivši main.cpp u VS uz kopiranje koda iz originala. Nadao sam se da ću tako izbeći
> uključivanje dodatnih direktorijuma, i eventualno namestiti da mi se projekat nalazi u lokalnom git direktorijumu, što bi mi bilo najzgodnije (ako je ovo iz nekog razloga loša
> praksa, napomenite mi, da odmah odustanem). Međutim, kada fajlove uvezem na ovaj način, ponovo baca iste greške kao i ranije.
>
> Pošto ovakva konfiguracija za sad radi, držaću se nje, ali ako neko ima ideju šta mi se dešava, bio bih zahvalan na objašnjenju.
>
> Pozdravi,
> Dušan
>
> пон, 21. феб 2022. у 18:09 Jaroslav Blagojevic <jaroslav.blagojevic at gmail.com> је написао/ла:
> Ja sam napravio prazan Visual Studio 2019 projekat, u drugom direktorijumu nego download-ovani repozitorijum, samo sa main.cpp fajlom kao "source files" (hpp fajlovi
> kao "include files" i dodao direktorijum sa download-ovanim repozitorijumom u Dеbug->Properties->Configuration Properties->C++->General->Additional Include
> Directories).Taj projekat sam izvršio uspešno, a za potrebe menjanja, pošto nije hteo da mi farba kod, sam morao da copy&paste-ujem .hpp fajlove (i cpp fajl na kome
> radim) iz download-ovanog repozitorijuma u direktorijum projekta, izmenim .hpp fajlove (dodao sam nastavak '1' na svaki) da ne uključuju .cpp, kopiram i .cpp fajl
> (isto dodajući nastavak '1'), izmenim, testiram i copy&paste-ujem promene nazad. Neće da farba kod u .cpp fajlovima, zato što ih ne tretira kao include fajlove. Dotle
> sam stigao. Visual Studio traži da mu se svi .cpp fajlovi stave u projekat, a ne da se include-ju .cpp fajlovi u okviru jedan drugog. Pretpostavljam da ako to uradimo,
> da će biti problem sa g++-om (da li on podržava projekte?)
>
> Pozdrav,
>
> Jaroslav
>
>
> On Sun, Feb 20, 2022 at 7:13 AM Marko Vojinovic <vmarko at ipb.ac.rs> wrote:
>
> Pozdrav Dusane,
>
> Meni se cini da svi problemi na koje si naisao izgleda dolaze iz neke greske prilikom import-ovanja koda u Visual Studio. Ja ne koristim VS i ne umem da ti
> pomognem oko toga, ali Jaroslav rece da je uspesno importovao kod u VS, pa verovatno moze on da ti pomogne.
>
> Trenutna verzija koda je inace skroz kompletna, sve je definisano, implementirano i radi kako treba --- ja ga u Linux-u prosto kompajliram iz komandne linije,
> ovako:
>
> g++ main.cpp -o izvrsi-me
>
> i onda kad izvrsim fajl "izvrsi-me", dobijem ocekivani output. Kompajler ne prijavljuje nikakve greske, sve prolazi savrseno glatko.
>
> > Koliko sam video, greške koje mi kompajler baca se uglavnom odnose na imena koja ne može da identifikuje, a koja dolaze iz standardne biblioteke.
>
> Pomoglo bi da nam posaljes te greske (makar prvih nekoliko), da vidimo o cemu se radi.
>
> > Video sam da je using namespace std iskorišćen na početku triangulator.hpp fajla, ali me je zanimalo zašto ta komanda ne stoji na početku svakog .hpp fajla? Da
> li bi to bilo redudantno?
>
> Da, bilo bi redundantno. Dizajn je da main.cpp include-uje samo triangulator.hpp, a da ovaj u sebi include-uje sve ostalo sto mu treba. Ne vidim zasto bi zeleo
> da deklarises namespace std vise puta. Mada mi se cini da cak i ako to uradis, ne bi trebalo da nastane nikakav problem.
>
> Bila bi dobra ideja da na papiru nacrtas "drvo include-ova": koren je main.cpp, pogledas koji fajlovi su tu include-ovani, pa se onda spustas po granama tako sto
> onda otvoris te include-ovane fajlove i vidis sta oni include-uju, itd. Ja sam to bio uradio jednom, i preporucujem i tebi --- to drvo ti pruza vrlo lep uvid u
> organizaciju koda.
>
> > Da li postoji neko pravilo kada treba da uključujem .hpp, a kada .cpp fajlove?
>
> Genericki receno, .hpp fajlovi sadrze definicije klasa i deklaracije njihovih metoda i f-ja, a .cpp fajlovi sadrze implementacije tih metoda i f-ja deklarisanih
> u .hpp fajlovima. Oni su vec namesteni da include-uju jedni druge, prema onom drvetu, ti tu ne bi morao nista dodatno da radis.
>
> > Još jedna od praksi koje su nas uvek terali da ispoštujemo je dodavanje zaštite u zaglavlja u vidu #ifndef - #define - #endif strukture
>
> Ta praksa je sigurno dobra, ali mi smo #define-ovali konstante samo u constants.hpp fajlu, i nigde drugo. Iz drveta mozes da vidis da je constants.hpp
> include-ovan samo jedanput (unutar classes.hpp), pa ne bi smela nigde da ti se pojavi dupla definicija tih konstanti. Kasnije cemo verovatno da dodamo #ifndef
> strukturu u constants.hpp, da budemo u skladu sa praksom, ali to nije sad najhitnija stvar --- kod momentalno radi ispravno i bez toga. :-)
>
> > pa bih cenio bilo kakvu pomoć koju možete da mi pružite.
>
> Jaroslave, jel' bilo neceg netrivijalnog oko ubacivanja koda u Visual Studio? Jel' imas neki hint za Dusana?
>
> :-)
> Marko
>
>
> 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
>
>
>
> On Sun, 20 Feb 2022, Dusan Cvijetic wrote:
>
> > Pozdrav,
> >
> > Počeo sam da radim drugi zadatak kao što smo pričali, i imam problem sa pokretanjem koda. Nisam ništa menjao u fajlovima, samo sam napravio projekat u Visual
> Studio-u 2019
> > (File/New/Project from existing code, sa svim default opcijama), i kada pokušam da ga pokrenem, kompajler mi baci gomilu grešaka. Da li je u ovom trenutku
> generalno nemoguće pokrenuti
> > main.cpp, ili ja pravim neku grešku?
> >
> > Koliko sam video, greške koje mi kompajler baca se uglavnom odnose na imena koja ne može da identifikuje, a koja dolaze iz standardne biblioteke. Video sam da
> je using namespace std
> > iskorišćen na početku triangulator.hpp fajla, ali me je zanimalo zašto ta komanda ne stoji na početku svakog .hpp fajla? Da li bi to bilo redudantno?
> >
> > Kada smo na fakultetu radili C++, uvek smo #include direktive koristili da uvezemo neke header-e u trenutni fajl, no video sam da se u kodu ovde nekada
> uključuju .hpp, a nekada .cpp
> > fajlovi. Da li postoji neko pravilo kada treba da uključujem .hpp, a kada .cpp fajlove?
> >
> > Još jedna od praksi koje su nas uvek terali da ispoštujemo je dodavanje zaštite u zaglavlja u vidu #ifndef - #define - #endif strukture (tražili su nam da ne
> koristimo #pragma once jer
> > zavisi od kompajlera) kako bismo izbegli višestruku definiciju pri uključivanju zaglavlja. Da li mi koristimo neku drugu zaštitu za zaglavlja? Dosta grešaka
> koje mi je kompajler bacio
> > je bilo zbog redefinicije promenljivih, pa pretpostavljam da je to zbog odsustva zaštite zaglavlja.
> >
> > Na par mesta su se pojavila imena koja ranije nisu definisana. Pretpostavljam da je to zato što još uvek nemamo ceo kod, pa nisu sve funkcije i promenljive
> uvedene, no hteo sam ovde da
> > spomenem i te greške za slučaj da su problem samo kod mene.
> >
> > Na kraju sam pokušao da izmenim kod na mestima koje sam gore spominjao, samo da vidim mogu li ga naterati da se pokrene, i iako je kompajler prestao da se
> javlja, linker je počeo da mi
> > baca greške. Pretpostavljam da postoji neko sistematičnije rešenje za moje probleme (do sada mi se linker javljao samo kada ne startujem projekat u VS kako
> treba), pa bih cenio bilo
> > kakvu pomoć koju možete da mi pružite.
> >
> > Pozdravi,
> > Dušan
> >
> >
> > пет, 11. феб 2022. у 22:34 Marko Vojinovic <vmarko at ipb.ac.rs> је написао/ла:
> >
> > Upoznati se sa osnovnom klasom Color i njenim child-klasama kroz problem dodeljivanja boje UniqueIDColor datom delu simplicijalnog kompleksa, odnosno
> celom kompleksu:
> >
> > bool UniqueIDColor::colorize_all_simplices( SimpComp* G , int level );
> > bool UniqueIDColor::colorize_entire_complex( SimpComp* G );
> >
> > Input: pointer na simplicijalni kompleks, nivo "k" za k-simplekse koje treba obojiti.
> > Output: true ako je uspesno izvrseno bojenje, false ako je doslo do neke greske.
> >
> > F-ja colorize_all_simplices() treba da prodje kroz sve simplekse iz G.elements[level] (ili se pise G->elements[level]?), i svakom od njih da dodeli
> instancu boje klase
> > UniqueIDColor. F-ja colorize_entire_complex() treba da izvrsi prethodnu f-ju za sve vrednosti 0 <= level <= D. Nakon toga, zakomentariti kod koji
> dodeljuje ovu boju u seed
> > f-ji seed_single_triangle() (boju boundary ne dirati, ona treba da ostane u seed f-ji), i umesto toga u main() f-ji eksplicitno pozvati
> colorize_entire_complex() da oboji
> > kompleks za trougao, odmah nakon sto se ovaj instancira.
> >
> >
> > :-)
> > Marko
> >
> >
> > 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
> >
> >
> > --
> > QGHG-it-dev-list mailing list
> > QGHG-it-dev-list at ipb.ac.rs
> > http://mail.ipb.ac.rs/mailman/listinfo/qghg-it-dev-list
> >
> >
> >--
> QGHG-it-dev-list mailing list
> QGHG-it-dev-list at ipb.ac.rs
> http://mail.ipb.ac.rs/mailman/listinfo/qghg-it-dev-list
>
> --
> QGHG-it-dev-list mailing list
> QGHG-it-dev-list at ipb.ac.rs
> http://mail.ipb.ac.rs/mailman/listinfo/qghg-it-dev-list
>
>
>
More information about the QGHG-it-dev-list
mailing list