දුෂ්කරතා ජය ගන්නේ කෙසේදැයි උගන්වන්නේ කෙසේද, ඒ සමඟම චක්ර ලියන්න

අපි මූලික මාතෘකා වලින් එකක් ගැන කතා කරමු යන කාරනය තිබියදීත්, මෙම ලිපිය පළපුරුදු වෘත්තිකයන් සඳහා ලියා ඇත. අරමුන වන්නේ වැඩසටහන්කරණයේදී ආරම්භකයින්ට ඇති වැරදි වැටහීම් මොනවාද යන්න පෙන්වීමයි. පුහුණු සංවර්ධකයින් සඳහා, මෙම ගැටළු දිගු කලක් තිස්සේ විසඳා ඇත, අමතක වී හෝ කිසිසේත් නොදැනේ. ඔබට හදිසියේම මෙම මාතෘකාව සම්බන්ධයෙන් යමෙකුට උදව් කිරීමට අවශ්‍ය නම් ලිපිය ප්‍රයෝජනවත් විය හැකිය. ලිපිය Schildt, Stroustrup, Okulov විසින් වැඩසටහන්කරණය පිළිබඳ විවිධ පොත් වලින් ද්රව්ය සමඟ සමානකම් දක්වයි.

චක්‍ර පිළිබඳ මාතෘකාව තෝරා ගත්තේ ක්‍රමලේඛනය ප්‍රගුණ කිරීමේදී බොහෝ අය එයින් බැහැර වන බැවිනි.

මෙම තාක්ෂණය දුර්වල සිසුන් සඳහා නිර්මාණය කර ඇත. රීතියක් ලෙස, ශක්තිමත් පුද්ගලයන් මෙම මාතෘකාව මත රැඳී නොසිටින අතර ඔවුන් සඳහා විශේෂ තාක්ෂණික ක්රම ඉදිරිපත් කිරීම අවශ්ය නොවේ. ලිපියේ ද්විතීයික ඉලක්කය වන්නේ මෙම තාක්ෂණය "සියලු සිසුන් සඳහා ක්‍රියා කරයි, නමුත් එකම ගුරුවරයා" පන්තියේ සිට "සියලු සිසුන් සඳහා, සියලුම ගුරුවරුන් සඳහා වැඩ" පන්තියට ගෙන යාමයි. මම නිරපේක්ෂ සම්භවයක් ඉල්ලා නොසිටිමි. ඔබ දැනටමත් මෙම මාතෘකාව ඉගැන්වීමට සමාන ක්‍රමවේදයක් භාවිතා කරන්නේ නම්, කරුණාකර ඔබගේ අනුවාදය වෙනස් වන ආකාරය ලියන්න. ඔබ එය භාවිතා කිරීමට තීරණය කරන්නේ නම්, එය සිදු වූ ආකාරය අපට කියන්න. සමාන තාක්ෂණයක් පොතක විස්තර කර ඇත්නම්, කරුණාකර නම ලියන්න.


මම වසර 4 ක් මෙම තාක්ෂණය මත වැඩ කළෙමි, විවිධ මට්ටමේ පුහුණුවීම්වල සිසුන් සමඟ තනි තනිව අධ්‍යයනය කළෙමි. සමස්තයක් වශයෙන් සිසුන් පනස් දෙනෙකු පමණ සිටින අතර පන්ති පැය දෙදහසක් ඇත. මුලදී, සිසුන් සෑම විටම මෙම මාතෘකාවට හසු වී පිටව ගියහ. සෑම සිසුවෙකුටම පසුව, ක්රමවේදය සහ ද්රව්ය සකස් කරන ලදී. පසුගිය වසර පුරා, සිසුන් තවදුරටත් මෙම මාතෘකාව මත සිරවී නැත, ඒ නිසා මම මගේ සොයාගැනීම් බෙදා ගැනීමට තීරණය කළා.

ඇයි මෙච්චර අකුරු? චක්‍ර ඉතා ප්‍රාථමිකයි!

මා ඉහත ලියා ඇති පරිදි, සංවර්ධකයින් පුහුණු කිරීම සහ ශක්තිමත් සිසුන් සඳහා, ලූප සංකල්පයේ සංකීර්ණත්වය අවතක්සේරු කළ හැකිය. නිදසුනක් වශයෙන්, ඔබට දිගු දේශනයක් පැවැත්විය හැකිය, හිස ඔසවන සහ බුද්ධිමත් ඇස් බලන්න. නමුත් ඕනෑම ගැටළුවක් විසඳීමට උත්සාහ කරන විට, මෝඩකම සහ පැහැදිලි කළ නොහැකි ගැටළු ආරම්භ වේ. දේශනයෙන් පසු සිසුන්ට ඇත්තේ අර්ධ අවබෝධයක් පමණක් විය හැකිය. ඔවුන්ගේ මායාව කුමක්දැයි සිසුන්ට ම හඬ නැගිය නොහැකි වීම තත්ත්වය තවත් උග්‍ර කරයි.
දිනක් මම තේරුම් ගත්තා සිසුන් මගේ උදාහරණ හයිරොග්ලිෆ් ලෙස වටහා ගත් බව. එනම්, ඔබට "මැජික්" අකුරක් එකතු කිරීමට අවශ්‍ය වන නොබෙදිය හැකි පෙළ කෑලි මෙන් එය ක්‍රියා කරයි.
ඔබට අවශ්‍ය විශේෂිත ගැටළුවක් විසඳීමට සිසුන් සිතන බව සමහර විට මම දුටුවෙමි වෙන මොනවා හරි මම තවම ආවරණය නොකළ නිර්මාණයක්. විසඳුම සඳහා උදාහරණයේ සුළු වෙනස් කිරීමක් පමණක් අවශ්‍ය වුවද.

