برای بیانیه حلقه. وظایف معمولی


وظیفه
مجموع همه اعداد صحیح بین 100 و 500 را بیابید. 

بیایید برنامه ای بنویسیم که این مشکل را بدون استفاده از فرمول حل کند. اگر فقط نتیجه جمع را به متغیر s بنویسیم، به عنوان مثال،
\(s=100+101+102+103+...+500\)،

ما زمان زیادی را صرف ضبط خود خواهیم کرد، زیرا کامپیوتر نحوه استفاده از بیضی را در یک عبارت حسابی نمی فهمد و ما باید تمام اعداد را از 100 تا 500 بنویسیم. و ارزش چنین برنامه ای خواهد بود. قابل اغماض مخصوصاً اگر بخواهیم اعداد خود را تغییر دهیم و دامنه متفاوتی داشته باشیم.

چه کنیم؟
اگر به ورودی بالا دقت کنیم، دائماً از اضافه "+" استفاده می کنیم.
می توانید اعداد را به تدریج به متغیر s اضافه کنید. به عنوان مثال، با استفاده از این نماد
s = s + i.
کاری که ما انجام دادیم:
1) در سمت راست عبارت s + i، را قرار می دهیم، یعنی مقدار متغیر s  را می گیریم و اضافه می کنیم. مقدار متغیر برای آن i;
2) در سمت چپ نام متغیر s را تنظیم می کنیم، یعنی کل نتیجه محاسبه در سمت راست در همان متغیر s ذخیره می شود، بنابراین ما مقدار متغیر s را تغییر خواهیم داد. 
تنها تغییر مقدار متغیر i در محدوده مورد نظر باقی می ماند. این را می توان با یک حلقه for انجام داد.
 
اعداد 100 تا 500 که در محدوده ما هستند باید به نوبه خود وارد متغیر i شوند. 
مثال
// مهم! ابتدا باید متغیر s را ریست کنید، // به طوری که در مرحله اول عدد 100 به صفر اضافه می شود. // و نه به آنچه در حافظه است! s=0; برای (i = 100; i <= 500; i++) // هدر حلقه ای که در آن متغیر i s = s + i; // مقدار آن را از 100 به 500 با افزایش 1 تغییر می دهد، // در بدنه حلقه به تدریج به متغیر s،   // مقدار متغیر متغیر i را اضافه کنید، // و نتیجه در متغیر s ذخیره می شود این راه حل بسیار شبیه به محاسبه مجموع اعمال است:
\(s = 0 + 100 = 100، \\ s = 100 + 101 = 201، \\ s = 201 + 102 = 303 \\ ... \)

حداکثر تعداد در بین اعداد داده شده

هنگام مطالعه عملگر شرطی، به موضوع یافتن حداکثر تعداد از چندین عدد وارد شده پرداختیم. در مسئله "حداکثر چهار عدد" ما از الگوریتم زیر استفاده کردیم:
1. مقدار را به متغیر M به اولین متغیر از چهار متغیر اختصاص دهید؛
2. اگر مقدار متغیر دوم بیشتر از مقدار متغیر M باشد، مقدار متغیر را با مقدار متغیر دوم جایگزین کنید.
3. اگر مقدار متغیر سوم از مقدار متغیر M بیشتر است، مقدار متغیر M را با مقدار متغیر سوم جایگزین کنید. br /> 4. اگر مقدار متغیر چهارم بیشتر از مقدار متغیر M باشد، مقدار متغیر را با مقدار متغیر چهارم جایگزین کنید.

مشاهده می شود که هر  عدد (بیایید آن را با X نشان دهیم) که با متغیر M مقایسه کردیم، به صورت زیر:
 
شبه کد
<پیش> ورودی X اگر (M < X) سپس   M = X
نکته اصلی در این کد تعیین مقدار اولیه متغیر M است.
معمولاً هنگام حل مسئله یافتن حداکثر یا حداقل، مقدار اولیه متغیر M برابر با عدد اول تعیین می شود.
بنابراین کد فوق باید 1 برابر کمتر از تعداد اعداد اجرا شود (زیرا عدد اول باید به عنوان مقدار اولیه متغیر M وارد و ذخیره شود).
اگر تعداد اعداد را از صفحه کلید تنظیم کنیم (مثلاً در متغیر n)، می‌توانیم با استفاده از همان عدد برای ذخیره متغیر عدد.

سعی کنید برنامه را خودتان بنویسید.

حداکثر نه در بین همه

