சிரமங்களை எவ்வாறு சமாளிப்பது என்பதைக் கற்பிப்பது எப்படி, அதே நேரத்தில் சுழற்சிகளை எழுதவும்

அடிப்படை தலைப்புகளில் ஒன்றைப் பற்றி பேசுவோம் என்ற போதிலும், இந்த கட்டுரை அனுபவம் வாய்ந்த நிபுணர்களுக்காக எழுதப்பட்டுள்ளது. நிரலாக்கத்தில் ஆரம்பநிலையாளர்கள் என்ன தவறான கருத்துக்களைக் கொண்டுள்ளனர் என்பதைக் காண்பிப்பதே குறிக்கோள். பயிற்சி டெவலப்பர்களுக்கு, இந்த சிக்கல்கள் நீண்ட காலமாக தீர்க்கப்பட்டுள்ளன, மறந்துவிட்டன அல்லது கவனிக்கப்படவில்லை. இந்த தலைப்பில் நீங்கள் திடீரென்று ஒருவருக்கு உதவ வேண்டும் என்றால் கட்டுரை கைக்கு வரலாம். ஷில்ட், ஸ்ட்ரோஸ்ட்ரப், ஒகுலோவ் ஆகியோரின் நிரலாக்கத்தின் பல்வேறு புத்தகங்களின் உள்ளடக்கத்துடன் கட்டுரை இணைகிறது.

சுழற்சிகள் பற்றிய தலைப்பு தேர்ந்தெடுக்கப்பட்டது, ஏனெனில் நிரலாக்கத்தை மாஸ்டரிங் செய்யும் போது நிறைய பேர் அதிலிருந்து விலக்கப்படுகிறார்கள்.

இந்த நுட்பம் பலவீனமான மாணவர்களுக்காக வடிவமைக்கப்பட்டுள்ளது. ஒரு விதியாக, வலுவான மக்கள் இந்த தலைப்பில் சிக்கிக் கொள்ள மாட்டார்கள், அவர்களுக்காக சிறப்பு நுட்பங்களைக் கொண்டு வர வேண்டிய அவசியமில்லை. கட்டுரையின் இரண்டாம் குறிக்கோள், இந்த நுட்பத்தை "அனைத்து மாணவர்களுக்கும் வேலை செய்யும், ஆனால் ஒரே ஒரு ஆசிரியர்" வகுப்பிலிருந்து "அனைத்து மாணவர்களுக்கும், அனைத்து ஆசிரியர்களுக்கும்" வகுப்பிற்கு நகர்த்துவதாகும். நான் முழுமையான அசல் தன்மையைக் கோரவில்லை. இந்தத் தலைப்பைக் கற்பிக்க நீங்கள் ஏற்கனவே இதேபோன்ற முறையைப் பயன்படுத்தினால், உங்கள் பதிப்பு எவ்வாறு வேறுபடுகிறது என்பதை எழுதவும். நீங்கள் அதைப் பயன்படுத்த முடிவு செய்தால், அது எப்படி இருந்தது என்பதை எங்களிடம் கூறுங்கள். இதேபோன்ற நுட்பம் ஒரு புத்தகத்தில் விவரிக்கப்பட்டிருந்தால், தயவுசெய்து பெயரை எழுதவும்.


நான் இந்த நுட்பத்தில் 4 ஆண்டுகள் பணியாற்றினேன், வெவ்வேறு நிலை பயிற்சி மாணவர்களுடன் தனித்தனியாகப் படித்தேன். மொத்தம் சுமார் ஐம்பது மாணவர்கள் மற்றும் இரண்டாயிரம் மணிநேர வகுப்புகள் உள்ளன. முதலில், மாணவர்கள் எப்போதும் இந்த தலைப்பில் சிக்கிக்கொண்டு வெளியேறினர். ஒவ்வொரு மாணவருக்கும் பிறகு, முறை மற்றும் பொருட்கள் சரிசெய்யப்பட்டன. கடந்த ஆண்டில், மாணவர்கள் இந்த தலைப்பில் சிக்கிக் கொள்ளவில்லை, எனவே எனது கண்டுபிடிப்புகளைப் பகிர்ந்து கொள்ள முடிவு செய்தேன்.

ஏன் இத்தனை கடிதங்கள்? சுழற்சிகள் மிகவும் அடிப்படையானவை!

நான் மேலே எழுதியது போல, பயிற்சி டெவலப்பர்கள் மற்றும் வலுவான மாணவர்களுக்கு, சுழல்கள் என்ற கருத்தின் சிக்கலான தன்மையை குறைத்து மதிப்பிடலாம். உதாரணமாக, நீங்கள் ஒரு நீண்ட விரிவுரையை வழங்கலாம், தலையை ஆட்டுவது மற்றும் அறிவார்ந்த கண்களைப் பார்க்கலாம். ஆனால் எந்தவொரு சிக்கலையும் தீர்க்க முயற்சிக்கும் போது, ​​மயக்கம் மற்றும் விவரிக்க முடியாத சிக்கல்கள் தொடங்குகின்றன. விரிவுரைக்குப் பிறகு, மாணவர்களுக்கு ஓரளவு புரிதல் இருந்திருக்கலாம். மாணவர்களே தங்களின் மாயையை சரியாகக் கூறமுடியாது என்ற உண்மையால் நிலைமை மோசமாகிறது.
ஒரு நாள் மாணவர்கள் எனது உதாரணங்களை ஹைரோகிளிஃப்களாக உணர்ந்ததை உணர்ந்தேன். அதாவது, பிரிக்க முடியாத உரை துண்டுகளைப் போல, அதில் நீங்கள் சில "மேஜிக்" கடிதத்தைச் சேர்க்க வேண்டும், அது வேலை செய்யும்.
சில நேரங்களில் மாணவர்கள் உங்களுக்குத் தேவையான ஒரு குறிப்பிட்ட சிக்கலைத் தீர்க்க நினைப்பதை நான் கவனித்தேன் வேறு ஏதாவது நான் இதுவரை மறைக்காத வடிவமைப்பு. தீர்வுக்கு எடுத்துக்காட்டில் சிறிது மாற்றம் தேவைப்பட்டாலும்.

