Хэрхэн бэрхшээлийг даван туулахыг зааж, нэгэн зэрэг мөчлөг бичих

Хэдийгээр бид үндсэн сэдвүүдийн нэгний талаар ярих болно, гэхдээ энэ нийтлэлийг туршлагатай мэргэжилтнүүдэд зориулж бичсэн болно. Гол зорилго нь анхлан суралцагчид програмчлалын талаар ямар буруу ойлголттой байдгийг харуулах явдал юм. Дадлагажигч хөгжүүлэгчдийн хувьд эдгээр асуудлууд удаан хугацаанд шийдэгдэж, мартагдсан эсвэл огт анзаарагдаагүй байна. Хэрэв та гэнэт энэ сэдвээр хэн нэгэнд туслах шаардлагатай бол нийтлэл хэрэг болно. Энэхүү нийтлэл нь Шилдт, Строуструп, Окулов нарын програмчлалын талаархи янз бүрийн номнуудын материалтай ижил төстэй байдлыг харуулсан болно.

Циклийн тухай сэдвийг сонгосон учир нь програмчлалыг эзэмшихэд маш олон хүмүүс энэ сэдвээс хасагддаг.

Энэ техник нь сул оюутнуудад зориулагдсан. Дүрмээр бол хүчирхэг хүмүүс энэ сэдвээр гацдаггүй бөгөөд тэдэнд зориулсан тусгай арга техникийг гаргах шаардлагагүй болно. Өгүүллийн хоёрдогч зорилго нь энэ арга барилыг "бүх сурагчдад зориулсан бүтээл, гэхдээ зөвхөн нэг багш" ангиас "бүх сурагчид, бүх багш нарт зориулсан бүтээл" анги руу шилжүүлэх явдал юм. Би үнэмлэхүй өвөрмөц байдлыг шаарддаггүй. Хэрэв та энэ сэдвийг заахдаа ижил төстэй арга зүйг аль хэдийн ашиглаж байгаа бол таны хувилбар хэрхэн ялгаатай болохыг бичнэ үү. Хэрэв та үүнийг ашиглахаар шийдсэн бол энэ нь хэрхэн явагдсаныг бидэнд хэлээрэй. Хэрэв ижил төстэй техникийг номонд бичсэн бол нэрийг нь бичнэ үү.


Би энэ техник дээр 4 жил ажиллаж, янз бүрийн түвшний оюутнуудтай ганцаарчлан суралцсан. Нийтдээ тавин оюутан, хоёр мянган цагийн хичээлтэй. Анх оюутнууд энэ сэдвээр дандаа гацаж орхидог байсан. Оюутан бүрийн дараа арга зүй, материалыг тохируулсан. Сүүлийн нэг жилийн хугацаанд оюутнууд энэ сэдвээр гацахаа больсон тул би олж мэдсэн зүйлээ хуваалцахаар шийдлээ.

Яагаад ийм олон үсэг вэ? Цикл бол маш энгийн зүйл юм!

Би дээр бичсэнчлэн дадлагажигч хөгжүүлэгчид болон хүчирхэг оюутнуудын хувьд гогцоонуудын ойлголтын нарийн төвөгтэй байдлыг дутуу үнэлж болно. Жишээлбэл, та урт лекц уншиж, толгой дохих, ухаалаг нүдийг харж болно. Гэхдээ аливаа асуудлыг шийдэх гэж оролдох үед тэнэглэл, тайлагдашгүй асуудлууд эхэлдэг. Лекцийн дараа оюутнууд хэсэгчилсэн ойлголттой болсон байх. Оюутнууд өөрсдөө төөрөгдөл нь юу болохыг хэлж чадахгүй байгаа нь нөхцөл байдлыг улам хүндрүүлж байна.
Нэг өдөр би оюутнууд миний жишээг иероглиф гэж ойлгодог болохыг ойлгосон. Өөрөөр хэлбэл хуваагдашгүй текстийн хэсгүүдэд та "шидэт" үсэг нэмэх хэрэгтэй бөгөөд энэ нь ажиллах болно.
Заримдаа оюутнууд тодорхой асуудлыг шийдэхийн тулд танд хэрэгтэй гэж боддогийг би анзаарсан Өөр ямар нэг зүйл Миний хараахан авч үзээгүй загвар. Хэдийгээр шийдэл нь жишээнд бага зэрэг өөрчлөлт оруулах шаардлагатай байсан.

Тиймээс би гол анхаарлаа илэрхийллийн синтакс дээр биш харин давталтуудыг ашиглан давтагдах кодыг дахин өөрчлөх санаа дээр байх ёстой гэсэн санааг төрүүлсэн. Оюутнууд энэ санааг эзэмшсэн бол аливаа синтаксийг бага зэрэг дадлага хийснээр сайжруулж болно.

Би хэнд, яагаад заадаг вэ?

Элсэлтийн шалгалт байхгүй тул ангид хүчтэй болон маш сул оюутнуудыг хамруулж болно. Та миний оюутнуудын талаар илүү ихийг нийтлэлээс уншиж болно Оройн курсын оюутнуудын хөрөг зураг
Програмчлалд суралцах хүсэлтэй хүн бүр үүнийг сурах боломжтой болгохыг би хичээсэн.
Хичээл маань нэг бүрчлэн явагддаг бөгөөд оюутан тус бүрдээ мөнгөө төлдөг. Оюутнууд зардлыг оновчтой болгож, хамгийн бага зүйлийг шаардах бололтой. Гэхдээ хүмүүс мэдлэгийн төлөө бус харин сурсан зүйлдээ итгэлтэй байх, ахиц дэвшлийг мэдрэх, шинжээч (багш) -аас зөвшөөрөл авахын тулд амьд багштай нүүр тулан хичээллэдэг. Оюутнууд сурах ахиц дэвшлийг мэдрэхгүй бол тэд явах болно. Ерөнхийдөө ангиудыг оюутнуудад танил болсон бүтцийн тоог нэмэгдүүлэх ахиц дэвшлийг мэдрэхийн тулд зохион байгуулж болно. Өөрөөр хэлбэл, эхлээд бид нарийвчилсан судалж, дараа нь судалж, дараа нь хийдэг, одоо бид хоёр сарын турш зөвхөн циклийг судалдаг мянга нэг шөнийн курс бэлэн болсон, эцэст нь - бичсэн оюутан. диктант дор стандарт номын сан. Гэсэн хэдий ч практик асуудлыг шийдвэрлэхийн тулд та зөвхөн материалын талаархи мэдлэг төдийгүй түүнийг ашиглах, шинэ мэдээлэл хайхад бие даасан байх хэрэгтэй. Тиймээс нүүр тулсан хичээлийн хувьд хамгийн багадаа зааж, нюанс болон холбогдох сэдвүүдийг бие даан судлахыг дэмжих нь зөв зарчим гэж би бодож байна. Гогцоонуудын сэдвээр би while бүтцийг хамгийн бага гэж үздэг. Та үүнээс зарчмыг ойлгож болно. Зарчмыг мэдсэнээр та өөрийнхөө төлөө, хийж байхдаа хоёуланг нь эзэмшиж чадна.

