Hvernig á að kenna hvernig á að sigrast á erfiðleikum og skrifa á sama tíma lotur

Þrátt fyrir þá staðreynd að við munum tala um eitt af grunnviðfangsefnum, er þessi grein skrifuð fyrir reynda sérfræðinga. Markmiðið er að sýna hvaða ranghugmyndir byrjendur hafa í forritun. Fyrir starfandi forritara hafa þessi vandamál lengi verið leyst, gleymd eða alls ekki tekið eftir. Greinin gæti komið sér vel ef þú þarft skyndilega að hjálpa einhverjum með þetta efni. Greinin dregnar hliðstæður við efni úr ýmsum bókum um forritun eftir Schildt, Stroustrup, Okulov.

Umræðuefnið um hringrásir varð fyrir valinu vegna þess að nokkuð margir eru útilokaðir frá því þegar þeir ná tökum á forritun.

Þessi tækni er hönnuð fyrir veikburða nemendur. Að jafnaði festast sterkt fólk ekki í þessu efni og það er engin þörf á að koma með sérstaka tækni fyrir þá. Aukamarkmið greinarinnar er að færa þessa tækni úr bekknum „virkar fyrir alla nemendur, en aðeins einn kennara“ í bekkinn „virkar fyrir alla nemendur, alla kennara“. Ég geri ekki kröfu um algjöran frumleika. Ef þú ert nú þegar að nota svipaða aðferðafræði til að kenna þetta efni, vinsamlegast skrifaðu hvernig útgáfan þín er frábrugðin. Ef þú ákveður að nota það, segðu okkur hvernig það fór. Ef svipaðri tækni er lýst í bók, vinsamlegast skrifaðu nafnið.


Ég vann að þessari tækni í 4 ár, lærði einstaklingsbundið með nemendum á mismunandi stigum þjálfunar. Alls eru um fimmtíu nemendur og tvö þúsund kennslustundir. Í fyrstu festust nemendur alltaf í þessu efni og fóru. Eftir hvern nemanda var aðferðafræði og efni lagfært. Undanfarið ár hafa nemendur ekki lengur verið fastir í þessu efni, svo ég ákvað að deila niðurstöðum mínum.

Hverjum og hvers vegna kenni ég?

Þar sem engin inntökupróf eru, geta bekkir verið bæði sterkir og mjög veikir nemendur. Þú getur lesið meira um nemendur mína í greininni Portrett af nemendum kvöldnámskeiða
Ég kappkostaði að tryggja að allir sem vilja læra forritun geti lært hana.
Tímarnir mínir eru haldnir einstaklingsbundnir og greiðir nemandinn sinn pening fyrir hvern. Svo virðist sem nemendur muni hagræða kostnaði og krefjast lágmarks. Hins vegar fer fólk augliti til auglitis með lifandi kennara, ekki fyrir þekkinguna sjálfa, heldur til að treysta því sem það hefur lært, fyrir tilfinningu fyrir framförum og fyrir samþykki sérfræðingsins (kennarans). Ef nemendur finna ekki fyrir framförum í námi sínu fara þeir. Almennt er hægt að skipuleggja kennslustundir þannig að nemendur finni fyrir framförum við að fjölga kunnuglegum mannvirkjum. Það er, fyrst lærum við á meðan í smáatriðum, svo lærum við fyrir, gerum svo á meðan, og nú erum við með þúsund og einnar nætur námskeið tilbúið, þar sem lotur einar eru rannsakaðar í tvo mánuði, og í lokin - nemandi sem skrifaði venjulegt bókasafn undir einræði. Hins vegar, til að leysa hagnýt vandamál, þarf ekki aðeins þekkingu á efninu heldur einnig sjálfstæði í beitingu þess og í leit að nýjum upplýsingum. Þess vegna, fyrir augliti til auglitis námskeið, held ég að rétta meginreglan sé að kenna lágmarkið og hvetja til óháðs náms á blæbrigðum og skyldum efnum. Í umræðunni um lykkjur, tel ég smíðina vera lágmarkið. Þú getur skilið meginregluna út frá því. Með því að þekkja meginregluna geturðu náð tökum á bæði fyrir og gera-meðan sjálfur.

Til að veikburða nemendur nái tökum á efninu er ekki nóg að lýsa setningafræðinni. Nauðsynlegt er að gefa einfaldari en fjölbreyttari verkefni og lýsa dæmum nánar. Að lokum takmarkast þróunarhraði af getu nemandans til að umbreyta tjáningu og leita að mynstrum. Fyrir snjalla nemendur verða flest verkefni leiðinleg. Þegar þú lærir með þeim þarftu ekki að krefjast þess að leysa 100% vandamálanna. Hægt er að skoða efnið mitt á githubinn minn. Að vísu er geymslan meira eins og grimoire vígamanns - enginn nema ég mun skilja hvað er hvar, og ef þú fellur á tékkinu geturðu orðið brjálaður

Aðferðafræðin er starfsmiðuð