எனவே வெளிப்பாடுகளின் தொடரியல் மீது கவனம் செலுத்தக்கூடாது, ஆனால் சுழற்சிகளைப் பயன்படுத்தி மீண்டும் மீண்டும் வரும் குறியீட்டை மறுசீரமைக்கும் யோசனையில் கவனம் செலுத்த வேண்டும் என்ற யோசனையை நான் கொண்டு வந்தேன். மாணவர்கள் இந்த யோசனையில் தேர்ச்சி பெற்றவுடன், எந்தவொரு தொடரியல் சிறிய பயிற்சியின் மூலம் மேம்படுத்தப்படலாம்.

நான் யார், ஏன் கற்பிக்கிறேன்?

நுழைவுத் தேர்வுகள் இல்லாததால், வலிமையான மற்றும் மிகவும் பலவீனமான மாணவர்களை வகுப்புகளில் சேர்க்கலாம். கட்டுரையில் எனது மாணவர்களைப் பற்றி மேலும் படிக்கலாம் மாலை பாடநெறி மாணவர்களின் உருவப்படம்
நிரலாக்கத்தைக் கற்றுக்கொள்ள விரும்பும் அனைவரும் அதைக் கற்க வேண்டும் என்று நான் முயற்சித்தேன்.
எனது வகுப்புகள் தனித்தனியாக நடத்தப்படுகின்றன, ஒவ்வொன்றிற்கும் மாணவர் தனது சொந்த பணத்தை செலுத்துகிறார். மாணவர்கள் செலவுகளை மேம்படுத்தி குறைந்தபட்சம் கோருவார்கள் என்று தோன்றுகிறது. இருப்பினும், மக்கள் நேரடி ஆசிரியருடன் நேருக்கு நேர் வகுப்புகளுக்குச் செல்வது அறிவிற்காக அல்ல, ஆனால் அவர்கள் கற்றுக்கொண்டவற்றின் நம்பிக்கை, முன்னேற்ற உணர்வு மற்றும் நிபுணர் (ஆசிரியர்) அங்கீகாரத்திற்காக. மாணவர்கள் தங்கள் கற்றலில் முன்னேற்றம் இல்லை என்றால், அவர்கள் விட்டுவிடுவார்கள். பொதுவாக, வகுப்புகள் கட்டமைக்கப்படலாம், இதனால் மாணவர்கள் பழக்கமான கட்டமைப்புகளின் எண்ணிக்கையை அதிகரிப்பதில் முன்னேற்றத்தை உணரலாம். அதாவது, முதலில் நாம் விரிவாகப் படிக்கிறோம், பிறகு படிக்கிறோம், பிறகு செய்வோம், இப்போது ஆயிரத்தோரு இரவுப் பாடநெறி தயாராக உள்ளது, அதில் சுழற்சிகள் மட்டும் இரண்டு மாதங்கள் படிக்கப்படுகின்றன, இறுதியில் - எழுதிய மாணவர். கட்டளையின் கீழ் ஒரு நிலையான நூலகம். இருப்பினும், நடைமுறை சிக்கல்களைத் தீர்ப்பதற்கு, நீங்கள் பொருள் பற்றிய அறிவு மட்டுமல்ல, அதன் பயன்பாட்டில் சுதந்திரம் மற்றும் புதிய தகவலைத் தேட வேண்டும். எனவே, நேருக்கு நேர் படிப்புகளுக்கு, குறைந்தபட்சம் கற்பிப்பதும், நுணுக்கங்கள் மற்றும் தொடர்புடைய தலைப்புகளில் சுயாதீனமான படிப்பை ஊக்குவிப்பதும் சரியான கொள்கை என்று நான் நினைக்கிறேன். லூப்கள் என்ற தலைப்பில், போது கன்ஸ்ட்ரக்ட் என்பது குறைந்தபட்சம் என்று நான் கருதுகிறேன். அதிலிருந்து கொள்கையைப் புரிந்து கொள்ளலாம். கொள்கையை அறிந்துகொள்வதன் மூலம், உங்களுக்காகவும் செய்யும்போதும் நீங்கள் தேர்ச்சி பெறலாம்.

பலவீனமான மாணவர்களால் பொருள் தேர்ச்சி பெற, தொடரியல் விவரிப்பது போதாது. மிகவும் எளிமையான ஆனால் மாறுபட்ட பணிகளை வழங்குவது மற்றும் எடுத்துக்காட்டுகளை இன்னும் விரிவாக விவரிக்க வேண்டியது அவசியம். இறுதியில், வளர்ச்சியின் வேகம் மாணவர்களின் வெளிப்பாடுகளை மாற்றும் மற்றும் வடிவங்களைத் தேடும் திறனால் வரையறுக்கப்படுகிறது. புத்திசாலி மாணவர்களுக்கு, பெரும்பாலான பணிகள் சலிப்பாக இருக்கும். அவர்களுடன் படிக்கும்போது, ​​100% பிரச்சனைகளை தீர்க்க வேண்டும் என்று வலியுறுத்த வேண்டியதில்லை. எனது பொருளை இங்கு பார்க்கலாம் என் கிட்ஹப். உண்மை, களஞ்சியமானது ஒரு வார்லாக்கின் க்ரிமோயர் போன்றது - என்னைத் தவிர வேறு யாரும் எங்கே என்று புரிந்து கொள்ள மாட்டார்கள், நீங்கள் சோதனையில் தோல்வியுற்றால், நீங்கள் பைத்தியம் பிடிக்கலாம்.

முறை நடைமுறை சார்ந்தது

ஒரு சிக்கலைத் தீர்ப்பதற்கான உதாரணத்தைப் பயன்படுத்தி கோட்பாடு விளக்கப்படுகிறது. கிளைகள் மற்றும் சுழல்கள் கற்பிக்கப்படும் நிரலாக்க வகுப்பின் அடிப்படைகளில், ஒரு முழு மணி நேரத்திற்கும் ஒரு தலைப்பில் பயனுள்ள விரிவுரையை வழங்குவது சாத்தியமில்லை. கருத்தை விளக்க 15-20 நிமிடங்கள் போதும். நடைமுறை பணிகளைச் செய்யும்போது முக்கிய சிரமங்கள் எழுகின்றன.
தொடக்க ஆசிரியர்கள் ஒரு விரிவுரையில் ஆபரேட்டர்கள், கிளைகள், லூப்கள் மற்றும் அணிவரிசைகளை அலசலாம். ஆனால் அவர்களின் மாணவர்கள் இந்த தகவலை ஒருங்கிணைப்பதில் சிக்கலை எதிர்கொள்வார்கள்.
பொருள் கூறுவது மட்டுமின்றி, கேட்போர் புரிந்து கொள்வதை உறுதி செய்வதும் அவசியம்.

