[QGHG-it-dev-list] Zadatak 2 - bojenje kompleksa

Marko Vojinovic vmarko at ipb.ac.rs
Mon Feb 21 05:53:36 CET 2022


Pozdrav Dusane,

Ovako, prvo i najvaznije --- za C++ kod ne treba da upotrebljavas C kompajler, nego C++ kompajler. Procitaj pazljivo moj i Nenadov e-mail --- ako uradis:

   g++ main.cpp -o izvrsi-me

sve bi trebalo da radi kako treba, dok ako uradis:

   gcc main.cpp -o izvrsi-me

ne treba da se cudis da ce da ti prijavi gomilu gresaka. I kod mene kompajliranje gcc-om prijavljuje sve te greske, manje-vise identicne kao kod tebe. U uputstvu za gcc pise izmedju ostalog sledece:

======
Compiling C++ Programs

C++ source files conventionally use one of the suffixes .C, .cc, .cpp, .CPP, .c++, .cp, or .cxx; C++ header files often use .hh, .hpp, .H, or (for shared template code) .tcc; and preprocessed C++ files use the suffix .ii.  GCC recognizes files with these names and compiles them as C++ programs even if you call the compiler the same way as for compiling C programs (usually with the name gcc).

However, the use of gcc does not add the C++ library.  g++ is a program that calls GCC and automatically specifies linking against the C++ library.
======

Obrati paznju na poslednju recenicu --- ako pokusas da kompajliras kod sa gcc, on nece da ulinkuje standardnu C++ biblioteku, i za ocekivati je da prijavi brdo gresaka. Ali ako kompajliras kod sa g++, onda ce C++ biblioteka da bude automatski ulinkovana, i sve bi trebalo da prodje kako treba.

Moj predlog je da uradis sledece --- sve sto si menjao i editovao u kodu skloni u neki drugi direktorijum da ti ne smeta, a glavni git direktorijum ocisti i uradi jedan git pull, da imas identicnu verziju koda koja je trenutno u repository-ju. Onda probaj da kompajliras kod iz komandne linije kao sto smo Nenad i ja napisali --- samo pazi da koristis g++ a ne gcc. I onda vidi da li ti tada prijavljuje bilo kakve greske. Kad to budes uradio javi kako je proslo, pa cemo onda da gledamo dalje.

Sto se tice gresaka koje je izbacio Visual Studio, moj utisak je da su i one vezane za odsustvo standardne C++ biblioteke, izgledaju mi kvalitativno slicno kao greske koje prijavljuje gcc. Ali nemam instalaciju VS da probam, pa to ne mogu da reprodukujem.

Verzija kompajlera koju imam ovde je (GCC) 8.5.0 20210514 (znaci sredina prosle godine). To jeste novije od tvoje verzije, ali cisto sumnjam da tu ima neke supstancijalne razlike --- nas kod ne koristi nikakve novotarije i neke ultra-nove opcije kompajlera, pa bi i tvoja verzija g++ trebalo da radi jednako dobro kao i moja.

I za kraj --- kad hoces da pokupis prijavljene greske u fajl, imaj na umu da gcc i g++ ne ispisuju greske na stdout nego na stderr (sto je i logicno). Pa posto je file-descriptor za stderr "2", redirect u fajl se radi ovako:

   gcc main.cpp -o izvrsi-me 2> greske.txt

i isto za g++, ako ti bude nesto prijavio. Ne znam da li ove redirekcije rade i pod Windows-om (pod Linux-om je to standard), ali svejedno probaj, mozda ce da radi.