Kenningin er útskýrð með því að nota dæmi um að leysa vandamál. Í grunnþætti forritunartíma þar sem kenndar eru greinar og lykkjur er einfaldlega ekki hægt að halda gagnlegan fyrirlestur um eitt efni í heila klukkustund. 15-20 mínútur eru nóg til að útskýra hugmyndina. Helstu erfiðleikarnir koma upp við framkvæmd verklegra verkefna.
Byrjendur kennarar geta skrölt af rekstraraðilum, greinum, lykkjum og fylkjum í einum fyrirlestri. En nemendur þeirra munu standa frammi fyrir því vandamáli að tileinka sér þessar upplýsingar.
Nauðsynlegt er ekki aðeins að segja frá efninu heldur einnig að tryggja að áheyrendur skilji það.

Sú staðreynd að ná tökum á viðfangsefni ræðst af því hvernig nemandinn tekst á við sjálfstæða vinnu.
Ef nemanda tókst að leysa vandamál um viðfangsefni án aðstoðar kennara, þá hefur efnið náð tökum á því. Til að tryggja sjálfsprófun er hverju verkefni lýst í töflu með prófunarsviðsmyndum. Verkefnin hafa skýra röð. Ekki er mælt með því að sleppa verkefnum. Ef núverandi verkefni er of erfitt, þá er gagnslaust að fara yfir í það næsta. Það er enn flóknara. Til að nemandinn geti náð tökum á núverandi flóknu verkefni, eru nokkrar aðferðir útskýrðar fyrir honum með því að nota dæmi um fyrsta vandamálið. Reyndar kemur allt innihald efnisins niður á tækni til að sigrast á erfiðleikum. Hringrásir eru meira aukaverkun.

Fyrsta verkefnið er alltaf dæmi. Annað er örlítið frábrugðið og er framkvæmt „sjálfstætt“ strax á eftir þeirri fyrri undir eftirliti kennara. Öll síðari verkefni miða að því að gefa gaum að ýmsum smáatriðum sem geta valdið ranghugmyndum.

Skýringin á dæminu er samræða þar sem nemandinn þarf að kalla til baka útbreiðslu og krossgildingu til að ganga úr skugga um að hann hafi tileinkað sér hluta af efninu.

Ég mun vera banal og segja að fyrsta dæmið um efnið sé mjög mikilvægt. Ef þú hefur efni til umfangsmikillar sjálfstæðrar vinnu er hægt að leiðrétta brottfall fyrsta dæmisins. Ef það er ekkert annað en dæmið, þá mun nemandinn líklegast ekki ná tökum á efninu.

Meðan eða fyrir?

Eitt af umdeildu atriðum er val á byggingu fyrir dæmið: á meðan eða fyrir. Einu sinni eyddi starfandi verktaki vinur minn með enga kennslureynslu klukkutíma í að sannfæra mig um að for lykkjan væri auðveldast að skilja. Rökin snéru að því að „allt í henni er skýrt og sett á sinn stað“. Hins vegar er undirrót erfiðleika fyrir alvöru byrjendur hugmyndin um hringrásina sjálfa, en ekki ritun þess. Ef einstaklingur skilur ekki þessa hugmynd, þá mun hann eiga í erfiðleikum með setningafræðina. Um leið og hugmyndin er að veruleika hverfa vandamálin við kóðahönnun af sjálfu sér.

Í efninu mínu fylgir þema lykkjur þema greiningar. Ytri líkindi ef og á meðan gerir okkur kleift að draga upp beina líkingu: „þegar skilyrðið í hausnum er satt, þá er líkaminn tekinn af lífi. Eina sérkenni hringrásarinnar er að líkaminn er tekinn af lífi mörgum sinnum.

Önnur rök mín eru að á meðan þarf minna snið en fyrir. Minni snið þýðir færri heimskulegar mistök þar sem kommum og sviga vantar. Byrjendur hafa ekki enn þróað nægilega athygli og nákvæmni til að forðast sjálfkrafa setningafræðivillur.
Þriðja rökin eru útskýrð í mörgum góðum bókum sem fyrstu rökin.

Ef nemandinn getur auðveldlega umbreytt tjáningum, þá er hægt að tala um í framhjáhlaupi. Nemandi velur síðan það sem honum líkar best. Ef umbreytingar valda erfiðleikum, þá er betra að afvegaleiða ekki athygli þína. Leyfðu nemandanum fyrst að leysa allt með því að nota á meðan. Þegar þú hefur náð tökum á umræðuefninu um lykkjur geturðu endurskrifað lausnirnar til að æfa þig í að umbreyta á meðan til fyrir.
Postcondition lykkjur eru frekar sjaldgæf dýr. Ég eyði alls ekki tíma í það. Ef nemandi hefur náð góðum tökum á hugmyndum um að bera kennsl á mynstur og umbreyta tjáningu getur hann fundið það út án minnar hjálpar.

Þegar ég sýni fyrsta dæmið fyrir sterkum nemendum vek ég athygli á því að í fyrra dæminu er mikilvægt að skrá ekki aðeins lausnina heldur líka alla keðju aðgerða sem leiddi til niðurstöðunnar. Latir nemendur geta vanrækt skrifin og afritað aðeins lokaalgrímið. Þeir þurfa að vera sannfærðir um að einn daginn muni erfitt verkefni verða á vegi þeirra. Til að leysa það þarftu að fylgja skrefunum eins og í þessu dæmi. Þess vegna er mikilvægt að skrá öll stig. Í eftirfarandi vandamálum verður aðeins hægt að skilja eftir lokaútgáfu lausnarinnar.

