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


بیایید سعی کنیم برنامه ای برای حل مشکل زیر بنویسیم:
مجموع همه اعداد صحیح بین 100 و 500 را بیابید. 

هنگام حل این مشکل، یافتن مبلغ دشوار می شود. اگر به سادگی نتیجه جمع را به متغیر s مثلاً as بنویسیم

s=100+101+102+103+...+500

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

چه کاری باید انجام دهیم؟

اگر به مدخل بالا دقت کنیم، مدام از جمع "+".
استفاده می کنیم می توانید سعی کنید اعداد را به تدریج به متغیر s اضافه کنید. به عنوان مثال، با استفاده از این نماد
s := s + i;
کاری که ما اینجا انجام دادیم:
1) در سمت راست عبارت s+i, را قرار می دهیم، یعنی مقدار متغیر s را که اکنون در حافظه داریم، می گیریم و مقدار را اضافه می کنیم. از متغیر i< به آن /strong>
2) در سمت چپ نام متغیر s را تعیین می کنیم، یعنی کل نتیجه محاسبه در سمت راست در این متغیر ذخیره می شود، بنابراین مقدار متغیر را تغییر می دهیم. s. 

از کجا می توانیم اعداد را از محدوده خود دریافت کنیم؟

اعداد 100 تا 500 که به محدوده ما تعلق دارند باید یک به یک در متغیر i قرار گیرند. و این را می توان با استفاده از حلقه معروف for
انجام داد مثلا به این صورت <پیش> s := 0; //در ابتدا باید متغیر s را ریست کرد تا در مرحله اول عدد 100 به صفر اضافه شود نه به آنچه در حافظه است! برای i := 100 تا 500 do //header حلقه، که در آن متغیر i مقدار خود را از 100 به 500 با افزایش 1 تغییر می دهد. s := s + i; //بدنه حلقه، که در آن به تدریج مقدار متغیر تغییر i را به متغیر s اضافه می کنیم. // و نتیجه در متغیر 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
سعی کنید خودتان این الگوریتم را پیاده سازی کنید.