Сул оюутнууд материалыг эзэмшихийн тулд синтаксийг тайлбарлах нь хангалтгүй юм. Илүү энгийн боловч олон янзын даалгавруудыг өгч, жишээнүүдийг илүү дэлгэрэнгүй тайлбарлах шаардлагатай байна. Эцсийн эцэст, хөгжлийн хурд нь сурагчийн илэрхийлэлийг өөрчлөх, хэв маягийг хайх чадвараар хязгаарлагддаг. Ухаалаг оюутнуудын хувьд ихэнх даалгавар нь уйтгартай байх болно. Тэдэнтэй хамт суралцахдаа асуудлыг 100% шийдэхийг шаардах шаардлагагүй. Миний материалыг эндээс үзэх боломжтой миний github. Үнэнийг хэлэхэд, агуулах нь дайчдын яруу найрагчтай адил юм - надаас өөр хэн ч хаана байгааг ойлгохгүй бөгөөд хэрэв та шалгалтанд тэнцэхгүй бол галзуурч магадгүй юм.

Арга зүй нь практикт чиглэсэн

Асуудлыг шийдвэрлэх жишээн дээр онолыг тайлбарлав. Салбар, гогцоо заадаг програмчлалын суурь хичээлд нэг сэдвээр бүтэн цагийн турш хэрэгтэй лекц унших боломжгүй. Үзэл баримтлалыг тайлбарлахад 15-20 минут хангалттай. Практик даалгавруудыг гүйцэтгэхэд гол бэрхшээлүүд үүсдэг.
Эхлэн багш нар нэг лекцээр оператор, салаа, гогцоо, массивыг таслах боломжтой. Гэхдээ тэдний оюутнууд энэ мэдээллийг өөртөө шингээх асуудалтай тулгарах болно.
Зөвхөн материалыг хэлэхээс гадна сонсогчдод ойлгуулах хэрэгтэй.

Сэдвийг эзэмших баримт нь оюутан бие даасан ажлыг хэрхэн даван туулж байгаагаас тодорхойлогддог.
Оюутан тухайн сэдвээр багшийн тусламжгүйгээр асуудлыг шийдэж чадсан бол тухайн сэдвийг бүрэн эзэмшсэн гэсэн үг. Өөрийгөө шалгахын тулд даалгавар бүрийг туршилтын хувилбар бүхий хүснэгтэд тайлбарласан болно. Даалгаврууд нь тодорхой дараалалтай байдаг. Даалгавруудыг алгасахыг зөвлөдөггүй. Хэрэв одоогийн ажил хэтэрхий хэцүү байвал дараагийнх руу шилжих нь ашиггүй болно. Энэ нь бүр ч төвөгтэй юм. Оюутан одоогийн нарийн төвөгтэй даалгаврыг эзэмшихийн тулд түүнд эхний асуудлын жишээн дээр хэд хэдэн аргыг тайлбарласан болно. Үнэндээ сэдвийн бүх агуулга нь бэрхшээлийг даван туулах арга техникээс хамаардаг. Цикл нь илүү гаж нөлөө үзүүлдэг.

Эхний ажил бол үргэлж үлгэр жишээ юм. Хоёр дахь нь бага зэрэг ялгаатай бөгөөд эхнийх нь дараа шууд багшийн хяналтан дор "бие даан" гүйцэтгэдэг. Дараагийн бүх даалгавар нь буруу ойлголт төрүүлж болох янз бүрийн жижиг зүйлд анхаарлаа хандуулахад чиглэгддэг.

Энэ жишээний тайлбар нь тухайн сурагч тухайн материалын тодорхой хэсгийг эзэмшсэн эсэхээ баталгаажуулахын тулд сурталчлах болон хөндлөн баталгаажуулалтыг буцааж дуудах шаардлагатай харилцан яриа юм.

Би улиг болсон бөгөөд энэ сэдвээр эхний жишээ маш чухал гэдгийг хэлэх болно. Хэрэв танд бие даасан ажилд зориулсан материал байгаа бол эхний жишээний орхигдсон зүйлийг засч залруулж болно. Хэрэв жишээнээс өөр зүйл байхгүй бол оюутан тухайн сэдвийг эзэмшихгүй байх магадлалтай.

Хэзээ ч юм уу?

Маргаантай асуудлын нэг бол барилгын сонголт юм: while эсвэл for. Нэг удаа, миний заах туршлагагүй, дадлагажигч хөгжүүлэгч найз маань for циклийг ойлгоход хамгийн хялбар гэж надад нэг цаг зарцуулсан. Аргументууд нь "түүн доторх бүх зүйл тодорхой, байрандаа тавигдсан" болтол багассан. Гэсэн хэдий ч жинхэнэ эхлэгчдэд тулгарч буй бэрхшээлийн гол шалтгаан нь түүнийг бичих биш харин мөчлөгийн тухай санаа юм. Хэрэв хүн энэ санааг ойлгоогүй бол синтакс хийхэд хүндрэлтэй байх болно. Санаа хэрэгжсэн даруйд кодын дизайны асуудал өөрөө алга болдог.