Meginhugmynd sjálfvirkni er að við felum tölvu til að vinna venjulega vinnu fyrir mann. Ein af grunntækninni er að skrifa lykkjur. Það er notað þegar nokkrar eins endurteknar aðgerðir eru skrifaðar í forriti í röð.

Það gæti virst góð hugmynd að sýna sömu setninguna mörgum sinnum í fyrsta lykkjuverkefninu. Til dæmis:

Húrra, það virkar!
Húrra, það virkar!
Húrra, það virkar!
Húrra, það virkar!
Húrra, það virkar!
Húrra, það virkar!
Húrra, það virkar!
Húrra, það virkar!

Þessi valkostur er slæmur vegna þess að teljaragildið er ekki sýnilegt í úttakinu. Þetta er vandamál fyrir byrjendur. Ekki vanmeta hana. Í fyrstu var þetta verkefni það fyrsta og verkefnið að leiða út röð talna í hækkandi röð var annað. Nauðsynlegt var að kynna viðbótarhugtök „hringrás N sinnum“ og „hringrás frá A til B“, sem eru í meginatriðum sami hluturinn. Til þess að búa ekki til óþarfa einingar ákvað ég að sýna aðeins dæmi með framleiðsla á röð talna. Fáir ná að læra hvernig á að halda teljara í höfðinu og móta hegðun forrits í hausnum án undirbúnings. Sumir nemendur kynnast fyrst hugarlíkönum um efnið hringrás.
Eftir smá æfingu gef ég það verkefni að endurtaka sama texta sem á að leysa sjálfstætt. Ef þú gefur fyrst sýnilegan teljara og síðan ósýnilegan, munu nemendur hafa færri vandamál. Stundum er vísbendingin „ekki skrifa teljarann ​​á skjáinn“ nóg.

Hvernig útskýra aðrir það?

Í flestum fræðsluefni á netinu er setningafræði hringrásarinnar gefin sem hluti af „fyrirlestri“. Til dæmis, á developer.mozilla.org (eins og er), er nokkrum öðrum smíðum lýst ásamt while lykkjunni. Í þessu tilviki eru aðeins hönnunin sjálf gefin í formi sniðmáta. Útkomunni af sjósetningu þeirra er lýst í orðum, en það er engin skýring. Slík kynning á efninu margfaldar að mínu mati notagildi slíkra efna með núlli. Nemandinn getur endurskrifað kóðann og keyrt hann sjálfur, en hann þarf samt staðal til samanburðar. Hvernig geturðu skilið að dæmi hafi verið endurskrifað rétt ef það er ekkert til að bera niðurstöðuna saman við?
Þegar aðeins sniðmát er gefið, án dæmis, verður það enn erfiðara fyrir nemandann. Hvernig á að skilja að kóðabrotin séu rétt sett í sniðmátið? Þú getur prófað að skrifa einhvern veginn, og hlaupa svo. En ef það er enginn staðall til að bera saman niðurstöðuna, þá hjálpar sjósetja ekki heldur.

Í C++ námskeiðinu um innsæi er setningafræði lykkja grafin á þriðju síðu fyrirlesturs 4 um efnið „rekstraraðilar“. Þegar setningafræði lykkja er útskýrð er sérstök áhersla lögð á hugtakið „operator“. Hugtakið er sett fram sem safn staðreynda eins og „tákn; þetta er fullyrðing", "{} er samsett fullyrðing", "meginmál lykkjunnar verður að vera fullyrðing". Mér líkar ekki við þessa nálgun vegna þess að hún virðist fela mikilvæg sambönd á bak við eitt kjörtímabil. Þjálfarar þurfa að greina frumkóða forrits í hugtök á þessu stigi til að innleiða tungumálaforskriftina, en ekki nemendur sem fyrstu nálgun. Nýliðar í forritun eru sjaldan nógu vandvirkir til að fylgjast svo vel með skilmálum. Það er sjaldgæfur einstaklingur sem man og skilur ný orð í fyrsta skipti. Næstum enginn getur notað hugtak sem hann var nýbúinn að læra rétt. Þess vegna fá nemendur margar villur eins og „Ég skrifaði á meðan(a<7);{, en forritið virkar ekki.“
Að mínu mati er betra í upphafi að gefa upp setningafræði byggingu strax með sviga. Valmöguleikann án sviga ætti aðeins að útskýra ef nemandinn hefur ákveðna spurningu: "af hverju er enginn sviga og það virkar."

Í bók Okulov frá 2012 „Fundamentals of Programming“ byrjar kynning á lykkjum á for-mynstrinu, gefur síðan ráðleggingar um notkun þess og fer síðan strax í tilraunahluta kennslustundarinnar. Mér skilst að bókin hafi verið skrifuð fyrir þann minnihluta mjög færra nemenda sem koma sjaldan í kennsluna mína.

Í vinsælum bókum er útkoman úr kóðabrotum alltaf skrifuð. Til dæmis, "Java 8. The Complete Guide" 2015 útgáfa Shildt. Fyrst er sniðmát gefið, síðan dæmi um forrit og strax á eftir því - niðurstaða framkvæmdar.