එබැවින් මම අවධානය යොමු කළ යුත්තේ ප්‍රකාශනවල වාක්‍ය ඛණ්ඩය කෙරෙහි නොව, ලූප භාවිතයෙන් පුනරාවර්තන කේතය ප්‍රතිනිර්මාණය කිරීමේ අදහස කෙරෙහි ය යන අදහස මම ඉදිරිපත් කළෙමි. සිසුන් මෙම අදහස ප්‍රගුණ කළ පසු, කුඩා පරිචයකින් ඕනෑම වාක්‍ය ඛණ්ඩයක් වැඩිදියුණු කළ හැකිය.

මම උගන්වන්නේ කාටද සහ ඇයි?

ප්‍රවේශ විභාග නොමැති බැවින්, පන්තිවලට ශක්තිමත් සහ ඉතා දුර්වල සිසුන් ඇතුළත් කළ හැකිය. ලිපියෙන් ඔබට මගේ සිසුන් ගැන වැඩිදුර කියවිය හැකිය සන්ධ්යා පාඨමාලා සිසුන්ගේ ප්රතිමූර්තිය
ක්‍රමලේඛනය ඉගෙන ගැනීමට කැමති සෑම කෙනෙකුටම එය ඉගෙන ගත හැකි බව සහතික කිරීමට මම උත්සාහ කළෙමි.
මගේ පන්ති තනි තනිව පවත්වනු ලබන අතර එක් එක් සඳහා ශිෂ්‍යයා තමාගේම මුදල් ගෙවයි. සිසුන් පිරිවැය ප්‍රශස්ත කර අවම වශයෙන් ඉල්ලා සිටින බව පෙනේ. කෙසේ වෙතත්, මිනිසුන් සජීවී ගුරුවරයෙකු සමඟ මුහුණට මුහුණ පන්තිවලට යන්නේ දැනුම සඳහා නොව, ඔවුන් ඉගෙන ගත් දේ පිළිබඳ විශ්වාසය සඳහා, ප්‍රගතිය පිළිබඳ හැඟීමක් සහ ප්‍රවීණයාගේ (ගුරුවරයාගේ) අනුමැතිය සඳහා ය. සිසුන්ට ඉගෙනීමේ ප්‍රගතියක් දැනෙන්නේ නැත්නම්, ඔවුන් ඉවත්ව යනු ඇත. සාමාන්‍යයෙන්, හුරුපුරුදු ව්‍යුහයන් වැඩි කිරීමේ ප්‍රගතිය සිසුන්ට දැනෙන පරිදි පන්ති ව්‍යුහගත කළ හැකිය. එනම්, පළමුව අපි විස්තරාත්මකව පාඩම් කරමු, පසුව අපි පාඩම් කරමු, පසුව කරන අතර, දැන් අපට දහසකුත් එකක් රාත්‍රී පාඨමාලාවක් සූදානම් කර ඇති අතර, එහි චක්‍ර පමණක් මාස දෙකක් අධ්‍යයනය කරන අතර අවසානයේ - ලියූ සිසුවෙක් නියෝග යටතේ සම්මත පුස්තකාලයක්. කෙසේ වෙතත්, ප්‍රායෝගික ගැටළු විසඳීම සඳහා, ඔබට ද්‍රව්‍ය පිළිබඳ දැනුම පමණක් නොව, එහි යෙදුමේ ස්වාධීනත්වය සහ නව තොරතුරු සෙවීම අවශ්‍ය වේ. එමනිසා, මුහුණට මුහුණ පා courses මාලා සඳහා, අවම වශයෙන් ඉගැන්වීම සහ සූක්ෂ්මතා සහ අදාළ මාතෘකා ස්වාධීනව අධ්‍යයනය කිරීම දිරිමත් කිරීම නිවැරදි මූලධර්මය යැයි මම සිතමි. loops මාතෘකාවේදී, while construct එක අවම වශයෙන් මම සලකමි. ඔබට එයින් මූලධර්මය තේරුම් ගත හැකිය. මූලධර්මය දැන ගැනීමෙන්, ඔබට ඔබ වෙනුවෙන් සහ කරන අතරතුර යන දෙකම ප්‍රගුණ කළ හැකිය.

දුර්වල සිසුන් විසින් ද්‍රව්‍යයේ ප්‍රවීණත්වය ලබා ගැනීම සඳහා, වාක්‍ය ඛණ්ඩය විස්තර කිරීම ප්‍රමාණවත් නොවේ. වඩාත් සරල නමුත් විවිධ කාර්යයන් ලබා දීම සහ උදාහරණ වඩාත් විස්තරාත්මකව විස්තර කිරීම අවශ්ය වේ. අවසාන වශයෙන්, ප්‍රකාශන පරිවර්තනය කිරීමට සහ රටා සෙවීමට ශිෂ්‍යයාට ඇති හැකියාව මගින් සංවර්ධනයේ වේගය සීමා වේ. දක්ෂ සිසුන් සඳහා, බොහෝ පැවරුම් කම්මැලි වනු ඇත. ඔවුන් සමඟ පාඩම් කරන විට, ගැටළු වලින් 100% ක් විසඳීමට ඔබ අවධාරනය නොකළ යුතුය. මගේ ද්‍රව්‍ය නැරඹිය හැකිය මගේ github. ඇත්ත, ගබඩාව වෝර්ලොක්ගේ ග්‍රිමෝයර් එකකට සමානයි - මට හැර වෙන කිසිවෙකුට කොතැනද යන්න තේරෙන්නේ නැත, ඔබ චෙක්පත අසමත් වුවහොත් ඔබට පිස්සු වැටිය හැකිය