ஒரு தலைப்பில் தேர்ச்சி பெறுவது என்பது மாணவர் சுயாதீனமான வேலையை எவ்வாறு சமாளிக்கிறது என்பதன் மூலம் தீர்மானிக்கப்படுகிறது.
ஒரு மாணவர் ஆசிரியரின் உதவியின்றி ஒரு தலைப்பில் ஒரு சிக்கலைத் தீர்க்க முடிந்தால், தலைப்பு தேர்ச்சி பெற்றது. சுய-சோதனையை உறுதிப்படுத்த, ஒவ்வொரு பணியும் சோதனை காட்சிகளுடன் அட்டவணையில் விவரிக்கப்பட்டுள்ளது. பணிகள் தெளிவான வரிசையைக் கொண்டுள்ளன. பணிகளைத் தவிர்ப்பது பரிந்துரைக்கப்படவில்லை. தற்போதைய பணி மிகவும் கடினமாக இருந்தால், அடுத்த பணிக்குச் செல்வது பயனற்றது. இது இன்னும் சிக்கலானது. மாணவர் தற்போதைய சிக்கலான பணியில் தேர்ச்சி பெற, முதல் சிக்கலின் உதாரணத்தைப் பயன்படுத்தி அவருக்கு பல நுட்பங்கள் விளக்கப்படுகின்றன. உண்மையில், தலைப்பின் முழு உள்ளடக்கமும் சிரமங்களை சமாளிப்பதற்கான நுட்பங்களுக்கு கீழே வருகிறது. சுழற்சிகள் பக்கவிளைவுகள் அதிகம்.

முதல் பணி எப்போதும் ஒரு எடுத்துக்காட்டு. இரண்டாவது சிறிது வேறுபடுகிறது மற்றும் ஒரு ஆசிரியரின் மேற்பார்வையின் கீழ் முதல் உடனடியாக "சுயாதீனமாக" செய்யப்படுகிறது. அனைத்து அடுத்தடுத்த பணிகளும் தவறான எண்ணங்களை ஏற்படுத்தக்கூடிய பல்வேறு சிறிய விஷயங்களுக்கு கவனம் செலுத்துவதை நோக்கமாகக் கொண்டுள்ளன.

எடுத்துக்காட்டின் விளக்கம் என்பது ஒரு உரையாடலாகும், அதில் மாணவர் மீண்டும் பிரச்சாரம் மற்றும் குறுக்கு சரிபார்ப்பு மூலம் அவர் பொருளின் ஒரு பகுதியை தேர்ச்சி பெற்றுள்ளார் என்பதை உறுதிப்படுத்த வேண்டும்.

நான் சாதாரணமாக இருப்பேன் மற்றும் தலைப்பில் முதல் உதாரணம் மிகவும் முக்கியமானது என்று கூறுவேன். விரிவான சுயாதீனமான வேலைக்கான பொருள் உங்களிடம் இருந்தால், முதல் உதாரணத்தின் குறைபாடுகளை சரிசெய்ய முடியும். உதாரணத்தைத் தவிர வேறு எதுவும் இல்லை என்றால், மாணவர் பெரும்பாலும் தலைப்பில் தேர்ச்சி பெற மாட்டார்.

போது அல்லது?

சர்ச்சைக்குரிய சிக்கல்களில் ஒன்று, உதாரணத்திற்கான கட்டுமானத்தின் தேர்வு: போது அல்லது. ஒருமுறை, கற்பித்தல் அனுபவம் இல்லாத எனது பயிற்சி டெவலப்பர் நண்பர் ஒருவர், ஃபார் லூப்பைப் புரிந்துகொள்வது மிகவும் எளிதானது என்று ஒரு மணிநேரம் என்னை நம்பவைத்தார். வாதங்கள் "அதில் உள்ள அனைத்தும் தெளிவாக உள்ளன மற்றும் அதன் இடத்தில் வைக்கப்பட்டுள்ளன" என்று கொதித்தது. இருப்பினும், உண்மையான தொடக்கநிலையாளர்களுக்கான சிரமங்களுக்கு மூல காரணம் சுழற்சியின் யோசனையே, அதன் எழுத்து அல்ல. ஒரு நபர் இந்த யோசனையைப் புரிந்து கொள்ளவில்லை என்றால், அவர் தொடரியல் மூலம் சிரமப்படுவார். யோசனை உணரப்பட்டவுடன், குறியீடு வடிவமைப்பின் சிக்கல்கள் தானாகவே மறைந்துவிடும்.

எனது பொருட்களில், சுழல்களின் தீம் கிளைகளின் கருப்பொருளைப் பின்பற்றுகிறது. if and while என்பதன் வெளிப்புற ஒற்றுமை நம்மை ஒரு நேரடி ஒப்புமையை வரைய அனுமதிக்கிறது: "தலைப்பில் உள்ள நிபந்தனை உண்மையாக இருக்கும்போது, ​​​​உடல் செயல்படுத்தப்படுகிறது." சுழற்சியின் ஒரே தனித்தன்மை என்னவென்றால், உடல் பல முறை செயல்படுத்தப்படுகிறது.

எனது இரண்டாவது வாதம் என்னவென்றால், அதற்கு குறைவான வடிவமைப்பு தேவைப்படுகிறது. குறைவான வடிவமைத்தல் என்பது காற்புள்ளிகள் மற்றும் அடைப்புக்குறிகளைக் கொண்ட குறைவான முட்டாள்தனமான தவறுகளைக் குறிக்கிறது. தொடரியல் பிழைகளைத் தானாகத் தவிர்ப்பதற்குத் தொடக்கநிலையாளர்கள் இன்னும் போதுமான கவனத்தையும் நுணுக்கத்தையும் உருவாக்கவில்லை.
மூன்றாவது வாதம் முதல் வாதமாக பல நல்ல புத்தகங்களில் விளக்கப்பட்டுள்ளது.