Sem dæmi, skoðaðu while lykkju sem gerir hið gagnstæða
niðurtalning frá 10, og nákvæmlega 10 línur af „ráðstöfunum“ birtast:

//Продемонстрировать применение оператора цикла while
class While {
    public static void main(String args []) {
        int n = 10;
        while (n > 0) {
            System.out.println("такт " + n);
            n--;
        }
    }
}

Þegar þetta er keyrt gefur þetta forrit út tíu „lotur“ sem hér segir:
такт 10
такт 9
такт 8
такт 7
такт 6
такт 5
такт 4
такт 3
такт 2
такт 1

Aðferðin við að lýsa sniðmáti, sýnidæmi og niðurstöðu forritsins er einnig notuð í bókinni „Javascript for Kids“ og í js námskeiðinu á w3schools.com. Vefsíðusniðið gerir þetta dæmi meira að segja gagnvirkt.

Bók Stroustrup frá 2016 Principles and Practice Using C++ náði enn lengra. Fyrsta skrefið er að útskýra hvaða niðurstöðu ætti að fá og eftir það birtist texti forritsins. Þar að auki taka þeir ekki bara tilviljunarkennd dagskrá sem dæmi, heldur gefa þeir skoðunarferð í sögu. Þetta hjálpar til við að vekja athygli á þessu: „Sko, þetta er ekki bara ónýtur texti. Þú sérð eitthvað þýðingarmikið."

Sem dæmi um endurtekningu, líttu á fyrsta forritið sem keyrt er á geymt forritavél (EDSAC). Það var skrifað af David Wheeler við tölvurannsóknarstofu Cambridge háskóla á Englandi 6. maí 1949. Þetta forrit reiknar út og prentar einfaldan lista yfir ferninga.
0 0
1 1
2 4
3 9
4 16
...
98 9604
99 9801

Hér inniheldur hver lína tölu á eftir flipastaf ('t') og veldi þeirrar tölu. C++ útgáfan af þessu forriti lítur svona út:

//Вычисляем и распечатываем таблицу квадратов чисел 0-99
int main()
{
    int i = 0; // Начинаем с нуля
    while(i < 100){
        cout << i << 't' << square(i) << 'n';
        ++i;
    }
}

Athyglisvert er að setningafræðimynstrinu er ekki lýst í þessari bók. Stroustrup í kennarahandbók (þýðing) leggur áherslu á að það virði gáfur nemenda sinna. Kannski er hæfileikinn til að bera kennsl á mynstur í nokkrum dæmum talin birtingarmynd slíkrar greind.

Nálgun Stroustrups: að lýsa niðurstöðunni, leysa síðan vandamálið og síðan sjálfstæða greining nemandans - virðist íhuguðust. Þess vegna ákvað ég að leggja það til grundvallar, en segja það með minna sögulegu dæmi - verkefnið að draga úr „efnisyfirliti“. Það myndar auðþekkjanlegt akkeri þannig að síðan er hægt að segja „munið eftir verkefninu um efnisyfirlitið“ og þannig að nemendur muni nákvæmlega þetta. Í dæminu mínu reyndi ég að koma í veg fyrir tvær fleiri af algengustu ranghugmyndunum. Næst mun ég skrifa nánar um þá.

Í þessu verkefni erum við kynnt fyrir tækni til að leysa flókin vandamál. Fyrstu ákvörðun þarf að vera frumstæð og einföld. Jæja, þá geturðu hugsað um hvernig á að bæta þessa lausn.
Введение
Глава 1
Глава 2
Глава 3
Глава 4
Глава 5
Глава 6
Глава 7
Заключение

Samkvæmt athugunum mínum leiðir „sniðmát-dæmi-niðurstaða“ nálgunin í ýmsum samsetningum enn til þess að nemendur skynja hringrásina sem híeróglyf. Þetta lýsti sér í því að þeir skildu ekki hvers vegna það var skilyrði að skrifa þarna, hvernig ætti að velja á milli i++ og i— og annað sem virtist augljóst. Til að forðast þessar ranghugmyndir ætti nálgunin við að tala um hringrásir að leggja áherslu á merkingu þess að endurtaka sömu aðgerðir og aðeins þá formfesta þær með því að nota uppbyggingu. Þess vegna, áður en þú gefur lykkjusetningafræðina, þarftu að leysa vandamálið beint. Frumstæð lausn á efnisyfirlitsvandanum lítur svona út:

Console.WriteLine("Введение");
Console.WriteLine("Глава 1");
Console.WriteLine("Глава 2");
Console.WriteLine("Глава 3");
Console.WriteLine("Глава 4");
Console.WriteLine("Глава 5");
Console.WriteLine("Глава 6");
Console.WriteLine("Глава 7");
Console.WriteLine("Заключение");