:-)
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,
> 
> Prethodna poruka se zaglavila zbog veličine, pa je šaljem ponovo ispod, s tom razlikom što se sada svi fajlovi koje spominjem nalaze na
> linku: https://studentetfbgacrs-my.sharepoint.com/:f:/g/personal/cd190071d_student_etf_bg_ac_rs/EgrQ3kxftYdGv8RepyWHlyUBqRut7KlmIBah1WJ8MFij_g?e=xBd97t, kako bih smanjio veličinu samog
> mejla.
> 
> Pozdravi,
> Dušan
> 
> 
> ---------- STARA PORUKA ----------
> 
> Pozdrav,
> 
> Šaljem u prilogu kod u kome sam ispravio sve stvari koje sam spomenuo (morao sam da dodam #include constants u color.hpp, svuda sam na početak stavio using namespace std; svuda sam
> stavio #ifndef-#define-#endif zaštitu, i morao sam još dodatno da zakomentarišem sve pozive log_report funkcije u seed.cpp pošto je nije prepoznavao). Takođe, u zipovanom fajlu se
> nalazi nova .csv tabela sa izveštajem o greškama koje mi prijavljuje sa novim kodom. Sada su to isključivo greške koje mi baca linker. Svi ovi fajlovi su u zad_2_nove_greske.rar.
> 
> Pored toga, šaljem i output_prepravljeno.txt, u kome se nalazi izlaz konzole za komandu gcc main.cpp -o izvrsi-me > output.txt. Da napomenem samo, nije hteo ništa da mi upiše u
> output.txt sam (ni sa >, ni sa >>), pa sam ručno prekopirao sadržaj konzole.
> 
> U fajlu output_staro.txt se nalazi izlaz za istu komandu, samo sam je tu pozvao za originalan kod sa github-a. Imao sam isti problem pri ispisu, takođe je ručno kopirano.
> 
> Poslednja napomena, verzija gcc-a je  gcc (MinGW.org GCC-6.3.0-1) 6.3.0.
> 
> Nadam se da ovo pruža više detalja.
> 
> Nisam želeo da pushujem ovako haotičan kod da ne bi došlo do zabune, javite ako ipak treba to da uradim.
> 
> Pozdravi,
> Dušan
> 
> нед, 20. феб 2022. у 22:16 Dusan Cvijetic <dusancvijetic2000 at gmail.com> је написао/ла:
>       Pozdrav,
> 
> Šaljem u prilogu kod u kome sam ispravio sve stvari koje sam spomenuo (morao sam da dodam #include constants u color.hpp, svuda sam na početak stavio using namespace std; svuda
> sam stavio #ifndef-#define-#endif zaštitu, i morao sam još dodatno da zakomentarišem sve pozive log_report funkcije u seed.cpp pošto je nije prepoznavao). Takođe, u zipovanom
> fajlu se nalazi nova .csv tabela sa izveštajem o greškama koje mi prijavljuje sa novim kodom. Sada su to isključivo greške koje mi baca linker. Svi ovi fajlovi su u
> zad_2_nove_greske.rar.
> 
> Pored toga, šaljem i output_prepravljeno.txt, u kome se nalazi izlaz konzole za komandu gcc main.cpp -o izvrsi-me > output.txt. Da napomenem samo, nije hteo ništa da mi upiše u
> output.txt sam (ni sa >, ni sa >>), pa sam ručno prekopirao sadržaj konzole.
> 
> U fajlu output_staro.txt se nalazi izlaz za istu komandu, samo sam je tu pozvao za originalan kod sa github-a. Imao sam isti problem pri ispisu, takođe je ručno kopirano.
> 
> Poslednja napomena, verzija gcc-a je  gcc (MinGW.org GCC-6.3.0-1) 6.3.0.
> 
> Nadam se da ovo pruža više detalja.
> 
> Nisam želeo da pushujem ovako haotičan kod da ne bi došlo do zabune, javite ako ipak treba to da uradim.
> 
> Pozdravi,
> Dušan
> 
> нед, 20. феб 2022. у 21:10 Nenad Korolija <nenadko at gmail.com> је написао/ла:
>       Ja koristim:
> g++ -g -w -std=c++14 main.cpp -o main
> Mozda baca greske zato sto ne zna sta je auto i slicne stvari. Ne mogu da procenim, bez da uradis nesto tipa gcc main.cpp -o izvrsi-me > output.txt, pa da nam posaljes, ili
> da kopiras iz prozora u email.
> 
> Pozdrav,
> Nenad
> 
> On Sun, Feb 20, 2022 at 8:59 PM Dusan Cvijetic <dusancvijetic2000 at gmail.com> wrote:
>       Pozdrav,
> 
> Malo sam se prerano poradovao, sada mi i Code::Blocks baca iste greške kao i Visual Studio. Pokušao sam i iz konzole, komandom gcc main.cpp -o izvrsi-me, no i tu baca
> grešku. Trenutno sam ponovo zaglavljen, i ne poznajem dovoljno funkcionisanje prevodilaca, pa ne znam ni kako da počnem ovo da rešavam.
> 
> Pozdravi,
> Dušan
> 
> нед, 20. феб 2022. у 20:31 Dusan Cvijetic <dusancvijetic2000 at gmail.com> је написао/ла:
>       Pozdrav,
> 
> Hvala Vam na odgovorima.
> 
> Šaljem u prilogu tabelu sa greškama koje mi baca Visual Studio. U pravu ste, greške proističu iz nekog dela mog importa koda, ili nekih podešavanja VS, pošto kod
> radi kada ga pokrećem koristeći Code::Blocks i GNU GCC kompajler umesto onog ugrađenog u VS. Koristiću za sad Code::Blocks, ali bi mi značila pomoć, ukoliko neko
> ume da rastumači šta mi se dešava, pošto sam na Visual Studio navikao i prijatnije mi je tamo da radim.
> 
> Pozdravi,
> Dušan
> 
> 
> 
> нед, 20. феб 2022. у 07:13 Marko Vojinovic <vmarko at ipb.ac.rs> је написао/ла:
>
>       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
> 
> --
> 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