Kumaha carana ngajarkeun cara nungkulan kasusah, sarta dina waktos anu sareng nulis siklus

Najan kanyataan yén urang bakal ngobrol ngeunaan salah sahiji topik dasar, artikel ieu ditulis pikeun professional ngalaman. Tujuanana nya éta pikeun némbongkeun naon misconceptions beginners gaduh dina programming. Pikeun practicing pamekar, masalah ieu geus lila direngsekeun, poho atawa teu noticed pisan. Tulisan éta tiasa mangpaat upami anjeun ujug-ujug kedah ngabantosan batur dina topik ieu. Artikel draws parallels jeung bahan ti sagala rupa buku on programming ku Schildt, Stroustrup, Okulov.

Topik ngeunaan siklus dipilih sabab cukup loba jalma anu kaasup ti eta nalika mastering programming.

Téhnik ieu dirarancang pikeun siswa anu lemah. Sakumaha aturan, jalma anu kuat henteu nyangkut kana topik ieu sareng henteu kedah ngadamel téknik khusus pikeun aranjeunna. Tujuan sekundér artikel nyaéta pikeun mindahkeun téknik ieu tina kelas "karya pikeun sadaya murid, tapi ngan hiji guru" ka kelas "karya pikeun sadaya murid, sadaya guru". Abdi henteu ngaku originalitas mutlak. Upami anjeun parantos ngagunakeun metodologi anu sami pikeun ngajarkeun topik ieu, punten nyerat kumaha versi anjeun béda. Upami anjeun mutuskeun nganggo éta, wartosan kami kumaha éta. Upami téknik anu sami dijelaskeun dina buku, punten nyerat nami.


Kuring dikeureuyeuh téknik ieu salila 4 taun, diajar individual jeung siswa tingkat béda tina latihan. Jumlahna aya kira-kira lima puluh murid sareng dua rébu jam kelas. Dina awalna, siswa sok meunang nyangkut kana topik ieu sarta ninggalkeun. Sanggeus unggal murid, metodologi jeung bahan disaluyukeun. Sapanjang taun katukang, murid henteu deui nyangkut kana topik ieu, ku kituna kuring mutuskeun pikeun ngabagikeun pamanggih kuring.

Naha jadi loba hurup? Siklus jadi SD!

Salaku I wrote luhur, pikeun practicing pamekar jeung siswa kuat, pajeulitna konsép loop bisa underestimated. Contona, anjeun tiasa masihan ceramah panjang, ningali huluna nodding jeung panon calakan. Tapi nalika nyobian ngabéréskeun masalah naon waé, stupor sareng masalah anu teu jelas dimimitian. Sanggeus kuliah, siswa meureun ngan ukur sawaréh pamahaman. Kaayaan ieu diperparah ku kanyataan yén siswa sorangan henteu tiasa nyoarakeun naon kahayangna.
Hiji poé kuring sadar yén siswa ditanggap conto abdi salaku hiéroglif. Nyaéta, sapertos potongan téks anu teu tiasa dipisahkeun dimana anjeun kedah nambihan sababaraha hurup "magic" sareng éta bakal tiasa dianggo.
Sakapeung mah noticed nu siswa mikir yén pikeun ngajawab masalah husus nu peryogi hal sejenna desain anu kuring ngan teu acan katutupan. Sanajan solusi diperlukeun ukur modifikasi slight tina conto.

Ku kituna kuring datang nepi ka pamanggih yén fokus teu kudu dina sintaksis ekspresi, tapi dina gagasan refactoring kode repetitive maké loop. Sakali siswa geus mastered gagasan ieu, sagala sintaksis bisa ningkat kalawan saeutik latihan.

Saha jeung naha kuring ngajar?

Kusabab teu aya ujian asup, kelas tiasa kalebet murid anu kuat sareng lemah pisan. Anjeun tiasa maca langkung seueur ngeunaan murid kuring dina tulisan Potret murid kursus sore
Kuring narékahan pikeun mastikeun yén saha waé anu hoyong diajar program tiasa diajar.
Kelas kuring diayakeun masing-masing sareng murid mayar artosna masing-masing. Éta sigana mahasiswa bakal ngaoptimalkeun biaya sareng nungtut minimum. Nanging, jalma-jalma angkat ka kelas tatap muka sareng guru langsung sanés pikeun pangaweruh sorangan, tapi pikeun kapercayaan kana naon anu aranjeunna pelajari, pikeun rasa kamajuan sareng persetujuan ti ahli (guru). Lamun siswa teu ngarasa kamajuan dina pangajaran maranéhanana, maranéhanana baris ninggalkeun. Sacara umum, kelas bisa disusun sangkan siswa ngarasa kamajuan dina ngaronjatkeun jumlah struktur dalit. Hartina, mimitina urang diajar bari di jéntré, lajeng urang diajar pikeun, lajeng ngalakukeun bari, sarta ayeuna urang boga kursus sarébu sapeuting siap, nu siklus nyalira diulik salila dua bulan, sarta di ahir - murid anu nulis. perpustakaan baku dina dikte. Nanging, pikeun ngabéréskeun masalah praktis, anjeun peryogi henteu ngan ukur pangaweruh ngeunaan bahan, tapi ogé kamerdikaan dina aplikasina sareng milarian inpormasi anyar. Ku alatan éta, pikeun kursus face-to-beungeut, Jigana prinsip bener nyaeta ngajar minimum jeung ajak ulikan bebas nuances jeung jejer patali. Dina topik puteran, kuring nganggap konstruk bari janten minimum. Anjeun tiasa ngartos prinsip ti eta. Nyaho prinsipna, anjeun tiasa ngawasaan duanana pikeun sareng ngalakukeun-bari nyalira.