Миний материалд гогцоонуудын сэдэв нь салаалсан сэдвийг дагадаг. If and while-ийн гадаад ижил төстэй байдал нь "толгойн нөхцөл үнэн бол бие биелнэ" гэсэн шууд зүйрлэлийг зурах боломжийг олгодог. Циклийн цорын ганц онцлог нь биеийг олон удаа гүйцэтгэх явдал юм.

Миний хоёр дахь аргумент бол while нь for-оос бага формат шаарддаг. Формат багатай байна гэдэг нь таслал, хаалт дутуу тэнэг алдаа багатай гэсэн үг. Эхлэн суралцагчид синтаксийн алдаанаас автоматаар зайлсхийхийн тулд хангалттай анхаарал, нямбай байдлыг хараахан хөгжүүлээгүй байна.
Гурав дахь аргументыг эхний аргумент гэж олон сайхан номонд тайлбарласан байдаг.

Оюутан илэрхийлэлийг хялбархан хувиргаж чадвал та цааш нь ярих боломжтой. Дараа нь оюутан өөрт хамгийн их таалагдсан зүйлээ сонгоно. Хэрэв өөрчлөлтүүд нь хүндрэл учруулдаг бол таны анхаарлыг сарниулахгүй байх нь дээр. Оюутан эхлээд бүх зүйлийг while ашиглан шийднэ. Та гогцоонуудын сэдвийг эзэмшсэнийхээ дараа for-руу хөрвүүлэх дадлага хийх шийдлүүдийг дахин бичиж болно.
Нөхцөл байдлын гогцоо бол нэлээд ховор араатан юм. Би үүнд огт цаг зарцуулдаггүй. Хэрэв оюутан хэв маягийг тодорхойлох, илэрхийлэлийг өөрчлөх санааг эзэмшсэн бол тэр миний тусламжгүйгээр үүнийг олж чадна.

Хүчтэй оюутнуудад эхний жишээг үзүүлэхдээ би эхний жишээнд зөвхөн шийдлийг төдийгүй үр дүнд хүргэсэн бүх үйл ажиллагааны гинжин хэлхээг тэмдэглэх нь чухал гэдгийг анхаарна уу. Залхуу оюутнууд бичихийг үл тоомсорлож, зөвхөн эцсийн алгоритмыг хуулж болно. Хэзээ нэгэн цагт хэцүү ажил тэдний өмнө ирнэ гэдэгт итгэлтэй байх хэрэгтэй. Үүнийг шийдэхийн тулд та энэ жишээн дээрх алхмуудыг дагах хэрэгтэй. Ийм учраас бүх үе шатыг бүртгэх нь чухал юм. Дараахь асуудлуудад зөвхөн шийдлийн эцсийн хувилбарыг үлдээх боломжтой болно.

Автоматжуулалтын гол санаа бол бид хүний ​​ердийн ажлыг компьютерт даатгадаг явдал юм. Үндсэн аргуудын нэг бол гогцоо бичих явдал юм. Програмд ​​хэд хэдэн ижил давтагдах үйлдлийг дараалан бичсэн тохиолдолд үүнийг ашигладаг.

Ил тод нь далдаас илүү

Эхний давталтын даалгаварт нэг хэллэгийг олон удаа харуулах нь зүйтэй юм шиг санагдаж магадгүй. Жишээлбэл:

Уяа, энэ ажиллаж байна!
Уяа, энэ ажиллаж байна!
Уяа, энэ ажиллаж байна!
Уяа, энэ ажиллаж байна!
Уяа, энэ ажиллаж байна!
Уяа, энэ ажиллаж байна!
Уяа, энэ ажиллаж байна!
Уяа, энэ ажиллаж байна!

Тоолуурын утга гаралт дээр харагдахгүй байгаа тул энэ сонголт муу байна. Энэ нь эхлэгчдэд тулгардаг асуудал юм. Түүнийг дутуу үнэлж болохгүй. Эхлээд энэ даалгавар нь эхнийх байсан бөгөөд өсөх дарааллаар хэд хэдэн тоо гаргах даалгавар хоёр дахь нь байв. Үндсэндээ ижил зүйл болох "цахилгаан N удаа" ба "А-аас В хүртэлх мөчлөг" гэсэн нэмэлт нэр томъёог оруулах шаардлагатай байв. Шаардлагагүй аж ахуйн нэгжүүдийг үүсгэхгүйн тулд би зөвхөн цуврал тооны гаралт бүхий жишээг харуулахаар шийдсэн. Цөөн хүн толгойдоо лангуу барьж, толгойдоо програмын зан үйлийг хэрхэн загварчлах талаар бэлтгэлгүйгээр сурч чаддаг. Зарим оюутнууд эхлээд мөчлөгийн сэдвээр сэтгэцийн загварчлалтай тулгардаг.
Дасгал хийсний дараа бие даан шийдвэрлэх ижил текстийг давтах даалгавар өгдөг. Хэрэв та эхлээд харагдахуйц, дараа нь үл үзэгдэх тоолуур өгвөл оюутнуудын асуудал бага байх болно. Заримдаа "тоологчийг дэлгэцэн дээр бүү бич" гэсэн зөвлөгөө хангалттай байдаг.

Бусад хүмүүс үүнийг хэрхэн тайлбарлах вэ?

Интернет дэх ихэнх боловсролын материалд мөчлөгийн синтаксийг "лекцийн" хэсэг болгон өгдөг. Жишээлбэл, developer.mozilla.org (одоогоор) дээр бусад хэд хэдэн бүтцийг while давталтын хамт тайлбарласан болно. Энэ тохиолдолд зөвхөн загваруудыг өөрсдөө загвар хэлбэрээр өгдөг. Тэдний хөөргөх үр дүнг үгээр дүрсэлсэн боловч ямар ч дүрслэл байхгүй. Миний бодлоор сэдвийн ийм танилцуулга нь ийм материалын ашиг тусыг тэгээр үржүүлдэг. Оюутан кодыг дахин бичиж, өөрөө ажиллуулж болох боловч харьцуулах стандарт шаардлагатай хэвээр байна. Үр дүнг харьцуулах зүйл байхгүй бол жишээг зөв бичсэнийг та яаж ойлгох вэ?
Үлгэр жишээгүйгээр зөвхөн загвар өгчихвөл оюутанд бүр ч хэцүү болдог. Загварт кодын хэсгүүдийг зөв байрлуулсан гэдгийг хэрхэн ойлгох вэ? Та бичихийг оролдож болно ямар нэг байдлаар, дараа нь гүй. Гэхдээ үр дүнг харьцуулах стандарт байхгүй бол хөөргөх нь бас тус болохгүй.