Hvernig er hægt að bæta það?
Skiptu út einhæfum aðgerðum fyrir hringrás.
Hvaða aðgerðir eru endurteknar í röð án breytinga?
Það eru engar í þessu broti. Hins vegar eru skipanirnar til að birta orðið „kafli“ með tölu mjög líkar hver annarri.
Því er næsta stig að finna muninn á brotunum. Það er aðeins í þessu verkefni sem allt er augljóst, þá verða ekki stakar skipanir endurteknar, heldur kóðablokkir með 5 línum eða meira. Þú verður að leita ekki bara í listanum yfir skipanir, heldur í greiningar- eða lykkjubyggingum.
Í dæminu er munurinn á skipunum í númerinu á eftir orðinu „Kafli“.
Þegar munurinn er fundinn þarftu að skilja mynstur breytinganna. Mismunandi brotið er númerið? Er það stöðugt að aukast eða minnka? Hvernig breytist gildi tölunnar á milli tveggja liða hlið við hlið?
Í dæminu hækkar talan á eftir orðinu „Kafli“ í þrepum um 1. Mismunurinn er fundinn, mynstrið kemur í ljós. Nú geturðu skipt út mismunandi broti fyrir breytu.
Þú þarft að lýsa yfir slíkri breytu á undan fyrsta endurteknu brotinu. Slík breyta er venjulega kölluð I eða j eða eitthvað ítarlegra. Upphafsgildi þess verður að vera jafnt og fyrsta gildið sem birtist á skjánum. Í dæminu er fyrsta gildið 1.
Hvaða upphafsgildi ætti að taka til að sýna röð talna „100, 101, 102, 103, 104, 105“?
Fyrsta talan í þessari röð er 100.
Eftir hverja úttaksskipun þarftu að auka gildi þessarar breytu um 1. Þessi eining er breytingaskrefið.
Hvaða skref verður í röð talna „100, 102, 104, 106“?
Skref 2 í þessari röð.
Eftir að hafa skipt út mismunandi broti fyrir breytu mun kóðinn líta svona út:

Console.WriteLine("Введение");
int i;
i = 0;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Глава " + i);
i = i + 1;
Console.WriteLine("Заключение");

Eftir að hafa beitt „tjáðu mynstur breytu“ tækni í kóðanum færðu nokkra hópa af eins aðgerðum sem fara í röð. Nú er hægt að skipta út endurteknum aðgerðum fyrir lykkju.

Röð lausnar hringrásarvandans er minnkað í eftirfarandi skref:
* Leysið „höfuð“ með mörgum aðskildum skipunum
* Finndu mynstur
* Tjáðu mynstur breytu
* Raða sem hringrás

Næst eru ný hugtök kynnt svo nemandinn lendi ekki í þeirri stöðu að „ég skil allt, en ég get ekki sagt það“:
— teljari er alltaf breyta sem þarf til að fylgjast með fjölda skrefa í lykkju. Venjulega heiltala sem er borin saman við þvingunina.
— teljaraskref — lýsing á mynstri teljarabreytinga.
- þvingun - tala eða breyta sem teljarinn er borinn saman við þannig að reikniritið sé endanlegt. Teljargildið breytist til að nálgast mörkin.
— lykkja meginmál — safn skipana sem verða endurteknar. Þegar þeir segja „skipunin er skrifuð í lykkju,“ meina þeir líkamann.
— endurtekning lykkja — framkvæmd lykkjunnar í eitt skipti.
— lykkjuskilyrði — rökrétt tjáning sem ákvarðar hvort önnur endurtekning verður framkvæmd. (Það getur verið ruglingur við greinarvirki hér)
Þú þarft að vera viðbúinn því að í fyrstu munu nemendur nota hugtök í öðrum tilgangi. Þetta á bæði við um þá sterku og veiku. Að koma á sameiginlegu tungumáli er list. Nú mun ég skrifa stuttlega: þú þarft að stilla verkefnið „auðkenna kóðabrotið með <term>“ og nota þessi hugtök sjálfur rétt í samtali.
Eftir umbreytingu með lykkju fæst brotið:

Console.WriteLine("Введение");
int i = 0;
while (i < 7) {
    Console.WriteLine("Глава " + i);
    i = i + 1;
}
Console.WriteLine("Заключение");

Helsti misskilningur

Einn vinsæll misskilningur meðal nemenda er að þeir setja aðgerðir inni í lykkju sem þarf að gera aðeins einu sinni. Til dæmis svona:

;
int i = 0;
while (i < 7) {
    Console.WriteLine("Введение")
    Console.WriteLine("Глава " + i);
    i = i + 1;
    Console.WriteLine("Заключение");
}

Nemendur lenda í þessu vandamáli allan tímann, bæði í upphafi og í flóknari vandamálum.
Lykilvísbending í þessu tilfelli:

Hversu oft ættir þú að endurtaka skipunina: einu sinni eða mörgum sinnum?

Skipanirnar til að prenta orðin „Inngangur“ og „Niðurstaða“ og lýsa yfir og frumstilla breytuna i eru ekki eins og aðrar endurteknar aðgerðir. Þau eru framkvæmd aðeins einu sinni, sem þýðir að þau þurfa að vera skrifuð utan lykkjunnar.

