Jinsi ya kufundisha jinsi ya kushinda matatizo, na wakati huo huo kuandika mizunguko

Licha ya ukweli kwamba tutazungumzia kuhusu moja ya mada ya msingi, makala hii imeandikwa kwa wataalamu wenye ujuzi. Kusudi ni kuonyesha maoni potofu ya wanaoanza katika upangaji programu. Kwa watengenezaji wanaofanya mazoezi, shida hizi zimetatuliwa kwa muda mrefu, zimesahaulika au hazijatambuliwa kabisa. Nakala hiyo inaweza kuwa muhimu ikiwa unahitaji ghafla kumsaidia mtu na mada hii. Nakala hiyo inalingana na nyenzo kutoka kwa vitabu anuwai juu ya programu na Schildt, Stroustrup, Okulov.

Mada kuhusu mizunguko ilichaguliwa kwa sababu watu wengi sana hawajumuishwi nayo wakati wa kusimamia programu.

Mbinu hii imeundwa kwa wanafunzi dhaifu. Kama sheria, watu wenye nguvu hawakwama kwenye mada hii na hakuna haja ya kuja na mbinu maalum kwao. Kusudi la sekondari la kifungu ni kuhamisha mbinu hii kutoka kwa darasa la "kazi kwa wanafunzi wote, lakini mwalimu mmoja tu" hadi darasa la "kazi kwa wanafunzi wote, walimu wote". Sidai uhalisi kabisa. Ikiwa tayari unatumia mbinu sawa kufundisha mada hii, tafadhali andika jinsi toleo lako linavyotofautiana. Ukiamua kuitumia, tuambie iliendaje. Ikiwa mbinu kama hiyo imeelezewa katika kitabu, tafadhali andika jina.


Nilifanya kazi kwenye mbinu hii kwa miaka 4, nikisoma kibinafsi na wanafunzi wa viwango tofauti vya mafunzo. Kwa jumla kuna takriban wanafunzi hamsini na masaa elfu mbili ya madarasa. Mwanzoni, wanafunzi kila wakati walikwama kwenye mada hii na kuondoka. Baada ya kila mwanafunzi, mbinu na vifaa vilirekebishwa. Katika mwaka uliopita, wanafunzi hawajakwama tena kwenye mada hii, kwa hivyo niliamua kushiriki matokeo yangu.

Kwa nini barua nyingi? Mizunguko ni ya msingi sana!

Kama nilivyoandika hapo juu, kwa watengenezaji wanaofanya mazoezi na kwa wanafunzi wenye nguvu, ugumu wa wazo la vitanzi unaweza kupunguzwa. Kwa mfano, unaweza kutoa hotuba ndefu, kuona vichwa vya kutikisa na macho yenye akili. Lakini wakati wa kujaribu kutatua shida yoyote, shida na shida zisizoelezeka huanza. Baada ya mhadhara, wanafunzi labda walikuwa na uelewa wa sehemu tu. Hali hiyo inazidishwa na ukweli kwamba wanafunzi wenyewe hawawezi kutoa sauti ni nini hasa udanganyifu wao.
Siku moja niligundua kwamba wanafunzi waliona mifano yangu kama hieroglyphs. Hiyo ni, kama maandishi yasiyoweza kugawanywa ambayo unahitaji kuongeza herufi "ya uchawi" na itafanya kazi.
Wakati mwingine niliona kwamba wanafunzi wanafikiri kwamba ili kutatua tatizo maalum unahitaji kitu kingine muundo ambao sijashughulikia bado. Ingawa suluhisho lilihitaji marekebisho kidogo tu ya mfano.

Kwa hivyo nilikuja na wazo kwamba mwelekeo haupaswi kuwa kwenye syntax ya misemo, lakini kwa wazo la kurudisha msimbo unaorudiwa kwa kutumia vitanzi. Wanafunzi wakishafahamu wazo hili, sintaksia yoyote inaweza kuboreshwa kwa mazoezi kidogo.

Nani na kwa nini ninafundisha?

Kwa kuwa hakuna mitihani ya kuingia, madarasa yanaweza kujumuisha wanafunzi wenye nguvu na dhaifu sana. Unaweza kusoma zaidi kuhusu wanafunzi wangu katika makala Picha ya wanafunzi wa kozi ya jioni
Nilijitahidi kuhakikisha kwamba kila mtu anayetaka kujifunza programu anaweza kujifunza.
Madarasa yangu hufanyika kibinafsi na mwanafunzi hulipa pesa zake mwenyewe kwa kila moja. Inaweza kuonekana kuwa wanafunzi wataongeza gharama na kudai kiwango cha chini. Hata hivyo, watu huenda kwenye madarasa ya uso kwa uso na mwalimu hai si kwa ujuzi yenyewe, lakini kwa ujasiri wa kile wamejifunza, kwa hisia ya maendeleo na kwa idhini kutoka kwa mtaalam (mwalimu). Ikiwa wanafunzi hawahisi maendeleo katika ujifunzaji wao, wataondoka. Kwa ujumla, madarasa yanaweza kupangwa ili wanafunzi wahisi maendeleo katika kuongeza idadi ya miundo inayojulikana. Hiyo ni, kwanza tunasoma wakati kwa undani, kisha tunasoma, kisha fanya wakati, na sasa tunayo kozi ya usiku elfu moja tayari, ambayo mizunguko pekee inasomwa kwa miezi miwili, na mwisho - mwanafunzi aliyeandika. maktaba ya kawaida chini ya maagizo. Hata hivyo, ili kutatua matatizo ya vitendo, huhitaji ujuzi tu wa nyenzo, lakini pia uhuru katika matumizi yake na katika kutafuta habari mpya. Kwa hiyo, kwa kozi za ana kwa ana, nadhani kanuni sahihi ni kufundisha kiwango cha chini na kuhimiza utafiti wa kujitegemea wa nuances na mada zinazohusiana. Katika mada ya vitanzi, ninaona wakati huu wa ujenzi kuwa wa chini. Unaweza kuelewa kanuni kutoka kwayo. Kujua kanuni, unaweza kujua kwa wote na kufanya-wakati wewe mwenyewe.

