Programavimo pamokėlės

pamokelesm

Mokymų ciklas „Programavimo pamokėlės" skirtos visiems, kurie nori išmokti programuoti.

IT galvosūkiai

itgalvosukiai

Konkurso tikslas – skatinti moksleivius domėtis IT sprendžiant įvairiausius galvosūkius.

Informikas

informikasm

Konkurso tikslas – supažindinti moksleivius su menu informacinėse technologijose ir mūsų talismanu.

Dr. J. P. Kazicko konkursai

kkonkursai

Žemaitijos, Aukštaitijos, Suvalkijos ir Dzūkijos regionuose vykdomas IT konkursas.

       
×

Įspėjimas

JUser: :_load: Nepavyko įkelti nario su id: 2919
JUser: :_load: Nepavyko įkelti nario su id: 3091

#41 – Dėl sprendimų įkėlimo sistemos

Pateikta ‘Pamokėlių konsultacija’
Tai yra vieša konsultacija. Visi žmonės gali matyti jos turinį. Todėl čia nenaudokite slaptažodžių ir kitos slaptos informacijos.
2016 Lapkritis 19, Šeštadienis 15:42 EET
Kodėl sprendimų įkėlimas šiais metais yra apribotas vien tik sprendimu interaktyviojoje aplinkoje? Dirbti normalioje IDE yra žymiai patogiau. Nebėra galimybės naudotis debugger'iu. Nėra galimybės naudotis C++11 ar C++14. Sprendimai yra apriboti iki tų, kuriuos sugalvojo užuoties sudarinėtojai - dažnai tie sprendimo būdai būna nelabai kokybiški, ne optimaliausi, tačiau kadangi negalima pilnai koreguoti rašomo kodo, būtina užduotį spręsti pagal duotą pradinį kodą. Pats pradinis kodas neretai yra nekokybiškas, nesilaiko priimtų dabartinių C++ standartų ir gerų praktikų. Vertimas sprendėjus rašyti tokį kodą gali būti laikomas jų žalojimu, o ne mokymu...

Keli duoto pradinio kodo nekokybiškumo pavyzdžiai:
* Įtrauktos nenaudojamos bibliotekos
* Naudojama "using namespace std;" (to daryti nerekomenduojama. Niekada, net ir mažose programose. Blogas įprotis)
* Rašomos nenaudingos funkcijos (pvz. užduotyje Heteroliteralai - kai įvestis tėra 2 žodžiai, jai gauti atskiros funkcijos paprastai niekas nerašo)
* Kaip minėta, priverčiama rašyti neoptimalius sprendimus (pvz. užduotyje Heteroliteralai pateikta funkcija Tikrinimas, priimanti string ir char tipo kintamuosius. Implikuojamas sprendimo būdas yra O(N^2) sudėtingumo, tuo tarpu užuotį galima išspręsti ir su O(N) algoritmu)
* Naudojami macros vietoj konstantų ("#define MAXDIM 8" užduotyje "Valdovės")
* Naudojami C-tipo masyvai. Praktiškai visose situacijose juos geriau pakeisti std::vector arba std::array iš standartinės bibliotekos.
* Kai kurios užduotys dėl pateikto pradinio kodo realiai neveiktų. Užduotyje Drugio efektas yra tokia įvesties funkcija:
void Skaityti(string zodziai[], int &zodziuSkaicius)
{
   while(cin >> zodziai[zodziuSkaicius ++]){}
}

Ši funkcija yra infinite loop'as. Dėl jos programa amžinai lauktų įvesties. Šis kodas veikia tik jūsų interaktyvioje aplinkoje.

Praeitais metais puikiai susitvarkėte ir su siunčiamais sprendimais. Kodėl šią galimybę šiais metais reikėjo pašalinti? Manau, jog neesu vienintelis, kurį šis pakeitimas nuo Informiko apskritai atbaidys.
2016 Lapkritis 20, Sekmadienis 15:51 EET
Sveikas,

Sutinku su viskuo ką tu minėjai ir šie apribojimai interaktyvioje aplinkoje gali žaloti mokymosi procesą. Bet turi suprasti jog per didelė laisvė sudėtingina visą procesą ir prarandamas mokymosi rezultatas. Šiuo atvėju mūsų administracija nusprendė, jog mokiniams kurie turi mažiau patirties būtų paprasčiau įsigilinti į tą informaciją kuri yra pateikta programoje. Pradedantiesiems įpač sunku pradėti realizuoti algoritmą nuo "tuščio lapo" tad mes ir siūlome pradinės programos kodą. Šiose pamokėlėse mes nemokome rašyti profesionalaus kodo, esminis dalykas yra suteikti programavimo mastymą ar bent suprasti uždavinių sprendimo prasmę. Tavo pateikti kodo nekokybiškumo pavyzdžiai yra teisingi tik aukštesnio lygio programavimui. Tarkim "using namespace std;" aprašas aplengvina kodo rašymą ir sutaupo laiko nei kiekvieną kartą kviesti std:: scopą. Preprocesorius define šiuo atvėju yra efektyvesnis nei konstantų paskelbimas kadangi, konstantos užima vietos atmintyje, o preprocesorius (makro) prieš kompiliavimą iterpia reikšmę. Vector tipo masyvas yra aukštesnio lygio mokiniui kuris jau turi patirties su paprastu masyvu. Turi suprasti, jog programavimo pamokėlių tikslas yra apmokyti visiškai naujus mokinius programavimo įdėjų, nes mokymosi procesas vyksta palaipsniui, o ne iškart pradėti nuo profesonalų lygio. Labiau motyvuoti mokiniai turėtų suprasti ir ieškoti papildomos informacijos internete jei nori gilintis stipriau į šias temas.

Man būtų malonu su tavim padiskutuoti visais tau iškilusiais klausimais per Facebooka (Bugnius Skučas) ar per privačias žinutes!
Ši konsultacija uždaryta, todėl dabar ją galima tik skaityti. Jūs nebegalite daugiau atsakinėti. Jei jums reikia pateikti daugiau informacijos, prašome pradėti naują konsultaciją ir joje paminėti šios konsultacijos numerį.
Į viršų