Clasa a VI-a lecția 34 - 7 apr 2014
Tema - comentarii
- În continuare duplicați cod cu copy/paste.
- Pentru decizii multiple folosiți instrucțiunea switch sau, și mai bine, vectori de frecvență.
Problema roboți
Aveți o gîndire unitară, și la bine și la rău :) Ca observații generale:
- Modul standard este să memorăm coordonatele și direcțiile roboților în vectori, nu în matrice.
- În mod standard bordarea ajută la testul uniform de ieșire din martice. Combinat cu vectorii de direcție știm să transformăm robotul.
- Modul standard este să stocăm direcțiile într-un sens, fie orar fie antiorar (preferabil antiorar). Astfel, schimbarea de direcție se face adunînd 2 modulo 4.
- Gîndiți-vă mereu cum puteți folosi vectori care să parametrizeze problema, în loc să duplicați cod sau să folosiți switch.
Comentarii prin sondaj:
- Coman: cod frumos, dar se poate mai bine și mai scurt prin parametrizare. E bine să ții roboții într-un vector separat, pentru eficiență (nr. roboți e mai mic ca n2). Folosește vectori în loc de switch atunci cînd se poate. Nu ai bordat matricea pentru simplificarea testului de ieșire din tablă (și uniformizare cod).
- Diaconu: cam aceleași comentarii ca la Coman, mai puțin bordarea pe care ai făcut-o. Schimbarea de direcție se poate calcula fără vector, adunînd doi modulo 4. Dublezi matricea de tablă, chiar e nevoie?
- Magan: atenție la struct. Te poți păcăli foarte tare la memorie, ai idee cît ocupă declarația ta? Bordare cu -1, bravo. De ce testezi roboții pînă la 200? Modul de schimbare a direcției se poate îmbunătăți, este direcția + 2 modulo 4. Pentru eliminare testezi fiecare robot cu fiecare. Ce complexitate are aceasta? Rău! La afișare traducerea de la cod la caracter este ineficientă, puteai să folosești un vector.
- Priboi: bordare, bravo. De ce ai nevoie de două table? Folosește switch sau, și mai bine, vectori de frecvență, pentru decizii multiple. Simpatică șmecheria pentru schimbarea de direcție, dar se putea mai simplu calculînd direcția + 2 modulo 4 și ordonînd direcțiile în orice sens (orar sau antiorar). E bine să memorezi roboții în vectori și nu în matrice.
Tema - rezolvări
Am discutat în amănunt despre problema roboţi şi diversele ei aspecte. În această problemă se îmbină mai multe tehnici standard, cum ar fi bordarea matricei, vectori de direcţie în sens antiorar, memorarea obiectelor în vectori suplimentari şi evitarea codului duplicat prin parametrizare - introducerea de vectori suplimentari.
Nu am apucat să discutăm celelalte probleme. Le afişez mai jos cu rugămintea să le studiaţi şi să le înţelegeţi. Acolo unde aveţi nelămuriri cereţi ajutorul pe grupul inţelepţilor. Voi încerca să răspund în măsura în care timpul îmi permite.
Rezolvări aici [1] și aici [2]
Temă
Deoarece olimpiada se apropie nu veți avea temă. Totuși, pentru cei ce doresc să își încerce puterile încă o dată cu un concurs foarte greu voi organiza următorul concurs la ora 18:00:
- Opțional: Concurs clasele 6/7/8
Atenție, concursul este deosebit de greu, vrînd a fi o pregătire la nivel de baraj gimnaziu ramînînd accesibil și elevilor de clasa a 6a.
Rezolvări aici [3]