Ili kufikia umilisi wa nyenzo na wanafunzi dhaifu, kuelezea syntax haitoshi. Inahitajika kutoa kazi rahisi zaidi lakini tofauti na kuelezea mifano kwa undani zaidi. Hatimaye, kasi ya maendeleo inapunguzwa na uwezo wa mwanafunzi wa kubadilisha misemo na kutafuta ruwaza. Kwa wanafunzi mahiri, kazi nyingi zitachosha. Wakati wa kusoma nao, sio lazima kusisitiza kutatua 100% ya shida. Nyenzo yangu inaweza kutazamwa github yangu. Ukweli, hazina ni kama grimoire ya vita - hakuna mtu isipokuwa mimi atakayeelewa ni wapi, na ikiwa utashindwa kuangalia, unaweza kwenda wazimu.

Mbinu hiyo ina mwelekeo wa mazoezi

Nadharia inaelezwa kwa kutumia mfano wa kutatua tatizo. Katika misingi ya darasa la programu ambapo matawi na vitanzi hufundishwa, haiwezekani kutoa hotuba muhimu juu ya mada moja kwa saa nzima. Dakika 15-20 ni ya kutosha kuelezea dhana. Shida kuu hutokea wakati wa kufanya kazi za vitendo.
Walimu wanaoanza wanaweza kukerwa na waendeshaji, matawi, vitanzi na safu katika mhadhara mmoja. Lakini wanafunzi wao watakabiliwa na tatizo la kuingiza habari hii.
Ni muhimu si tu kuwaambia nyenzo, lakini pia kuhakikisha kwamba wasikilizaji wanaielewa.

Ukweli wa kusimamia mada imedhamiriwa na jinsi mwanafunzi anavyoweza kukabiliana na kazi ya kujitegemea.
Ikiwa mwanafunzi aliweza kutatua shida kwenye mada bila msaada wa mwalimu, basi mada hiyo imeeleweka. Ili kuhakikisha kujipima, kila kazi imeelezewa katika jedwali na matukio ya mtihani. Kazi zina mpangilio wazi. Kuruka majukumu haipendekezi. Ikiwa kazi ya sasa ni ngumu sana, basi kwenda kwenye ijayo haina maana. Ni ngumu zaidi. Ili mwanafunzi aweze kusimamia kazi ngumu ya sasa, mbinu kadhaa hufafanuliwa kwake kwa kutumia mfano wa shida ya kwanza. Kwa kweli, maudhui yote ya mada yanakuja kwa mbinu za kushinda matatizo. Mizunguko ni zaidi ya athari ya upande.

Kazi ya kwanza daima ni mfano. Ya pili inatofautiana kidogo na inafanywa "kwa kujitegemea" mara moja baada ya kwanza chini ya usimamizi wa mwalimu. Kazi zote zinazofuata zinalenga kulipa kipaumbele kwa vitu vidogo vingi ambavyo vinaweza kusababisha maoni potofu.

Ufafanuzi wa mfano huo ni mazungumzo ambayo mwanafunzi anahitaji kurudisha uenezi na uthibitisho mtambuka ili kuhakikisha kuwa amefahamu sehemu ya nyenzo.

Nitakuwa banal na kusema kwamba mfano wa kwanza juu ya mada ni muhimu sana. Ikiwa una nyenzo kwa ajili ya kazi kubwa ya kujitegemea, kuachwa kwa mfano wa kwanza kunaweza kusahihishwa. Ikiwa hakuna kitu kingine isipokuwa mfano, basi mwanafunzi uwezekano mkubwa hatasimamia mada.

Wakati au kwa?

Moja ya masuala ya utata ni uchaguzi wa ujenzi kwa mfano: wakati au kwa. Wakati mmoja, rafiki yangu msanidi programu ambaye hakuwa na uzoefu wa kufundisha alitumia saa moja kunishawishi kuwa kitanzi cha for loop ndicho kilikuwa rahisi kueleweka. Mabishano hayo yalileta “kila kitu ndani yake kiko wazi na kimewekwa mahali pake.” Walakini, sababu kuu ya shida kwa Kompyuta halisi ni wazo la mzunguko yenyewe, na sio uandishi wake. Ikiwa mtu haelewi wazo hili, basi atakuwa na shida na syntax. Mara tu wazo linapogunduliwa, shida za muundo wa nambari hupotea peke yao.