Intuitive-ийн C++ хичээлийн лекцийн 4-р хуудсанд "операторууд" сэдвээр давталтын синтаксийг оруулсан болно. Гогцоонуудын синтаксийг тайлбарлахдаа "оператор" гэсэн нэр томъёонд онцгой анхаарал хандуулдаг. Энэ нэр томъёог “тэмдэг; энэ бол мэдэгдэл", "{} нь нийлмэл өгүүлбэр", "гогцооны бие нь мэдэгдэл байх ёстой". Энэ нь нэг нэр томъёоны ард чухал харилцааг нууж байгаа юм шиг санагддаг учраас би энэ аргад дургүй. Хөтөлбөрийн эх кодыг энэ түвшний нэр томьёо болгон задлан шинжлэх нь хэлний тодорхойлолтыг хэрэгжүүлэхийн тулд хөрвүүлэгч хөгжүүлэгчдэд шаардлагатай байдаг ч оюутнуудад эхний ойролцоо байдлаар биш. Програмчлалд шинээр орж ирж буй хүмүүс нэр томьёодоо маш их анхаарал хандуулдаг тийм нямбай байх нь ховор. Энэ бол шинэ үгийг анх удаа санаж, ойлгодог ховор хүн юм. Дөнгөж сурсан нэр томъёогоо бараг хэн ч зөв хэрэглэж чадахгүй. Тиймээс оюутнууд “Би while(a<7);{ бичсэн боловч програм ажиллахгүй байна” гэх мэт олон алдаа гаргадаг.
Миний бодлоор эхэнд нь барилгын синтаксийг шууд хашилтаар өгөх нь зүйтэй юм. Хаалтгүй сонголтыг зөвхөн оюутанд "яагаад хаалт байхгүй байна, энэ нь ажилладаг" гэсэн тодорхой асуулт байгаа тохиолдолд л тайлбарлах ёстой.

Окуловын 2012 онд хэвлэгдсэн "Програмчлалын үндэс" номонд гогцоонуудын тухай танилцуулга нь for загвараар эхэлж, дараа нь түүнийг ашиглах зөвлөмжийг өгч, дараа нь хичээлийн туршилтын хэсгийг нэн даруй оруулна. Энэ номыг миний хичээлд ховорхон ирдэг маш чадварлаг оюутнуудын цөөнхөд зориулж бичсэн гэж би ойлгож байна.

Алдартай номнуудад кодын хэсгүүдийн үр дүнг үргэлж бичдэг. Жишээлбэл, Шилдтийн "Java 8. The Complete Guide" 2015 оны хэвлэл. Эхлээд загвар, дараа нь програмын жишээ, түүний дараа шууд гүйцэтгэлийн үр дүн гарч ирнэ.

Жишээ болгон урвуу үйлдлийг хийдэг while давталтыг авч үзье
10-аас эхлэн тоолж, яг 10 мөр "хэмжилт" гарч ирнэ.

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

Энэ програмыг ажиллуулсны дараа дараах байдлаар арван "цикл" гаргана:
такт 10
такт 9
такт 8
такт 7
такт 6
такт 5
такт 4
такт 3
такт 2
такт 1

Загвар, жишээ програм болон програмын үр дүнг тайлбарлах аргыг "Хүүхдэд зориулсан JavaScript" ном болон w3schools.com сайтын js курст мөн ашигласан болно. Вэб хуудасны формат нь энэ жишээг интерактив байх боломжийг олгодог.

Stroustrup-ийн 2016 онд хэвлэгдсэн C++-ийг ашиглах зарчим ба практик ном нь бүр ч илүү гарсан. Эхний алхам бол ямар үр дүнд хүрэх ёстойг тайлбарлах бөгөөд үүний дараа хөтөлбөрийн текстийг харуулна. Түүгээр ч барахгүй тэд санамсаргүй хөтөлбөрийг жишээ болгон авч үзээд зогсохгүй түүхэнд аялах болно. Энэ нь түүнд анхаарлаа хандуулахад тусалдаг: "Хараач, энэ бол зүгээр нэг хэрэггүй текст биш юм. Та ямар нэгэн утга учиртай зүйлийг харж байна."

Давталтын жишээ болгон хадгалсан програмын машин (EDSAC) дээр гүйцэтгэсэн эхний програмыг авч үзье. Үүнийг 6 оны 1949-р сарын XNUMX-нд Английн Кембрижийн их сургуулийн компьютерийн лабораторид Дэвид Уилер бичсэн. Энэ програм нь квадратуудын энгийн жагсаалтыг тооцоолж хэвлэдэг.
0 0
1 1
2 4
3 9
4 16
...
98 9604
99 9801

Энд мөр бүр тоо, дараа нь таб тэмдэгт ('t') болон тухайн тооны квадратыг агуулна. Энэ програмын C++ хувилбар дараах байдалтай байна.

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

Сонирхолтой нь, энэ номонд синтаксийн хэв маягийг тайлбарлаагүй болно. Stroustrup багшийн гарын авлагад (орчуулга) сурагчдынхаа оюун ухаанд хүндэтгэлтэй ханддаг гэдгээ онцолж байна. Магадгүй хэд хэдэн жишээн дээр хэв маягийг тодорхойлох чадварыг ийм оюун ухааны илрэл гэж үздэг.

Би өөрийгөө тайлбарлаж байна