மாணவர் எளிதில் வெளிப்பாடுகளை மாற்றினால், நீங்கள் தேர்ச்சி பற்றி பேசலாம். மாணவர் தனக்கு மிகவும் பிடித்ததைத் தேர்ந்தெடுப்பார். மாற்றங்கள் சிரமங்களை ஏற்படுத்தினால், உங்கள் கவனத்தை திசை திருப்பாமல் இருப்பது நல்லது. மாணவர் முதலில் அதே நேரத்தில் எல்லாவற்றையும் தீர்க்கட்டும். லூப்களின் தலைப்பை நீங்கள் தேர்ச்சி பெற்றவுடன், அதை மாற்றுவதற்குப் பயிற்சிக்கான தீர்வுகளை மீண்டும் எழுதலாம்.
போஸ்ட் கண்டிஷன் லூப்ஸ் மிகவும் அரிதான மிருகம். நான் அதில் சிறிதும் நேரத்தைச் செலவிடுவதில்லை. ஒரு மாணவர் வடிவங்களை அடையாளம் கண்டு, வெளிப்பாடுகளை மாற்றும் யோசனைகளில் தேர்ச்சி பெற்றிருந்தால், எனது உதவியின்றி அவர் அதைக் கண்டுபிடிக்க முடியும்.

வலுவான மாணவர்களுக்கு முதல் உதாரணத்தை நிரூபிக்கும் போது, ​​முதல் எடுத்துக்காட்டில் தீர்வை மட்டுமல்ல, விளைவுக்கு வழிவகுத்த செயல்களின் முழு சங்கிலியையும் பதிவு செய்வது முக்கியம் என்பதை நான் கவனத்தை ஈர்க்கிறேன். சோம்பேறி மாணவர்கள் எழுத்தைப் புறக்கணித்து இறுதி வழிமுறையை மட்டும் நகலெடுக்கலாம். ஒரு நாள் கடினமான காரியம் வரும் என்பதை அவர்கள் நம்ப வேண்டும். அதைத் தீர்க்க, இந்த எடுத்துக்காட்டில் உள்ள படிகளை நீங்கள் பின்பற்ற வேண்டும். அதனால்தான் அனைத்து நிலைகளையும் பதிவு செய்வது முக்கியம். பின்வரும் சிக்கல்களில், தீர்வின் இறுதி பதிப்பை மட்டுமே விட்டுவிட முடியும்.

ஆட்டோமேஷனின் முக்கிய யோசனை என்னவென்றால், ஒரு நபருக்கு வழக்கமான வேலையைச் செய்ய ஒரு கணினியை நாங்கள் ஒப்படைக்கிறோம். அடிப்படை நுட்பங்களில் ஒன்று சுழல்கள் எழுதுவது. ஒரே மாதிரியான தொடர்ச்சியான செயல்கள் ஒரு நிரலில் ஒரு வரிசையில் எழுதப்பட்டால் இது பயன்படுத்தப்படுகிறது.

மறைமுகமாக இருப்பதை விட வெளிப்படையானது சிறந்தது

முதல் லூப்பிங் பணியில் ஒரே சொற்றொடரை பலமுறை காட்டுவது நல்ல யோசனையாகத் தோன்றலாம். உதாரணத்திற்கு:

ஹர்ரே, அது வேலை செய்கிறது!
ஹர்ரே, அது வேலை செய்கிறது!
ஹர்ரே, அது வேலை செய்கிறது!
ஹர்ரே, அது வேலை செய்கிறது!
ஹர்ரே, அது வேலை செய்கிறது!
ஹர்ரே, அது வேலை செய்கிறது!
ஹர்ரே, அது வேலை செய்கிறது!
ஹர்ரே, அது வேலை செய்கிறது!

இந்த விருப்பம் மோசமாக உள்ளது, ஏனெனில் கவுண்டர் மதிப்பு வெளியீட்டில் தெரியவில்லை. ஆரம்பநிலைக்கு இது ஒரு பிரச்சனை. அவளை குறைத்து மதிப்பிடாதீர்கள். முதலில், இந்தப் பணி முதன்மையானது, மேலும் ஏறுவரிசையில் எண்களின் வரிசையைப் பெறுவதற்கான பணி இரண்டாவது. "சுழற்சி N நேரங்கள்" மற்றும் "A முதல் B வரையிலான சுழற்சி" என்ற கூடுதல் சொற்களை அறிமுகப்படுத்த வேண்டியது அவசியம், அவை அடிப்படையில் ஒரே விஷயமாகும். தேவையற்ற நிறுவனங்களை உருவாக்காமல் இருக்க, எண்களின் தொடர் வெளியீட்டில் ஒரு உதாரணத்தை மட்டும் காட்ட முடிவு செய்தேன். ஒரு சிலரே தங்கள் தலையில் ஒரு கவுண்டரை எவ்வாறு வைத்திருப்பது என்பதைக் கற்றுக்கொள்வது மற்றும் தயாரிப்பு இல்லாமல் ஒரு திட்டத்தின் நடத்தையை தங்கள் தலையில் எப்படி செய்வது என்று கற்றுக்கொள்கிறார்கள். சில மாணவர்கள் முதலில் சுழற்சிகள் என்ற தலைப்பில் மன மாதிரியை எதிர்கொள்கின்றனர்.
சில பயிற்சிக்குப் பிறகு, சுயாதீனமாக தீர்க்கப்பட வேண்டிய அதே உரையை மீண்டும் மீண்டும் செய்யும் பணியை நான் தருகிறேன். முதலில் தெரியும் கவுண்டரையும், பிறகு கண்ணுக்குத் தெரியாத கவுண்டரையும் கொடுத்தால், மாணவர்களுக்குப் பிரச்னைகள் குறையும். சில நேரங்களில் "திரையில் கவுண்டரை எழுத வேண்டாம்" என்ற குறிப்பு போதுமானது.

மற்றவர்கள் அதை எப்படி விளக்குகிறார்கள்?

இணையத்தில் உள்ள பெரும்பாலான கல்விப் பொருட்களில், சுழற்சியின் தொடரியல் "விரிவுரையின்" ஒரு பகுதியாக வழங்கப்படுகிறது. எடுத்துக்காட்டாக, developer.mozilla.org இல் (தற்போது), போது லூப்புடன் பல கட்டுமானங்கள் விவரிக்கப்பட்டுள்ளன. இந்த வழக்கில், வடிவமைப்புகள் மட்டுமே வார்ப்புருக்கள் வடிவில் கொடுக்கப்பட்டுள்ளன. அவர்களின் வெளியீட்டின் முடிவு வார்த்தைகளில் விவரிக்கப்பட்டுள்ளது, ஆனால் எந்த விளக்கமும் இல்லை. என் கருத்துப்படி, தலைப்பின் அத்தகைய விளக்கக்காட்சி அத்தகைய பொருட்களின் பயனை பூஜ்ஜியத்தால் பெருக்குகிறது. மாணவர் குறியீட்டை மீண்டும் எழுதலாம் மற்றும் அதை தானே இயக்கலாம், ஆனால் ஒப்பிடுவதற்கு அவருக்கு இன்னும் ஒரு தரநிலை தேவை. முடிவை ஒப்பிடுவதற்கு எதுவும் இல்லை என்றால், ஒரு உதாரணம் சரியாக மீண்டும் எழுதப்பட்டுள்ளது என்பதை நீங்கள் எவ்வாறு புரிந்துகொள்வது?
உதாரணம் இல்லாமல் ஒரு டெம்ப்ளேட் மட்டுமே கொடுக்கப்பட்டால், அது மாணவருக்கு இன்னும் கடினமாகிவிடும். வார்ப்புருவில் குறியீடு துண்டுகள் சரியாக வைக்கப்பட்டுள்ளன என்பதை எவ்வாறு புரிந்துகொள்வது? நீங்கள் எழுத முயற்சி செய்யலாம் எப்படியோ, பின்னர் இயக்கவும். ஆனால் முடிவை ஒப்பிடுவதற்கு தரநிலை இல்லை என்றால், ஏவுவதும் உதவாது.

உள்ளுணர்வு பற்றிய சி++ பாடத்திட்டத்தில், "ஆபரேட்டர்கள்" என்ற தலைப்பில் விரிவுரை 4 இன் மூன்றாவது பக்கத்தில் லூப் தொடரியல் புதைக்கப்பட்டுள்ளது. சுழல்களின் தொடரியல் விளக்கும்போது, ​​"ஆபரேட்டர்" என்ற வார்த்தைக்கு சிறப்பு முக்கியத்துவம் கொடுக்கப்படுகிறது. இந்த வார்த்தை "சின்னம்" போன்ற உண்மைகளின் தொகுப்பாக வழங்கப்படுகிறது; இது ஒரு அறிக்கை", "{} என்பது ஒரு கூட்டு அறிக்கை", "லூப்பின் உடல் ஒரு அறிக்கையாக இருக்க வேண்டும்". இந்த அணுகுமுறை எனக்குப் பிடிக்கவில்லை, ஏனெனில் இது ஒரு வார்த்தையின் பின்னால் முக்கியமான உறவுகளை மறைக்கிறது. ஒரு நிரலின் மூலக் குறியீட்டை இந்த மட்டத்தில் விதிமுறைகளாகப் பாகுபடுத்துவது மொழி விவரக்குறிப்பைச் செயல்படுத்த கம்பைலர் டெவலப்பர்களுக்குத் தேவை, ஆனால் மாணவர்களால் முதல் தோராயமாக அல்ல. நிரலாக்கத்திற்கு புதிதாக வருபவர்கள் சொற்களில் இவ்வளவு கவனம் செலுத்தும் அளவுக்கு மிகக் கவனமாக இருப்பார்கள். புதிய வார்த்தைகளை முதன்முதலில் நினைவில் வைத்து புரிந்துகொள்ளும் ஒரு அரிய நபர். ஏறக்குறைய யாராலும் தாங்கள் கற்றுக்கொண்ட சொல்லை சரியாகப் பயன்படுத்த முடியாது. எனவே, மாணவர்கள் "நான் எழுதிய போது(a<7);{, ஆனால் நிரல் வேலை செய்யவில்லை" போன்ற பல பிழைகளைப் பெறுகின்றனர்.
என் கருத்துப்படி, ஆரம்பத்தில் அடைப்புக்குறிக்குள் உடனடியாக கட்டுமானத்தின் தொடரியல் கொடுக்க நல்லது. அடைப்புக்குறிகள் இல்லாத விருப்பம் மாணவருக்கு ஒரு குறிப்பிட்ட கேள்வி இருந்தால் மட்டுமே விளக்கப்பட வேண்டும்: "ஏன் அடைப்புக்குறிகள் இல்லை, அது வேலை செய்கிறது."

ஒகுலோவின் 2012 ஆம் ஆண்டு புத்தகமான "புரோகிராமிங்கின் அடிப்படைகள்" இல், சுழல்களுக்கான அறிமுகம் ஃபார் பேட்டர்னுடன் தொடங்குகிறது, பின்னர் அதன் பயன்பாட்டிற்கான பரிந்துரைகளை வழங்குகிறது, பின்னர் உடனடியாக பாடத்தின் சோதனைப் பகுதிக்குச் செல்கிறது. எனது வகுப்புகளுக்கு அரிதாகவே வரும் மிகவும் திறமையான மாணவர்களின் சிறுபான்மையினருக்காக புத்தகம் எழுதப்பட்டது என்பதை நான் புரிந்துகொள்கிறேன்.

பிரபலமான புத்தகங்களில், குறியீடு துண்டுகளின் முடிவு எப்போதும் எழுதப்படுகிறது. எடுத்துக்காட்டாக, ஷில்ட்டின் "ஜாவா 8. முழுமையான வழிகாட்டி" 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 பாடத்திலும் பயன்படுத்தப்படுகிறது. இணையப் பக்க வடிவமைப்பு இந்த உதாரணத்தை ஊடாடுவதற்கு அனுமதிக்கிறது.

ஸ்ட்ரோஸ்ட்ரப்பின் 2016 புத்தகம் சி++ பயன்படுத்தி கோட்பாடுகள் மற்றும் பயிற்சி இன்னும் மேலே சென்றது. முதல் படி என்ன முடிவைப் பெற வேண்டும் என்பதை விளக்க வேண்டும், அதன் பிறகு நிரலின் உரை காட்டப்படும். மேலும், அவர்கள் ஒரு சீரற்ற நிரலை ஒரு உதாரணமாக எடுத்துக் கொள்ளாமல், வரலாற்றில் ஒரு உல்லாசப் பயணத்தைக் கொடுக்கிறார்கள். இது கவனத்தை ஈர்க்க உதவுகிறது: "பாருங்கள், இது சில பயனற்ற உரை அல்ல. நீங்கள் அர்த்தமுள்ள ஒன்றைப் பார்க்கிறீர்கள்."

மறு செய்கைக்கு உதாரணமாக, சேமிக்கப்பட்ட நிரல் இயந்திரத்தில் (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;
    }
}

சுவாரஸ்யமாக, தொடரியல் முறை இந்த புத்தகத்தில் விவரிக்கப்படவில்லை. பயிற்றுவிப்பாளரின் கையேட்டில் ஸ்ட்ராஸ்ட்ரப் (மொழிபெயர்ப்பு) அதன் மாணவர்களின் புத்திசாலித்தனத்தை மதிக்கிறது என்பதை வலியுறுத்துகிறது. பல எடுத்துக்காட்டுகளில் ஒரு வடிவத்தை அடையாளம் காணும் திறன் அத்தகைய நுண்ணறிவின் வெளிப்பாடாகக் கருதப்படுகிறது.

என நானே விளக்குகிறேன்

ஸ்ட்ரோஸ்ட்ரப்பின் அணுகுமுறை: முடிவை விவரிப்பது, பின்னர் சிக்கலைத் தீர்ப்பது, பின்னர் மாணவர் ஒரு சுயாதீனமான பகுப்பாய்வு - மிகவும் சிந்தனைமிக்கதாகத் தெரிகிறது. எனவே, நான் அதை ஒரு அடிப்படையாக எடுத்துக் கொள்ள முடிவு செய்தேன், ஆனால் குறைவான வரலாற்று உதாரணத்தைப் பயன்படுத்தி சொல்லுங்கள் - "உள்ளடக்க அட்டவணையை" பெறுவதற்கான பணி. இது ஒரு அடையாளம் காணக்கூடிய நங்கூரத்தை உருவாக்குகிறது, இதன் மூலம் நீங்கள் "உள்ளடக்க அட்டவணையைப் பற்றிய பணியை நினைவில் கொள்ளுங்கள்" என்று கூறலாம், மேலும் மாணவர்கள் இதை சரியாக நினைவில் வைத்துக் கொள்ள வேண்டும். எனது எடுத்துக்காட்டில், மிகவும் பொதுவான இரண்டு தவறான எண்ணங்களைத் தடுக்க முயற்சித்தேன். அடுத்து அவர்களைப் பற்றி விரிவாக எழுதுகிறேன்.

இந்த பணியில் சிக்கலான சிக்கல்களைத் தீர்ப்பதற்கான நுட்பங்களை நாங்கள் அறிமுகப்படுத்துகிறோம். ஆரம்ப முடிவு பழமையான மற்றும் எளிமையானதாக இருக்க வேண்டும். சரி, இந்த தீர்வை எவ்வாறு மேம்படுத்துவது என்பது பற்றி நீங்கள் சிந்திக்கலாம்.
Введение
Глава 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. ஒரு சுழற்சியாக வடிவமைக்கவும்

அடுத்து, புதிய விதிமுறைகள் அறிமுகப்படுத்தப்படுகின்றன, இதனால் மாணவர் "எல்லாவற்றையும் புரிந்துகொள்கிறேன், ஆனால் என்னால் சொல்ல முடியாது" என்ற சூழ்நிலையில் தன்னைக் கண்டுபிடிக்க முடியாது:
- ஒரு கவுண்டர் எப்போதும் ஒரு மாறியாகும், இது ஒரு சுழற்சியில் உள்ள படிகளின் எண்ணிக்கையைக் கண்காணிக்க வேண்டும். பொதுவாக ஒரு முழு எண் தடையுடன் ஒப்பிடப்படுகிறது.
- எதிர் படி - எதிர் மாற்றங்களின் வடிவத்தின் விளக்கம்.
- கட்டுப்பாடானது - அல்காரிதம் இறுதியாக இருக்கும் வகையில் கவுண்டரை ஒப்பிடும் ஒரு எண் அல்லது மாறி. வரம்பை நெருங்குவதற்கு எதிர் மதிப்பு மாறுகிறது.
— loop body — மீண்டும் மீண்டும் செய்யப்படும் கட்டளைகளின் தொகுப்பு. "கட்டளை ஒரு வளையத்திற்குள் எழுதப்பட்டுள்ளது" என்று அவர்கள் கூறும்போது அவை உடலைக் குறிக்கின்றன.
- லூப் மறு செய்கை - லூப் உடலின் ஒரு முறை செயல்படுத்தல்.
— loop condition — மற்றொரு மறு செய்கை செயல்படுத்தப்படுமா என்பதை தீர்மானிக்கும் தருக்க வெளிப்பாடு. (இங்கே கிளை கட்டமைப்புகளில் குழப்பம் இருக்கலாம்)
முதலில் மாணவர்கள் பிற நோக்கங்களுக்காக சொற்களைப் பயன்படுத்துவார்கள் என்பதற்கு நீங்கள் தயாராக இருக்க வேண்டும். இது வலிமையானவர்களுக்கும் பலவீனமானவர்களுக்கும் பொருந்தும். ஒரு பொதுவான மொழியை நிறுவுவது ஒரு கலை. இப்போது நான் சுருக்கமாக எழுதுகிறேன்: "குறியீடு பகுதியை <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("Заключение");
}

மாணவர்கள் ஆரம்பத்திலும் மிகவும் சிக்கலான பிரச்சனைகளிலும் எல்லா நேரங்களிலும் இந்தப் பிரச்சனையில் சிக்கித் தவிக்கின்றனர்.
இந்த வழக்கில் முக்கிய குறிப்பு:

கட்டளையை எத்தனை முறை மீண்டும் செய்ய வேண்டும்: ஒரு முறை அல்லது பல முறை?

"அறிமுகம்" மற்றும் "முடிவு" என்ற சொற்களை அச்சிடுவதற்கான கட்டளைகள் மற்றும் நான் மாறியை அறிவித்தல் மற்றும் துவக்குதல் ஆகியவை மற்ற திரும்பத் திரும்பச் செயல்படும் செயல்களைப் போல் இல்லை. அவை ஒரு முறை மட்டுமே செயல்படுத்தப்படுகின்றன, அதாவது அவை லூப் பாடிக்கு வெளியே எழுதப்பட வேண்டும்.

தீர்வின் மூன்று நிலைகளும் குறியீட்டில் இருக்க வேண்டும், இதனால் சிரமங்கள் ஏற்பட்டால் அவற்றை நீங்கள் பின்னர் குறிப்பிடலாம். முதல் இரண்டு விருப்பங்களை அவர்கள் தலையிடாதபடி கருத்து தெரிவித்தாலே போதும்.
பின்வரும் உண்மைகளுக்கு மாணவர் கவனத்தை ஈர்க்க வேண்டும்:
- ஒரு லூப் நிலையில், ஒரு கவுண்டர் மற்றும் வரம்பு பொதுவாக ஒப்பிடப்படுகிறது. லூப்பின் உடலில் கவுண்டர் மாறலாம், ஆனால் வரம்பு முடியாது. இந்த விதியை மீற, நீங்கள் கட்டாய காரணங்களை உருவாக்க வேண்டும்.
- "அறிமுகம்" மற்றும் "முடிவு" என்ற சொற்களைக் காண்பிப்பதற்கான கட்டளைகள் வளையத்தின் உடலுக்கு வெளியே அமைந்துள்ளன. நாம் அவற்றை 1 முறை செய்ய வேண்டும். "அறிமுகம்" - செயல்களை மீண்டும் செய்வதற்கு முன், "முடிவு" - பிறகு.
இந்த தலைப்பை ஒருங்கிணைக்கும் செயல்பாட்டில், அடுத்தவர்களில் தேர்ச்சி பெறுவது, அதே போல் சிரமங்களைக் கையாள்வது, வலுவான மாணவர்கள் கூட கேள்வியைக் கேட்பது பயனுள்ளதாக இருக்கும்: “இந்தச் செயலை எத்தனை முறை செய்ய வேண்டும்? ஒன்று அல்லது பல?

கூடுதல் திறன்களின் வளர்ச்சி

சுழற்சிகளைப் படிக்கும் செயல்பாட்டில், மாணவர்கள் சிக்கல்களைக் கண்டறிந்து தீர்க்கும் திறனையும் வளர்த்துக் கொள்கிறார்கள். நோயறிதலைச் செய்ய, மாணவர் விரும்பிய முடிவை முன்வைக்க வேண்டும் மற்றும் உண்மையான முடிவுடன் ஒப்பிட வேண்டும். திருத்த நடவடிக்கைகள் அவற்றுக்கிடையேயான வேறுபாட்டைப் பொறுத்தது.
இந்த கட்டத்தில் உள்ள மாணவர்களுக்கு இன்னும் "விரும்பிய" முடிவைப் பற்றி சிறிதும் தெரியாது என்பதால், அவர்கள் சோதனை தரவுகளில் கவனம் செலுத்த முடியும். ஒரு விதியாக, இந்த கட்டத்தில் யாரும் இன்னும் என்ன தவறு செய்யலாம் மற்றும் அதை எவ்வாறு கையாள்வது என்பதை புரிந்து கொள்ளவில்லை. எனவே, நான் ஒரு நோட்புக்கில் வழக்கமான சிக்கல்களின் விளக்கத்தையும் அவற்றைத் தீர்ப்பதற்கான பல வழிகளையும் எழுதுகிறேன். மிகவும் பொருத்தமான ஒன்றைத் தேர்ந்தெடுப்பது மாணவரின் பணியாகும்.
“எதிர்பார்த்தது நடந்ததா?”, “இதில் எந்தச் சூழ்நிலை இப்போது நடந்தது?”, “பயன்பாட்டு தீர்வு உதவுமா?” என்று கேட்க ஒரு பதிவு தேவை.

  1. செயல்களின் எண்ணிக்கை எதிர்பார்த்ததை விட 1 குறைவாகவோ அல்லது அதிகமாகவோ உள்ளது. தீர்வுகள்:
    - கவுண்டரின் ஆரம்ப மதிப்பை 1 ஆல் அதிகரிக்கவும்.
    - கண்டிப்பான ஒப்பீட்டு ஆபரேட்டரை (< அல்லது >) கண்டிப்பில்லாத ஒன்றை (<= அல்லது >=) மாற்றவும்.
    - வரம்பு மதிப்பை 1 ஆக மாற்றவும்.
  2. ஒரு சுழற்சியில் உள்ள செயல்கள் காலவரையின்றி நிறுத்தப்படாமல் செய்யப்படுகின்றன. தீர்வுகள்:
    — அது காணவில்லை எனில் எதிர் மாற்ற கட்டளையைச் சேர்க்கவும்.
    - எதிர் மாற்ற கட்டளையை சரிசெய்யவும், அதன் மதிப்பு வரம்பிற்கு நெருக்கமாகிறது.
    - லூப்பின் உடலில் இருந்தால் கட்டுப்பாடு மாற்ற கட்டளையை அகற்றவும்.
  3. ஒரு சுழற்சியில் உள்ள செயல்களின் எண்ணிக்கை எதிர்பார்த்ததை விட 1 க்கும் குறைவாகவோ அல்லது அதிகமாகவோ உள்ளது. லூப்பில் உள்ள செயல் ஒரு முறை கூட செயல்படுத்தப்படவில்லை. முதலில் நீங்கள் லூப் தொடங்கும் முன் மாறிகளின் உண்மையான மதிப்புகளைக் கண்டுபிடிக்க வேண்டும். தீர்வுகள்:
    - தடையின் ஆரம்ப மதிப்பை மாற்றவும்
    - கவுண்டரின் ஆரம்ப மதிப்பை மாற்றவும்

சிக்கல் 3 பொதுவாக தவறான மாறியைப் பயன்படுத்துவது அல்லது கவுண்டரை பூஜ்ஜியத்திற்கு மீட்டமைக்காதது.

இந்த விளக்கத்திற்குப் பிறகு, லூப்கள் எவ்வாறு செயல்படுகின்றன என்பதைப் பற்றி மாணவர் பல்வேறு தவறான எண்ணங்களைக் கொண்டிருக்கலாம்.
மிகவும் பொதுவானவற்றை அகற்ற, பின்வரும் பணிகளை நான் உங்களுக்கு வழங்குகிறேன்:

  1. இதில் வரம்பு, ஆரம்ப கவுண்டர் மதிப்பு அல்லது எதிர் படி ஆகியவை பயனரால் உள்ளிடப்படும்.
  2. இதில் எதிர் மதிப்பு சில எண்கணித வெளிப்பாட்டில் பயன்படுத்தப்பட வேண்டும். தீவிர வெளிப்பாடு அல்லது வகுப்பில் ஒரு கவுண்டரைப் பயன்படுத்துவது நல்லது, இதனால் வேறுபாடு நேரியல் அல்ல.
  3. இதில் லூப் இயங்கும் போது கவுண்டர் மதிப்பு திரையில் காட்டப்படாது. எடுத்துக்காட்டாக, ஒரே மாதிரியான உரை துண்டுகளின் தேவையான எண்ணிக்கையைக் காண்பித்தல் அல்லது ஆமை கிராபிக்ஸ் மூலம் ஒரு உருவத்தை வரைதல்.
  4. இதில் நீங்கள் முதலில் மீண்டும் மீண்டும் சில செயல்களைச் செய்ய வேண்டும், பின்னர் மற்றவை.
  5. இதில் நீங்கள் மற்ற செயல்களை மீண்டும் செய்வதற்கு முன்னும் பின்னும் செய்ய வேண்டும்

ஒவ்வொரு பணிக்கும் நீங்கள் சோதனை தரவு மற்றும் எதிர்பார்க்கப்படும் முடிவை வழங்க வேண்டும்.

நீங்கள் எவ்வளவு விரைவாக நகர்த்த முடியும் என்பதைப் புரிந்துகொள்வதற்கு, இந்தச் சிக்கல்களின் நிலைமைகளைப் படித்து, "அவை உதாரணத்திலிருந்து எவ்வாறு வேறுபடுகின்றன?", "அவற்றைத் தீர்க்க எடுத்துக்காட்டில் என்ன மாற்ற வேண்டும்?" என்று கேட்க வேண்டும். மாணவர் அர்த்தத்துடன் பதிலளித்தால், அவர் வகுப்பில் குறைந்தபட்சம் ஒன்றைத் தீர்க்கட்டும், மீதமுள்ளவற்றை வீட்டிலேயே தீர்க்கட்டும். தீர்வு வெற்றிகரமாக இருந்தால், சுழல்களுக்குள் உள்ள நிலைமைகளை விளக்க ஆரம்பிக்கலாம்.
சொந்தமாக பிரச்சினைகளை தீர்ப்பதில் உங்களுக்கு சிக்கல்கள் இருந்தால், வகுப்பில் உள்ள அனைத்தையும் நீங்கள் செய்ய வேண்டும். ஆந்தையை வரைவதை நினைவூட்டும் சிக்கலைத் தீர்ப்பதைத் தவிர்க்க, முதலில் பிரச்சினையை உலகளாவிய முறையில் தீர்க்க பரிந்துரைக்கிறேன். அதாவது, தீர்வு முதல் சோதனையை கடந்து லூப் கட்டுமானத்தைப் பயன்படுத்தாது. சரி, தீர்வின் உலகளாவிய தன்மையை அடைய மாற்றங்களைப் பயன்படுத்துங்கள்.

சுழல்கள் மற்றும் கிளைகள்

என் கருத்துப்படி, "கிளைகளுக்குள் சுழற்சிகள்" என்ற தலைப்பை தனித்தனியாக வழங்குவது பயனுள்ளது. ஒரு நிபந்தனையை பலமுறை சரிபார்ப்பதற்கும் ஒருமுறை சரிபார்ப்பதற்கும் உள்ள வித்தியாசத்தை நீங்கள் பின்னர் பார்க்கலாம்.
ஒருங்கிணைப்புக்கான பணிகள் 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 எழுத்துகள் இருக்க வேண்டும். இரண்டாவது வரியில் டி துண்டுகள் உள்ளன. எந்த எண்ணும் எதிர்மறையாக இருந்தால், பிழைச் செய்தியைக் காட்டவும்.

ஆர்=5, டி=11#####
############

ஆர்=20, டி=3##################
###

ஆர்=-1, டி=6R மதிப்பு எதிர்மறையாக இருக்க வேண்டும்

ஆர்=6, டி=-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;
}

வித்தியாசம் என்னவென்றால், "சாத்தியமான" தீர்வில், இரண்டாவது வரியை வெளியிட இரண்டாவது மாறி பயன்படுத்தப்பட்டது. இரண்டு சுழல்களுக்கும் ஒரே மாறியைப் பயன்படுத்த நீங்கள் வலியுறுத்த வேண்டும். இரண்டு சுழற்சிகளுக்கு ஒரு கவுண்டருடன் கூடிய தீர்வு "எதிர் மீட்டமைப்பு" என்ற வார்த்தையின் விளக்கமாக இருக்கும் என்பதன் மூலம் இந்த வரம்பு நியாயப்படுத்தப்படலாம். பின்வரும் சிக்கல்களைத் தீர்க்கும்போது இந்த வார்த்தையைப் புரிந்துகொள்வது அவசியம். ஒரு சமரசமாக, பிரச்சனைக்கான இரண்டு தீர்வுகளையும் நீங்கள் சேமிக்கலாம்.

இரண்டு சுழல்களுக்கு ஒரு எதிர் மாறியைப் பயன்படுத்துவதில் ஒரு பொதுவான சிக்கல் இதுபோல் தோன்றுகிறது:
ஆர்=5, டி=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

ஒரு மாணவர் மாறியை மாற்றும் நுட்பத்தில் தேர்ச்சி பெற்றிருந்தால், அவர் மிக விரைவாக சமாளிப்பார். மாறியை மீட்டமைப்பதில் மீண்டும் ஒரு சாத்தியமான சிக்கல் இருக்கும். மாற்றத்தை உங்களால் கையாள முடியாவிட்டால், நீங்கள் அவசரப்பட்டு எளிய பிரச்சனைகளை தீர்க்க வேண்டும் என்று அர்த்தம்.

உங்கள் கவனத்திற்கு நன்றி. சேனலை லைக் செய்து சப்ஸ்கிரைப் செய்யவும்.

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

கருத்தைச் சேர்