for цикл оператору
1. for циклинин операторунун максаты . Жалпы форма
for цикли циклдик процессти уюштуруу үчүн иштелип чыккан. for циклинин жардамы менен сиз каалаган түрдөгү циклдик процессти уюштура аласыз, мында:
- цикл итерацияларынын саны белгилүү;
- циклдин кайталануу саны белгисиз жана кандайдыр бир шарттын аткарылышынын негизинде аныкталат.
for циклинин операторунун жалпы формасы
@A@үчүн ( инициализация ; шарт ; туюнтма )
{
// кээ бир инструкциялар, операторлор
// ...
}@A@
Кайда
- инициализация - эсептегич өзгөрмөнү инициализациялоочу туюнтма. Бул өзгөрмө циклде аткарыла турган итерациялардын санын аныктайт;
- шарт - циклдин кийинки итерациясын аткаруу зарылдыгын аныктоочу логикалык туюнтма. Эгерде шарт = true болсо , циклдин кийинки итерациясы аткарылат. Эгерде шарттын мааниси = false , анда цикл токтотулат жана кийинки операторго өтүү for операторунан кийин болот ;
- туюнтма - эсептегич өзгөрмөнүн маанисин өзгөрткөн кээ бир туюнтма. Каалоо боюнча, туюнтма эсептегич өзгөрмөнүн маанисин өзгөртө алат. Ошондой эле, эсептегич өзгөрмө циклдин денесинде өзүнүн маанисин өзгөртө алат.
Эгерде for циклинин оператору бир оператор үчүн колдонулса, анда тармал кашааларды жалпы формада калтырууга болот
for ( инициализация ; шарт ; билдирүү )
оператору ;
бул жерде оператор бир оператор же бир нускама.
2. for циклинин түрлөрү . Мисалдар
for циклинде анын каалаган бөлүктөрүн (инициализация, шарт, туюнтма) өткөрүп жиберсеңиз болот. Төмөнкү мисалдар for циклинин ар тараптуулугун көрсөтөт , ал ар кандай жолдор менен колдонулушу мүмкүн.
Мисал 1. Мисалда эсептегич өзгөрмөнү инициализациялоочу бөлүк алынып салынган. суммасы эсептелет
s = 2 + 4 + 8 + ... + 100
Бул көйгөйдү чечүүчү код үзүндүсү төмөнкүдөй:
// 2+4+8+...+100 суммасын эсептөө
@A@int sum = 0;
int i = 0;@A@
// (; i <= 100; i += 2) үчүн эсептегич өзгөрмө инициализация бөлүгү жок
sum += i;
// сумма = 2550
Мисал 2. Мисалда кийинки итерациянын шартын текшерген бөлүк алынып салынган. Мисал А массивинин элементтеринин суммасын эсептейт .
// A массивинин элементтеринин суммасын эсептөө
// вычислить сумму элементов массива A
@A@double[] A = { 2.5, 1.2, 0.8, 3.3, 4.2 };
double sum = 0;
int i;
// нет части, которая проверяет условие выполнения цикла
for (i = 0; ; i++)
{
if (i == A.Length) break;
sum += A[i];
} @A@
// @T@sum = 12.0@T@
Мисал 3. Мисалда туюнтманын эсептегич өзгөрмөсүн өзгөрткөн бөлүгү түшүрүлгөн. Чыныгы а саны жана натурал саны n берилген . Эсептөө:
a × ( a +1) × … × ( a + n -1)
Бул көйгөйдү чечкен код үзүндүсү
@A@int mult;
int i;
int n, a;
n = 5;
a = 4;
mult = 1;
// отсутствует часть прироста переменной-счетчика i
for (i = 0; i < n; )
{
mult = mult * (a + i);
i++;
}@A@
// @T@mult = 6720@T@
Мисал 4 . Мисалда for цикли эч кандай инициализацияны же шарттарды камтыбайт. n натурал саны берилген . Бул сандын максималдуу цифрасын аныктаңыз.
Бул маселени for циклин колдонуу менен чечүү ( Console Application түрүндөгү тиркеме )
@A@ausing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
// определить максимальную цифру числа n
int n;
int t, d;
int max;
// ввод n
Console.Write("n = ");
n = Convert.ToInt32(Console.ReadLine());
t = n;
max = 0; // максимальная цифра
for (; t > 0; ) // цикл не содержит инициализации и прироста счетчика
{
d = t % 10;
if (max < d) max = d;
t = t / 10;
}
Console.WriteLine("Max = {0}", max);
}
}
}@A@
Жогорудагы программаны иштетүүнүн натыйжасы:
@T@n=283915
макс=9@T@
Мисал 5. Мисалда for цикли шартты жана туюнтманы камтыбайт. for циклинен чыгуу break оператору менен аткарылат .
Калкымалардын В массиви көрсөтүлгөн . Мааниси -5тен +5ке чейинки диапазондо турган массивдин биринчи элементинин позициясын табыңыз .
Бул көйгөйдү чечкен код үзүндүсү
Системаны
@A@using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
// найти позицию первого вхождения
float[] B = { 12.4f, -11.9f, 7.5f, 2.3f, 1.8f };
int pos;
for (pos = 0; ; ) // цикл for не содержит условия и выражения
{
if (pos == B.Length)
break;
if ((B[pos] >= -5) && (B[pos] <= 5))
break;
pos++;
}
if (pos == B.Length)
Console.WriteLine("Искомого элемента нет в массиве.");
else
Console.WriteLine("pos = {0}", pos);
}
}
}@A@
Программанын аткарылышынын натыйжасы
@T@pos = 3@T@
Мисал 6. Мисал "бош" for циклин көрсөтөт . Жалпысынан, бош for цикли төмөнкүдөй көрүнөт:
үчүн (;;)
{
// кээ бир көрсөтмөлөр
// ...
}
3. Итерациялардын саны белгилүү болгон for циклинин мисалдары
Мисал 1. 100дөн 200гө чейинки бардык бүтүн сандардын суммасын табыңыз. Бул маселени for циклинин жардамы менен чечкен программанын фрагменти төмөнкүдөй:
// сумманы эсептөө
@A@int sum;
int i;
sum = 0;
үчүн (i = 100; i <= 200; i++)
sum += i;@A@
@T@ сумма = 15150 @T@
Мисал 2 . n натурал саны берилген . Төмөнкү сумманы таба турган программаны түзүңүз
Бул көйгөйдү чечкен код үзүндүсү
@A@double sum;
int i;
int n;
n = 10;
sum = 0;
for (i = 1; i <= n; i++)
sum = sum + 1.0 / i;@A@
@T@ sum = 2.92896825396825 @T@
Мисал 3. Кайталануучу мамилелер. a 0 , a 1 , a 2 , ... сандарынын ырааттуулугу мыйзам боюнча алынат:
n натурал саны берилген . 1 , 2 , … , а н алыңыз .
Бул маселени чечкен программанын тексти төмөнкүдөй:
@A@using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication4
{
class Program
{
static void Main(string[] args)
{
// получить a1, a2, ..., an
double a0, ak;
int k;
int n;
n = 10;
a0 = 1;
k = 0;
Console.WriteLine("a[{0}] = {1}", k, a0);
for (k = 1; k <= n; k++)
{
ak = k * a0 + 1.0 / k;
Console.WriteLine("a[{0}] = {1}", k, ak);
a0 = ak;
}
}
}
}@A@
Жогорудагы кодду аткаруунун натыйжасында төмөнкү натыйжа чыгат
@T@a[0] = 1
a[1] = 2
a[2] = 4,5
a[3] = 13,8333333333333
a[4] = 55,5833333333333
a[5] = 278.116666666667
a[6] = 1668,86666666667
a[7] = 11682.2095238095
a[8] = 93457.8011904762
a[9] = 841120.321825397
a[10] = 8411203.31825397@T@
4. Итерациялардын саны белгисиз болгон for циклинин мисалдары
Мисал 1. А чыныгы саны берилген . Мындай эң кичине н табыңыз
Console Application түрүндөгү колдонмо үчүн маселени чечүү
@A@using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// цикл for, в котором количество итераций заранее неизвестно
int n;
double a;
double t;
Console.Write("a = ");
a = Convert.ToDouble(Console.ReadLine());
// цикл вычисления
for (n = 1, t = 0; t < a; n++)
t = t + 1.0 / n;
Console.Write("n = {0}", n - 1);
}
}
}@A@
Бул программаны иштетүү төмөнкү натыйжаны берет
@T@a = 2
n=4@T@
5. Уюшкан for циклинин түшүнүгү
for цикли башка каалаган башкаруу операторунун ичине жайгаштырылышы мүмкүн, ал төмөнкүлөр болушу мүмкүн:
- шарттуу секирүү оператор болсо ;
- switch вариант билдирүү ;
- цикл оператору ;
- цикл оператору while ;
- do...while цикл билдирүүсү .
Уялоо деңгээлинин саны чексиз.