Stroustrup-ийн арга барил: үр дүнг тайлбарлах, дараа нь асуудлыг шийдэх, дараа нь оюутны бие даасан дүн шинжилгээ хийх нь хамгийн бодолтой юм шиг санагддаг. Тиймээс би үүнийг үндэс болгон авахаар шийдсэн боловч түүхэн багатай жишээг ашиглан "агуулгын хүснэгт" гаргах ажлыг хэлье. Энэ нь танигдахуйц зангуу үүсгэдэг бөгөөд ингэснээр та "агуулгын талаархи даалгаврыг санаарай" гэж хэлж болох бөгөөд ингэснээр оюутнууд үүнийг яг санаж байх болно. Миний жишээн дээр би хамгийн түгээмэл хоёр буруу ойлголтоос урьдчилан сэргийлэхийг хичээсэн. Дараа нь би тэдний талаар илүү дэлгэрэнгүй бичих болно.

Энэ даалгаварт бид нарийн төвөгтэй асуудлыг шийдвэрлэх арга техниктэй танилцсан. Анхны шийдвэр нь энгийн бөгөөд энгийн байх ёстой. За тэгвэл энэ шийдлийг хэрхэн сайжруулах талаар бодож болно.
Введение
Глава 1
Глава 2
Глава 3
Глава 4
Глава 5
Глава 6
Глава 7
Заключение

Миний ажигласнаар "загвар-жишээ-үр дүн" гэсэн янз бүрийн хослолууд нь оюутнууд циклийг иероглиф гэж ойлгоход хүргэдэг. Энэ нь яагаад тэнд бичих нөхцөл байдгийг, i++ болон i-ийн аль нэгийг хэрхэн сонгох болон бусад ойлгомжтой мэт зүйлийг ойлгохгүй байгаагаас илэрсэн. Эдгээр буруу ойлголтоос зайлсхийхийн тулд мөчлөгийн тухай ярих арга нь ижил төстэй үйлдлүүдийг давтаж, дараа нь бүтцийг ашиглан албан ёсны болгохын утгыг онцлон харуулах ёстой. Тиймээс давталтын синтаксийг өгөхөөс өмнө асуудлыг шууд шийдэх хэрэгтэй. Агуулгын хүснэгтийн асуудлыг шийдэх энгийн шийдэл нь дараах байдалтай байна.

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

Үүнийг хэрхэн сайжруулах вэ?
Нэг хэвийн үйлдлийг циклээр солих.
Ямар үйлдлүүд ямар ч өөрчлөлтгүйгээр дараалан давтагдах вэ?
Энэ хэсэгт нэг ч байхгүй. Гэсэн хэдий ч "Бүлэг" гэсэн үгийг тоогоор харуулах командууд нь хоорондоо маш төстэй юм.
Тиймээс дараагийн үе шат нь хэлтэрхий хоорондын ялгааг олох явдал юм. Зөвхөн энэ даалгаварт бүх зүйл тодорхой байгаа бөгөөд дараа нь ганц тушаал давтагдахгүй, харин 5 ба түүнээс дээш мөртэй кодын блокууд давтагдах болно. Та зөвхөн командын жагсаалтаас гадна салаалсан эсвэл давталтын бүтэцтэй хайлт хийх хэрэгтэй болно.
Жишээн дээр командуудын ялгаа нь "Бүлэг" гэсэн үгийн дараа байгаа тоонд байна.
Ялгааг олж мэдсэний дараа та өөрчлөлтийн хэв маягийг ойлгох хэрэгтэй. Өөр фрагмент нь тоо юм уу? Энэ нь байнга нэмэгдэж байна уу эсвэл буурч байна уу? Хоёр багийн хооронд тооны утга хэрхэн өөрчлөгдөх вэ?
Жишээн дээр “Бүлэг” гэсэн үгийн араас 1-ээр нэмэгддэг тоо. Ялгаа нь олдож, зүй тогтол илэрнэ. Одоо та ялгаатай фрагментийг хувьсагчаар сольж болно.
Та ийм хувьсагчийг давтагдах хэсгүүдийн эхнийхээс өмнө зарлах хэрэгтэй. Ийм хувьсагчийг ихэвчлэн I эсвэл j эсвэл илүү дэлгэрэнгүй гэж нэрлэдэг. Түүний анхны утга нь дэлгэцэн дээр гарч буй эхний утгатай тэнцүү байх ёстой. Жишээн дээр эхний утга нь 1 байна.
“100, 101, 102, 103, 104, 105” тоонуудын цувааг харуулахын тулд ямар анхны утгыг авах ёстой вэ?
Энэ цувралын эхний тоо 100 байна.
Гаралтын команд бүрийн дараа та энэ хувьсагчийн утгыг 1-ээр нэмэгдүүлэх шаардлагатай. Энэ нэгж нь өөрчлөлтийн алхам юм.
“100, 102, 104, 106” тоонуудын цуваа ямар алхам хийх вэ?
Энэ эгнээний 2-р алхам.
Ялгаатай фрагментийг хувьсагчаар сольсны дараа код дараах байдалтай харагдана.

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

Кодод "хувьсагчийн хэв маягийг илэрхийлэх" аргыг хэрэглэсний дараа та дараалсан хэд хэдэн ижил төстэй үйлдлүүдийг авах болно. Одоо давтагдах үйлдлийг циклээр сольж болно.

Гогцоо ашиглах шаардлагатай асуудлыг шийдэх дараалал нь дараах алхмуудаас бүрдэнэ.

  1. Олон тусдаа тушаалаар "толгой"-ыг шийдээрэй
  2. Загвар олох
  3. Хувьсагчийн загварыг илэрхийл
  4. Цикл хэлбэрээр зохион байгуул

