Neskatoties uz to, ka mÄs runÄsim par vienu no pamattÄmÄm, Å”is raksts ir rakstÄ«ts pieredzÄjuÅ”iem speciÄlistiem. MÄrÄ·is ir parÄdÄ«t, kÄdi nepareizi priekÅ”stati ir iesÄcÄjiem programmÄÅ”anas jomÄ. Praktiskiem izstrÄdÄtÄjiem Ŕīs problÄmas jau sen ir atrisinÄtas, aizmirstas vai vispÄr nav pamanÄ«tas. Raksts var noderÄt, ja pÄkÅ”Åi kÄdam jÄpalÄ«dz ar Å”o tÄmu. RakstÄ tiek vilktas paralÄles ar materiÄlu no dažÄdÄm Å ilda, Stroustrup, Okulova grÄmatÄm par programmÄÅ”anu.
TÄma par cikliem izvÄlÄta tÄpÄc, ka, apgÅ«stot programmÄÅ”anu, no tÄs tiek izslÄgti diezgan daudzi.
Å Ä« tehnika ir paredzÄta vÄjiem skolÄniem. Parasti stipri cilvÄki Å”ajÄ tÄmÄ neiespringst un viÅiem nav jÄizdomÄ Ä«paÅ”i paÅÄmieni. Raksta sekundÄrais mÄrÄ·is ir pÄrvietot Å”o paÅÄmienu no klases ādarbi visiem skolÄniem, bet tikai vienam skolotÄjamā uz klasi ādarbi visiem skolÄniem, visiem skolotÄjiemā. Es nepretendÄju uz absolÅ«tu oriÄ£inalitÄti. Ja jÅ«s jau izmantojat lÄ«dzÄ«gu metodiku, lai mÄcÄ«tu Å”o tÄmu, lÅ«dzu, uzrakstiet, kÄ jÅ«su versija atŔķiras. Ja nolemjat to izmantot, pastÄstiet mums, kÄ tas gÄja. Ja lÄ«dzÄ«gs paÅÄmiens ir aprakstÄ«ts grÄmatÄ, lÅ«dzu, ierakstiet nosaukumu.
Pie Ŕīs tehnikas strÄdÄju 4 gadus, individuÄli mÄcoties ar dažÄda lÄ«meÅa sagatavotÄ«bas audzÄkÅiem. KopumÄ ir ap piecdesmit skolÄnu un divi tÅ«kstoÅ”i stundu nodarbÄ«bu. SÄkumÄ skolÄni vienmÄr iestrÄga pie Ŕīs tÄmas un aizgÄja. PÄc katra studenta tika koriÄ£Äta metodika un materiÄli. PÄdÄjÄ gada laikÄ skolÄni vairs nav iestrÄguÅ”i pie Ŕīs tÄmas, tÄpÄc nolÄmu padalÄ«ties ar saviem atklÄjumiem.
KÄpÄc tik daudz burtu? Cik elementÄri ir!
KÄ jau rakstÄ«ju iepriekÅ”, praktizÄjoÅ”iem izstrÄdÄtÄjiem un spÄcÄ«giem studentiem cilpu jÄdziena sarežģītÄ«bu var nenovÄrtÄt. PiemÄram, jÅ«s varat lasÄ«t garu lekciju, redzÄt galvas, kas pamÄja ar galvu, un saprÄtÄ«gas acis. Bet, mÄÄ£inot atrisinÄt jebkuru problÄmu, sÄkas stupors un neizskaidrojamas problÄmas. PÄc lekcijas studentiem, iespÄjams, bija tikai daļÄja izpratne. SituÄciju pasliktina tas, ka skolÄni paÅ”i nevar izteikties, kas Ä«sti ir viÅu maldiem.
KÄdu dienu es sapratu, ka skolÄni manus piemÄrus uztver kÄ hieroglifus. Tas ir, piemÄram, nedalÄmi teksta gabali, kuriem jÄpievieno kÄds āburvjuā burts, un tas darbosies.
DažkÄrt es pamanÄ«ju, ka studenti domÄ, ka, lai atrisinÄtu konkrÄtu problÄmu, jums ir nepiecieÅ”ams kaut kas cits dizains, ko es vienkÄrÅ”i vÄl neesmu aptvÄris. Lai gan risinÄjums prasÄ«ja tikai nelielu piemÄra modifikÄciju.
TÄpÄc man radÄs doma, ka uzmanÄ«bas centrÄ nevajadzÄtu bÅ«t izteiksmju sintaksi, bet gan idejai par atkÄrtota koda pÄrstrukturÄÅ”anu, izmantojot cilpas. Kad skolÄni ir apguvuÅ”i Å”o ideju, jebkuru sintaksi var uzlabot ar nelielu praksi.
Kam un kÄpÄc es mÄcu?
TÄ kÄ iestÄjpÄrbaudÄ«jumu nav, klasÄs var bÅ«t gan spÄcÄ«gi, gan ļoti vÄji skolÄni. VairÄk par maniem studentiem varat lasÄ«t rakstÄ
Es centos nodroÅ”inÄt, lai visi, kas vÄlas apgÅ«t programmÄÅ”anu, to varÄtu apgÅ«t.
Manas nodarbÄ«bas notiek individuÄli un par katru skolÄns maksÄ savu naudu. Å Ä·iet, ka studenti optimizÄs izmaksas un prasÄ«s minimumu. TaÄu cilvÄki uz klÄtienes nodarbÄ«bÄm pie dzÄ«vÄ skolotÄja dodas nevis paÅ”u zinÄÅ”anu, bet gan pÄrliecÄ«bas par apgÅ«to, progresa sajÅ«tas un eksperta (skolotÄja) apstiprinÄjuma dÄļ. Ja skolÄni nejÅ«t progresu savÄs mÄcÄ«bÄs, viÅi aizies. KopumÄ nodarbÄ«bas var strukturÄt tÄ, lai skolÄni sajustu progresu pazÄ«stamo struktÅ«ru skaita palielinÄÅ”anÄ. Tas ir, vispirms mÄcÄmies kamÄr sÄ«ki, tad mÄcÄmies, tad darÄm kamÄr, un tagad mums ir gatavs tÅ«kstoÅ” un vienas nakts kurss, kurÄ divus mÄneÅ”us tiek apgÅ«ti cikli vien un beigÄs - students, kurÅ” rakstÄ«ja. standarta bibliotÄka ar diktÄtu. TaÄu, lai risinÄtu praktiskas problÄmas, nepiecieÅ”amas ne tikai materiÄla zinÄÅ”anas, bet arÄ« neatkarÄ«ba tÄ pielietoÅ”anÄ un jaunas informÄcijas meklÄÅ”anÄ. TÄpÄc klÄtienes kursiem, manuprÄt, pareizs princips ir mÄcÄ«t minimumu un rosinÄt patstÄvÄ«gi apgÅ«t nianses un saistÄ«tÄs tÄmas. Cilpu tÄmÄ par minimumu uzskatu konstrukciju while. Principu no tÄ var saprast. Zinot principu, jÅ«s varat apgÅ«t gan priekÅ” sevis, gan darÄ«Å”anas.
Lai vÄji studenti apgÅ«tu materiÄlu, nepietiek ar sintakses aprakstu. Ir nepiecieÅ”ams sniegt vienkÄrÅ”Äkus, bet daudzveidÄ«gÄkus uzdevumus un sÄ«kÄk aprakstÄ«t piemÄrus. Galu galÄ attÄ«stÄ«bas Ätrumu ierobežo skolÄna spÄja pÄrveidot izteiksmes un meklÄt modeļus. Gudrajiem studentiem lielÄkÄ daļa uzdevumu bÅ«s garlaicÄ«gi. MÄcoties ar viÅiem, jums nav jÄuzstÄj uz 100% problÄmu atrisinÄÅ”anu. Manu materiÄlu var apskatÄ«t
MetodoloÄ£ija ir orientÄta uz praksi
Teorija tiek skaidrota, izmantojot problÄmas risinÄÅ”anas piemÄru. ProgrammÄÅ”anas pamatu stundÄs, kur mÄca zarus un cilpas, veselas stundas garumÄ nolasÄ«t noderÄ«gu lekciju par vienu tÄmu vienkÄrÅ”i nav iespÄjams. JÄdziena izskaidroÅ”anai pietiek ar 15-20 minÅ«tÄm. GalvenÄs grÅ«tÄ«bas rodas, veicot praktiskos uzdevumus.
IesÄcÄji skolotÄji var noburkŔķÄt operatorus, zarus, cilpas un masÄ«vus vienÄ lekcijÄ. TaÄu viÅu skolÄni saskarsies ar Ŕīs informÄcijas asimilÄcijas problÄmu.
NepiecieÅ”ams ne tikai izstÄstÄ«t materiÄlu, bet arÄ« pÄrliecinÄties, ka klausÄ«tÄji to saprot.
TÄmas apguves faktu nosaka tas, kÄ students tiek galÄ ar patstÄvÄ«go darbu.
Ja skolÄnam izdevÄs atrisinÄt uzdevumu par tÄmu bez skolotÄja palÄ«dzÄ«bas, tad tÄma ir apgÅ«ta. Lai nodroÅ”inÄtu paÅ”pÄrbaudi, katrs uzdevums ir aprakstÄ«ts tabulÄ ar testa scenÄrijiem. Uzdevumiem ir skaidra secÄ«ba. Nav ieteicams izlaist uzdevumus. Ja paÅ”reizÄjais uzdevums ir pÄrÄk grÅ«ts, tad pÄriet uz nÄkamo ir bezjÄdzÄ«gi. Tas ir vÄl sarežģītÄk. Lai students varÄtu apgÅ«t paÅ”reizÄjo sarežģīto uzdevumu, viÅam tiek izskaidroti vairÄki paÅÄmieni, izmantojot pirmÄs problÄmas piemÄru. PatiesÄ«bÄ viss tÄmas saturs ir atkarÄ«gs no grÅ«tÄ«bu pÄrvarÄÅ”anas paÅÄmieniem. Cikli ir vairÄk blakusparÄdÄ«ba.
Pirmais uzdevums vienmÄr ir piemÄrs. Otrais nedaudz atŔķiras un tiek izpildÄ«ts āpatstÄvÄ«giā uzreiz pÄc pirmÄs skolotÄja uzraudzÄ«bÄ. Visi turpmÄkie uzdevumi ir vÄrsti uz to, lai pievÄrstu uzmanÄ«bu dažÄdiem sÄ«kumiem, kas var radÄ«t nepareizus priekÅ”status.
PiemÄra skaidrojums ir dialogs, kurÄ skolÄnam ir jÄatsauc izplatÄ«Å”ana un savstarpÄjÄ validÄcija, lai pÄrliecinÄtos, ka viÅÅ” ir apguvis kÄdu materiÄla daļu.
Es bÅ«Å”u banÄls un teikÅ”u, ka pirmais piemÄrs par tÄmu ir ļoti svarÄ«gs. Ja jums ir materiÄls plaÅ”am patstÄvÄ«gam darbam, pirmÄ piemÄra izlaidumus var labot. Ja bez piemÄra nav nekÄ cita, tad students, visticamÄk, neapgÅ«s tÄmu.
KamÄr vai uz laiku?
Viens no strÄ«dÄ«gajiem jautÄjumiem ir konstrukcijas izvÄle piemÄram: kamÄr vai par. Reiz mans praktizÄjoÅ”ais draugs izstrÄdÄtÄjs bez mÄcÄ«Å”anas pieredzes pavadÄ«ja stundu, pÄrliecinot mani, ka for cilpa ir visvieglÄk saprotama. Argumenti noveda pie tÄ, ka "viss tajÄ ir skaidrs un sakÄrtots savÄ vietÄ". TomÄr Ä«stu iesÄcÄju grÅ«tÄ«bu galvenais cÄlonis ir paÅ”a cikla ideja, nevis tÄ rakstÄ«Å”ana. Ja cilvÄks Å”o domu nesaprot, tad viÅam bÅ«s grÅ«tÄ«bas ar sintaksi. TiklÄ«dz ideja tiek realizÄta, koda dizaina problÄmas pazÅ«d paÅ”as no sevis.
Manos materiÄlos cilpu tÄma seko zarojuma tÄmai. Ja un kamÄr ÄrÄjÄ lÄ«dzÄ«ba ļauj mums izdarÄ«t tieÅ”u analoÄ£iju: "ja nosacÄ«jums galvenÄ ir patiess, tad pamatteksts tiek izpildÄ«ts." VienÄ«gÄ cikla Ä«patnÄ«ba ir tÄ, ka Ä·ermenis tiek izpildÄ«ts daudzas reizes.
Mans otrais arguments ir tÄds, ka, lai gan ir nepiecieÅ”ams mazÄk formatÄÅ”anas nekÄ priekÅ”. MazÄks formatÄjums nozÄ«mÄ mazÄk stulbu kļūdu ar trÅ«kstoÅ”iem komatiem un iekavÄm. IesÄcÄji vÄl nav attÄ«stÄ«juÅ”i pietiekami daudz uzmanÄ«bas un rÅ«pÄ«bas, lai automÄtiski izvairÄ«tos no sintakses kļūdÄm.
TreÅ”ais arguments daudzÄs labÄs grÄmatÄs ir izskaidrots kÄ pirmais arguments.
Ja skolÄns var viegli pÄrveidot izteicienus, tad par to var runÄt garÄmejot. PÄc tam skolÄns izvÄlÄsies to, kas viÅam patÄ«k vislabÄk. Ja pÄrvÄrtÄ«bas rada grÅ«tÄ«bas, tad labÄk nenovÄrst uzmanÄ«bu. Ä»aujiet skolÄnam vispirms visu atrisinÄt, izmantojot kamÄr. Kad esat apguvis tÄmu par cilpÄm, varat pÄrrakstÄ«t risinÄjumus, lai praktizÄtu konvertÄÅ”anu while uz for.
PÄcnosacÄ«juma cilpas ir diezgan rets zvÄrs. Es tam vispÄr netÄrÄju laiku. Ja skolÄns ir apguvis modeļu identificÄÅ”anas un izteiksmju pÄrveidoÅ”anas idejas, viÅÅ” to var izdomÄt bez manas palÄ«dzÄ«bas.
DemonstrÄjot pirmo piemÄru spÄcÄ«giem studentiem, vÄrÅ”u uzmanÄ«bu uz to, ka pirmajÄ piemÄrÄ ir svarÄ«gi fiksÄt ne tikai risinÄjumu, bet arÄ« visu darbÄ«bu Ä·Ädi, kas noveda pie rezultÄta. Slinkie studenti var atstÄt novÄrtÄ rakstÄ«Å”anu un kopÄt tikai galÄ«go algoritmu. ViÅiem jÄbÅ«t pÄrliecinÄtiem, ka kÄdu dienu viÅus gaida grÅ«ts uzdevums. Lai to atrisinÄtu, jums bÅ«s jÄveic darbÄ«bas, kas norÄdÄ«tas Å”ajÄ piemÄrÄ. TÄpÄc ir svarÄ«gi reÄ£istrÄt visus posmus. TurpmÄkajÄs problÄmÄs bÅ«s iespÄjams atstÄt tikai risinÄjuma galÄ«go versiju.
AutomatizÄcijas galvenÄ ideja ir tÄda, ka mÄs uzticam datoram veikt rutÄ«nas darbus cilvÄka vietÄ. Viens no pamata paÅÄmieniem ir cilpu rakstÄ«Å”ana. To lieto, ja programmÄ pÄc kÄrtas ir ierakstÄ«tas vairÄkas identiskas darbÄ«bas, kas atkÄrtojas.
Skaidrs ir labÄks nekÄ netieÅ”s
Var Ŕķist laba ideja parÄdÄ«t vienu un to paÅ”u frÄzi vairÄkas reizes pirmajÄ cilpas uzdevumÄ. PiemÄram:
UrÄ, tas darbojas!
UrÄ, tas darbojas!
UrÄ, tas darbojas!
UrÄ, tas darbojas!
UrÄ, tas darbojas!
UrÄ, tas darbojas!
UrÄ, tas darbojas!
UrÄ, tas darbojas!
Å Ä« opcija ir slikta, jo skaitÄ«tÄja vÄrtÄ«ba nav redzama izvadÄ. TÄ ir problÄma iesÄcÄjiem. NenovÄrtÄ viÅu par zemu. SÄkumÄ Å”is uzdevums bija pirmais, bet skaitļu sÄrijas atvasinÄÅ”ana augoÅ”Ä secÄ«bÄ bija otrais. Bija nepiecieÅ”ams ieviest papildu terminus ācikls N reizesā un ācikls no A lÄ«dz Bā, kas bÅ«tÄ«bÄ ir viens un tas pats. Lai neradÄ«tu nevajadzÄ«gas entÄ«tijas, es nolÄmu parÄdÄ«t tikai piemÄru ar skaitļu sÄrijas izvadi. Tikai dažiem cilvÄkiem izdodas bez sagatavoÅ”anÄs iemÄcÄ«ties turÄt galvÄ skaitÄ«tÄju un modelÄt programmas uzvedÄ«bu galvÄ. Daži studenti pirmo reizi sastopas ar garÄ«go modelÄÅ”anu ciklu tÄmai.
PÄc nelielas prakses es dodu uzdevumu atkÄrtot vienu un to paÅ”u tekstu, kas jÄatrisina patstÄvÄ«gi. Ja vispirms norÄdÄ«siet redzamu un pÄc tam neredzamu skaitÄ«tÄju, skolÄniem bÅ«s mazÄk problÄmu. Dažreiz pietiek ar mÄjienu ānerakstiet skaitÄ«tÄju uz ekrÄnaā.
KÄ citi to izskaidro?
LielÄkajÄ daÄ¼Ä izglÄ«tojoÅ”o materiÄlu internetÄ cikla sintakse ir sniegta kÄ daļa no ālekcijasā. PiemÄram, vietnÄ developer.mozilla.org (paÅ”laik) kopÄ ar while cilpu ir aprakstÄ«tas vairÄkas citas konstrukcijas. Å ajÄ gadÄ«jumÄ veidÅu veidÄ tiek sniegti tikai paÅ”i dizaini. To palaiÅ”anas rezultÄts ir aprakstÄ«ts vÄrdos, bet nav ilustrÄcijas. ManuprÄt, Å”Äda tÄmas izklÄsts Å”Ädu materiÄlu lietderÄ«bu reizina ar nulli. SkolÄns var pÄrrakstÄ«t kodu un palaist to pats, bet viÅam joprojÄm ir nepiecieÅ”ams standarts salÄ«dzinÄÅ”anai. KÄ var saprast, ka piemÄrs ir pÄrrakstÄ«ts pareizi, ja nav ar ko salÄ«dzinÄt rezultÄtu?
Kad tiek dota tikai veidne, bez piemÄra, skolÄnam kļūst vÄl grÅ«tÄk. KÄ saprast, ka koda fragmenti ir pareizi ievietoti veidnÄ? Var mÄÄ£inÄt rakstÄ«t kaut kÄ, un tad palaist. Bet, ja nav standarta, lai salÄ«dzinÄtu rezultÄtu, tad arÄ« palaiÅ”ana nepalÄ«dzÄs.
C++ kursÄ par intuitÄ«vu cilpas sintakse ir aprakta 4. lekcijas treÅ”ajÄ lappusÄ par tÄmu āoperatoriā. Skaidrojot cilpu sintaksi, Ä«paÅ”s uzsvars tiek likts uz terminu āoperatorsā. Termins tiek parÄdÄ«ts kÄ faktu kopums, piemÄram, āsimbols; Å”is ir paziÅojums", "{} ir salikts priekÅ”raksts", "cilpas pamattekstam jÄbÅ«t priekÅ”rakstam". Man Ŕī pieeja nepatÄ«k, jo Ŕķiet, ka tÄ slÄpj svarÄ«gas attiecÄ«bas aiz viena termina. Programmas pirmkoda parsÄÅ”ana terminos Å”ajÄ lÄ«menÄ« ir nepiecieÅ”ama kompilatoru izstrÄdÄtÄjiem, lai ieviestu valodas specifikÄciju, bet ne studentiem kÄ pirmo tuvinÄjumu. ProgrammÄÅ”anas jaunpienÄcÄji reti ir pietiekami rÅ«pÄ«gi, lai pievÄrstu tik lielu uzmanÄ«bu terminiem. Rets cilvÄks pirmo reizi atceras un saprot jaunus vÄrdus. GandrÄ«z neviens nevar pareizi pielietot tikko apgÅ«to terminu. TÄpÄc skolÄni saÅem daudz kļūdu, piemÄram, āEs uzrakstÄ«ju, kamÄr(a<7);{, bet programma nedarbojas.ā
ManuprÄt, sÄkumÄ konstrukcijas sintaksi labÄk dot uzreiz ar iekavÄm. Opcija bez iekavÄm ir jÄpaskaidro tikai tad, ja skolÄnam ir konkrÄts jautÄjums: "kÄpÄc nav iekavas un tas darbojas."
Okulova 2012. gada grÄmatÄ āProgrammÄÅ”anas pamatiā ievads cilpÄs sÄkas ar paraugu, pÄc tam sniedz ieteikumus tÄ lietoÅ”anai un pÄc tam nekavÄjoties pÄriet uz nodarbÄ«bas eksperimentÄlo sadaļu. Es saprotu, ka grÄmata ir rakstÄ«ta tai ļoti spÄjÄ«go studentu mazÄkumam, kuri reti nÄk uz manÄm nodarbÄ«bÄm.
PopulÄrÄs grÄmatÄs koda fragmentu rezultÄts vienmÄr ir rakstÄ«ts. PiemÄram, Shildt āJava 8. The Complete Guideā 2015. gada izdevums. Vispirms tiek dota veidne, pÄc tam programmas paraugs un uzreiz pÄc tÄs - izpildes rezultÄts.
PiemÄram, apsveriet kamÄr cilpu, kas darbojas otrÄdi
atpakaļskaitÄ«Å”ana, sÄkot no 10, un tiek parÄdÄ«tas tieÅ”i 10 āpasÄkumuā rindas://ŠŃŠ¾Š“ŠµŠ¼Š¾Š½ŃŃŃŠøŃŠ¾Š²Š°ŃŃ ŠæŃŠøŠ¼ŠµŠ½ŠµŠ½ŠøŠµ Š¾ŠæŠµŃŠ°ŃŠ¾ŃŠ° ŃŠøŠŗŠ»Š° while class While { public static void main(String args []) { int n = 10; while (n > 0) { System.out.println("ŃŠ°ŠŗŃ " + n); n--; } } }
PÄc palaiÅ”anas Ŕī programma izvada desmit "ciklus" Å”Ädi:
ŃŠ°ŠŗŃ 10
ŃŠ°ŠŗŃ 9
ŃŠ°ŠŗŃ 8
ŃŠ°ŠŗŃ 7
ŃŠ°ŠŗŃ 6
ŃŠ°ŠŗŃ 5
ŃŠ°ŠŗŃ 4
ŃŠ°ŠŗŃ 3
ŃŠ°ŠŗŃ 2
ŃŠ°ŠŗŃ 1
Veidnes, programmas parauga un programmas rezultÄta aprakstÄ«Å”anas pieeja izmantota arÄ« grÄmatÄ āJavascript for Kidsā un js kursÄ vietnÄ w3schools.com. TÄ«mekļa lapas formÄts pat ļauj Å”im piemÄram bÅ«t interaktÄ«vam.
Stroustrup 2016. gada grÄmata Principi un prakse, izmantojot C++ gÄja vÄl tÄlÄk. Vispirms ir jÄpaskaidro, kÄds rezultÄts jÄiegÅ«st, un pÄc tam tiek parÄdÄ«ts programmas teksts. TurklÄt viÅi kÄ piemÄru Åem ne tikai nejauÅ”u programmu, bet arÄ« sniedz ekskursiju vÄsturÄ. Tas palÄ«dz pievÄrst uzmanÄ«bu: āLÅ«k, tas nav tikai bezjÄdzÄ«gs teksts. JÅ«s redzat kaut ko nozÄ«mÄ«gu."
KÄ iterÄcijas piemÄru apsveriet pirmo programmu, kas izpildÄ«ta saglabÄtÄs programmas maŔīnÄ (EDSAC). To uzrakstÄ«ja Deivids VÄ«lers Kembridžas universitÄtes Datoru laboratorijÄ AnglijÄ 6. gada 1949. maijÄ. Å Ä« programma aprÄÄ·ina un izdrukÄ vienkÄrÅ”u kvadrÄtu sarakstu.
0 0
1 1
2 4
3 9
4 16
...
98 9604
99 9801
Å eit katrÄ rindÄ ir skaitlis, kam seko tabulÄÅ”anas rakstzÄ«me ('t') un Ŕī skaitļa kvadrÄts. Å Ä«s programmas C++ versija izskatÄs Å”Ädi://ŠŃŃŠøŃŠ»ŃŠµŠ¼ Šø ŃŠ°ŃŠæŠµŃŠ°ŃŃŠ²Š°ŠµŠ¼ ŃŠ°Š±Š»ŠøŃŃ ŠŗŠ²Š°Š“ŃŠ°ŃŠ¾Š² ŃŠøŃŠµŠ» 0-99 int main() { int i = 0; // ŠŠ°ŃŠøŠ½Š°ŠµŠ¼ Ń Š½ŃŠ»Ń while(i < 100){ cout << i << 't' << square(i) << 'n'; ++i; } }
Interesanti, ka sintakses modelis Å”ajÄ grÄmatÄ nav aprakstÄ«ts. Stroustrup instruktora rokasgrÄmatÄ (
KÄ es pats paskaidroju
Stroustrup pieeja: rezultÄta aprakstÄ«Å”ana, problÄmas risinÄÅ”ana un pÄc tam neatkarÄ«ga studenta analÄ«ze - Ŕķiet visdomÄtÄkÄ. TÄpÄc es nolÄmu to Åemt par pamatu, bet pastÄstÄ«t to, izmantojot mazÄk vÄsturisku piemÄru - uzdevumu iegÅ«t āsatura rÄdÄ«tÄjuā. Tas veido atpazÄ«stamu enkuru, lai pÄc tam varÄtu teikt āatcerieties uzdevumu par satura rÄdÄ«tÄjuā un lai skolÄni atcerÄtos tieÅ”i to. SavÄ piemÄrÄ es mÄÄ£inÄju novÄrst vÄl divus visbiežÄk sastopamos nepareizos priekÅ”status. TÄlÄk par tiem rakstÄ«Å”u sÄ«kÄk.
Å ajÄ uzdevumÄ mÄs tiekam iepazÄ«stinÄti ar sarežģītu problÄmu risinÄÅ”anas paÅÄmieniem. SÄkotnÄjais lÄmums ir jÄpieÅem primitÄ«vs un vienkÄrÅ”s. Nu tad var domÄt, kÄ Å”o risinÄjumu uzlabot.
ŠŠ²ŠµŠ“ŠµŠ½ŠøŠµ
ŠŠ»Š°Š²Š° 1
ŠŠ»Š°Š²Š° 2
ŠŠ»Š°Š²Š° 3
ŠŠ»Š°Š²Š° 4
ŠŠ»Š°Š²Š° 5
ŠŠ»Š°Š²Š° 6
ŠŠ»Š°Š²Š° 7
ŠŠ°ŠŗŠ»ŃŃŠµŠ½ŠøŠµ
PÄc maniem novÄrojumiem, pieeja āveidne-piemÄrs-rezultÄtsā dažÄdÄs kombinÄcijÄs joprojÄm noved pie tÄ, ka skolÄni ciklu uztver kÄ hieroglifu. Tas izpaudÄs tajÄ, ka viÅi nesaprata, kÄpÄc tur ir jÄraksta nosacÄ«jums, kÄ izvÄlÄties starp i++ un iā un citÄm it kÄ paÅ”saprotamÄm lietÄm. Lai izvairÄ«tos no Å”iem maldÄ«gajiem priekÅ”statiem, runÄjot par cikliem, vajadzÄtu uzsvÄrt identisku darbÄ«bu atkÄrtoÅ”anas nozÄ«mi un tikai pÄc tam formalizÄt tÄs, izmantojot struktÅ«ru. TÄpÄc, pirms sniedzat cilpas sintakse, problÄma ir jÄatrisina tieÅ”i. PrimitÄ«vs satura rÄdÄ«tÄja problÄmas risinÄjums izskatÄs Å”Ädi:
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("ŠŠ°ŠŗŠ»ŃŃŠµŠ½ŠøŠµ");
KÄ to var uzlabot?
Nomainiet monotonÄs darbÄ«bas ar ciklu.
KÄdas darbÄ«bas tiek atkÄrtotas pÄc kÄrtas bez izmaiÅÄm?
Å ajÄ fragmentÄ tÄdu nav. TomÄr komandas vÄrda āChapterā parÄdÄ«Å”anai ar numuru ir ļoti lÄ«dzÄ«gas viena otrai.
TÄpÄc nÄkamais posms ir atrast atŔķirÄ«bu starp fragmentiem. Tikai Å”ajÄ uzdevumÄ viss ir skaidrs, tad tiks atkÄrtotas nevis atseviŔķas komandas, bet gan 5 vai vairÄk rindu koda bloki. Jums bÅ«s jÄmeklÄ ne tikai komandu sarakstÄ, bet arÄ« atzaroÅ”anas vai cilpas konstrukcijÄs.
PiemÄrÄ atŔķirÄ«ba starp komandÄm ir ciparÄ aiz vÄrda āChapterā.
Kad atŔķirÄ«ba ir atrasta, jums ir jÄsaprot pÄrmaiÅu modelis. AtŔķirÄ«gais fragments ir numurs? Vai tas pastÄvÄ«gi palielinÄs vai samazinÄs? KÄ skaitļa vÄrtÄ«ba mainÄs starp divÄm komandÄm blakus?
PiemÄrÄ skaitlis aiz vÄrda āChapterā palielinÄs ar soli 1. Tiek atrasta atŔķirÄ«ba, tiek atklÄts modelis. Tagad jÅ«s varat aizstÄt atŔķirÄ«go fragmentu ar mainÄ«go.
Å Äds mainÄ«gais ir jÄdeklarÄ pirms pirmÄ atkÄrtotÄ fragmenta. Å Ädu mainÄ«go parasti sauc par I vai j vai kaut ko detalizÄtÄku. TÄs sÄkotnÄjai vÄrtÄ«bai jÄbÅ«t vienÄdai ar pirmo ekrÄnÄ parÄdÄ«to vÄrtÄ«bu. PiemÄrÄ pirmÄ vÄrtÄ«ba ir 1.
KÄda sÄkotnÄjÄ vÄrtÄ«ba ir jÄÅem, lai parÄdÄ«tu skaitļu sÄriju ā100, 101, 102, 103, 104, 105ā?
Pirmais cipars Å”ajÄ sÄrijÄ ir 100.
PÄc katras izvades komandas jums jÄpalielina Ŕī mainÄ«gÄ vÄrtÄ«ba par 1. Å Ä« vienÄ«ba ir maiÅas solis.
KÄds solis bÅ«s skaitļu virknÄ ā100, 102, 104, 106ā?
2. darbÄ«ba Å”ajÄ rindÄ.
PÄc atŔķirÄ«gÄ fragmenta aizstÄÅ”anas ar mainÄ«go kods izskatÄ«sies Å”Ädi:
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("ŠŠ°ŠŗŠ»ŃŃŠµŠ½ŠøŠµ");
PÄc tehnikas āizteikt mainÄ«gÄ modeļaā izmantoÅ”anas kodÄ jÅ«s saÅemat vairÄkas identisku darbÄ«bu grupas, kas notiek pÄc kÄrtas. Tagad atkÄrtotas darbÄ«bas var aizstÄt ar cilpu.
ProblÄmas risinÄÅ”anas secÄ«ba, kurÄ jÄizmanto cilpas, sastÄv no Å”ÄdÄm darbÄ«bÄm:
- Atrisiniet "uz priekÅ”u" ar daudzÄm atseviŔķÄm komandÄm
- Atrodiet modeli
- Izsakiet mainÄ«gÄ modeli
- SakÄrtot kÄ ciklu
TÄlÄk tiek ieviesti jauni termini, lai skolÄns nenonÄktu situÄcijÄ āEs visu saprotu, bet nevaru pateiktā:
ā skaitÄ«tÄjs vienmÄr ir mainÄ«gais, kas nepiecieÅ”ams, lai izsekotu cilpas soļu skaitu. Parasti vesels skaitlis, kas tiek salÄ«dzinÄts ar ierobežojumu.
ā skaitÄ«tÄja solis ā skaitÄ«tÄja izmaiÅu modeļa apraksts.
- ierobežojums - skaitlis vai mainÄ«gais, ar kuru tiek salÄ«dzinÄts skaitÄ«tÄjs, lai algoritms bÅ«tu galÄ«gs. SkaitÄ«tÄja vÄrtÄ«ba mainÄs, lai tuvotos robežai.
ā cilpas korpuss ā komandu kopa, kas tiks atkÄrtota. Kad viÅi saka: "komanda ir rakstÄ«ta cilpas iekÅ”pusÄ", viÅi domÄ Ä·ermeni.
ā cilpas iterÄcija ā vienreizÄja cilpas korpusa izpilde.
ā cilpas nosacÄ«jums ā loÄ£iska izteiksme, kas nosaka, vai tiks izpildÄ«ta cita iterÄcija. (Å eit var bÅ«t neskaidrÄ«bas ar sazarotÄm struktÅ«rÄm)
Jums jÄbÅ«t gatavam tam, ka sÄkumÄ studenti izmantos terminus citiem mÄrÄ·iem. Tas attiecas gan uz stiprajiem, gan vÄjajiem. KopÄ«gas valodas izveidoÅ”ana ir mÄksla. Tagad es uzrakstÄ«Å”u Ä«si: jums ir jÄiestata uzdevums āizcelt koda fragmentu ar <term>ā un pareizi jÄlieto Å”ie termini sarunÄ.
PÄc pÄrveidoÅ”anas ar cilpu fragmentu iegÅ«st:
Console.WriteLine("ŠŠ²ŠµŠ“ŠµŠ½ŠøŠµ");
int i = 0;
while (i < 7) {
Console.WriteLine("ŠŠ»Š°Š²Š° " + i);
i = i + 1;
}
Console.WriteLine("ŠŠ°ŠŗŠ»ŃŃŠµŠ½ŠøŠµ");
Galvenais nepareizs priekŔstats
Viens populÄrs nepareizs uzskats skolÄnu vidÅ« ir tÄds, ka viÅi veic darbÄ«bas, kas jÄveic tikai vienu reizi. PiemÄram, Å”Ädi:
;
int i = 0;
while (i < 7) {
Console.WriteLine("ŠŠ²ŠµŠ“ŠµŠ½ŠøŠµ")
Console.WriteLine("ŠŠ»Š°Š²Š° " + i);
i = i + 1;
Console.WriteLine("ŠŠ°ŠŗŠ»ŃŃŠµŠ½ŠøŠµ");
}
Studenti ar Å”o problÄmu saskaras visu laiku, gan sÄkumÄ, gan sarežģītÄkas problÄmas.
Galvenais padoms Å”ajÄ gadÄ«jumÄ:
Cik reizes jums vajadzÄtu atkÄrtot komandu: vienu vai vairÄkas reizes?
Komandas vÄrdu "Ievads" un "Nobeigums" drukÄÅ”anai un mainÄ«gÄ i deklarÄÅ”anai un inicializÄcijai nav lÄ«dzÄ«gas citÄm atkÄrtotÄm darbÄ«bÄm. Tie tiek izpildÄ«ti tikai vienu reizi, kas nozÄ«mÄ, ka tie ir jÄraksta Ärpus cilpas pamatteksta.
Visiem trim risinÄjuma posmiem ir jÄpaliek kodÄ, lai jÅ«s vÄlÄk varÄtu atsaukties uz tiem, ja rodas grÅ«tÄ«bas. Pietiek komentÄt pirmos divus variantus, lai tie netraucÄ.
Studenta uzmanÄ«ba jÄpievÄrÅ” Å”Ädiem faktiem:
ā Cilpas stÄvoklÄ« parasti tiek salÄ«dzinÄts skaitÄ«tÄjs un limits. SkaitÄ«tÄjs var mainÄ«ties cilpas korpusÄ, bet ierobežojums nevar. Lai pÄrkÄptu Å”o noteikumu, jums ir jÄformulÄ pÄrliecinoÅ”i iemesli.
ā Komandas vÄrdu āIevadsā un āNobeigumsā attÄloÅ”anai atrodas Ärpus cilpas pamatteksta. Mums tie ir jÄveic 1 reizi. āIevadsā - pirms darbÄ«bu atkÄrtoÅ”anas, āSecinÄjumsā - pÄc.
Å Ä«s tÄmas nostiprinÄÅ”anas, nÄkamo apgÅ«Å”anas, kÄ arÄ« grÅ«tÄ«bu risinÄÅ”anas procesÄ pat spÄcÄ«giem skolÄniem ir lietderÄ«gi uzdot jautÄjumu: āCik reižu Ŕī darbÄ«ba ir jÄveic? Viens vai daudzi?
Papildu prasmju attīstīŔana
Studiju ciklu procesÄ studenti attÄ«sta arÄ« prasmi diagnosticÄt un risinÄt problÄmas. Lai veiktu diagnostiku, studentam jÄuzrÄda vÄlamais rezultÄts un jÄsalÄ«dzina ar faktisko rezultÄtu. KorektÄ«vÄs darbÄ«bas ir atkarÄ«gas no atŔķirÄ«bas starp tÄm.
TÄ kÄ studentiem Å”ajÄ posmÄ vÄl ir maz priekÅ”stata par āvÄlamoā rezultÄtu, viÅi var koncentrÄties uz testa datiem. Parasti Å”ajÄ posmÄ neviens vÄl nesaprot, kas var noiet greizi un kÄ ar to rÄ«koties. TÄpÄc es pierakstu piezÄ«mju grÄmatiÅÄ tipisku problÄmu aprakstu un vairÄkus to risinÄÅ”anas veidus. IzvÄlÄties piemÄrotÄko ir paÅ”a skolÄna uzdevums.
NepiecieÅ”ams ieraksts, lai jautÄtu āvai notika gaidÄ«tais?ā, āKura no Ŕīm situÄcijÄm notika tagad?ā, āVai pielietotais risinÄjums palÄ«dzÄja?ā
- DarbÄ«bu skaits ir par 1 mazÄks vai vairÄk nekÄ paredzÄts. RisinÄjumi:
ā palielinÄt skaitÄ«tÄja sÄkotnÄjo vÄrtÄ«bu par 1.
ā aizstÄt stingrÄs salÄ«dzinÄÅ”anas operatoru (< vai >) ar nestingru operatoru (<= vai >=).
ā mainÄ«t robežvÄrtÄ«bu uz 1. - DarbÄ«bas cilpÄ tiek veiktas bez apstÄÅ”anÄs, bezgalÄ«gi. RisinÄjumi:
ā pievienojiet skaitÄ«tÄja maiÅas komandu, ja tÄs trÅ«kst.
ā labojiet skaitÄ«tÄja maiÅas komandu tÄ, lai tÄs vÄrtÄ«ba tuvotos robežai.
ā noÅemiet ierobežojumu maiÅas komandu, ja tÄ atrodas cilpas pamattekstÄ. - DarbÄ«bu skaits ciklÄ ir par vairÄk nekÄ 1 mazÄks vai lielÄks, nekÄ paredzÄts. DarbÄ«ba cilpÄ netika izpildÄ«ta pat vienu reizi. Vispirms jums ir jÄnoskaidro mainÄ«go lielumu faktiskÄs vÄrtÄ«bas tieÅ”i pirms cilpas sÄkuma. RisinÄjumi:
ā mainÄ«t ierobežojuma sÄkotnÄjo vÄrtÄ«bu
ā mainÄ«t skaitÄ«tÄja sÄkotnÄjo vÄrtÄ«bu
3. problÄma parasti ietver nepareiza mainÄ«gÄ izmantoÅ”anu vai skaitÄ«tÄja neatiestatÄ«Å”anu uz nulli.
PÄc Ŕī skaidrojuma skolÄnam joprojÄm var rasties dažÄdi maldÄ«gi priekÅ”stati par cilpu darbÄ«bu.
Lai kliedÄtu visbiežÄk sastopamos, es jums dodu Å”Ädus uzdevumus:
- KurÄ lietotÄjs ievada ierobežojumu, sÄkotnÄjo skaitÄ«tÄja vÄrtÄ«bu vai skaitÄ«tÄja soli.
- KurÄ skaitÄ«tÄja vÄrtÄ«ba ir jÄizmanto kÄdÄ aritmÄtiskÄ izteiksmÄ. RadikÄlÄ izteiksmÄ vai saucÄjÄ ieteicams izmantot skaitÄ«tÄju, lai atŔķirÄ«ba bÅ«tu nelineÄra.
- KurÄ skaitÄ«tÄja vÄrtÄ«ba netiek parÄdÄ«ta ekrÄnÄ, kamÄr cilpa darbojas. PiemÄram, vajadzÄ«gÄ skaita identisku teksta fragmentu attÄloÅ”ana vai figÅ«ras zÄ«mÄÅ”ana ar bruÅurupuÄa grafikÄm.
- KurÄ vispirms jÄveic dažas atkÄrtotas darbÄ«bas, pÄc tam citas.
- KurÄ jums jÄveic citas darbÄ«bas pirms un pÄc atkÄrtoÅ”anas
Katram uzdevumam ir jÄnorÄda testa dati un gaidÄmais rezultÄts.
Lai saprastu, cik Ätri jÅ«s varat pÄrvietoties, jums ir jÄizlasa Å”o problÄmu termini un jÄjautÄ: "KÄ tie atŔķiras no piemÄra?", "Kas piemÄrÄ ir jÄmaina, lai tÄs atrisinÄtu?" Ja skolÄns atbild jÄgpilni, tad vismaz vienu lai viÅÅ” atrisina stundÄ, bet pÄrÄjo mÄjÄs pats. Ja risinÄjums ir veiksmÄ«gs, mÄs varam sÄkt skaidrot nosacÄ«jumus cilpu iekÅ”ienÄ.
Ja jums ir problÄmas ar problÄmu risinÄÅ”anu paÅ”am, jums viss ir jÄpÄrstrÄdÄ klasÄ. Lai problÄmas risinÄÅ”ana neatgÄdinÄtu pÅ«ces zÄ«mÄÅ”anu, iesaku vispirms atrisinÄt problÄmu neuniversÄlÄ veidÄ. Tas ir, lai risinÄjums izturÄtu pirmo pÄrbaudi un neizmantotu cilpas konstrukciju. Tad pielietojiet transformÄcijas, lai panÄktu risinÄjuma universÄlumu.
Cilpas un zari
ManuprÄt, ir lietderÄ«gi tÄmu ācikli filiÄlÄsā dot atseviŔķi. Lai vÄlÄk jÅ«s varÄtu redzÄt atŔķirÄ«bu starp stÄvokļa pÄrbaudi vairÄkas reizes un vienreizÄju pÄrbaudi.
KonsolidÄcijas uzdevumi bÅ«s par skaitļu izvadÄ«Å”anu no A lÄ«dz B, kurus lietotÄjs ievada:
- vienmÄr augoÅ”Ä secÄ«bÄ.
- augoÅ”Ä vai dilstoÅ”Ä atkarÄ«bÄ no A un B vÄrtÄ«bÄm.
TÄmu āzaru veidoÅ”anÄs cilpÄsā vajadzÄtu pÄriet tikai pÄc tam, kad students ir apguvis metodes: āparauga aizstÄÅ”ana ar mainÄ«goā un āatkÄrtotu darbÄ«bu aizstÄÅ”ana ar cikluā.
Galvenais iemesls zaru izmantoÅ”anai cilpu iekÅ”pusÄ ir modeļa anomÄlijas. VidÅ« tas saplÄ«st atkarÄ«bÄ no sÄkotnÄjiem datiem.
Tiem studentiem, kuri spÄj meklÄt risinÄjumu, kombinÄjot vienkÄrÅ”as tehnikas, pietiek pateikt āzarojumu var rakstÄ«t cilpu iekÅ”pusÄā un dot uzdevumu āpiemÄramā pilnÄ«bÄ atrisinÄt patstÄvÄ«gi.
Uzdevuma piemÄrs:
LietotÄjs ievada skaitli X. KolonnÄ parÄdiet skaitļus no 0 lÄ«dz 9 un ielieciet zÄ«mi "+" pretÄ« skaitlim, kas ir vienÄds ar X.
Ja tika ievadīts 00+
1
2
3
4
5
6
7
8
9
Ja tika ievadīts 60
1
2
3
4
5
6+
7
8
9
Ja tika ievadīts 90
1
2
3
4
5
6
7
8
9+
Ja tika ievadīts 7770
1
2
3
4
5
6
7
8
9
Ja ar Ä«su paskaidrojumu nepietiek, lai rakstÄ«tu ar cilpu, tad jums ir jÄpanÄk universÄls tÄs paÅ”as problÄmas risinÄjums bez cilpas.
JÅ«s iegÅ«sit vienu no divÄm iespÄjÄm:
VÄlamais
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);
}
IespÄjams
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+");
}
LÄ«dzÄ«gu uzdevumu dodu jau iepriekÅ”, pÄtot sazaroÅ”anas tÄmu.
Ja skolÄns nÄk klajÄ ar āiespÄjamoā variantu, jums jÄpasaka, ka vienai un tai paÅ”ai problÄmai var bÅ«t daudz risinÄjumu. TomÄr tie atŔķiras ar izturÄ«bu pret izmaiÅÄm prasÄ«bÄm. Uzdodiet jautÄjumu: "Cik vietas kodÄ bÅ«tu jÄlabo, ja man bÅ«tu jÄpievieno cits numurs?" āIespÄjamajÄā versijÄ jums bÅ«s jÄpievieno vÄl viena filiÄle un jÄpievieno jauns numurs 10 citÄs vietÄs. āVÄlamajÄā pietiek pievienot tikai vienu zaru.
Iestatiet uzdevumu reproducÄt āvÄlamoā opciju, pÄc tam atrodiet paraugu kodÄ, veiciet mainÄ«gÄ nomaiÅu un uzrakstiet cilpu.
Ja jums ir ideja, kÄ citÄdi atrisinÄt Å”o problÄmu bez cilpas, lÅ«dzu, rakstiet komentÄros.
Cilpas cilpÄs
Å ajÄ tÄmÄ jums jÄpievÄrÅ” uzmanÄ«ba Å”Ädiem jautÄjumiem:
ā iekÅ”ÄjÄs un ÄrÄjÄs cilpas skaitÄ«tÄjiem jÄbÅ«t dažÄdiem mainÄ«gajiem.
ā iekÅ”ÄjÄs cilpas skaitÄ«tÄjs ir vairÄkas reizes jÄatiestata (tas ir, ÄrÄjÄs cilpas korpusÄ).
ā teksta izvades uzdevumos nevar vispirms uzrakstÄ«t vienu burtu vairÄkÄs rindÄs un pÄc tam otru. Vispirms ir jÄizdrukÄ visi pirmÄs rindas burti, pÄc tam visi otrÄs rindas burti un tÄ tÄlÄk.
VislabÄk ir sÄkt skaidrot tÄmu par cilpÄm cilpÄs, paskaidrojot, cik svarÄ«gi ir atiestatÄ«t skaitÄ«tÄju uz nulli.
Uzdevuma piemÄrs:
LietotÄjs ievada divus ciparus: R un T. IzdrukÄjiet divas "#" rakstzÄ«mju rindiÅas. PirmajÄ rindÄ jÄbÅ«t R rakstzÄ«mÄm. OtrajÄ rindÄ ir T gabali. Ja kÄds skaitlis ir negatÄ«vs, parÄdiet kļūdas ziÅojumu.
R = 5, T = 11#####
###########
R = 20, T = 3######################
# # #
R = -1, T = 6R vÄrtÄ«bai jÄbÅ«t nenegatÄ«vai
R = 6, T = -2T vÄrtÄ«bai jÄbÅ«t nenegatÄ«vai
AcÄ«mredzot arÄ« Å”ai problÄmai ir vismaz divi risinÄjumi.
VÄlamais
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;
}
IespÄjams #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;
}
AtŔķirÄ«ba ir tÄda, ka "iespÄjamÄ" risinÄjumÄ otrÄs rindas izvadÄ«Å”anai tika izmantots otrs mainÄ«gais. Jums vajadzÄtu uzstÄt, lai abÄm cilpÄm izmantotu vienu un to paÅ”u mainÄ«go. Å o ierobežojumu var attaisnot ar to, ka risinÄjums ar vienu skaitÄ«tÄju diviem cikliem bÅ«s termina āskaitÄ«tÄja atiestatÄ«Å”anaā ilustrÄcija. Å Ä« termina izpratne ir nepiecieÅ”ama, risinot Å”Ädas problÄmas. KÄ kompromisu varat saglabÄt abus problÄmas risinÄjumus.
Tipiska problÄma ar viena skaitÄ«tÄja mainÄ«gÄ izmantoÅ”anu divÄm cilpÄm parÄdÄs Å”Ädi:
R = 5, T = 11#####
######
RakstzÄ«mju skaits otrajÄ rindÄ neatbilst T vÄrtÄ«bai. Ja jums ir nepiecieÅ”ama palÄ«dzÄ«ba Ŕīs problÄmas risinÄÅ”anÄ, jums ir jÄiepazÄ«stas ar piezÄ«mÄm par tipiskÄm cilpu problÄmÄm. Å is ir simptoms #3. Tas tiek diagnosticÄts, ja pievienojat skaitÄ«tÄja vÄrtÄ«bas izvadi tieÅ”i pirms otrÄ cikla. Labots, atiestatot. Bet labÄk to nestÄstÄ«t uzreiz. Studentam jÄmÄÄ£ina formulÄt vismaz vienu hipotÄzi.
Protams, ir arÄ« cits risinÄjums. Bet es to nekad neesmu redzÄjis studentu vidÅ«. Ciklu apguves posmÄ stÄsts par to novÄrsÄ«s uzmanÄ«bu. Varat pie tÄ atgriezties vÄlÄk, kad uzzinÄsit par virkÅu funkcijÄm.
IespÄjams #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Äkamais nepiecieÅ”amais uzdevums:
ParÄdiet skaitļus no 0 lÄ«dz 9. Katram ciparam ir jÄatrodas savÄ rindÄ. Ciparu skaits rindÄ (W) tiek ievadÄ«ts no tastatÅ«ras.
W=10
1
2
3
4
5
6
7
8
9
W=100000000000
1111111111
2222222222
3333333333
4444444444
5555555555
6666666666
7777777777
8888888888
9999999999
Ja students ir apguvis mainÄ«gÄ aizvietoÅ”anas tehniku, tad viÅÅ” tiks galÄ diezgan Ätri. IespÄjamÄ problÄma atkal bÅ«s mainÄ«gÄ atiestatÄ«Å”ana. Ja jÅ«s nevarat tikt galÄ ar transformÄciju, tas nozÄ«mÄ, ka jÅ«s steidzÄties un jums ir jÄatrisina vienkÄrÅ”Äkas problÄmas.
Paldies par jÅ«su uzmanÄ«bu. PatÄ«k un abonÄ kanÄlu.
PS Ja tekstÄ atrodat drukas kļūdas vai kļūdas, lÅ«dzu, informÄjiet mani. To var izdarÄ«t, atlasot teksta daļu un nospiežot āā+Enterā operÄtÄjsistÄmÄ Mac un āCtrl/Enterā klasiskajÄs tastatÅ«rÄs vai izmantojot privÄtas ziÅas. Ja Ŕīs iespÄjas nav pieejamas, rakstiet par kļūdÄm komentÄros. Paldies!
AptaujÄ var piedalÄ«ties tikai reÄ£istrÄti lietotÄji.
Aptauja lasÄ«tÄjiem bez karmas
-
20,0%MÄcu profesionÄli, +12
-
10,0%Es pasniedzu profesionÄli, -11
-
70,0%Es nemÄcu, +17
-
0,0%Es nemÄcu, -10
-
0,0%Cits0
Nobalsoja 10 lietotÄji. 5 lietotÄji atturÄjÄs.
Avots: www.habr.com