Programerski osvrt na treće kolo Ljetne lige C++ 2011 za kadete - 26.07.2011.

Programerski osvrt na treće kolo Ljetne lige C++ 2011 za kadete - 26.07.2011.

28.07.2011.

Uspješno smo odradili i treće kolo ovogodišnje C++ ljetne lige. Pogledajmo rezultate.

Osim uobičajenih problemčića, pojavio se jedan novije vrste :-)

Natjecatelju Vilimu Lendvaju nije bilo moguće kompajlirati prvi zadatak sa standardnim postavkama, budući je koristio zastarjelu, odnosno danas već praktički nepostojeću header datoteku algobase.h koja se više ne koristi u C++. Radi se o header datoteci koja se ne koristi od 1998...

Uz informiranje i pristanak natjecatelja, iz koda je uklonjena pripadna #include linija te je rješenje rekompajlirano i onda podvrgnuto ostatku evaluacije gdje je natjecatelj osvojio 30 / 30 bodova na 1. zadatku. Ovo je učinjeno, budući nema ograničenja na verziju C-a ili C++a koju natjecatelj koristi te bi sa starijom verzijom kompajliranje bilo uspješno (nema sintaktičkih grešaka), međutim kako ništa iz tog headera nije korišteno u rješenju zadatka (kako je potvrdio i sami natjecatelj) niti je promjenjena okolina , bilo je dozvoljeno to isto ukloniti. U protivnom da je u programu korišten resurs iz tog headera, isti bi bio zamjenjen sa <algorithm>.

--

Od ostalih poteškoća na natjecanju je uočeno problematično korištenje scanf funkcije... nekada je doista teško odrediti što znači vrijednost, a što adresa varijable, a to ćemo još spomenuti... Preporuča se natjecateljima da ukoliko već rade i spremaju rješenja kao .CPP, da pokušaju postupno prijeći i na sami jezik C++, odnosno da koriste konstrukte, biblioteke i funkcije od jezika C++, koji je ipak na nešto višoj razini od čistog C-a.

Ako u neku proceduru prenosimo adresu (zvanični by Reference prijenos), onda to radimo na sljedeći način:

za običnu varijablu, npr int x:

scanf("%d",&x); // gdje znak & označava da proslijeđujemo memorijsku lokaciju, a ne vrijednost varijable.

za element u nizu a, npr int a[100];

scanf("%d",a[100]); ili scanf(%d,(a+100)); // dakle ovdje je mala iznimka kod adresiranja varijabli u C-u i C++-u, te valja jako pripaziti!

Nažalost je bilo grešaka s uporabom scanf funkcije i to se ne može priznavati budući se program uspješno kompajlirao, a uporaba pointera je uvijek dozvoljena...

Što se tiče slanja rješenja, u jednoj prilici je poslana .o datoteka, koja nam i nije od neke pomoći kod evaluacije :-)
Primamo dakle, samo .c ili .cpp, budući je ovo ipak C++ ljetna liga. ;-)

--

Isprika radi 2. zadatka, u kojem nije naveden redoslijed ispisa površina (koji je abecedni kako govore i test primjeri...), međutim to je uzeto u obzir pri evaluaciji te su bili dodjeljeni bodovi bez obzira na redoslijed.

Također, u 2. zadatku, ukupna površina jest UNIJA SVIH POVRŠINA što nitko od natjecatelja nije ispravno protumačio. Budući se površine mogu nalaziti u presjeku, traži se ukupno zauzeće svih površina u cijelom poligonu (pravokutnoj matrici), dakle to nije suma pojedinačnih površina upravo zato što se one mogu nalaziti u presjeku. To bi se moglo riješiti na način da sve pravokutnike "zacrnimo" nekim znakom, npr. sa zvijezdicom i onda prebrojimo zvijezdice... A drugi je način da oduzmemo R*S - broj točaka. Dok je treći način izračun unije realnih intervala, zasebno po X-osi i zasebno po Y-osi. 

Posebno smo zadvoljni što su natjecatelji pristupali rješavanju trećeg zadatka, koji je svojevrsni uvod u (uvjetno rečeno) nove strukture podataka i pripadne algoritme koji će biti od velike koristi skorašnjim srednjoškolcima.

--

Toliko o trećem kolu, do idućeg, uživajte i pripremajte se :-)

Autor zadataka C++

  

IZDVOJILI SMO

Za odgovore o tome kako se dakle stvaraju centri izvrsnosti poput ovog, morali smo zagrepsti dublje i postaviti nekoliko ključnih pitanja tajniku koji o tome zna najbolje. Kaže za sebe da više voli raditi nego govoriti i da ga se ne može vidjeti na dodjelama medalja...
  

ZANIMLJIVOSTI

Ivan Krstić je prvi čovjek računalne sigurnosti u Apple-u, početkom stoljeća bio je član Saveza, a da je osobit i neponovljiv znali smo odmah...
Zagrebački računalni savez - Sva prava pridržana | Objave portala nije dozvoljeno prenositi bez prethodnog odobrenja Saveza.