Дараа нь оюутан "Би бүх зүйлийг ойлгож байна, гэхдээ би хэлж чадахгүй" гэсэн нөхцөл байдалд орохгүйн тулд шинэ нэр томьёог нэвтрүүлсэн.
- тоолуур нь давталтын алхмуудын тоог хянахад шаардлагатай хувьсагч юм. Ихэвчлэн хязгаарлалттай харьцуулсан бүхэл тоо.
— эсрэг алхам — тоолуурын өөрчлөлтийн хэв маягийн тодорхойлолт.
- хязгаарлалт - алгоритм эцсийнх байхын тулд тоолуурыг харьцуулах тоо эсвэл хувьсагч. Тоолуурын утга хязгаарт ойртохын тулд өөрчлөгддөг.
— давталтын бие — давтагдах командуудын багц. Тэд "тушаал нь гогцоонд бичигдсэн" гэж хэлэхэд тэд биеийг хэлдэг.
— давталтын давталт — гогцооны биеийг нэг удаа гүйцэтгэх.
— давталтын нөхцөл — өөр давталт хийгдэх эсэхийг тодорхойлох логик илэрхийлэл. (Энд салбарласан бүтэцтэй андуурч байж магадгүй)
Эхлээд оюутнууд нэр томъёог өөр зорилгоор ашиглах болно гэдэгт та бэлтгэлтэй байх хэрэгтэй. Энэ нь хүчтэй, сул дорой аль алинд нь хамаатай. Нийтлэг хэлийг бий болгох нь урлаг юм. Одоо би товчхон бичье: та "кодын фрагментийг <term>-ээр тодруулна уу" гэсэн даалгаврыг тавьж, харилцан ярианд эдгээр нэр томъёог өөрөө зөв ашиглах хэрэгтэй.
Гогцоонд хувиргасны дараа фрагментийг олж авна.

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

Гол буруу ойлголт

Оюутнуудын дунд түгээмэл байдаг нэг буруу ойлголт бол тэд зөвхөн нэг удаа хийх шаардлагатай үйлдлүүдийг гогцоонд оруулдаг гэсэн ойлголт юм. Жишээ нь:

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

Оюутнууд энэ асуудалтай байнга тулгардаг, эхэндээ ч, илүү төвөгтэй асуудлуудад ч.
Энэ тохиолдолд гол зөвлөмж:

Та тушаалыг хэдэн удаа давтах ёстой вэ: нэг эсвэл олон удаа уу?

"Танилцуулга", "Дүгнэлт" гэсэн үгсийг хэвлэх, i хувьсагчийг зарлах, эхлүүлэх командууд нь бусад давтагдах үйлдлүүдтэй адилгүй. Тэдгээрийг зөвхөн нэг удаа гүйцэтгэдэг бөгөөд энэ нь гогцооноос гадуур бичих шаардлагатай гэсэн үг юм.

Шийдлийн бүх гурван үе шат нь кодонд үлдэх ёстой бөгөөд ингэснээр хүндрэл гарсан тохиолдолд тэдгээрийг дараа нь авч үзэх боломжтой. Эхний хоёр сонголтыг хөндлөнгөөс оролцохгүйн тулд тайлбар хийхэд хангалттай.
Оюутны анхаарлыг дараахь баримтуудад хандуулах хэрэгтэй.
— Гогцооны нөхцөлд тоолуур болон хязгаарыг ихэвчлэн харьцуулдаг. Тоолуур нь гогцооны биед өөрчлөгдөж болох боловч хязгаар нь өөрчлөгдөхгүй. Энэ дүрмийг зөрчихийн тулд та үндэслэлтэй шалтгааныг томъёолох хэрэгтэй.
— “Танилцуулга”, “Дүгнэлт” гэсэн үгсийг харуулах командууд нь гогцооны гадна талд байрладаг. Бид тэдгээрийг 1 удаа хийх хэрэгтэй. "Танилцуулга" - үйлдлийг давтахаас өмнө, "Дүгнэлт" - дараа.
Энэ сэдвийг нэгтгэх, дараагийн сэдвүүдийг эзэмших, бэрхшээлийг даван туулах явцад хүчирхэг оюутнууд ч гэсэн "Энэ үйлдлийг хэдэн удаа хийх шаардлагатай вэ?" Гэсэн асуултыг тавих нь ашигтай байдаг. Нэг эсвэл олон уу?

Нэмэлт ур чадварыг хөгжүүлэх

Циклийг судлах явцад оюутнууд асуудлыг оношлох, шийдвэрлэх чадварыг хөгжүүлдэг. Оношлогоо хийхийн тулд оюутан хүссэн үр дүнг танилцуулж, бодит үр дүнтэй харьцуулах хэрэгтэй. Залруулах арга хэмжээ нь тэдгээрийн хоорондын ялгаанаас хамаарна.
Энэ үе шатанд байгаа оюутнууд "хүссэн" үр дүнгийн талаар багахан төсөөлөлтэй байгаа тул туршилтын өгөгдөлд анхаарлаа төвлөрүүлж чадна. Дүрмээр бол, энэ үе шатанд хэн ч юу нь буруу болж, үүнийг хэрхэн шийдвэрлэхээ ойлгоогүй байна. Тиймээс би ердийн асуудлуудын тодорхойлолт, тэдгээрийг шийдвэрлэх хэд хэдэн аргыг тэмдэглэлийн дэвтэрт бичдэг. Хамгийн тохиромжтойг нь сонгох нь оюутны өөрөө хийх ажил юм.
"Хүлээж байсан зүйл болсон уу?", "Эдгээр нөхцөл байдлын аль нь одоо болсон бэ?", "Хэрэглэсэн шийдэл тусалсан уу?" Гэж асуухын тулд тэмдэглэл хийх шаардлагатай.

  1. Үйлдлүүдийн тоо хүлээгдэж байснаас 1-ээр бага буюу илүү байна. Шийдэл:
    — тоолуурын анхны утгыг 1-ээр нэмэгдүүлнэ.
    — хатуу харьцуулах операторыг (< эсвэл >) хатуу бусаар (<= эсвэл >=) солино.
    — хязгаарын утгыг 1 болгож өөрчлөх.
  2. Гогцоонд байгаа үйлдлүүд нь зогсолтгүй, тодорхойгүй хугацаагаар хийгддэг. Шийдэл:
    - хэрэв байхгүй бол тоолуурыг өөрчлөх команд нэмнэ үү.
    - тоологч өөрчлөх командыг түүний утга хязгаарт ойртохын тулд засах.
    — хэрэв давталтын үндсэн хэсэгт байгаа бол хязгаарлалтыг өөрчлөх командыг устгана.
  3. Давталтын үйлдлүүдийн тоо хүлээгдэж буй хэмжээнээс 1-ээс бага буюу илүү байна. Гогцоонд байгаа үйлдэл нэг ч удаа биелээгүй. Эхлээд та давталт эхлэхээс өмнөхөн хувьсагчдын бодит утгыг олж мэдэх хэрэгтэй. Шийдэл:
    — хязгаарлалтын анхны утгыг өөрчлөх
    — тоолуурын анхны утгыг өөрчлөх