Pikeun ngahontal ngawasa matéri ku siswa lemah, ngadéskripsikeun sintaksis téh teu cukup. Perlu masihan tugas anu langkung saderhana tapi variatif sareng ngajelaskeun conto anu langkung rinci. Pamustunganana, laju ngembangkeun diwatesan ku kamampuh siswa pikeun transformasi ekspresi jeung neangan pola. Pikeun siswa pinter, lolobana assignments bakal boring. Nalika diajar sareng aranjeunna, anjeun henteu kedah keukeuh ngarengsekeun 100% masalah. Bahan abdi tiasa ditingali di github abdi. Leres, gudang langkung sapertos grimoire warlock - teu aya anu sanés tapi kuring bakal ngartos dimana dimana, sareng upami anjeun gagal cek, anjeun tiasa gélo.

Métodologina berorientasi prakték

Téori dipedar maké conto ngungkulan hiji masalah. Dina dasar kelas program dimana cabang sareng loop diajarkeun, ngan saukur teu mungkin masihan ceramah anu mangpaat dina hiji topik salami sajam. 15-20 menit cukup pikeun ngajelaskeun konsep. Kasulitan utama timbul nalika ngalaksanakeun tugas praktis.
Guru pemula tiasa ngageterkeun operator, cabang, puteran, sareng susunan dina hiji ceramah. Tapi muridna bakal nyanghareupan masalah asimilasi inpormasi ieu.
Barina ogé, anjeun teu kudu ngan ngabejaan bahan, tapi ogé pastikeun yén listeners ngartos eta.

Kanyataan mastering hiji topik ditangtukeun ku cara murid copes kalawan karya mandiri.
Lamun siswa junun ngajawab masalah dina topik tanpa bantuan guru, mangka topik geus mastered. Pikeun mastikeun nguji diri, unggal tugas dijelaskeun dina tabel sareng skenario tés. Tugas boga urutan jelas. Ngalewatan tugas henteu disarankeun. Upami tugas ayeuna sesah teuing, teras ngaléngkah ka anu salajengna henteu aya gunana. Ieu malah leuwih pajeulit. Sangkan murid bisa ngawasa tugas kompléks ayeuna, sababaraha téhnik dipedar ka manéhna ngagunakeun conto masalah kahiji. Sabenerna, sakabéh eusi topik asalna handap pikeun téhnik pikeun overcoming kasusah. Siklus langkung seueur efek samping.

Tugas kahiji sok conto. Anu kadua rada béda sareng dilaksanakeun "mandiri" langsung saatos anu munggaran dina pangawasan guru. Sadaya pancén saterusna ditujukeun pikeun nengetan rupa-rupa hal-hal leutik anu tiasa nyababkeun salah paham.

Katerangan conto mangrupa dialog nu murid perlu nelepon deui rambatan jeung cross-validasi pikeun mastikeun yén anjeunna geus mastered bagian tina materi.

Kuring bakal banal sarta nyebutkeun yén conto munggaran dina topik pohara penting. Upami Anjeun gaduh bahan pikeun karya bebas éksténsif, omissions sahiji conto kahiji bisa dilereskeun. Upami teu aya anu sanés salian ti conto, maka murid sigana moal ngawasa topik.

Bari atawa keur?

Salah sahiji masalah anu kontroversial nyaéta pilihan konstruksi pikeun conto: bari atanapi kanggo. Sakali, réréncangan pamekar anu ngalaksanakeun latihan kuring anu teu gaduh pangalaman ngajar nyéépkeun sajam pikeun ngayakinkeun kuring yén for loop mangrupikeun anu paling gampang kahartos. Argumen-argumen digolongkeun kana "sagala di jerona jelas sareng ditata dina tempatna." Sanajan kitu, anu ngabalukarkeun akar kasusah pikeun beginners nyata pamanggih siklus sorangan, teu tulisan na. Lamun hiji jalma teu ngarti gagasan ieu, anjeunna bakal ngalaman kasusah jeung sintaksis. Pas ide diwujudkeun, masalah desain kode ngaleungit sorangan.