Öll þrjú stig lausnarinnar ættu að vera áfram í kóðanum svo þú getir vísað til þeirra síðar ef upp koma erfiðleikar. Það er nóg að gera athugasemdir við fyrstu tvo valkostina svo þeir trufli ekki.
Vakin skal athygli nemandans á eftirfarandi staðreyndum:
— Í lykkjuástandi eru teljari og takmörk venjulega borin saman. Teljarinn getur breyst í meginmáli lykkjunnar, en takmörkin geta það ekki. Til að brjóta þessa reglu þarftu að setja fram sannfærandi ástæður.
— Skipanir til að birta orðin „Inngangur“ og „Ályktun“ eru staðsettar fyrir utan meginhluta lykkjunnar. Við þurfum að framkvæma þær 1 sinni. „Inngangur“ - áður en aðgerðirnar eru endurteknar, „Niðurstaða“ - á eftir.
Í því ferli að sameina þetta viðfangsefni, ná tökum á þeim næstu, auk þess að takast á við erfiðleika, er gagnlegt fyrir jafnvel sterka nemendur að spyrja spurningarinnar: „Hversu oft þarf að framkvæma þessa aðgerð? Einn eða margir?

Þróun viðbótarfærni

Í því ferli að læra lotur þróa nemendur einnig færni til að greina og leysa vandamál. Til að framkvæma greiningu þarf nemandinn að kynna æskilega niðurstöðu og bera saman við raunverulega niðurstöðu. Aðgerðir til úrbóta ráðast af muninum á þeim.
Þar sem nemendur á þessu stigi hafa enn litla hugmynd um „æskilega“ niðurstöðu geta þeir einbeitt sér að prófgögnum. Að jafnaði skilur enginn á þessu stigi ennþá hvað getur farið úrskeiðis og hvernig á að bregðast við því. Þess vegna skrifa ég í minnisbók lýsingu á dæmigerðum vandamálum og nokkrar leiðir til að leysa þau. Að velja þann sem hentar best er verkefni nemandans sjálfs.
Skrá þarf til að spyrja „gerist það sem búist var við?”, „Hver ​​þessara aðstæðna gerðist núna?”, „Hjálpaði lausnin sem beitt var?“

  1. Fjöldi aðgerða er 1 færri eða fleiri en áætlað var. Lausnir:
    — hækka upphafsgildi teljarans um 1.
    — skipta út ströngum samanburðaraðgerðum (< eða >) fyrir óstrangan (<= eða >=).
    — breyta viðmiðunarmörkum í 1.
  2. Aðgerðir í lykkju eru framkvæmdar án þess að stoppa, endalaust. Lausnir:
    — bættu við breytingaskipun teljara ef hana vantar.
    — laga teljarabreytingaskipunina þannig að gildi hennar verði nær mörkunum.
    — fjarlægðu þvingunarbreytingaskipunina ef hún er í meginmáli lykkjunnar.
  3. Fjöldi aðgerða í lykkju er meira en 1 færri eða fleiri en búist var við. Aðgerðin í lykkjunni var ekki framkvæmd einu sinni. Fyrst þarftu að finna út raunveruleg gildi breytanna rétt áður en lykkjan byrjar. Lausnir:
    — breyta upphafsgildi þvingunarinnar
    — breyta upphafsgildi teljarans

Vandamál 3 felur venjulega í sér að nota ranga breytu eða ekki endurstilla teljarann ​​á núll.

Eftir þessa skýringu getur nemandinn enn haft ýmsar ranghugmyndir um hvernig lykkjur virka.
Til að eyða þeim algengustu gef ég þér eftirfarandi verkefni:

  1. Þar sem mörkin, upphafsgildi teljara eða teljaraskref er slegið inn af notanda.
  2. Þar sem teljaragildið verður að nota í einhverri talnatjáningu. Það er ráðlegt að nota teljara í róttæku orðatiltækinu eða í nefnara þannig að munurinn sé ólínulegur.
  3. Þar sem teljaragildið birtist ekki á skjánum á meðan lykkjan er í gangi. Til dæmis að sýna nauðsynlegan fjölda af eins textabrotum eða teikna mynd með skjaldbökugrafík.
  4. Þar sem þú þarft að framkvæma fyrst nokkrar endurteknar aðgerðir og síðan aðrar.
  5. Þar sem þú þarft að framkvæma aðrar aðgerðir fyrir og eftir endurtekningu

Fyrir hvert verkefni þarftu að leggja fram prófunargögn og væntanlega niðurstöðu.

Til að skilja hversu hratt þú getur hreyft þig þarftu að lesa skilmála þessara vandamála og spyrja: "hvernig eru þau frábrugðin dæminu?", "Hvað þarf að breyta í dæminu til að leysa þau?" Ef nemandinn svarar markvisst, leyfðu honum þá að leysa að minnsta kosti einn í bekknum og restina heima sjálfur. Ef lausnin tekst, þá getum við byrjað að útskýra aðstæður inni í lykkjunum.
Ef þú átt í vandræðum með að leysa vandamál á eigin spýtur þarftu að vinna í gegnum allt í bekknum. Til að forðast að leysa vandamálið minnti á að teikna uglu mæli ég með því að leysa vandamálið fyrst á óalgengan hátt. Það er, þannig að lausnin standist fyrsta prófið og notar ekki lykkjubygginguna. Jæja, beittu síðan umbreytingum til að ná fram alhliða lausninni.

Lykkjur og greinar

Að mínu mati er gagnlegt að gefa efninu „hringrásir innan útibúa“ sérstaklega. Svo að síðar geturðu séð muninn á því að athuga ástand margfalt og athuga það einu sinni.
Verkefnin fyrir sameiningu munu snúast um að gefa út tölur frá A til B, sem notandinn færir inn:
- alltaf í hækkandi röð.
- hækkandi eða lækkandi eftir gildum A og B.

