Clasa a VI-a lecția 6 - 23 oct 2013
Anunțuri
- Pentru a evita neînțelegerile și a nu mă face să cred că vreți să pescuiți, trimițînd sursă după sursă la campion pînă ce problema merge de 100%, iar abia apoi trimițînd la vianuarena, am să vă rog să nu trimiteți surse pentru problemele de la temă la campion pe durata concursului-temă. În felul acesta evităm orice discuție de genul "ai trișat, ba nu am trișat". Cine nu respectă această regulă va pierde punctajul pe acea problemă.
- Anul trecut am enunțat regulile de programare în limbajul C. Ele nu sînt opționale, ci obligatorii. Aceste reguli disting programatorii neglijenți, care "dau cu for-ul", de cei de primă clasă, care se pot angaja unde vor ei în lume. Pentru a vă reaminti aceste reguli am creat o pagină specială în cadrul regulilor și informațiilor din pagina principală. Vă rog pe toți să citiți ultima secțiune, care este foarte scurtă:
Regului de programare în limbajul C
Comentarii generale
Cele trei teme date în afara concursului sînt exerciții foarte simple cu matrice. Am constatat că mulți dintre voi ati avut probleme cu ele. Drept care vă invit să vă citiți explicațiile la teme de mai jos. Chiar și dacă ați luat 100p, asta nu înseamnă că ați făcut perfect. Încercați să rețineți ideile din rezolvările de mai jos și să înțelegeți programele. Nu uitați, nu scriu aceste programe pentru mine, se presupune că eu știu să le fac. Le scriu în mod didactic, cu comentarii, pentru ca voi să puteți ințelege mai bine cum funcționează.
La problema zoom x 2 unii dintre voi nu ați înțeles că scopul exercițiului era să creați o altă matrice și nu să afișați rezultatul.
La problema căutare nu am văzut nici o sursă ideală. Mulți dintre voi ați avut probleme, iar cei care ați rezolvat-o ați făcut următoarele greșeli, menționate în regulile de programare în limbajul C:
- Variabilele simple nu se inițializează la declarare. Ele se inițializează cît mai aproape de secțiunea de program care le folosește. Cu alte cuvinte orice variabilă se inițializează cît mai jos posibil. De ce? Pentru citibilitatea codului. Imaginați-vă că la linia 300 vedem o instrucțiune a = a + y;. Ne punem întrebarea cu ce valoare a fost inițializată a. Imaginați-vă că trebuie să mergem cîteva pagini în sus pentru a constata că variabila a fost inițializată la declarare int a = 1;
- Folosim for pentru bucle cu număr cunoscut de pași, while în celelalte cazuri. Aceasta este o regulă de programare ordonată, care face codul mai citibil.
- Nu avem voie să modificăm variabila de buclă for. Dacă este un ciclu cu număr cunoscut de pași nu avem de ce să modificăm variabila.
- Nu abuzați stegulețele. Exemplu unde nu sînt necesare break sau stegulețe: căutarea unui element e în vectorul v:
i = 0; while ( (i < n) && (v[i] != e) ) i++;
Rețineți: căutarea unei matrice în altă matrice se poate face fără stegulețe.
Această implementare se oprește atunci cînd găsește o inegalitate. Iar, pentru că nu folosește un steguleț pentru a ști cînd să se oprească, face o comparație mai puțin la fiecare element. La clasa a 6a la nivel de olimpiada pe țară eficiența contează! Nu mai sînteți începători și nu veți fi iertați, ca la clasa a 5a.
Tema - rezolvări
Rezolvări aici: [1]
Lecție
Concurs clasa a 6-a: problema figura dată la ONI 2010 clasa a 6-a.
Tema
Rezolvări aici [2]