ක්රමවේදය ප්රායෝගිකව නැඹුරු වේ

ගැටලුවක් විසඳීමේ උදාහරණය භාවිතා කරමින් න්යාය පැහැදිලි කරයි. ශාඛා සහ ලූප උගන්වනු ලබන ක්‍රමලේඛන පන්තියේ මූලධර්ම තුළ, සම්පූර්ණ පැයක් සඳහා එක් මාතෘකාවක් පිළිබඳ ප්‍රයෝජනවත් දේශනයක් පැවැත්විය නොහැක. සංකල්පය පැහැදිලි කිරීමට විනාඩි 15-20 ක් ප්රමාණවත්ය. ප්රායෝගික කාර්යයන් ඉටු කිරීමේදී ප්රධාන දුෂ්කරතා පැන නගී.
ආරම්භක ගුරුවරුන්ට එක් දේශනයකදී ක්‍රියාකරුවන්, ශාඛා, ලූප සහ අරා ඉවත් කළ හැකිය. නමුත් ඔවුන්ගේ සිසුන් මෙම තොරතුරු උකහා ගැනීමේ ගැටලුවට මුහුණ දෙනු ඇත.
සියල්ලට පසු, ඔබ ද්රව්යය පැවසීම පමණක් නොව, සවන්දෙන්නන් එය තේරුම් ගැනීමට වග බලා ගත යුතුය.

මාතෘකාවක් ප්‍රගුණ කිරීමේ කාරණය තීරණය වන්නේ ශිෂ්‍යයා ස්වාධීන වැඩ සමඟ කටයුතු කරන ආකාරය අනුව ය.
ගුරුවරයෙකුගේ සහාය නොමැතිව මාතෘකාවක් පිළිබඳ ගැටළුවක් විසඳීමට ශිෂ්‍යයෙකු සමත් වූයේ නම්, මාතෘකාව ප්‍රගුණ කර ඇත. ස්වයං පරීක්ෂාව සහතික කිරීම සඳහා, සෑම කාර්යයක්ම පරීක්ෂණ අවස්ථා සහිත වගුවක විස්තර කෙරේ. කාර්යයන් පැහැදිලි පිළිවෙලක් ඇත. කාර්යයන් මඟ හැරීම නිර්දේශ නොකරයි. වත්මන් කාර්යය ඉතා අපහසු නම්, ඊළඟට යාමෙන් පලක් නැත. එය ඊටත් වඩා සංකීර්ණයි. ශිෂ්‍යයාට වර්තමාන සංකීර්ණ කාර්යය ප්‍රගුණ කළ හැකි වන පරිදි, පළමු ගැටලුවේ උදාහරණය භාවිතා කරමින් ඔහුට ශිල්පීය ක්‍රම කිහිපයක් පැහැදිලි කෙරේ. ඇත්ත වශයෙන්ම, මාතෘකාවේ සම්පූර්ණ අන්තර්ගතය දුෂ්කරතා මඟහරවා ගැනීමේ ශිල්පීය ක්රම වෙත පැමිණේ. සයිකල් අතුරු ආබාධ වැඩියි.

පළමු කාර්යය සෑම විටම ආදර්ශයකි. දෙවැන්න තරමක් වෙනස් වන අතර ගුරුවරයෙකුගේ අධීක්ෂණය යටතේ පළමුවැන්නා වූ වහාම "ස්වාධීනව" සිදු කරනු ලැබේ. සියලුම පසුකාලීන කාර්යයන් වැරදි වැටහීම් ඇති කළ හැකි විවිධ කුඩා දේවල් කෙරෙහි අවධානය යොමු කිරීම අරමුණු කර ගෙන ඇත.

උදාහරණයේ පැහැදිලි කිරීම යනු ශිෂ්‍යයා විසින් ද්‍රව්‍යයේ කොටසක් ප්‍රගුණ කර ඇති බව තහවුරු කර ගැනීම සඳහා ප්‍රචාරණය සහ හරස් වලංගු කිරීම නැවත කැඳවීමට අවශ්‍ය සංවාදයකි.

මම අකාරුණික වන අතර මාතෘකාව පිළිබඳ පළමු උදාහරණය ඉතා වැදගත් බව කියමි. පුළුල් ස්වාධීන වැඩ සඳහා ඔබට ද්රව්ය තිබේ නම්, පළමු උදාහරණයේ අතපසුවීම් නිවැරදි කළ හැකිය. උදාහරණය හැර වෙනත් කිසිවක් නොමැති නම්, බොහෝ විට ශිෂ්‍යයා මාතෘකාව ප්‍රගුණ නොකරනු ඇත.

අතරතුර හෝ සඳහා?

මතභේදාත්මක ගැටළු වලින් එකක් වන්නේ උදාහරණයක් සඳහා ඉදිකිරීම් තේරීමයි: අතරතුර හෝ සඳහා. වරක්, කිසිදු ඉගැන්වීමේ පළපුරුද්දක් නොමැති මගේ පුහුණු සංවර්ධක මිතුරෙක්, for loop එක තේරුම් ගැනීමට පහසුම බව මට ඒත්තු ගැන්වීමට පැයක් ගත කළේය. තර්ක "එහි ඇති සියල්ල පැහැදිලි වන අතර එහි ස්ථානයේ තබා ඇත" කෙසේ වෙතත්, සැබෑ ආරම්භකයින් සඳහා දුෂ්කරතා සඳහා මූලික හේතුව චක්රය පිළිබඳ අදහස මිස එහි ලිවීම නොවේ. පුද්ගලයෙකු මෙම අදහස තේරුම් නොගන්නේ නම්, ඔහුට වාක්‍ය ඛණ්ඩය සමඟ දුෂ්කරතා ඇති වේ. අදහස අවබෝධ වූ වහාම, කේත නිර්මාණයේ ගැටළු තනිවම අතුරුදහන් වේ.

මගේ ද්‍රව්‍යවල, ලූපවල තේමාව අතු බෙදීමේ තේමාව අනුගමනය කරයි. if සහ while හි බාහිර සමානතාවය අපට සෘජු ප්‍රතිසමයක් ඇඳීමට ඉඩ සලසයි: "ශීර්ෂයේ කොන්දේසිය සත්‍ය වූ විට, ශරීරය ක්‍රියාත්මක වේ." චක්රයේ එකම විශේෂත්වය වන්නේ ශරීරය බොහෝ වාරයක් ක්රියාත්මක කිරීමයි.

මගේ දෙවන තර්කය නම්, ෆෝමැට් කිරීමට වඩා අඩු ආකෘතිකරණයක් අවශ්‍ය බවයි. අඩු හැඩතල ගැන්වීම යනු අස්ථානගත වූ කොමා සහ වරහන් සහිත මෝඩ වැරදි අඩු වීමයි. සින්ටැක්ස් දෝෂ ස්වයංක්‍රීයව වළක්වා ගැනීමට ආරම්භකයින් තවමත් ප්‍රමාණවත් අවධානයක් සහ සූක්ෂ්මතාවයක් වර්ධනය කර නොමැත.
තුන්වන තර්කය පළමු තර්කය ලෙස බොහෝ හොඳ පොත්වල පැහැදිලි කර ඇත.

ශිෂ්‍යයාට ප්‍රකාශන පහසුවෙන් පරිවර්තනය කළ හැකි නම්, ඔබට සමත් වීම ගැන කතා කළ හැකිය. එවිට ශිෂ්‍යයා තමා වඩාත් කැමති දේ තෝරා ගනු ඇත. පරිවර්තනයන් දුෂ්කරතා ඇති කරයි නම්, ඔබේ අවධානය වෙනතකට යොමු නොකිරීමට වඩා හොඳය. ශිෂ්‍යයාට ප්‍රථමයෙන් කාලය භාවිතා කර සියල්ල විසඳීමට ඉඩ දෙන්න. ඔබ ලූප පිළිබඳ මාතෘකාව ප්‍රගුණ කළ පසු, ඔබට පරිවර්තනය කිරීමට පුරුදු වීමට විසඳුම් නැවත ලිවිය හැකිය.
Postcondition loops යනු ඉතා දුර්ලභ මෘගයෙකි. මම ඒ සඳහා කිසිසේත්ම කාලය ගත කරන්නේ නැහැ. ශිෂ්‍යයෙකු රටා හඳුනා ගැනීම සහ ප්‍රකාශන පරිවර්තනය කිරීමේ අදහස් ප්‍රගුණ කර ඇත්නම්, ඔහුට මගේ උදව් නොමැතිව එය හඳුනාගත හැකිය.

ශක්තිමත් සිසුන්ට පළමු උදාහරණය විදහා දැක්වීමේදී, පළමු උදාහරණයේ විසඳුම පමණක් නොව, ප්රතිඵලයට තුඩු දුන් සමස්ත ක්රියා දාමය ද වාර්තා කිරීම වැදගත් වන බව මම අවධානය යොමු කරමි. කම්මැලි සිසුන්ට ලිවීම නොසලකා හැර අවසාන ඇල්ගොරිතම පමණක් පිටපත් කළ හැකිය. යම් දවසක දුෂ්කර කාර්යයක් ඔවුන් වෙත පැමිණෙන බව ඔවුන්ට ඒත්තු ගැන්විය යුතුය. එය විසඳීමට, ඔබ මෙම උදාහරණයේ මෙන් පියවර අනුගමනය කළ යුතුය. සියලුම අදියරයන් වාර්තා කිරීම වැදගත් වන්නේ එබැවිනි. පහත ගැටළු වලදී විසඳුමේ අවසාන අනුවාදය පමණක් ඉතිරි කිරීමට හැකි වනු ඇත.

ස්වයංක්‍රීයකරණයේ ප්‍රධාන අදහස නම්, අපි පුද්ගලයෙකුට සාමාන්‍ය වැඩ කිරීමට පරිගණකයක් භාර දෙන බවයි. මූලික තාක්ෂණික ක්රමවලින් එකක් වන්නේ ලූප ලිවීමයි. පේළියක වැඩසටහනක සමාන පුනරාවර්තන ක්‍රියා කිහිපයක් ලියා ඇති විට එය භාවිතා වේ.

ව්‍යංගයට වඩා පැහැදිලිය හොඳයි

පළමු ලූප කිරීමේ කාර්යයේදී එකම වාක්‍ය ඛණ්ඩය කිහිප වතාවක් ප්‍රදර්ශනය කිරීම හොඳ අදහසක් සේ පෙනේ. උදාහරණ වශයෙන්:

හුරේ, එය වැඩ කරයි!
හුරේ, එය වැඩ කරයි!
හුරේ, එය වැඩ කරයි!
හුරේ, එය වැඩ කරයි!
හුරේ, එය වැඩ කරයි!
හුරේ, එය වැඩ කරයි!
හුරේ, එය වැඩ කරයි!
හුරේ, එය වැඩ කරයි!

ප්‍රතිදානයේ කවුන්ටර අගය නොපෙනෙන නිසා මෙම විකල්පය නරකයි. මෙය ආරම්භකයින් සඳහා ගැටළුවකි. ඇයව අවතක්සේරු නොකරන්න. මුලදී, මෙම කාර්යය පළමු වන අතර, ආරෝහණ අනුපිළිවෙලෙහි සංඛ්යා මාලාවක් ව්යුත්පන්න කිරීමේ කාර්යය දෙවන විය. අත්‍යවශ්‍යයෙන්ම එකම දෙය වන “චක්‍ර N වාර” සහ “A සිට B දක්වා චක්‍රය” යන අතිරේක යෙදුම් හඳුන්වා දීම අවශ්‍ය විය. අනවශ්‍ය ආයතන නිර්මාණය නොකිරීමට, සංඛ්‍යා මාලාවක ප්‍රතිදානය සමඟ උදාහරණයක් පමණක් පෙන්වීමට මම තීරණය කළෙමි. සුළු පිරිසක් තම හිසෙහි කවුන්ටරයක් ​​තබා ගන්නේ කෙසේදැයි ඉගෙන ගැනීමට සහ සූදානමකින් තොරව වැඩසටහනක හැසිරීම ඔවුන්ගේ හිසෙහි ආදර්ශනය කිරීමට සමත් වෙති. සමහර සිසුන් ප්‍රථමයෙන් චක්‍ර යන මාතෘකාව මත මානසික ආකෘති නිර්මාණයට මුහුණ දෙති.
යම් පුහුණුවකින් පසු, ස්වාධීනව විසඳා ගැනීමට එකම පාඨය නැවත නැවත කිරීමේ කාර්යය මම ලබා දෙමි. ඔබ මුලින්ම පෙනෙන කවුන්ටරයක් ​​ලබා දී පසුව නොපෙනෙන එකක් ලබා දෙන්නේ නම්, සිසුන්ට අඩු ගැටළු ඇති වේ. සමහර විට "තිරයේ කවුන්ටරය ලියන්න එපා" යන ඉඟිය ප්රමාණවත්ය.

අනෙක් අය එය පැහැදිලි කරන්නේ කෙසේද?

අන්තර්ජාලයේ බොහෝ අධ්‍යාපනික ද්‍රව්‍යවල, චක්‍රයේ වාක්‍ය ඛණ්ඩය "දේශනයක" කොටසක් ලෙස ලබා දී ඇත. උදාහරණයක් ලෙස, developer.mozilla.org හි (දැනට), while ලූපය සමඟ තවත් ඉදිකිරීම් කිහිපයක් විස්තර කෙරේ. මෙම අවස්ථාවේ දී, මෝස්තර පමණක් සැකිලි ආකාරයෙන් ලබා දී ඇත. ඔවුන්ගේ දියත් කිරීමේ ප්රතිඵලය වචන වලින් විස්තර කර ඇත, නමුත් කිසිදු නිදර්ශනයක් නොමැත. මගේ මතය අනුව, මාතෘකාව පිළිබඳ එවැනි ඉදිරිපත් කිරීමක් එවැනි ද්රව්යවල ප්රයෝජනවත් බව ශුන්යයෙන් ගුණ කරයි. ශිෂ්‍යයාට කේතය නැවත ලිවිය හැකි අතර එය තමා විසින්ම ක්‍රියාත්මක කළ හැකිය, නමුත් ඔහුට තවමත් සංසන්දනය සඳහා ප්‍රමිතියක් අවශ්‍ය වේ. ප්රතිඵලය සමඟ සංසන්දනය කිරීමට කිසිවක් නොමැති නම් උදාහරණයක් නිවැරදිව නැවත ලියා ඇති බව ඔබ තේරුම් ගන්නේ කෙසේද?
උදාහරණයක් නොමැතිව සැකිල්ලක් පමණක් ලබා දුන් විට, එය ශිෂ්‍යයාට තවත් අපහසු වේ. කේත කොටස් අච්චුවේ නිවැරදිව තබා ඇති බව තේරුම් ගන්නේ කෙසේද? ඔබට ලිවීමට උත්සාහ කළ හැකිය කෙසේ හෝ, ඉන්පසු ධාවනය කරන්න. නමුත් ප්‍රති result ලය සංසන්දනය කිරීමට ප්‍රමිතියක් නොමැති නම්, දියත් කිරීම ද උපකාරී නොවේ.

Intuitive පිළිබඳ C++ පාඨමාලාවේ, loop syntax "ක්‍රියාකරුවන්" යන මාතෘකාව පිළිබඳ දේශනය 4 හි තුන්වන පිටුවේ තැන්පත් කර ඇත. ලූපවල වාක්‍ය ඛණ්ඩය පැහැදිලි කිරීමේදී, "ක්‍රියාකරු" යන පදය කෙරෙහි විශේෂ අවධානයක් යොමු කෙරේ. මෙම යෙදුම "සංකේතය" වැනි කරුණු සමූහයක් ලෙස ඉදිරිපත් කෙරේ. මෙය ප්‍රකාශයකි", "{} යනු සංයුක්ත ප්‍රකාශයකි", "ලූපයේ සිරුර ප්‍රකාශයක් විය යුතුය". මම මෙම ප්රවේශයට කැමති නැත, මන්ද එය එක් පදයක් පිටුපස වැදගත් සබඳතා සඟවා ඇති බව පෙනේ. භාෂා පිරිවිතර ක්‍රියාවට නැංවීම සඳහා සම්පාදක සංවර්ධකයින්ට අවශ්‍ය වන නමුත්, පළමු ආසන්න වශයෙන් සිසුන්ට අවශ්‍ය නොවේ. ක්‍රමලේඛනයට අලුතින් පැමිණෙන අය නියමයන් කෙරෙහි එතරම් අවධානයක් යොමු කිරීමට තරම් සූක්ෂම වන්නේ කලාතුරකිනි. පළමු වරට නව වචන මතක තබා ගන්නා සහ තේරුම් ගන්නා දුර්ලභ පුද්ගලයෙකි. කිසිවකුට තමන් ඉගෙන ගත් පදයක් නිවැරදිව යෙදිය නොහැකි තරම්ය. එමනිසා, සිසුන්ට “මම ලිව්වේ (a<7);{, නමුත් වැඩසටහන ක්‍රියා නොකරයි.” වැනි දෝෂ රාශියක් සිසුන්ට ලැබේ.
මගේ මතය අනුව, ආරම්භයේදීම වරහන් සමඟ ඉදිකිරීම් වල වාක්‍ය ඛණ්ඩය ලබා දීම වඩා හොඳය. වරහන් නොමැතිව විකල්පය පැහැදිලි කළ යුත්තේ ශිෂ්‍යයාට නිශ්චිත ප්‍රශ්නයක් ඇත්නම් පමණි: "වරහන් නොමැති අතර එය ක්‍රියාත්මක වන්නේ ඇයි."

Okulov ගේ 2012 පොතේ "Fundamentals of Programming" හි ලූප සඳහා හැඳින්වීමක් ආරම්භ වන්නේ රටාව සඳහා වන අතර පසුව එහි භාවිතය සඳහා නිර්දේශ ලබා දෙන අතර වහාම පාඩමේ පර්යේෂණාත්මක අංශයට යයි. මගේ පන්තිවලට කලාතුරකින් පැමිණෙන ඉතා දක්ෂ සිසුන්ගෙන් යුත් එම සුළුතරය සඳහා පොත ලියා ඇති බව මට වැටහේ.

ජනප්රිය පොත්වල, කේත කොටස්වල ප්රතිඵලය සෑම විටම ලියා ඇත. උදාහරණයක් ලෙස, Shildt ගේ "Java 8. The Complete Guide" 2015 සංස්කරණය. පළමුව, අච්චුවක් ලබා දී ඇත, පසුව උදාහරණ වැඩසටහනක් සහ එය වහාම - ක්රියාත්මක කිරීමේ ප්රතිඵලය.

උදාහරණයක් ලෙස, ආපසු හැරවීම සිදු කරන ලූපයක් සලකා බලන්න
ගණන් කිරීම 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

අච්චුවක්, උදාහරණ වැඩසටහනක් සහ වැඩසටහනේ ප්‍රතිඵලය විස්තර කිරීමේ ප්‍රවේශය “ළමුන් සඳහා ජාවාස්ක්‍රිප්ට්” පොතේ සහ w3schools.com හි js පාඨමාලාවේ ද භාවිතා වේ. වෙබ් පිටු ආකෘතිය මෙම උදාහරණය අන්තර්ක්‍රියාකාරී වීමට පවා ඉඩ සලසයි.

Stroustrup ගේ 2016 පොත C++ භාවිතා කිරීමේ මූලධර්ම සහ ප්‍රායෝගිකත්වය තවත් ඉදිරියට ගියේය. පළමු පියවර වන්නේ කුමන ප්රතිඵලය ලබා ගත යුතුද යන්න පැහැදිලි කිරීමයි, ඉන් පසුව වැඩසටහනේ පාඨය පෙන්වනු ලැබේ. එපමණක් නොව, ඔවුන් උදාහරණයක් ලෙස අහඹු වැඩසටහනක් පමණක් නොව, ඉතිහාසයට විනෝද චාරිකාවක් ලබා දෙයි. මෙය අවධානය යොමු කිරීමට උපකාරී වේ: "බලන්න, මෙය නිෂ්ඵල පාඨයක් පමණක් නොවේ. ඔබ අර්ථවත් දෙයක් දකිනවා. ”

පුනරාවර්තනය සඳහා උදාහරණයක් ලෙස, ගබඩා කර ඇති වැඩසටහන් යන්ත්‍රයක (EDSAC) ක්‍රියාත්මක කළ පළමු වැඩසටහන සලකා බලන්න. එය ලියා ඇත්තේ 6 මැයි 1949 වැනිදා එංගලන්තයේ කේම්බ්‍රිජ් විශ්වවිද්‍යාලයේ පරිගණක රසායනාගාරයේදී ඩේවිඩ් වීලර් විසිනි. මෙම වැඩසටහන සරල වර්ග ලැයිස්තුවක් ගණනය කර මුද්රණය කරයි.
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. චක්රයක් ලෙස නිර්මාණය කරන්න

ඊළඟට, "මට සියල්ල තේරෙනවා, නමුත් මට එය පැවසිය නොහැක" යන තත්වය තුළ ශිෂ්‍යයා සොයා නොගන්නා ලෙස නව නියමයන් හඳුන්වා දෙනු ලැබේ:
— කවුන්ටරයක් ​​යනු සෑම විටම ලූපයක ඇති පියවර ගණන නිරීක්ෂණය කිරීමට අවශ්‍ය වන විචල්‍යයකි. සාමාන්‍යයෙන් සීමාවට සංසන්දනය කරන පූර්ණ සංඛ්‍යාවක්.
කවුන්ටර පියවර - කවුන්ටර වෙනස්වීම් රටාව පිළිබඳ විස්තරය.
- constraint - ඇල්ගොරිතම අවසාන වන පරිදි කවුන්ටරය සංසන්දනය කරන අංකයක් හෝ විචල්‍යයකි. සීමාවට ළඟා වීමට කවුන්ටර අගය වෙනස් වේ.
- loop body - නැවත නැවතත් කරන විධාන මාලාවක්. "විධානය ලූපයක් තුළ ලියා ඇත" යැයි පවසන විට ඔවුන් අදහස් කරන්නේ ශරීරයයි.
- ලූප් පුනරාවර්තනය - ලූප් සිරුරේ එක් වරක් ක්රියාත්මක කිරීම.
— ලූප් තත්ත්‍වය — තවත් පුනරාවර්තනයක් ක්‍රියාත්මක වේද යන්න තීරණය කරන තාර්කික ප්‍රකාශනයකි. (මෙහි ශාඛා ව්‍යුහයන් සමඟ ව්‍යාකූල විය හැක)
මුලදී සිසුන් වෙනත් අරමුණු සඳහා නියමයන් භාවිතා කරනු ඇති බවට ඔබ සූදානම් විය යුතුය. මෙය ශක්තිමත් සහ දුර්වල යන දෙකටම අදාළ වේ. පොදු භාෂාවක් ස්ථාපිත කිරීම කලාවකි. දැන් මම කෙටියෙන් ලියන්නම්: ඔබට "කේත කොටස <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 වතාවක් ඉටු කළ යුතුයි. "හැඳින්වීම" - ක්රියාවන් නැවත කිරීමට පෙර, "නිගමනය" - පසුව.
මෙම මාතෘකාව ඒකාබද්ධ කිරීමේ ක්‍රියාවලියේදී, ඊළඟ ඒවා ප්‍රගුණ කිරීම මෙන්ම දුෂ්කරතා සමඟ කටයුතු කිරීමේදී, ප්‍රබල සිසුන්ට පවා ප්‍රශ්නය ඇසීම ප්‍රයෝජනවත් වේ: “මෙම ක්‍රියාව කොපමණ වාරයක් සිදු කළ යුතුද? එකක් හෝ කිහිපයක්?

අතිරේක කුසලතා වර්ධනය කිරීම

චක්‍ර හැදෑරීමේ ක්‍රියාවලියේදී සිසුන් ගැටළු හඳුනා ගැනීමේ සහ විසඳීමේ කුසලතා ද වර්ධනය කරයි. රෝග විනිශ්චය සිදු කිරීම සඳහා, ශිෂ්යයා අපේක්ෂිත ප්රතිඵලය ඉදිරිපත් කළ යුතු අතර එය සැබෑ ප්රතිඵලය සමඟ සංසන්දනය කළ යුතුය. නිවැරදි කිරීමේ ක්රියාවන් ඔවුන් අතර වෙනස මත රඳා පවතී.
මෙම අදියරේ සිටින සිසුන්ට තවමත් "අවශ්‍ය" ප්‍රති result ලය පිළිබඳ එතරම් අදහසක් නොමැති බැවින්, ඔවුන්ට පරීක්ෂණ දත්ත කෙරෙහි අවධානය යොමු කළ හැකිය. රීතියක් ලෙස, මෙම අදියරේදී කිසිවෙකු තවමත් වැරදියට සිදුවිය හැකි දේ සහ එය සමඟ කටයුතු කරන්නේ කෙසේද යන්න තේරුම් ගෙන නැත. එමනිසා, මම සාමාන්‍ය ගැටළු සහ ඒවා විසඳීමට ක්‍රම කිහිපයක් පිළිබඳ විස්තරයක් සටහන් පොතක ලියමි. වඩාත්ම සුදුසු එකක් තෝරා ගැනීම ශිෂ්‍යයාගේම කාර්යයකි.
“අපේක්ෂා කළ දේ සිදු වූවාද?”, “දැන් සිදු වූ මෙම තත්ත්වයන් මොනවාද?”, “ව්‍යවහාරික විසඳුම උපකාරවත් වූවාද?” යනුවෙන් ඇසීමට වාර්තාවක් අවශ්‍ය වේ.

  1. ක්‍රියා ගණන බලාපොරොත්තු වූවාට වඩා 1ක් අඩු හෝ වැඩිය. විසඳුම්:
    - කවුන්ටරයේ ආරම්භක අගය 1 කින් වැඩි කරන්න.
    - දැඩි සංසන්දන ක්‍රියාකරු (< හෝ >) දැඩි නොවන එකක් (<= හෝ >=) සමඟ ප්‍රතිස්ථාපනය කරන්න.
    - සීමා අගය 1 ට වෙනස් කරන්න.
  2. ලූපයක ක්‍රියා නතර නොකර, දින නියමයක් නොමැතිව සිදු කෙරේ. විසඳුම්:
    — කවුන්ටරය වෙනස් කිරීමේ විධානයක් අස්ථානගත වී ඇත්නම් එක් කරන්න.
    — කවුන්ටරය වෙනස් කිරීමේ විධානය සවි කරන්න එවිට එහි අගය සීමාවට සමීප වේ.
    — එය ලූපයේ සිරුරේ තිබේ නම්, constraint change විධානය ඉවත් කරන්න.
  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 ක නව අංකයක් එකතු කිරීමට අවශ්ය වනු ඇත. "අවශ්ය" තුළ එය එක් ශාඛාවක් පමණක් එකතු කිරීමට ප්රමාණවත් වේ.