Efnið „útibú innan lykkja“ ætti að færa áfram eftir að nemandinn hefur náð tökum á tækninni: „að skipta um mynstur fyrir breytu“ og „skipta endurteknum aðgerðum út fyrir hringrás“.
Helsta ástæðan fyrir því að nota útibú innan í lykkjur eru frávik í mynstrinu. Í miðjunni brotnar það eftir upphafsgögnum.
Fyrir þá nemendur sem geta leitað lausna með því að sameina einfalda tækni, nægir að segja „greina má skrifa inn í lykkjur“ og gefa „til dæmis“ vandamálið algjörlega til að leysa sjálfstætt.
Dæmi um verkefni:

Notandinn slær inn töluna X. Sýndu tölurnar frá 0 til 9 í dálki og settu '+' tákn á móti tölunni sem er jöfn X.

Ef 0 var slegið inn0+
1
2
3
4
5
6
7
8
9

Ef 6 var slegið inn0
1
2
3
4
5
6+
7
8
9

Ef 9 var slegið inn0
1
2
3
4
5
6
7
8
9+

Ef 777 var slegið inn0
1
2
3
4
5
6
7
8
9

Ef stutt útskýring er ekki nóg til að skrifa með lykkju, þá þarf að ná fram alhliða lausn á sama vandamáli án lykkju.
Þú færð einn af tveimur valkostum:
Óskað

string temp;
temp = Console.ReadLine();
int x;
x = int.Parse(temp);
if (x==0) {
    Console.WriteLine(0 + "+");
} else {
    Console.WriteLine(0);
}
if (x==1) {
    Console.WriteLine(1 + "+");
} else {
    Console.WriteLine(1);
}
if (x==2) {
    Console.WriteLine(2 + "+");
} else {
    Console.WriteLine(2);
}
if (x==3) {
    Console.WriteLine(3 + "+");
} else {
    Console.WriteLine(3);
}
if (x==4) {
    Console.WriteLine(4 + "+");
} else {
    Console.WriteLine(4);
}
if (x==5) {
    Console.WriteLine(5 + "+");
} else {
    Console.WriteLine(5);
}
if (x==6) {
    Console.WriteLine(6 + "+");
} else {
    Console.WriteLine(6);
}
if (x==7) {
    Console.WriteLine(7 + "+");
} else {
    Console.WriteLine(7);
}
if (x==8) {
    Console.WriteLine(8 + "+");
} else {
    Console.WriteLine(8);
}
if (x==9) {
    Console.WriteLine(9 + "+");
} else {
    Console.WriteLine(9);
}

Mögulegt

string temp;
temp = Console.ReadLine();
int x;
x = int.Parse(temp);
if (x==0) {
    Console.WriteLine("0+n1n2n3n4n5n6n7n8n9");
}
if (x==1) {
    Console.WriteLine("0n1+n2n3n4n5n6n7n8n9");
}
if (x==2) {
    Console.WriteLine("0n1n2+n3n4n5n6n7n8n9");
}
if (x==3) {
    Console.WriteLine("0n1n2n3+n4n5n6n7n8n9");
}
if (x==4) {
    Console.WriteLine("0n1n2n3n4+n5n6n7n8n9");
}
if (x==5) {
    Console.WriteLine("0n1n2n3n4n5+n6n7n8n9");
}
if (x==6) {
    Console.WriteLine("0n1n2n3n4n5n6+n7n8n9");
}
if (x==7) {
    Console.WriteLine("0n1n2n3n4n5n6n7+n8n9");
}
if (x==8) {
    Console.WriteLine("0n1n2n3n4n5n6n7n8+n9");
}
if (x==9) {
    Console.WriteLine("0n1n2n3n4n5n6n7n8n9+");
}

Ég gef svipað verkefni fyrirfram á meðan ég er að kynna mér greinargreinina.
Ef nemandinn kemur með „mögulegan“ valmöguleika, þá þarftu að segja þeim að það geti verið margar lausnir á sama vandamálinu. Hins vegar eru þeir mismunandi hvað varðar mótstöðu sína við breytingar á kröfum. Spyrðu spurningarinnar: "Hversu marga staði í kóðanum þyrfti að leiðrétta ef ég þyrfti að bæta við öðru númeri?" Í „mögulegu“ útgáfunni þarftu að bæta við einni útibúi í viðbót og bæta við nýju númeri á 10 öðrum stöðum. Í "eftirspurn" er nóg að bæta aðeins við einni grein.
Stilltu verkefnið til að endurskapa „æskilegan“ valkostinn, finndu síðan mynstur í kóðanum, framkvæmdu breytuskipti og skrifaðu lykkju.
Ef þú hefur hugmynd um hvernig á að leysa þetta vandamál án lykkju á annan hátt, vinsamlegast skrifaðu í athugasemdirnar.

Lykkjur innan Lykkjur

