Clasa a VI-a lecția 10 - 27 nov 2014

From Algopedia
Jump to navigationJump to search

Anunț

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 unii 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 putem sxcrie:
    for (j1=0;j1<m && ok;j1++){
      if (v[i2][j2]!=v2[i1][j1])
        ok=0;
      j2++;
    }
  • 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 6a

Tema

Tema 10 clasa a 6a

Rezolvări aici [2]