Асуудал 3 нь ихэвчлэн буруу хувьсагч ашиглах эсвэл тоолуурыг тэг болгохгүй байх явдал юм.

Энэ тайлбарын дараа оюутан гогцоо хэрхэн ажилладаг талаар янз бүрийн буруу ойлголттой хэвээр байж болно.
Хамгийн нийтлэг зүйлийг арилгахын тулд би танд дараах даалгавруудыг өгч байна.

  1. Хязгаар, анхны тоолуурын утга эсвэл тоолуурын алхамыг хэрэглэгч оруулсан байна.
  2. Тоолуурын утгыг зарим арифметик илэрхийлэлд ашиглах ёстой. Ялгаа нь шугаман бус байхын тулд радикал илэрхийлэл эсвэл хуваарьт тоолуур ашиглахыг зөвлөж байна.
  3. Давталт ажиллаж байх үед тоологч утгыг дэлгэц дээр харуулахгүй. Жишээлбэл, шаардлагатай тооны ижил текстийн хэсгүүдийг харуулах эсвэл яст мэлхийн графикаар дүрс зурах.
  4. Үүний тулд та эхлээд хэд хэдэн давтагдах үйлдлүүдийг, дараа нь бусад зүйлийг хийх хэрэгтэй.
  5. Үүнд та давтахаас өмнө болон дараа бусад үйлдлүүдийг хийх хэрэгтэй

Даалгавар бүрийн хувьд та туршилтын өгөгдөл болон хүлээгдэж буй үр дүнг өгөх хэрэгтэй.

Та хэр хурдан хөдөлж болохыг ойлгохын тулд эдгээр асуудлын нөхцөлийг уншиж, "тэдгээр нь жишээнээс юугаараа ялгаатай вэ?", "Тэдгээрийг шийдвэрлэхийн тулд жишээн дээр юу өөрчлөх шаардлагатай вэ?" Гэж асуух хэрэгтэй. Хэрэв оюутан утга учиртай хариулбал дор хаяж нэгийг нь ангидаа, үлдсэнийг нь гэртээ өөрөө шийдээрэй. Хэрэв шийдэл амжилттай болвол гогцоон доторх нөхцөлүүдийг тайлбарлаж эхэлж болно.
Хэрэв танд асуудлыг бие даан шийдвэрлэхэд бэрхшээлтэй байгаа бол хичээл дээр бүх зүйлийг даван туулах хэрэгтэй. Шар шувуу зурахтай адил асуудлыг шийдэхээс зайлсхийхийн тулд эхлээд асуудлыг бүх нийтийн бус аргаар шийдэхийг зөвлөж байна. Энэ нь шийдэл нь эхний туршилтыг давж, гогцооны бүтцийг ашиглахгүй байх явдал юм. За, дараа нь шийдлийн нийтлэг байдалд хүрэхийн тулд өөрчлөлтүүдийг хэрэгжүүлээрэй.

Гогцоо ба салбарууд

Миний бодлоор “салбар доторх мөчлөг” гэсэн сэдвийг тусад нь өгөх нь зүйтэй болов уу. Ингэснээр та нөхцөлийг олон удаа шалгах, нэг удаа шалгах хоёрын ялгааг харж болно.
Нэгтгэх даалгаврууд нь хэрэглэгчийн оруулсан A-аас B хүртэлх тоонуудыг гаргах явдал юм.
- үргэлж өсөх дарааллаар.
- A ба B-ийн утгуудаас хамааран өсөх эсвэл буурах.

Оюутан "хэв маягийг хувьсагчаар солих", "давтагдах үйлдлийг циклээр солих" арга техникийг эзэмшсэний дараа л "гогцоонд салбарлах" сэдвийг шилжүүлэх ёстой.
Гогцоон доторх мөчрүүдийг ашиглах гол шалтгаан нь хэв маягийн гажиг юм. Дунд нь эхний өгөгдлөөс хамааран эвдэрдэг.
Энгийн аргуудыг хослуулан шийдлийг хайж чаддаг оюутнуудын хувьд "салбаруудыг гогцоонд бичиж болно" гэж хэлээд, "жишээ нь" гэсэн асуудлыг бие даан шийдвэрлэхэд хангалттай.
Жишээ даалгавар:

Хэрэглэгч X тоог оруулна. 0-ээс 9 хүртэлх тоог баганад үзүүлж, X-тэй тэнцүү тооны эсрэг талд '+' тэмдэг тавина.

Хэрэв 0 оруулсан бол0+
1
2
3
4
5
6
7
8
9

Хэрэв 6 оруулсан бол0
1
2
3
4
5
6+
7
8
9

Хэрэв 9 оруулсан бол0
1
2
3
4
5
6
7
8
9+

Хэрэв 777 оруулсан бол0
1
2
3
4
5
6
7
8
9

Хэрэв товч тайлбар нь гогцоотой бичихэд хангалтгүй бол та гогцоогүйгээр ижил асуудлыг шийдэх бүх нийтийн шийдэлд хүрэх хэрэгтэй.
Та хоёр сонголтын аль нэгийг авах болно:
Хүссэн

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

Боломжтой

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

Би салаалах сэдвийг судалж байхдаа ижил төстэй даалгаврыг урьдчилан өгдөг.
Хэрэв оюутан "боломжтой" хувилбарыг гаргаж ирвэл та тэдэнд ижил асуудлыг шийдэх олон шийдэл байж болно гэдгийг хэлэх хэрэгтэй. Гэсэн хэдий ч тэдгээр нь шаардлагын өөрчлөлтийг эсэргүүцэх чадвараараа ялгаатай байдаг. "Хэрэв би өөр дугаар нэмэх шаардлагатай бол кодын хэдэн газрыг засах шаардлагатай вэ?" Гэсэн асуултыг асуу. "Боломжтой" хувилбарт та нэг салбар нэмж, өөр 10 газарт шинэ дугаар нэмэх шаардлагатай болно. "Хүссэн" хэсэгт зөвхөн нэг салбар нэмэхэд хангалттай.
"Хүссэн" сонголтыг хуулбарлах даалгаврыг тавь, дараа нь кодоос хэв маягийг олж, хувьсагчийг орлуулах, гогцоо бичнэ үү.
Хэрэв танд энэ асуудлыг ямар нэгэн байдлаар гогцоогүйгээр хэрхэн шийдэх талаар санал байвал сэтгэгдэл дээр бичнэ үү.