Katika nyenzo zangu, mada ya vitanzi hufuata mada ya matawi. Kufanana kwa nje kwa ikiwa na wakati huturuhusu kuchora mlinganisho wa moja kwa moja: "wakati hali katika kichwa ni kweli, basi mwili hutekelezwa." Upekee pekee wa mzunguko ni kwamba mwili unatekelezwa mara nyingi.

Hoja yangu ya pili ni kwamba wakati inahitaji umbizo kidogo kuliko kwa. Uumbizaji mdogo unamaanisha makosa machache ya kijinga kwa kukosa koma na mabano. Wanaoanza bado hawajakuza usikivu wa kutosha na umakini ili kuzuia kiotomati makosa ya sintaksia.
Hoja ya tatu imeelezwa katika vitabu vingi vizuri kama hoja ya kwanza.

Ikiwa mwanafunzi anaweza kubadilisha misemo kwa urahisi, basi unaweza kuzungumza juu ya kupita. Kisha mwanafunzi atachagua kile anachopenda zaidi. Ikiwa mabadiliko husababisha ugumu, basi ni bora sio kuvuruga umakini wako. Mwache mwanafunzi asuluhishe kila kitu kwa wakati. Mara tu unapofahamu mada ya vitanzi, unaweza kuandika upya masuluhisho ili kujizoeza kugeuza wakati kwa.
Vitanzi vya Postcondition ni mnyama adimu sana. Situmii wakati wowote juu yake hata kidogo. Ikiwa mwanafunzi amefahamu mawazo ya kutambua ruwaza na kubadilisha misemo, anaweza kubaini bila msaada wangu.

Wakati wa kuonyesha mfano wa kwanza kwa wanafunzi wenye nguvu, ninazingatia ukweli kwamba katika mfano wa kwanza ni muhimu kurekodi sio tu suluhisho, bali pia mlolongo mzima wa vitendo vilivyosababisha matokeo. Wanafunzi wavivu wanaweza kupuuza uandishi na kunakili algoriti ya mwisho pekee. Wanahitaji kusadikishwa kwamba siku moja kazi ngumu itawajia. Ili kutatua, utahitaji kufuata hatua kama katika mfano huu. Ndiyo maana ni muhimu kurekodi hatua zote. Katika matatizo yafuatayo itawezekana kuondoka tu toleo la mwisho la suluhisho.

Wazo kuu la otomatiki ni kwamba tunakabidhi kompyuta kufanya kazi ya kawaida kwa mtu. Moja ya mbinu za msingi ni kuandika loops. Inatumika wakati vitendo kadhaa vya kurudia sawa vimeandikwa katika mpango mfululizo.

Uwazi ni bora kuliko uwazi

Huenda ikaonekana kuwa ni wazo zuri kuonyesha kifungu kimoja cha maneno mara kadhaa katika kazi ya kwanza ya kupekua. Kwa mfano:

Hurray, inafanya kazi!
Hurray, inafanya kazi!
Hurray, inafanya kazi!
Hurray, inafanya kazi!
Hurray, inafanya kazi!
Hurray, inafanya kazi!
Hurray, inafanya kazi!
Hurray, inafanya kazi!

Chaguo hili ni mbaya kwa sababu thamani ya kaunta haionekani kwenye matokeo. Hili ni tatizo kwa wanaoanza. Usimdharau. Hapo awali, kazi hii ilikuwa ya kwanza, na kazi ya kupata safu ya nambari kwa mpangilio wa kupanda ilikuwa ya pili. Ilikuwa ni lazima kuanzisha maneno ya ziada "mzunguko wa mara N" na "mzunguko kutoka A hadi B", ambayo kimsingi ni kitu kimoja. Ili sio kuunda vyombo visivyo vya lazima, niliamua kuonyesha mfano tu na matokeo ya safu ya nambari. Watu wachache wanaweza kujifunza jinsi ya kushikilia counter katika kichwa chao na kuiga tabia ya programu kichwani mwao bila maandalizi. Baadhi ya wanafunzi hukutana kwanza na kielelezo cha kiakili kwenye mada ya mizunguko.
Baada ya mazoezi fulani, ninatoa kazi ya kurudia maandishi sawa ili kutatuliwa kwa kujitegemea. Ikiwa utatoa kihesabu kinachoonekana kwanza na kisha kisichoonekana, wanafunzi watakuwa na matatizo machache. Wakati mwingine kidokezo "usiandike kihesabu kwenye skrini" kinatosha.

Wengine wanaielezeaje?

Katika nyenzo nyingi za elimu kwenye mtandao, syntax ya mzunguko hutolewa kama sehemu ya "hotuba". Kwa mfano, kwenye developer.mozilla.org (kwa sasa), miundo mingine kadhaa imeelezewa pamoja na kitanzi cha wakati. Katika kesi hii, miundo tu yenyewe hutolewa kwa namna ya templates. Matokeo ya uzinduzi wao yanaelezewa kwa maneno, lakini hakuna kielelezo. Kwa maoni yangu, uwasilishaji kama huo wa mada huzidisha manufaa ya nyenzo hizo kwa sifuri. Mwanafunzi anaweza kuandika tena msimbo na kuuendesha mwenyewe, lakini bado anahitaji kiwango cha kulinganisha. Unawezaje kuelewa kuwa mfano umeandikwa tena kwa usahihi ikiwa hakuna kitu cha kulinganisha matokeo na?
Wakati template tu inatolewa, bila mfano, inakuwa ngumu zaidi kwa mwanafunzi. Jinsi ya kuelewa kuwa vipande vya nambari vimewekwa kwa usahihi kwenye template? Unaweza kujaribu kuandika kwa namna fulani, na kisha kukimbia. Lakini ikiwa hakuna kiwango cha kulinganisha matokeo, basi uzinduzi hautasaidia pia.