Dina bahan kuring, téma loop nuturkeun téma branching. Kasaruaan éksternal upami sareng bari ngamungkinkeun urang ngagambar analogi langsung: "nalika kaayaan dina lulugu leres, maka awak dieksekusi." Hijina peculiarity tina siklus éta awak dieksekusi sababaraha kali.

Argumen kadua abdi éta bari merlukeun kirang pormat ti keur. Kurang pormat hartina leuwih saeutik kasalahan bodo jeung leungit koma jeung kurung. Beginners teu acan ngembangkeun cukup attentiveness tur meticulousness pikeun otomatis nyegah kasalahan sintaksis.
Argumen katilu dipedar dina loba buku alus salaku argumen kahiji.

Lamun murid bisa kalayan gampang transformasi éksprési, mangka anjeun bisa ngobrol ngeunaan for di lulus. Murid lajeng bakal milih naon anjeunna diaku pangalusna. Upami transformasi nyababkeun kasusah, maka langkung saé henteu ngaganggu perhatian anjeun. Hayu murid mimiti ngajawab sagalana ngagunakeun bari. Sakali anjeun ngawasa topik puteran, anjeun tiasa nyerat deui solusi pikeun latihan ngarobah bari ka.
Gelung postcondition mangrupikeun sato galak anu jarang. Abdi henteu nyéépkeun waktos kanggo éta. Upami murid parantos ngawasa ideu pikeun ngaidentipikasi pola sareng ngarobih ekspresi, anjeunna tiasa terang tanpa bantosan kuring.

Nalika nunjukkeun conto munggaran ka murid anu kuat, kuring narik perhatian kanyataan yén dina conto anu munggaran penting pikeun ngarékam henteu ngan ukur solusi, tapi ogé sadayana ranté tindakan anu nyababkeun hasilna. Puguh siswa bisa maranéh ngalalaworakeun kana tulisan jeung nyalin ngan algoritma ahir. Aranjeunna kedah yakin yén hiji dinten bakal aya tugas anu sesah. Pikeun ngajawabna, anjeun kedah nuturkeun léngkah-léngkah sapertos dina conto ieu. Éta sababna penting pikeun ngarékam sadaya tahapan. Dina masalah di handap ieu bakal mungkin ninggalkeun ngan versi ahir solusi.

Gagasan utama otomatisasi nyaéta yén urang ngandelkeun komputer pikeun ngalakukeun padamelan rutin pikeun hiji jalma. Salah sahiji téknik dasar nyaéta nulis puteran. Hal ieu dipaké nalika sababaraha lampah repeating idéntik ditulis dina program sakaligus.

Eksplisit leuwih hade tinimbang implisit

Sigana mah ide nu sae pikeun mintonkeun frasa anu sarua sababaraha kali dina tugas looping munggaran. Salaku conto:

Hurray, éta jalan!
Hurray, éta jalan!
Hurray, éta jalan!
Hurray, éta jalan!
Hurray, éta jalan!
Hurray, éta jalan!
Hurray, éta jalan!
Hurray, éta jalan!

Pilihan ieu goréng sabab nilai counter henteu katingali dina kaluaran. Ieu masalah pikeun beginners. Tong ngarérét ka manéhna. Dina awalna, ieu tugas kahiji, sarta tugas turunan runtuyan angka dina urutan naek éta kadua. Ieu diperlukeun pikeun ngawanohkeun istilah tambahan "siklus N kali" jeung "siklus ti A ka B", nu dasarna hal anu sarua. Dina raraga teu nyieun éntitas perlu, Kuring mutuskeun pikeun némbongkeun ukur conto jeung kaluaran runtuyan angka. Sababaraha urang ngatur pikeun neuleuman kumaha carana nyekel counter dina sirah maranéhanana sarta model kabiasaan program dina sirah maranéhanana tanpa persiapan. Sababaraha siswa mimiti sapatemon modeling mental dina topik siklus.
Saatos sababaraha latihan, abdi masihan tugas ngulang téks sarua bisa direngsekeun mandiri. Upami anjeun masihan counter anu katingali heula teras anu teu katingali, murid bakal ngagaduhan masalah anu langkung sakedik. Kadang-kadang hint "ulah nulis counter dina layar" cukup.

Kumaha batur ngajelaskeun eta?

Dina kalolobaan bahan atikan dina Internét, sintaksis siklus dirumuskeun salaku bagian tina "kuliah". Contona, dina developer.mozilla.org (ayeuna), sababaraha constructs séjén digambarkeun babarengan jeung loop bari. Dina hal ieu, ngan ukur desain sorangan anu dipasihkeun dina bentuk témplat. Hasil peluncuran maranéhanana dijelaskeun dina kecap, tapi euweuh ilustrasi. Dina pamanggih kuring, presentasi sapertos topik ngalikeun mangpaat bahan sapertos ku nol. Murid bisa nulis ulang kode jeung ngajalankeun eta sorangan, tapi anjeunna masih perlu standar pikeun ngabandingkeun. Kumaha anjeun tiasa ngartos yén conto parantos ditulis deui leres upami teu aya anu ngabandingkeun hasilna?
Lamun ngan hiji template dibikeun, tanpa conto, janten malah leuwih hese pikeun murid. Kumaha ngarti yén fragmen kode disimpen leres dina citakan? Anjeun tiasa nyobian nyerat kumaha bae, lajeng ngajalankeun. Tapi upami teu aya standar pikeun ngabandingkeun hasilna, peluncuran ogé moal ngabantosan.