Гогцоонууд доторх гогцоо

Энэ сэдвээр та дараахь зүйлийг анхаарч үзэх хэрэгтэй.
- дотоод болон гадаад гогцоонуудын тоолуур нь өөр өөр хувьсагчтай байх ёстой.
- дотоод гогцоонд зориулсан тоолуурыг олон удаа дахин тохируулах ёстой (өөрөөр хэлбэл гаднах гогцооны биед).
— текст гаралтын даалгавруудад та эхлээд нэг үсгийг хэд хэдэн мөрөнд бичиж, дараа нь хоёр дахь үсэг бичиж болохгүй. Та эхлээд эхний мөрийн бүх үсгийг, дараа нь хоёр дахь бүх үсгийг хэвлэх хэрэгтэй.

Тоолуурыг тэг болгохын ач холбогдлыг тайлбарласнаар гогцоон доторх гогцоонуудын сэдвийг тайлбарлаж эхлэх нь дээр.
Жишээ даалгавар:

Хэрэглэгч R ба T гэсэн хоёр тоог оруулна. "#" тэмдэгтийн хоёр мөр хэвлэ. Эхний мөрөнд R тэмдэгт байх ёстой. Хоёр дахь мөрөнд T хэсгүүд орно. Хэрэв аль нэг тоо сөрөг байвал алдааны мессежийг харуулна уу.

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

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

R=-1, T=6R утга нь сөрөг биш байх ёстой

R=6, T=-2T утга нь сөрөг биш байх ёстой

Мэдээжийн хэрэг, энэ асуудал дор хаяж хоёр шийдэлтэй байдаг.
Хүссэн

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

Боломжит №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;
}

Үүний ялгаа нь "боломжтой" шийдэлд хоёр дахь мөрийг гаргахад хоёр дахь хувьсагчийг ашигласан явдал юм. Та хоёр гогцоонд ижил хувьсагч ашиглахыг шаардах хэрэгтэй. Энэхүү хязгаарлалтыг хоёр мөчлөгт нэг тоолууртай шийдэл нь "тоолуурыг дахин тохируулах" гэсэн нэр томъёоны жишээ болно гэсэн үндэслэлээр зөвтгөж болно. Дараах асуудлыг шийдвэрлэхэд энэ нэр томъёог ойлгох шаардлагатай. Буултын хувьд та асуудлыг шийдэх хоёр шийдлийг хадгалах боломжтой.

Хоёр гогцоонд нэг тоологч хувьсагчийг ашиглах ердийн асуудал дараах байдалтай байна.
R=5, T=11#####
######

Хоёр дахь мөрөнд байгаа тэмдэгтүүдийн тоо нь T-ийн утгатай тохирохгүй байна. Хэрэв танд энэ асуудалд тусламж хэрэгтэй бол гогцоотой холбоотой ердийн асуудлын талаархи тэмдэглэлийг үзэх хэрэгтэй. Энэ бол №3 шинж тэмдэг юм. Хэрэв та хоёр дахь мөчлөгийн өмнө шууд тоологч утгын гаралтыг нэмбэл оношлогддог. Дахин тохируулах замаар зассан. Гэхдээ энэ тухай шууд хэлэхгүй байх нь дээр. Оюутан дор хаяж нэг таамаглал дэвшүүлэхийг хичээх ёстой.

Мэдээжийн хэрэг, өөр шийдэл бий. Гэхдээ би оюутнуудын дунд үүнийг хэзээ ч харж байгаагүй. Циклийг судлах үе шатанд энэ тухай түүх нь анхаарлыг сарниулах болно. Та дараа нь мөрийн функцүүдийн талаар суралцахдаа буцаж ирж болно.
Боломжит №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));

Дараагийн шаардлагатай даалгавар:

0-ээс 9 хүртэлх тоог харуул. Тоо бүр өөрийн мөрөнд байх ёстой. Мөр дэх цифрүүдийн тоог (W) гараас оруулна.

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

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

Хэрэв оюутан хувьсагчийг солих техникийг эзэмшсэн бол тэр маш хурдан даван туулах болно. Хувьсагчийг дахин тохируулахтай холбоотой асуудал дахин гарч ирнэ. Хэрэв та өөрчлөлтийг даван туулж чадахгүй бол энэ нь та яарч байсан бөгөөд энгийн асуудлуудыг шийдэх хэрэгтэй гэсэн үг юм.

Анхаарал тавьсанд баярлалаа. Like дарж сувагт бүртгүүлээрэй.

Жич: Хэрэв та текстээс үсгийн алдаа эсвэл алдаа олсон бол надад мэдэгдэнэ үү. Үүнийг текстийн хэсгийг сонгоод Mac дээр "⌘ + Enter", сонгодог гар дээрх "Ctrl / Enter" товчийг дарж эсвэл хувийн мессежээр дамжуулан хийж болно. Хэрэв эдгээр сонголтууд байхгүй бол алдааны талаар тайлбар дээр бичнэ үү. Баярлалаа!

Зөвхөн бүртгэлтэй хэрэглэгчид санал асуулгад оролцох боломжтой. Нэвтрэх, гуйя.

Үйлийн үргүй уншигчдад зориулсан санал асуулга

  • 20,0%Би мэргэжлийн түвшинд заадаг, +12

  • 10,0%Би мэргэжлийн хичээл заадаг, -11

  • 70,0%Би заадаггүй, +17

  • 0,0%Би заадаггүй, -10

  • 0,0%Бусад0

10 хэрэглэгч санал өгсөн. 5 хэрэглэгч түдгэлзсэн.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх