সাধারণত যখন আমি এখানে আপনার মতো পোস্ট পোস্ট দেখি তখন আমি এটিকে সম্পাদনা করি কারণ আমরা অনুভূমিক স্ক্রোলকে ঘৃণা করি। তবে এটি আপনার প্রশ্নের অংশ হিসাবে, আমি আপনাকে সম্পাদনাটি এখানে দেখাব:
int extractMessage(char keyWord[25], char cipherText[17424],
int rowSize, char message[388])
{
int keyColumn = 0;
int cipherColumn = 0;
int offset = 1;
int nextWord = 1;
int lengthOfWord = 0;
int lengthOfCipher = 0;
lengthOfWord = length(keyWord);
lengthOfCipher = length(cipherText);
while (keyWord[keyColumn] != cipherText[cipherColumn]) {
cipherColumn++;
if (keyWord[keyColumn + offset]
!= cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
cipherColumn++;
continue;
}
}
}
যে বিরতি বিস্ময়কর হতে পারে, কিন্তু এটা অনুভূমিক স্ক্রল সঙ্গে সংস্করণের তুলনায় আরও বেশি পাঠযোগ্য, এবং এটি করতে তাদের নাম সংক্ষেপিত চেয়ে ভালো i
, j
এবং k
।
এটা তোলে যা আপনি ব্যবহার না করা উচিত নয় i
, j
এবং k
। 3 টি নেস্টেড for
লুপগুলি ইনডেক্স করার সময় সেগুলি সূক্ষ্ম নাম । তবে এখানে নামগুলি হ'ল আপনি কী ঘটবেন বলে আশা করেছিলেন সে সম্পর্কে আমার একমাত্র সূত্র। বিশেষত যেহেতু এই কোডটি আসলে কিছুই করে না।
পরিবর্তনশীল নামের দৈর্ঘ্যের উপর অনুসরণ করার সেরা নিয়ম হ'ল সুযোগ। পরিবর্তনশীল জীবন যত দীর্ঘ হয়, তার নামটির সাথে আরও সহকর্মী ভেরিয়েবলের প্রতিযোগিতা করতে হয়। ক্যান্ডিডআরঞ্জ নামটি স্ট্যাক এক্সচেঞ্জের ক্ষেত্রে অনন্য। আমরা যদি কোনও আড্ডায় থাকি তবে আপনি আমাকে কেবল "ক্যান্ডি" ডাকবেন। তবে এই মুহুর্তে আপনি এমন একটি সুযোগে রয়েছেন যেখানে নামটি ক্যান্ডাইড , ক্যান্ডি চিউ বা ক্যান্ডিফ্লোসের সাথে বিভ্রান্ত হতে পারে । সুতরাং সুযোগটি যত দীর্ঘ হবে তত বেশি নাম হওয়া উচিত। এর পরিধিটি যত কম হবে, নামটিও তত ছোট হতে পারে।
লাইনের দৈর্ঘ্য কখনই নামের দৈর্ঘ্য নির্ধারণ করে না । আপনার যদি মনে হয় এটির পরে আপনার কোডটি প্রেরণের জন্য আলাদা উপায় খুঁজে বের করুন। আপনাকে এটি করতে সহায়তা করার জন্য আমাদের কাছে অনেক সরঞ্জাম রয়েছে।
আমি প্রথমে যে জিনিসটির সন্ধান করি তার মধ্যে একটি থেকে মুক্তি পাওয়া অযথা শব্দ noise দুর্ভাগ্যক্রমে এই উদাহরণটি কিছু করে না, সুতরাং এটি সমস্ত অযথা গোলমাল। আমার সাথে কাজ করার কিছু দরকার তাই প্রথমে এটি কিছু করা যাক।
int calcCipherColumn(char keyWord[25], char cipherText[17424],
int rowSize, char message[388])
{
int keyColumn = 0;
int cipherColumn = 0;
int offset = 1;
int nextWord = 1;
int lengthOfWord = 0;
int lengthOfCipher = 0;
lengthOfWord = length(keyWord);
lengthOfCipher = length(cipherText);
while (keyWord[keyColumn] != cipherText[cipherColumn]) {
cipherColumn++;
if (keyWord[keyColumn + offset]
!= cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
cipherColumn++;
continue;
}
}
return cipherColumn;
}
সেখানে, এখন এটি কিছু করে।
এখন যেহেতু এটি কিছু করে, আমি কী থেকে মুক্তি পেতে পারি তা দেখতে পাচ্ছি। এই দৈর্ঘ্যের স্টাফ এমনকি ব্যবহৃত হয় না। এটিও continue
কিছু করে না।
int calcCipherColumn(char keyWord[25], char cipherText[17424],
int rowSize, char message[388])
{
int keyColumn = 0;
int cipherColumn = 0;
int offset = 1;
int nextWord = 1;
while (keyWord[keyColumn] != cipherText[cipherColumn]) {
cipherColumn++;
if (keyWord[keyColumn + offset]
!= cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
cipherColumn++;
}
}
return cipherColumn;
}
আসুন কিছু ছোট ছোট সাদা স্থানের টুইটগুলি করি, কারণ আমরা উত্স নিয়ন্ত্রণের বিশ্বে বাস করি এবং এটি একটি দুর্দান্ত কারণ যখন একটি লাইন পরিবর্তিত হিসাবে রিপোর্ট হওয়ার একমাত্র কারণ এটি কিছু আলাদা করে, কারণ এর অংশটি একটি কলামে লাইন রাখতে হয়নি।
int calcCipherColumn(char keyWord[25], char cipherText[17424],
int rowSize, char message[388])
{
int keyColumn = 0;
int cipherColumn = 0;
int offset = 1;
int nextWord = 1;
while (keyWord[keyColumn] != cipherText[cipherColumn]) {
cipherColumn++;
if (keyWord[keyColumn + offset]
!= cipherText[cipherColumn + (rowSize*nextWord) + nextWord]) {
cipherColumn++;
}
}
return cipherColumn;
}
হ্যাঁ, আমি জানি এটি কিছুটা কম পঠনযোগ্য তবে অন্যথায় আপনি এমন মানুষদের পাগল হয়ে যাবেন যারা পরিবর্তনগুলি সনাক্ত করতে ভিডিফ সরঞ্জাম ব্যবহার করেন।
এখন আসুন আমরা এই নির্বোধ রেখা বিরতি ঠিক করি কারণ আমরা লাইন দৈর্ঘ্যের সীমাতে থাকার চেষ্টা করছি।
int calcCipherColumn(
char keyWord[25],
char cipherText[17424],
int rowSize,
char message[388]
) {
int keyColumn = 0;
int keyOffset = 1;
int nextWord = 1;
int cipherColumn = 0;
int cipherOffset = (rowSize * nextWord) + nextWord;
char key = keyWord[keyColumn];
char keyNext = keyWord[keyColumn + keyOffset];
while (key != cipherText[cipherColumn]) {
cipherColumn++;
if (keyNext != cipherText[cipherColumn + cipherOffset]) {
cipherColumn++;
}
}
return cipherColumn;
}
এখন, লুপের লজিকটি কী লুপে পরিবর্তন ঘটে সেদিকে দৃষ্টি নিবদ্ধ করা হয়েছে। আসলে, বাদে সব কিছুই cipherColumn
চিহ্নিত করা যেতে পারে final
। আরে! ঐ দিকে তাকান. আমাদের এখন এটি করার জায়গা আছে।
আমি যা করেছি তা হ'ল আরও 3 টি ভেরিয়েবল যুক্ত করা হয়েছিল, একটিটির নতুন নামকরণ করুন এবং সেগুলি আবার সামঞ্জস্য করুন। এবং ফলাফলটি কেবল নির্বোধ লাইনব্রেক না করে লাইনগুলিকে যথেষ্ট ছোট করার জন্য ঘটেছে !=
।
নামগুলি অবশ্যই নিশ্চিত করুন key
এবং keyNext
বর্ণনামূলক নয়, তবে তারা প্রত্যেকে কেবল একবার ব্যবহার করা হবে, এত দিন বাঁচবেন না এবং সর্বাগ্রে লুপের মধ্যে আকর্ষণীয় এমন কিছু করছেন না। সুতরাং তাদের হওয়ার দরকার নেই। অতিরিক্ত ভেরিয়েবল প্রবর্তন করে আমাদের যদি প্রয়োজন হয় তবে তাদের নামগুলি আরও দীর্ঘ করার জন্য আমাদের কাছে আরও জায়গা রয়েছে। বিষয়গুলি পরিবর্তিত হয়, তাই শেষ পর্যন্ত আমাদের প্রয়োজন হতে পারে। যদি আমরা এটি করি, তবে আমাদের শ্বাসকষ্ট থাকার জায়গাটি ভাল।
লাইন দৈর্ঘ্যের সীমাবদ্ধতার প্রতি শ্রদ্ধা জানাতে ইনপুট প্যারামিটারগুলি ছড়িয়ে দেওয়ার জন্য আপনাকে জেফ গ্রিগের ফর্ম var রূপের স্টাইলটি দেখানোর স্বাধীনতাও নিয়েছিলাম ।
cipherColumn + (rowSize*nextWord) + nextWord
যে করে তোলে পরিষ্কার যে হিসাব হয় জন্য , উদাহরণস্বরূপ? আমি হিসাবের চেয়ে সেই নামটির সংক্ষিপ্ততর বাজি ধরেছি, তাই আপনি একটি পঠনযোগ্যতা সুবিধা এবং হ্রাস পংক্তির দৈর্ঘ্য পান। এছাড়াও অ্যাসাইনমেন্টগুলি প্রান্তিককরণ করবেন না, বা আপনি যদি দীর্ঘতম চলকটির নাম পরিবর্তন করেন তবে আপনাকে সেগুলি সরিয়ে নিতে হবে।