Dina kursus C ++ dina Intuitif, sintaksis loop dikubur dina halaman katilu Kuliah 4 dina topik "operator". Nalika ngajelaskeun sintaksis loop, tekenan khusus disimpen dina istilah "operator". Istilah ieu dibere salaku sakumpulan fakta kawas "simbol; ieu pernyataan", "{} mangrupa pernyataan majemuk", "awak loop kudu pernyataan". Kuring teu resep pendekatan ieu sabab sigana nyumputkeun hubungan penting balik hiji istilah. Parsing kode sumber program kana istilah dina tingkat ieu diperlukeun ku pamekar compiler pikeun nerapkeun spésifikasi basa, tapi henteu ku siswa salaku perkiraan munggaran. Pendatang pikeun program jarang cukup taliti pikeun nengetan pisan kana istilah. Ieu hiji jalma langka anu apal tur understands kecap anyar pertama kalina. Ampir teu aya anu tiasa leres nerapkeun istilah anu karek diajar. Ku alatan éta, siswa meunang loba kasalahan kawas "Kuring nulis bari (a<7);{, tapi program teu jalan."
Dina pamanggih kuring, dina awal éta hadé pikeun masihan sintaksis konstruksi geuwat ku kurung. Pilihan tanpa tanda kurung ngan kedah dijelaskeun upami murid gaduh patarosan khusus: "naha teu aya kurung sareng tiasa dianggo."

Dina buku 2012 Okulov urang "Dasar Programming," bubuka loop dimimitian ku pola for, teras masihan saran pikeun pamakéan na, lajeng langsung indit ka bagian eksperimen palajaran. Kuring ngarti yén buku ieu ditulis pikeun éta minoritas murid pisan sanggup anu jarang datang ka kelas kuring.

Dina buku populér, hasil tina fragmen kode sok ditulis. Contona, Shildt urang "Java 8. The Guide Lengkep" 2015 édisi. Mimiti, témplat dipasihkeun, teras conto program sareng langsung saatosna - hasil palaksanaan.

Salaku conto, pertimbangkeun loop bari anu sabalikna
mundur mimitian ti 10, sareng persis 10 garis "ukuran" ditampilkeun:

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

Sakali dijalankeun, program ieu ngahasilkeun sapuluh "siklus" sapertos kieu:
такт 10
такт 9
такт 8
такт 7
такт 6
такт 5
такт 4
такт 3
такт 2
такт 1

Pendekatan ngajéntrékeun témplat, program conto jeung hasil program ogé dipaké dina buku "Javascript keur Kids" na dina kursus js on w3schools.com. Format halaman wéb malah ngamungkinkeun conto ieu janten interaktif.

Buku Stroustrup 2016 Prinsip sareng Praktek Ngagunakeun C ++ langkung jauh. Léngkah munggaran nyaéta ngajelaskeun hasil naon anu kedah diala, sareng saatos éta téks program ditampilkeun. Leuwih ti éta, maranéhna nyokot teu ngan program acak sabagé conto, tapi masihan hiji piknik kana sajarah. Ieu ngabantuan narik perhatian ka dinya: "Tingali, ieu sanés ngan ukur téks anu teu aya gunana. Anjeun ningali hiji hal anu bermakna."

Salaku conto iteration, mertimbangkeun program munggaran dieksekusi dina mesin program disimpen (EDSAC). Ditulis ku David Wheeler di Laboratorium Komputer Universitas Cambridge, Inggris dina 6 Méi 1949. Program ieu ngitung sareng nyitak daptar saderhana kuadrat.
0 0
1 1
2 4
3 9
4 16
...
98 9604
99 9801

Di dieu, unggal garis ngandung angka dituturkeun ku karakter tab ('t') jeung kuadrat tina jumlah éta. Versi C++ tina program ieu sapertos kieu:

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

Anu matak, pola sintaksis henteu dijelaskeun dina ieu buku. Stroustrup dina manual instruktur (tarjamahan) negeskeun yén ngajénan kacerdasan siswana. Panginten kamampuan pikeun ngaidentipikasi pola dina sababaraha conto dianggap manifestasi kecerdasan sapertos kitu.

Salaku kuring ngajelaskeun sorangan

Pendekatan Stroustrup: ngajéntrékeun hasilna, teras ngarengsekeun masalah, lajeng hiji analisis mandiri ku murid - sigana paling wijaksana. Ku alatan éta, kuring mutuskeun nyandak eta salaku dadasar, tapi ngabejaan eta ngagunakeun conto kirang sajarah - tugas deriving "tabél eusi". Ieu ngabentuk jangkar recognizable ku kituna anjeun lajeng bisa ngomong "inget tugas ngeunaan daptar eusi" na ambéh murid apal persis ieu. Dina conto abdi, abdi diusahakeun nyegah dua deui tina misconceptions paling umum. Salajengna kuring bakal nulis ngeunaan aranjeunna dina leuwih jéntré.

Dina tugas ieu kami diwanohkeun kana téhnik pikeun ngarengsekeun masalah kompléks. Kaputusan awal kedah dilakukeun primitif sareng sederhana. Nya, teras anjeun tiasa mikirkeun kumaha carana ningkatkeun solusi ieu.
Введение
Глава 1
Глава 2
Глава 3
Глава 4
Глава 5
Глава 6
Глава 7
Заключение

Numutkeun observasi kuring, pendekatan "template-conto-hasil" dina sagala rupa kombinasi masih ngakibatkeun kanyataan yén siswa ngarasa siklus salaku hiéroglif. Ieu manifested sorangan dina kanyataan yén maranéhna teu ngarti naha aya kaayaan nulis aya, kumaha carana milih antara i ++ jeung i- jeung hal sigana atra séjén. Pikeun ngahindarkeun misconceptions ieu, pendekatan ngobrol ngeunaan siklus kedah ngantebkeun harti repeating lampah idéntik sarta ngan lajeng formalizing aranjeunna ngagunakeun struktur. Ku alatan éta, saméméh méré sintaksis loop, Anjeun kudu ngajawab masalah head-on. Solusi primitif pikeun masalah daptar eusi sapertos kieu:

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

Kumaha eta bisa ningkat?
Ganti lampah monoton ku siklus.
lampah naon anu diulang sakaligus tanpa parobahan?
Henteu aya dina sempalan ieu. Sanajan kitu, Paréntah pikeun mintonkeun kecap "Bab" kalawan nomer pisan sarupa unggal lianna.
Ku alatan éta, tahap satuluyna nyaéta pikeun manggihan bédana antara fragmen. Éta ngan ukur dina tugas ieu yén sadayana écés, teras sanés paréntah tunggal bakal diulang, tapi blok kode 5 garis atanapi langkung. Anjeun kedah milarian sanés ngan ukur dina daptar paréntah, tapi dina konstruksi branching atanapi loop.
Dina conto, bédana antara paréntah aya dina jumlah sanggeus kecap "Bab".
Sakali bédana kapanggih, anjeun kudu ngarti pola robah. Bagéan anu béda nyaéta jumlahna? Naha éta terus ningkat atanapi turun? Kumaha nilai hiji angka robah antara dua tim sisi ku samping?
Dina conto, jumlah sanggeus kecap "Bab" naek di increments of 1. Bédana kapanggih, pola ieu wangsit. Ayeuna anjeun tiasa ngagentos sempalan anu béda sareng variabel.
Anjeun kedah ngadéklarasikeun variabel sapertos sateuacan anu munggaran tina fragmen ngulang. Variabel saperti biasana disebut I atawa j atawa hal nu leuwih lengkep. Nilai awalna kedah sami sareng nilai munggaran anu dipidangkeun dina layar. Dina conto, nilai kahiji nyaéta 1.
Naon nilai awal anu kedah dicandak pikeun ningalikeun séri nomer "100, 101, 102, 103, 104, 105"?
Angka munggaran dina séri ieu nyaéta 100.
Sanggeus unggal paréntah kaluaran, Anjeun kudu ningkatkeun nilai variabel ieu ku 1. Unit ieu hambalan robah.
Léngkah naon anu bakal aya dina séri nomer "100, 102, 104, 106"?
Lengkah 2 dina baris ieu.
Saatos ngagentos sempalan anu béda sareng variabel, kodeu bakal katingali sapertos kieu:

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

Saatos nerapkeun téknik "nganyatakeun pola variabel" dina kode, anjeun nampi sababaraha grup tindakan idéntik anu sakaligus. Ayeuna ngulang deui tindakan tiasa diganti ku siklus.

Runtuyan ngarengsekeun masalah dimana anjeun kedah nganggo loop diwangun ku léngkah-léngkah ieu:

  1. Ngabéréskeun "sirah-on" sareng seueur paréntah anu misah
  2. Manggihan pola
  3. Nyaritakeun pola variabel
  4. Desain salaku siklus