Í þessu efni þarftu að borga eftirtekt til eftirfarandi:
— teljarar fyrir innri og ytri lykkjur verða að vera mismunandi breytur.
— teljarinn fyrir innri lykkjuna verður að endurstilla mörgum sinnum (þ.e. í meginhluta ytri lykkjunnar).
— í textaúttaksverkefnum geturðu ekki fyrst skrifað einn staf í nokkrum línum og síðan þann seinni. Þú verður fyrst að prenta alla stafi fyrstu línunnar, síðan alla stafi hinnar, og svo framvegis.

Best er að byrja að útskýra efni lykkjur innan lykkja með því að útskýra mikilvægi þess að núllstilla teljarann.
Dæmi um verkefni:

Notandinn slær inn tvær tölur: R og T. Prentaðu tvær línur af „#“ stöfum. Fyrsta línan ætti að innihalda R stafi. Önnur línan inniheldur T stykki. Ef einhver tala er neikvæð skaltu birta villuboð.

R=5, T=11#####
########################

R=20, T=3######################
# # #

R=-1, T=6R gildið verður að vera ekki neikvætt

R=6, T=-2T gildi verður að vera ekki neikvætt

Augljóslega hefur þetta vandamál líka að minnsta kosti tvær lausnir.
Óskað

string temp;
int R;
int T;
temp = Console.ReadLine();
R = int.Parse(temp);
temp = Console.ReadLine();
T = int.Parse(temp);
int i = 0;
while (i < R)
{
    Console.Write("#");
    i = i + 1;
}
Console.WriteLine();
i = 0;
while (i < T)
{
    Console.Write("#");
    i = i + 1;
}

Möguleg #1

string temp;
int R;
int T;
temp = Console.ReadLine();
R = int.Parse(temp);
temp = Console.ReadLine();
T = int.Parse(temp);
int i = 0;
while (i < R)
{
    Console.Write("#");
    i = i + 1;
}
Console.WriteLine();
int j = 0;
j = 0;
while (j < T)
{
    Console.Write("#");
    j = j + 1;
}

Munurinn er sá að í "mögulegu" lausninni var önnur breyta notuð til að gefa út seinni línuna. Þú ættir að krefjast þess að nota sömu breytuna fyrir báðar lykkjur. Þessa takmörkun er hægt að réttlæta með því að lausn með einum teljara í tvær lotur er mynd af hugtakinu „endurstilla teljara“. Það er nauðsynlegt að skilja þetta hugtak þegar eftirfarandi vandamál eru leyst. Sem málamiðlun geturðu vistað báðar lausnirnar á vandamálinu.

Dæmigert vandamál með að nota eina teljarabreytu fyrir tvær lykkjur birtist svona:
R=5, T=11#####
######

Fjöldi stafa í annarri línu samsvarar ekki gildi T. Ef þú þarft hjálp við þetta vandamál, þá þarftu að skoða athugasemdirnar um dæmigerð vandamál með lykkjur. Þetta er einkenni #3. Það er greint ef þú bætir við teljaragildi úttak strax fyrir aðra lotu. Leiðrétt með endurstillingu. En það er betra að segja þetta ekki strax. Nemandi verður að reyna að setja fram að minnsta kosti eina tilgátu.

Það er auðvitað önnur lausn. En ég hef aldrei séð það meðal nemenda. Á stigi námslota mun sagan um það afvegaleiða athyglina. Þú getur komið aftur að því síðar þegar þú lærir um strengjaaðgerðir.
Möguleg #2

string temp;
int R;
int T;
temp = Console.ReadLine();
R = int.Parse(temp);
temp = Console.ReadLine();
T = int.Parse(temp);
Console.WriteLine(new String('#', R));
Console.WriteLine(new String('#', T));

Næsta áskilið verkefni:

Sýndu tölurnar frá 0 til 9. Hver tala ætti að vera á sinni línu. Fjöldi tölustafa í línu (W) er sleginn inn af lyklaborðinu.

W=10
1
2
3
4
5
6
7
8
9

W=100000000000
1111111111
2222222222
3333333333
4444444444
5555555555
6666666666
7777777777
8888888888
9999999999

Ef nemandi hefur náð tökum á tækninni að skipta um breytu, þá mun hann takast á við nokkuð fljótt. Hugsanlegt vandamál verður aftur að endurstilla breytuna. Ef þú ræður ekki við umbreytinguna þýðir það að þú varst að flýta þér og þarft að leysa einfaldari vandamál.

Takk fyrir athyglina. Líkaðu við og gerist áskrifandi að rásinni.

PS Ef þú finnur innsláttarvillur eða villur í textanum, vinsamlegast láttu mig vita. Þetta er hægt að gera með því að velja hluta af textanum og ýta á „Ctrl / ⌘ + Enter“ ef þú ert með Ctrl / ⌘, eða í gegnum einkaskilaboð. Ef báðir valkostir eru ekki tiltækir skaltu skrifa um villur í athugasemdunum. Þakka þér fyrir!

Aðeins skráðir notendur geta tekið þátt í könnuninni. Skráðu þig inn, takk.

Könnun fyrir lesendur án karma

  • 20,0%Ég kenni faglega, +11

  • 20,0%Ég kenni faglega, -11

  • 60,0%Ég kenni ekki, +13

  • 0,0%Ég kenni ekki, -10

  • 0,0%Annað0

5 notendur kusu. 5 notendur sátu hjá.

Heimild: www.habr.com

Bæta við athugasemd