"අවශ්‍ය" විකල්පය ප්‍රතිනිෂ්පාදනය කිරීමට කාර්යය සකසන්න, ඉන්පසු කේතයේ රටාවක් සොයා ගන්න, විචල්‍ය ප්‍රතිස්ථාපනයක් සිදු කර ලූපයක් ලියන්න.
ඔබට වෙනත් ආකාරයකින් ලූපයකින් තොරව මෙම ගැටළුව විසඳන්නේ කෙසේද යන්න පිළිබඳ අදහසක් තිබේ නම්, කරුණාකර අදහස් දැක්වීමේදී ලියන්න.

Loops ඇතුලත Loops

මෙම මාතෘකාව තුළ ඔබ පහත සඳහන් කරුණු කෙරෙහි අවධානය යොමු කළ යුතුය:
- අභ්යන්තර සහ පිටත ලූප සඳහා කවුන්ටර වෙනස් විචල්ය විය යුතුය.
- අභ්යන්තර ලූපය සඳහා කවුන්ටරය බොහෝ වාරයක් නැවත සකස් කළ යුතුය (එනම්, පිටත ලූපයේ සිරුරේ).
- පෙළ ප්‍රතිදාන කාර්යයන් වලදී, ඔබට පළමුව පේළි කිහිපයකින් එක අකුරක් ලිවිය නොහැක, පසුව දෙවැන්න. ඔබ මුලින්ම පළමු පේළියේ සියලුම අකුරු මුද්රණය කළ යුතුය, පසුව දෙවන අකුරු සහ යනාදිය.

කවුන්ටරය ශුන්‍යයට නැවත සැකසීමේ වැදගත්කම පැහැදිලි කිරීමෙන් ලූප තුළ ලූප පිළිබඳ මාතෘකාව පැහැදිලි කිරීම ආරම්භ කිරීම වඩාත් සුදුසුය.
උදාහරණ කාර්යය:

පරිශීලකයා අංක දෙකක් ඇතුල් කරයි: 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

ශිෂ්‍යයෙකු විචල්‍යයක් ප්‍රතිස්ථාපනය කිරීමේ තාක්ෂණය ප්‍රගුණ කර ඇත්නම්, ඔහු ඉතා ඉක්මනින් එයට මුහුණ දෙනු ඇත. විචල්‍යය නැවත සැකසීමේදී ඇති විය හැකි ගැටළුවක් නැවතත් වනු ඇත. ඔබට පරිවර්තනය හැසිරවිය නොහැකි නම්, එයින් අදහස් වන්නේ ඔබ ඉක්මන් වී ඇති අතර සරල ගැටළු විසඳීමට අවශ්ය බවයි.

ඔබගේ අවදානය පිළිබඳ ස්තූතියි. Channel එකට Like කරලා subscribe කරන්න.

PS ඔබ පෙළෙහි අක්ෂර වින්‍යාස හෝ දෝෂ සොයා ගන්නේ නම්, කරුණාකර මට දන්වන්න. මෙය පෙළෙහි කොටසක් තෝරා Mac මත “⌘ + Enter” එබීමෙන් සහ සම්භාව්‍ය යතුරුපුවරුවල “Ctrl / Enter” එබීමෙන් හෝ පුද්ගලික පණිවිඩ හරහා කළ හැක. මෙම විකල්පයන් නොමැති නම්, අදහස් දැක්වීමේ දෝෂ ගැන ලියන්න. ඔයාට ස්තූතියි!

සමීක්ෂණයට සහභාගී විය හැක්කේ ලියාපදිංචි පරිශීලකයින්ට පමණි. පුරන්නකරුණාකර.

කර්ම රහිත පාඨකයන් සඳහා ඡන්ද විමසීම

  • 20,0%මම වෘත්තීය වශයෙන් උගන්වනවා, +12

  • 10,0%මම වෘත්තීය වශයෙන් උගන්වනවා, -11

  • 70,0%මම උගන්වන්නේ නැහැ, +17

  • 0,0%මම උගන්වන්නේ නැහැ, -10

  • 0,0%වෙනත්0

පරිශීලකයින් 10 දෙනෙක් ඡන්දය දුන්හ. පරිශීලකයින් 5 දෙනෙක් ඡන්දය දීමෙන් වැළකී සිටියහ.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න