Salajengna, istilah anyar diwanohkeun supados murid henteu mendakan dirina dina kaayaan "Kuring ngartos sadayana, tapi kuring henteu tiasa nyarios":
- counter a salawasna variabel anu diperlukeun pikeun ngalacak jumlah hambalan dina loop a. Biasana mangrupa integer anu dibandingkeun jeung konstrain.
— counter step — pedaran pola parobahan counter.
- konstrain - angka atawa variabel jeung nu counter dibandingkeun sahingga algoritma final. Nilai counter robah ngadeukeutan wates.
- awak loop - sakumpulan paréntah anu bakal diulang. Nalika aranjeunna nyarios "paréntahna ditulis dina jero gelung," aranjeunna hartosna awak.
- Iteration loop - palaksanaan hiji-waktos awak loop.
- kaayaan loop - ekspresi logis nu nangtukeun naha Iteration sejen bakal dieksekusi. (Bisa aya kabingungan sareng struktur cabang di dieu)
Anjeun kedah disiapkeun kanyataan yén mimitina murid bakal ngagunakeun istilah pikeun tujuan anu sanés. Ieu lumaku pikeun duanana kuat jeung lemah. Ngadegkeun basa umum nyaéta seni. Ayeuna kuring bakal nyerat sakedap: anjeun kedah nyetél tugas "nyorot fragmen kode sareng <istilah>" sareng nganggo istilah-istilah ieu leres dina paguneman.
Saatos transformasi sareng loop, sempalan dicandak:

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

The misconception utama

Hiji misconception populér di kalangan siswa nyaeta aranjeunna nempatkeun lampah dina loop anu kudu dipigawé ngan sakali. Contona saperti kieu:

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

Siswa ngalaman masalah ieu unggal waktos, boh dina awal sareng dina masalah anu langkung kompleks.
Hint konci dina hal ieu:

Sabaraha kali anjeun kedah ngulang paréntah: sakali atanapi sababaraha kali?

Paréntah pikeun nyitak kecap "Pendahuluan" sareng "Kacindekan" sareng nyatakeun sareng ngamimitian variabel i henteu sapertos tindakan repetitive anu sanés. Éta dieksekusi ngan sakali, anu hartosna kedah ditulis di luar awak loop.

Katiluna tahapan solusi kedah tetep dina kode supados anjeun tiasa ngarujuk kana engké upami aya kasusah. Ieu cukup pikeun mairan kaluar dua pilihan kahiji ambéh maranéhanana teu ngaganggu.
Perhatian murid kedah ditarik kana fakta-fakta ieu:
- Dina kaayaan loop, counter jeung wates biasana dibandingkeun. counter bisa ngarobah dina awak loop, tapi wates teu bisa. Pikeun ngalanggar aturan ieu, anjeun kedah ngarumuskeun alesan anu kuat.
- Paréntah pikeun mintonkeun kecap "Bubuka" jeung "Kacindekan" lokasina di luar awak loop. Urang kedah ngalaksanakeunana 1 waktos. "Pendahuluan" - sateuacan ngulang tindakan, "Kacindekan" - saatos.
Dina prosés konsolidasi topik ieu, mastering nu salajengna, kitu ogé nungkulan kasusah, éta mangpaat malah pikeun siswa kuat nanya patarosan: "Sabaraha kali aksi ieu kudu dipigawé? Hiji atawa loba?

Ngembangkeun kaahlian tambahan

Dina prosés ngulik siklus, siswa ogé mekarkeun kaparigelan ngadiagnosa jeung ngaréngsékeun masalah. Pikeun ngalaksanakeun diagnostik, murid kedah nampilkeun hasil anu dipikahoyong sareng ngabandingkeunana sareng hasil anu saleresna. Tindakan koréksi gumantung kana bédana antara aranjeunna.
Kusabab murid dina tahap ieu masih gaduh sakedik ide ngeunaan hasil "dihoyongkeun", aranjeunna tiasa difokuskeun data tés. Sakumaha aturan, teu saurang ogé dina tahap ieu acan understands naon bisa balik salah jeung kumaha carana nungkulan eta. Ku alatan éta, kuring nulis dina notebook pedaran masalah has jeung sababaraha cara pikeun ngajawab aranjeunna. Milih anu paling cocog nyaéta tugas murid sorangan.
Perlu catetan pikeun naroskeun "naha naon anu dipiharep kajantenan?", "Naha tina kaayaan ieu anu kajantenan ayeuna?", "Naha solusi anu diterapkeun ngabantosan?"

  1. Jumlah lampah nyaéta 1 kirang atanapi langkung ti diperkirakeun. Solusi:
    - ningkatkeun nilai awal counter ku 1.
    — ngaganti operator pangbanding ketat (< atawa >) ku operator non-ketat (<= atawa >=).
    - Robah nilai wates ka 1.
  2. Aksi dina loop anu dipigawé tanpa stopping, salamina. Solusi:
    - tambahkeun paréntah robah counter lamun leungit.
    - ngalereskeun paréntah ganti counter supados nilaina langkung caket kana watesna.
    - miceun paréntah robah konstrain lamun éta dina awak loop anu.
  3. Jumlah lampah dina loop leuwih ti 1 kirang atawa leuwih ti ekspektasi. Aksi dina loop teu dieksekusi malah sakali. Kahiji maneh kudu manggihan nilai sabenerna variabel ngan méméh loop dimimitian. Solusi:
    - ngarobah nilai awal konstrain
    - ngarobah nilai awal counter