Katika kozi ya C++ juu ya Intuitive, syntax ya kitanzi imezikwa katika ukurasa wa tatu wa Hotuba ya 4 juu ya mada "waendeshaji". Wakati wa kuelezea syntax ya loops, msisitizo maalum huwekwa kwenye neno "operator". Neno hili linawasilishwa kama seti ya ukweli kama vile "ishara; hii ni kauli", "{} ni kauli kiwanja", "mwili wa kitanzi lazima kiwe taarifa". Siipendi njia hii kwa sababu inaonekana kuficha uhusiano muhimu nyuma ya muhula mmoja. Kuchanganua msimbo wa chanzo wa programu katika masharti katika kiwango hiki kunahitajika na wasanidi wakusanyaji ili kutekeleza vipimo vya lugha, lakini si kwa wanafunzi kama makadirio ya kwanza. Wageni kwenye programu ni nadra sana kuwa waangalifu vya kutosha kulipa usikivu wa karibu wa masharti. Ni mtu adimu anayekumbuka na kuelewa maneno mapya mara ya kwanza. Karibu hakuna mtu anayeweza kutumia kwa usahihi neno ambalo wamejifunza. Kwa hivyo, wanafunzi hupata makosa mengi kama vile "Niliandika nikiwa(a<7);{, lakini programu haifanyi kazi."
Kwa maoni yangu, mwanzoni ni bora kutoa syntax ya ujenzi mara moja na mabano. Chaguo bila mabano inapaswa kuelezewa tu ikiwa mwanafunzi ana swali maalum: "kwa nini hakuna mabano na inafanya kazi."

Katika kitabu cha Okulov cha 2012 "Misingi ya Kupanga," utangulizi wa vitanzi huanza na muundo, kisha unatoa mapendekezo ya matumizi yake, na kisha huenda mara moja kwenye sehemu ya majaribio ya somo. Ninaelewa kwamba kitabu kiliandikwa kwa ajili ya wale wachache wa wanafunzi wenye uwezo sana ambao mara chache huja kwenye madarasa yangu.

Katika vitabu maarufu, matokeo ya vipande vya kanuni huandikwa daima. Kwa mfano, toleo la 8 la Shildt la "Java 2015. Mwongozo Kamili". Kwanza, template inapewa, kisha mpango wa mfano na mara baada yake - matokeo ya utekelezaji.

Kama mfano, fikiria kitanzi cha muda ambacho hufanya kinyume
kuhesabu kuanzia 10, na mistari 10 haswa ya "hatua" inaonyeshwa:

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

Mara tu inapoendeshwa, programu hii hutoa "mizunguko" kumi kama ifuatavyo:
такт 10
такт 9
такт 8
такт 7
такт 6
такт 5
такт 4
такт 3
такт 2
такт 1

Mbinu ya kuelezea kiolezo, mpango wa mfano na matokeo ya programu pia hutumiwa katika kitabu "Javascript for Kids" na katika kozi ya js kwenye w3schools.com. Umbizo la ukurasa wa wavuti hata huruhusu mfano huu kuingiliana.

Kitabu cha Stroustrup cha 2016 Kanuni na Mazoezi ya Kutumia C++ kilienda mbali zaidi. Hatua ya kwanza ni kueleza matokeo gani yanapaswa kupatikana, na baada ya hayo maandishi ya programu yanaonyeshwa. Kwa kuongezea, hawachukui tu mpango wa nasibu kama mfano, lakini hutoa safari katika historia. Hii husaidia kuteka uangalifu kwake: "Angalia, hii sio maandishi tu yasiyofaa. Unaona kitu cha maana."

Kama mfano wa kurudia, fikiria programu ya kwanza iliyotekelezwa kwenye mashine ya programu iliyohifadhiwa (EDSAC). Iliandikwa na David Wheeler katika Maabara ya Kompyuta ya Chuo Kikuu cha Cambridge, Uingereza mnamo Mei 6, 1949. Mpango huu huhesabu na kuchapisha orodha rahisi ya mraba.
0 0
1 1
2 4
3 9
4 16
...
98 9604
99 9801

Hapa, kila mstari una nambari inayofuatwa na herufi ya kichupo ('t') na mraba wa nambari hiyo. Toleo la C++ la programu hii linaonekana kama hii:

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

Cha kufurahisha ni kwamba muundo wa sintaksia haujaelezewa katika kitabu hiki. Stroustrup katika mwongozo wa mwalimu (tafsiri) inasisitiza kuwa inaheshimu akili ya wanafunzi wake. Labda uwezo wa kutambua muundo katika mifano kadhaa inachukuliwa kuwa udhihirisho wa akili kama hiyo.

Ninavyojieleza

Mbinu ya Stroustrup: kuelezea matokeo, kisha kutatua tatizo, na kisha uchambuzi wa kujitegemea na mwanafunzi - inaonekana kuwa ya kufikiri zaidi. Kwa hivyo, niliamua kuichukua kama msingi, lakini iambie kwa kutumia mfano mdogo wa kihistoria - kazi ya kupata "meza ya yaliyomo". Inaunda nanga inayoweza kutambulika ili uweze kusema "kumbuka kazi kuhusu jedwali la yaliyomo" na ili wanafunzi wakumbuke hili haswa. Katika mfano wangu, nilijaribu kuzuia imani potofu mbili zaidi za kawaida. Ifuatayo nitaandika juu yao kwa undani zaidi.

Katika kazi hii tunaletwa kwa mbinu za kutatua matatizo magumu. Uamuzi wa awali unahitaji kufanywa kuwa wa zamani na rahisi. Naam, basi unaweza kufikiri juu ya jinsi ya kuboresha ufumbuzi huu.
Введение
Глава 1
Глава 2
Глава 3
Глава 4
Глава 5
Глава 6
Глава 7
Заключение

Kulingana na uchunguzi wangu, mbinu ya "template-mfano-matokeo" katika michanganyiko mbalimbali bado inaongoza kwa ukweli kwamba wanafunzi wanaona mzunguko huo kama hieroglyph. Hili lilijidhihirisha katika ukweli kwamba hawakuelewa kwa nini kulikuwa na sharti la kuandika hapo, jinsi ya kuchagua kati ya i++ na i— na mambo mengine yanayoonekana dhahiri. Ili kuepuka dhana hizi potofu, mbinu ya kuzungumza juu ya mizunguko inapaswa kusisitiza maana ya kurudia vitendo sawa na kisha tu kurasimisha kwa kutumia muundo. Kwa hiyo, kabla ya kutoa syntax ya kitanzi, unahitaji kutatua tatizo kichwa. Suluhisho la zamani kwa jedwali la shida ya yaliyomo linaonekana kama hii:

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("Заключение");

Inawezaje kuboreshwa?
Badilisha vitendo vya kupendeza na mzunguko.
Ni vitendo gani vinarudiwa mfululizo bila mabadiliko?
Hakuna katika kipande hiki. Walakini, amri za kuonyesha neno "Sura" na nambari zinafanana sana.
Kwa hiyo, hatua inayofuata ni kupata tofauti kati ya vipande. Ni katika kazi hii tu kwamba kila kitu ni dhahiri, basi si amri moja itarudiwa, lakini vitalu vya kanuni za mistari 5 au zaidi. Utalazimika kutafuta sio tu kwenye orodha ya amri, lakini katika ujenzi wa matawi au kitanzi.
Katika mfano, tofauti kati ya amri iko katika nambari baada ya neno "Sura".
Mara tu tofauti inapatikana, unahitaji kuelewa muundo wa mabadiliko. Sehemu tofauti ni nambari? Je! inaongezeka kila mara au inapungua? Je, thamani ya nambari inabadilikaje kati ya timu mbili bega kwa bega?
Katika mfano, nambari baada ya neno "Sura" huongezeka kwa ongezeko la 1. Tofauti hupatikana, muundo umefunuliwa. Sasa unaweza kuchukua nafasi ya kipande tofauti na kutofautisha.
Unahitaji kutangaza tofauti kama hiyo kabla ya kwanza ya vipande vinavyorudiwa. Tofauti kama hiyo kawaida huitwa I au j au kitu cha kina zaidi. Thamani yake ya awali lazima iwe sawa na thamani ya kwanza iliyoonyeshwa kwenye skrini. Katika mfano, thamani ya kwanza ni 1.
Ni thamani gani ya awali inapaswa kuchukuliwa ili kuonyesha mfululizo wa nambari "100, 101, 102, 103, 104, 105"?
Nambari ya kwanza katika safu hii ni 100.
Baada ya kila amri ya pato, unahitaji kuongeza thamani ya kutofautiana hii kwa 1. Kitengo hiki ni hatua ya mabadiliko.
Ni hatua gani itakuwa katika safu ya nambari "100, 102, 104, 106"?
Hatua ya 2 katika safu hii.
Baada ya kuchukua nafasi ya kipande tofauti na kutofautisha, nambari itaonekana kama hii:

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("Заключение");

Baada ya kutumia mbinu ya "kueleza muundo wa kutofautiana" katika msimbo, unapata vikundi kadhaa vya vitendo vinavyofanana vinavyoenda mfululizo. Sasa vitendo vinavyorudia vinaweza kubadilishwa na kitanzi.

Mlolongo wa kutatua tatizo ambapo unahitaji kutumia loops lina hatua zifuatazo:

  1. Tatua "kichwa-juu" na amri nyingi tofauti
  2. Tafuta muundo
  3. Eleza muundo wa kigezo
  4. Kubuni kama mzunguko

Ifuatayo, maneno mapya yanaletwa ili mwanafunzi asijikute katika hali ya "Ninaelewa kila kitu, lakini siwezi kusema":
— kihesabu kila mara ni kigeu kinachohitajika ili kufuatilia idadi ya hatua kwenye kitanzi. Kwa kawaida nambari kamili ambayo inalinganishwa na kizuizi.
- hatua ya kukabiliana - maelezo ya muundo wa mabadiliko ya counter.
- kizuizi - nambari au tofauti ambayo counter inalinganishwa ili algorithm iwe ya mwisho. Thamani ya kaunta inabadilika ili kukaribia kikomo.
- mwili wa kitanzi - seti ya amri ambazo zitarudiwa. Wanaposema "amri imeandikwa ndani ya kitanzi," wanamaanisha mwili.
- iteration ya kitanzi - utekelezaji wa wakati mmoja wa mwili wa kitanzi.
- hali ya kitanzi - usemi wa kimantiki ambao huamua ikiwa marudio mengine yatatekelezwa. (Kunaweza kuwa na machafuko na miundo ya matawi hapa)
Unahitaji kuwa tayari kwa ukweli kwamba mwanzoni wanafunzi watatumia maneno kwa madhumuni mengine. Hii inatumika kwa wote wenye nguvu na dhaifu. Kuanzisha lugha ya kawaida ni sanaa. Sasa nitaandika kwa ufupi: unahitaji kuweka kazi "onyesha kipande cha msimbo na <term>" na utumie maneno haya mwenyewe kwa usahihi katika mazungumzo.
Baada ya mabadiliko na kitanzi, kipande kinapatikana:

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

Dhana potofu kuu

Dhana moja potofu maarufu miongoni mwa wanafunzi ni kwamba wanaweka vitendo ndani ya kitanzi ambacho kinahitaji kufanywa mara moja tu. Kwa mfano kama hii:

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

Wanafunzi huingia kwenye tatizo hili kila wakati, mwanzoni na katika matatizo magumu zaidi.
Vidokezo muhimu katika kesi hii:

Ni mara ngapi unapaswa kurudia amri: mara moja au mara nyingi?

Amri za kuchapisha maneno "Utangulizi" na "Hitimisho" na kutangaza na kuanzisha utofautishaji si kama vitendo vingine vya kujirudia. Wanatekelezwa mara moja tu, ambayo inamaanisha wanahitaji kuandikwa nje ya mwili wa kitanzi.

Hatua zote tatu za suluhisho zinapaswa kubaki kwenye nambari ili uweze kuzirejelea baadaye ikiwa kuna shida. Inatosha kutoa maoni juu ya chaguzi mbili za kwanza ili zisiingiliane.
Uangalifu wa mwanafunzi unapaswa kuvutiwa kwa ukweli ufuatao:
- Katika hali ya kitanzi, kihesabu na kikomo kawaida hulinganishwa. Counter inaweza kubadilika katika mwili wa kitanzi, lakini kikomo hawezi. Ili kuvunja sheria hii, unahitaji kuunda sababu za kulazimisha.
- Amri za kuonyesha maneno "Utangulizi" na "Hitimisho" ziko nje ya mwili wa kitanzi. Tunahitaji kuzitekeleza mara 1. "Utangulizi" - kabla ya kurudia vitendo, "Hitimisho" - baada.
Katika mchakato wa kujumuisha mada hii, kusimamia zinazofuata, na pia kushughulika na shida, ni muhimu kwa wanafunzi wenye nguvu kuuliza swali: "Kitendo hiki kinahitaji kufanywa mara ngapi? Moja au nyingi?

Maendeleo ya ujuzi wa ziada

Katika mchakato wa kusoma mizunguko, wanafunzi pia huendeleza ustadi wa kugundua na kutatua shida. Ili kufanya utambuzi, mwanafunzi anahitaji kuwasilisha matokeo yaliyohitajika na kulinganisha na matokeo halisi. Vitendo vya kurekebisha hutegemea tofauti kati yao.
Kwa kuwa wanafunzi katika hatua hii bado hawana wazo la matokeo "yanayotamaniwa", wanaweza kuzingatia data ya mtihani. Kama sheria, hakuna mtu katika hatua hii bado anaelewa nini kinaweza kwenda vibaya na jinsi ya kukabiliana nayo. Kwa hiyo, ninaandika katika daftari maelezo ya matatizo ya kawaida na njia kadhaa za kutatua. Kuchagua anayefaa zaidi ni kazi ya mwanafunzi mwenyewe.
Rekodi inahitajika ili kuuliza "Je, kile kilichotarajiwa kilifanyika?", "Ni hali gani kati ya hizi ilifanyika sasa?", "Je, suluhisho lililotumiwa lilisaidia?"

  1. Idadi ya vitendo ni 1 chini au zaidi kuliko ilivyotarajiwa. Ufumbuzi:
    - ongeza thamani ya awali ya kaunta kwa 1.
    — badilisha opereta linganishi kali (< au >) na isiyo kali (<= au >=).
    - Badilisha thamani ya kikomo hadi 1.
  2. Vitendo katika kitanzi hufanywa bila kuacha, kwa muda usiojulikana. Ufumbuzi:
    — ongeza amri ya kubadilisha kaunta ikiwa haipo.
    — rekebisha amri ya kubadilisha kaunta ili thamani yake iwe karibu na kikomo.
    - ondoa amri ya mabadiliko ya kizuizi ikiwa iko kwenye mwili wa kitanzi.
  3. Idadi ya vitendo katika kitanzi ni zaidi ya 1 chini au zaidi ya ilivyotarajiwa. Kitendo kwenye kitanzi hakikutekelezwa hata mara moja. Kwanza unahitaji kujua maadili halisi ya anuwai kabla ya kitanzi kuanza. Ufumbuzi:
    - kubadilisha thamani ya awali ya kizuizi
    - badilisha thamani ya awali ya kaunta

Tatizo la 3 kawaida huhusisha kutumia kigeu kisicho sahihi au kutoweka upya kihesabu hadi sifuri.

Baada ya maelezo haya, mwanafunzi bado anaweza kuwa na maoni potofu mbalimbali kuhusu jinsi vitanzi hufanya kazi.
Ili kuondoa zile za kawaida, ninakupa kazi zifuatazo:

  1. Ambapo kikomo, thamani ya awali ya kaunta, au hatua ya kaunta imeingizwa na mtumiaji.
  2. Ambapo thamani ya kaunta lazima itumike katika usemi fulani wa hesabu. Inashauriwa kutumia kihesabu katika usemi mkali au katika dhehebu ili tofauti isiwe ya mstari.
  3. Ambapo thamani ya kaunta haionyeshwa kwenye skrini wakati kitanzi kinaendelea. Kwa mfano, kuonyesha nambari inayotakiwa ya vipande vya maandishi vinavyofanana au kuchora takwimu na michoro ya turtle.
  4. Ambayo unahitaji kufanya kwanza vitendo kadhaa vya kurudia, na kisha vingine.
  5. Ambayo unahitaji kufanya vitendo vingine kabla na baada ya kurudia

Kwa kila kazi unahitaji kutoa data ya mtihani na matokeo yanayotarajiwa.

Ili kuelewa jinsi unavyoweza kusonga haraka, unahitaji kusoma masharti ya shida hizi na uulize: "wanatofautianaje na mfano?", "Ni nini kinachohitaji kubadilishwa katika mfano ili kuzitatua?" Ikiwa mwanafunzi anajibu kwa maana, basi amruhusu kutatua angalau moja darasani, na wengine nyumbani peke yake. Ikiwa suluhisho limefanikiwa, basi tunaweza kuanza kuelezea hali ndani ya vitanzi.
Ikiwa una matatizo ya kutatua matatizo peke yako, unahitaji kufanya kazi kupitia kila kitu darasani. Ili kuepuka kutatua tatizo kuwa kukumbusha kuchora bundi, ninapendekeza kwanza kutatua tatizo kwa njia isiyo ya kawaida. Hiyo ni, ili suluhisho lipitishe mtihani wa kwanza na haitumii ujenzi wa kitanzi. Kweli, basi tumia mabadiliko ili kufikia suluhisho la ulimwengu wote.

Loops na matawi

Kwa maoni yangu, ni muhimu kutoa mada "mizunguko ndani ya matawi" tofauti. Ili baadaye uweze kuona tofauti kati ya kuangalia hali mara nyingi na kuiangalia mara moja.
Kazi za ujumuishaji zitakuwa juu ya kutoa nambari kutoka A hadi B, ambazo huingizwa na mtumiaji:
- daima kwa utaratibu wa kupanda.
- kupanda au kushuka kulingana na maadili ya A na B.

Mada ya "kuweka matawi ndani ya vitanzi" inapaswa kuhamishwa tu baada ya mwanafunzi kufahamu mbinu: "kubadilisha muundo na kigezo" na "kubadilisha vitendo vinavyorudiwa na mzunguko."
Sababu kuu ya kutumia matawi ndani ya loops ni anomalies katika muundo. Katikati huvunja kulingana na data ya awali.
Kwa wale wanafunzi ambao wanaweza kutafuta suluhisho kwa kuchanganya mbinu rahisi, inatosha kusema "tawi linaweza kuandikwa ndani ya vitanzi" na kutoa tatizo "kwa mfano" kabisa kutatua kwa kujitegemea.
Kazi ya mfano:

Mtumiaji huingiza nambari X. Onyesha nambari kutoka 0 hadi 9 kwenye safu wima na uweke alama ya '+' kando ya nambari ambayo ni sawa na X.

Ikiwa 0 iliingizwa0+
1
2
3
4
5
6
7
8
9

Ikiwa 6 iliingizwa0
1
2
3
4
5
6+
7
8
9

Ikiwa 9 iliingizwa0
1
2
3
4
5
6
7
8
9+

Ikiwa 777 iliingizwa0
1
2
3
4
5
6
7
8
9

Ikiwa maelezo mafupi hayatoshi kuandika kwa kitanzi, basi unahitaji kufikia suluhisho la ulimwengu kwa tatizo sawa bila kitanzi.
Utapata moja ya chaguzi mbili:
Tamaa

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);
}

Inawezekana

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+");
}

Ninatoa kazi kama hiyo mapema, nikisoma mada ya matawi.
Ikiwa mwanafunzi anakuja na chaguo "inawezekana", basi unahitaji kuwaambia kwamba kunaweza kuwa na ufumbuzi mwingi kwa tatizo sawa. Walakini, wanatofautiana katika upinzani wao kwa mabadiliko ya mahitaji. Uliza swali: "Ni maeneo mangapi katika msimbo yangehitaji kusahihishwa ikiwa ni lazima niongeze nambari nyingine?" Katika toleo "inawezekana", utahitaji kuongeza tawi moja zaidi na kuongeza nambari mpya katika sehemu zingine 10. Katika "itaka" inatosha kuongeza tawi moja tu.
Weka kazi ya kuzalisha tena chaguo "inayohitajika", kisha pata muundo katika msimbo, fanya uingizwaji wa kutofautiana na uandike kitanzi.
Ikiwa una wazo la jinsi ya kutatua tatizo hili bila kitanzi kwa njia nyingine, tafadhali andika kwenye maoni.

Mizunguko ndani ya Mizunguko

Katika mada hii unahitaji kulipa kipaumbele kwa yafuatayo:
— vihesabio vya loops za ndani na nje lazima ziwe tofauti tofauti.
— counter kwa kitanzi cha ndani lazima iwe upya mara nyingi (yaani, katika mwili wa kitanzi cha nje).
— katika kazi za pato la maandishi, huwezi kwanza kuandika herufi moja katika mistari kadhaa, na kisha ya pili. Lazima kwanza uchapishe herufi zote za mstari wa kwanza, kisha herufi zote za pili, na kadhalika.

Ni bora kuanza kuelezea mada ya vitanzi ndani ya vitanzi kwa kuelezea umuhimu wa kuweka upya counter hadi sifuri.
Kazi ya mfano:

Mtumiaji huingiza nambari mbili: R na T. Chapisha mistari miwili ya herufi "#". Mstari wa kwanza unapaswa kuwa na herufi R. Mstari wa pili una vipande vya T. Ikiwa nambari yoyote ni hasi, onyesha ujumbe wa hitilafu.

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

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

R=-1, T=6Thamani ya R lazima iwe isiyo hasi

R=6, T=-2Thamani ya T lazima iwe isiyo hasi

Kwa wazi, shida hii pia ina angalau suluhisho mbili.
Tamaa

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;
}

Inawezekana #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;
}

Tofauti ni kwamba katika suluhisho "inawezekana", utofauti wa pili ulitumiwa kutoa mstari wa pili. Unapaswa kusisitiza kutumia tofauti sawa kwa vitanzi vyote viwili. Kizuizi hiki kinaweza kuhesabiwa haki na ukweli kwamba suluhisho na counter moja kwa mizunguko miwili itakuwa kielelezo cha neno "kuweka upya kwa counter". Kuelewa neno hili ni muhimu wakati wa kutatua matatizo yafuatayo. Kama maelewano, unaweza kuokoa suluhisho zote mbili kwa shida.

Shida ya kawaida ya kutumia kigeuzi kimoja cha vitanzi viwili inaonekana kama hii:
R=5, T=11# # 1 # 1
# # 1 # 1

Idadi ya wahusika katika mstari wa pili hailingani na thamani ya T. Ikiwa unahitaji msaada na tatizo hili, basi unahitaji kuangalia katika maelezo kuhusu matatizo ya kawaida na loops. Hii ni dalili #3. Inatambuliwa ikiwa unaongeza pato la thamani ya kaunta mara moja kabla ya mzunguko wa pili. Imesahihishwa kwa kuweka upya. Lakini ni bora sio kusema hivi mara moja. Mwanafunzi lazima ajaribu kuunda angalau nadharia moja.

Kuna, bila shaka, ufumbuzi mwingine. Lakini sijawahi kuiona kati ya wanafunzi. Katika hatua ya mizunguko ya kusoma, hadithi juu yake itasumbua umakini. Unaweza kurejea baadaye unapojifunza kuhusu vitendaji vya kamba.
Inawezekana #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));

Kazi inayofuata inayohitajika:

Onyesha nambari kutoka 0 hadi 9. Kila nambari inapaswa kuwa kwenye mstari wake. Nambari ya nambari kwenye mstari (W) imeingizwa kutoka kwa kibodi.

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

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

Ikiwa mwanafunzi amejua mbinu ya kuchukua nafasi ya kutofautisha, basi ataweza kukabiliana haraka sana. Shida inayowezekana itakuwa tena katika kuweka upya utofauti. Ikiwa huwezi kushughulikia mabadiliko, inamaanisha kuwa ulikuwa na haraka na unahitaji kutatua matatizo rahisi.

Asante kwa umakini wako. Like na subscribe kwenye channel.

PS Ukipata makosa au makosa katika maandishi, tafadhali nijulishe. Hili linaweza kufanywa kwa kuchagua sehemu ya maandishi na kubonyeza "⌘ + Enter" kwenye Mac, na "Ctrl / Enter" kwenye kibodi za kawaida, au kupitia ujumbe wa faragha. Ikiwa chaguzi hizi hazipatikani, andika kuhusu makosa katika maoni. Asante!

Watumiaji waliojiandikisha pekee ndio wanaweza kushiriki katika utafiti. Weka sahihitafadhali.

Kura ya maoni kwa wasomaji bila karma

  • 20,0%Ninafundisha kitaaluma, +12

  • 10,0%Ninafundisha kitaaluma, -11

  • 70,0%Sifundishi, +17

  • 0,0%Sifundishi, -10

  • 0,0%Nyingine0

Watumiaji 10 walipiga kura. Watumiaji 5 walijizuia.

Chanzo: mapenzi.com

Kuongeza maoni