اگر لازم باشد حداکثر (حداقل) را نه در بین همه اعداد وارد شده، بلکه فقط در بین اعدادی که شرایط خاصی را برآورده می کنند، پیدا کنیم، باید این واقعیت را در نظر بگیریم که اولین عددی که به عنوان مقدار اولیه حداکثر در نظر می گیریم. (حداقل) همیشه نیازهای ما را برآورده نمی کند.

به عنوان مثال، اگر ما به دنبال حداکثر عدد منفی هستیم، مجموعه داده را داریم: \(\{5, -2, 4, 2, -1, -3\}\ ) عدد 5 را در مقدار اولیه ماکزیمم بدست می آوریم که مثبت و بزرگتر از هر منفی است. و از این رو شرط X > M همیشه نادرست خواهد بود.

بنابراین، اضافه کردن تنها یک چک برای یک عدد منفی به الگوریتم مسئله قبلی کافی نیست، همچنین باید این نکته را نیز در نظر گرفت که ممکن است عدد اول شرایط لازم را برآورده نکند (در این مورد، منفی باشد. ).

می‌توانید با اضافه کردن شرط زیر در حلقه این مشکل را برطرف کنید:

شبه کد
<پیش> اگر X منفی است، پس اگر M >= 0 یا M < X، سپس M=X
در کد مشخص شده، شرط  M >= 0 به شما امکان می دهد عمل  M = X را حتی اگر متغیر در ابتدا حاوی مقداری است که آشکارا بزرگتر از بقیه است (در مثال ما، مقدار برابر با 5 است).

همچنین توجه می کنیم که اگر محدوده اعداد مشخص باشد، حداقل (حداکثر) عدد از محدوده مشخص شده را می توان به عنوان مقدار اولیه حداکثر (حداقل) در نظر گرفت.

وظیفه

N عدد داده شده است. دومین عنصر بزرگ را در یک دنباله پیدا کنید.

این مشکل دو تفسیر را امکان پذیر می کند.
به عنوان مثال، اگر مجموعه‌ای از اعداد به ما داده شود: \(10\ 15\ 20\ 35\ 14\ 35\ 10\)، پاسخ چیست؟ ?
تحت "دومین عنصر بزرگ" یا به سادگی "دومین حداکثر" را می توان به صورت زیر درک کرد:
1) مقداری که اگر همه مقادیر را به ترتیب غیر کاهشی مرتب کنیم (مرتب سازی کنیم) در مکان ماقبل آخر قرار می گیرد (هر یک بزرگتر یا برابر با قبلی است). سپس برای مجموعه اعداد در نظر گرفته شده، پاسخ مقدار 35 خواهد بود؛
2) مقدار عنصر که فقط از حداکثر بیشتر است. سپس پاسخ 20 است.
اگر تنها یک عنصر حداکثر در مجموعه اعداد وجود داشته باشد (همه بقیه کمتر هستند)، هر دو تفسیر یکسان است و پاسخ برای هر دو مورد یکسان خواهد بود، در غیر این صورت پاسخ متفاوت خواهد بود.

مورد اول را در نظر بگیرید (الگوریتم را در شبه کد).
برای یافتن پاسخ از دو متغیر استفاده می کنیم:
1) maximum1 - حداکثر مقدار (اول حداکثر)؛
2) maximum2 - حداکثر دوم (پاسخ ما).

اگر محدوده تغییر مقادیر مشخص باشد، به عنوان مقادیر اولیه، عددی را می گیریم که آشکارا کمتر از حد پایین محدوده است (به عنوان مثال، با محدوده ای از -1000 تا 1000 - عدد را بگیرید -1001)
اگر محدوده مقادیر ناشناخته است، می توانید دو عدد ورودی اول را در مقادیر اولیه متغیرهای max1 و max2 بنویسید و سپس آنها را با هم مقایسه کنید. دو متغیر <پیش> ورودی N //تعداد اعداد ورودی a، b max1 = a max2 = b اگر b > الف، سپس     max1 = b     max2 = a
در مرحله بعد، ما همه عناصر دیگر را در نظر می گیریم (2 مورد اول قبلاً مشاهده شده است، بنابراین از 3 شروع می کنیم) <پیش> nc برای i از 3 تا n ورودی الف اگر > حداکثر1 //مقداری بزرگتر از حداکثر1 وجود داشت که max2 = max1 //اول سابق بالاتر دوم می شود max1 = a // عنصر جدید اولین حداکثر خواهد بود در غیر این صورت //عنصر بعدی بیش از max1 نباشد // باید با مقدار حداکثر 2 مقایسه شود اگر > حداکثر 2 که max2 = a //آن را به عنوان مقدار جدید max2 در نظر بگیرید // max1 در این مورد تغییر نمی کند همه همه kts
سعی کنید خودتان این الگوریتم را پیاده سازی کنید.