Masalah 3 biasana ngalibatkeun ngagunakeun variabel salah atanapi henteu ngareset counter kana nol.

Sanggeus katerangan ieu, murid bisa kénéh boga rupa misconceptions ngeunaan kumaha loop jalan.
Pikeun ngaleungitkeun anu paling umum, kuring masihan anjeun tugas di handap ieu:

  1. Di mana wates, nilai counter awal, atawa counter step diasupkeun ku pamaké.
  2. Dimana nilai counter kedah dianggo dina sababaraha ekspresi arithmetic. Disarankeun ngagunakeun counter dina ekspresi radikal atanapi dina pangbagi supados bédana nonlinier.
  3. Nu nilai counter teu dipintonkeun dina layar bari loop dijalankeun. Contona, mintonkeun jumlah diperlukeun fragmen téks idéntik atawa ngagambar inohong kalawan grafik kuya.
  4. Di mana anjeun kedah ngalakukeun heula sababaraha tindakan repetitive, teras anu sanésna.
  5. Di mana anjeun kedah ngalakukeun tindakan anu sanés sateuacan sareng saatos ngulang

Pikeun unggal tugas anjeun kedah nyayogikeun data tés sareng hasil anu dipiharep.

Ngartos kumaha gancang anjeun tiasa ngalih, anjeun kedah maca istilah masalah ieu sareng naroskeun: "Kumaha aranjeunna béda sareng conto?", "Naon anu kedah dirobih dina conto pikeun ngabéréskeunana?" Lamun murid ngajawab meaningfully, mangka hayu anjeunna ngajawab sahanteuna hiji di kelas, sarta sésana di imah sorangan. Upami solusina suksés, maka urang tiasa ngamimitian ngajelaskeun kaayaan di jero puteran.
Upami anjeun gaduh masalah pikeun ngarengsekeun masalah nyalira, anjeun kedah ngerjakeun sadayana di kelas. Pikeun ngahindarkeun ngarengsekeun masalah anu ngingetkeun kana ngagambar bueuk, kuring nyarankeun heula ngarengsekeun masalah ku cara anu henteu universal. Nyaéta, supados solusina lulus tés munggaran sareng henteu nganggo konstruksi loop. Nya, teras nerapkeun transformasi pikeun ngahontal universalitas solusi.

Gelung jeung dahan

Dina pamanggih kuring, mangpaat pikeun masihan topik "siklus dina cabang" nyalira. Janten engké anjeun tiasa ningali bédana antara mariksa kaayaan sababaraha kali sareng mariksa sakali.
Tugas pikeun konsolidasi bakal ngeunaan kaluaran angka ti A ka B, nu diasupkeun ku pamaké:
- salawasna dina urutan naek.
- naek atanapi turun gumantung kana nilai A sareng B.

Topik "cabang dina puteran" kedah dipindahkeun ngan saatos murid ngawasaan téknik: "ngaganti pola sareng variabel" sareng "ngaganti tindakan repetitive sareng siklus".
Alesan utama pikeun ngagunakeun cabang di jero puteran nyaéta anomali dina pola. Di tengahna ngarecah gumantung kana data awal.
Pikeun siswa anu tiasa milarian solusi ku cara ngagabungkeun téknik saderhana, cekap nyarios "cabang tiasa ditulis dina jero puteran" sareng masihan masalah "contona" lengkep pikeun ngabéréskeun mandiri.
conto tugas:

Pamaké ngasupkeun nomer X. Témbongkeun angka ti 0 nepi ka 9 dina kolom jeung nempatkeun tanda '+' sabalikna angka nu sarua jeung X.

Upami 0 diasupkeun0+
1
2
3
4
5
6
7
8
9

Upami 6 diasupkeun0
1
2
3
4
5
6+
7
8
9

Upami 9 diasupkeun0
1
2
3
4
5
6
7
8
9+

Upami 777 diasupkeun0
1
2
3
4
5
6
7
8
9

Upami katerangan ringkes henteu cekap nyerat nganggo loop, maka anjeun kedah ngahontal solusi universal pikeun masalah anu sami tanpa loop.
Anjeun bakal nampi salah sahiji tina dua pilihan:
Dipikahayang

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

Kamungkinan

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

Abdi masihan tugas anu sami sateuacanna, nalika diajar topik cabang.
Lamun murid datang nepi ka hiji "mungkin" pilihan, mangka anjeun kudu ngabejaan aranjeunna yen aya bisa jadi loba solusi pikeun masalah anu sarua. Sanajan kitu, aranjeunna béda dina lalawanan maranéhna pikeun parobahan syarat. Naroskeun patarosan: "Sabaraha tempat dina kode anu kedah dilereskeun upami kuring kedah nambihan nomer sanés?" Dina versi "mungkin", anjeun kedah nambihan hiji cabang deui sareng nambihan nomer énggal dina 10 tempat anu sanés. Dina "dihoyongkeun" éta cukup pikeun nambahkeun ngan hiji cabang.
Atur tugas pikeun baranahan pilihan "dihoyongkeun", lajeng manggihan pola dina kode, ngalakukeun ngagantian variabel jeung nulis loop a.
Upami anjeun gaduh ide kumaha cara ngabéréskeun masalah ieu tanpa loop dina sababaraha cara sanés, punten nyerat dina koméntar.

Loops dina Loops

Dina topik ieu anjeun kedah nengetan ieu:
- counters pikeun loop jero jeung luar kudu variabel béda.
- counter pikeun loop jero kudu ngareset sababaraha kali (nyaéta, dina awak loop luar).
- dina tugas kaluaran téks, Anjeun teu bisa mimiti nulis hiji hurup dina sababaraha baris, lajeng kadua. Anjeun kedah nyitak sadaya hurup baris kahiji, teras sadaya hurup kadua, sareng saterasna.

Hadé pisan mun éta ngamimitian ngajelaskeun topik loop dina loop ku ngajelaskeun pentingna ngareset counter kana nol.
conto tugas:

Pamaké ngasupkeun dua angka: Urang Sunda jeung T. Nyitak dua garis karakter "#". Baris kahiji kedah ngandung aksara Sunda. Baris kadua ngandung potongan T. Upami aya nomer négatif, tingali pesen kasalahan.

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

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

R=-1, T=6Nilai R kedah non-négatip

R=6, T=-2Nilai T kedah non-négatip

Jelas, masalah ieu ogé boga sahenteuna dua solusi.
Dipikahayang

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

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

Bédana nyaéta yén dina solusi "mungkin", variabel kadua dianggo pikeun ngaluarkeun jalur kadua. Anjeun kedah keukeuh ngagunakeun variabel anu sami pikeun duanana puteran. Watesan ieu tiasa diyakinkeun ku kanyataan yén solusi sareng hiji counter pikeun dua siklus bakal janten ilustrasi tina istilah "counter reset". Ngartos istilah ieu diperlukeun nalika ngarengsekeun masalah di handap ieu. Salaku kompromi, anjeun tiasa nyimpen duanana solusi pikeun masalah.

Masalah umum sareng ngagunakeun hiji variabel counter pikeun dua puteran némbongan sapertos kieu:
R=5, T=11#####
######

Jumlah karakter dina garis kadua teu pakait jeung nilai T. Lamun perlu mantuan dina masalah ieu, anjeun kudu ningali kana catetan ngeunaan masalah has loop. Ieu gejala #3. Éta didiagnosis upami anjeun nambihan kaluaran nilai kontra langsung sateuacan siklus kadua. Dilereskeun ku ngareset. Tapi leuwih hade teu ngabejaan ieu langsung. Siswa kudu nyoba nyusun sakurang-kurangna hiji hipotésis.

Aya, tangtosna, solusi sejen. Tapi kuring henteu pernah ningali éta diantara murid. Dina tahap diajar siklus, carita ngeunaan eta bakal ngaganggu perhatian. Anjeun tiasa uih deui engké nalika diajar ngeunaan fungsi string.
Kamungkinan #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));

Tugas salajengna anu diperyogikeun:

Nembongkeun angka ti 0 nepi ka 9. Unggal angka kedah on garis sorangan. Jumlah digit dina garis (W) diasupkeun tina kibor.

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

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

Upami murid parantos ngawasaan téknik ngagentos variabel, maka anjeunna bakal gancang pisan. Hiji masalah mungkin deui dina ngareset variabel. Upami anjeun henteu tiasa ngadamel transformasi, éta hartosna anjeun buru-buru sareng kedah ngabéréskeun masalah anu langkung saderhana.

Nuhun kana perhatosanana. Like sareng ngalanggan saluran.

PS Lamun manggihan typos atawa kasalahan dina téks, mangga hayu atuh nyaho. Ieu tiasa dilakukeun ku milih bagian tina téks sareng pencét "⌘ + Enter" dina Mac, sareng "Ctrl / Enter" dina kibor klasik, atanapi ngalangkungan pesen pribadi. Upami pilihan ieu henteu sayogi, nyerat ngeunaan kasalahan dina koméntar. Hatur nuhun!

Ngan pamaké nu kadaptar bisa ilubiung dina survey. Daptar, Punten.

Polling pikeun pamiarsa tanpa karma

  • 20,0%Kuring ngajar profésional, +12

  • 10,0%Kuring ngajar sacara profésional, -11

  • 70,0%Abdi henteu ngajar, +17

  • 0,0%Abdi henteu ngajar, -10

  • 0,0%Lain0

10 pamaké milih. 5 pamaké abstained.

sumber: www.habr.com

Tambahkeun komentar