For циклі

Төменде for циклының жалпы жазылу түрі мен алдыңғы мысалдың осы команда арқылы орындалуы көрсетілген.

Жалпы жазылу түрі:

for(цикл басы; шарт; қадамы)

команда;

Мысалдар

var i;

var sum = 0;

for(i=1; i<=100; i ++)

sum += i;

alert ("Қосынды 1 + 2 +... + 100 = " + sum);

Бұл мысалдың да нәтижесі алдыңғы мысалдағыдай болады. Цикл жұмысы келесі түрде атқарылады: циклдегі алғашқы команда орындалады (мысалдағы i=1; командасы), ал цикл келесі әрекеттер арқылы орындалады:

- шартты тексеру (мысалдағы i<=100);

- цикл денесін орындау (мысалдағы sum+=i);

- қадамды көрсету командасын орындау, (мысалдағы i++).

Егер шарт бірден жалған болса, while командасындағы сияқты цикл денесі бір де бір рет орындалмауы да мүмкін. Мұндайда қадам беру командасы да орындалмайды. Ал циклдің алғашқы командасы әрқашанда кем дегенде бір рет орындалады.

Цикл басындағы for жолының үш командасының - басы, шарты, қадамы кез келгені жазылмай кетуі де мүмкін, бірақ олардың арасында тұратын нүктелі үтір міндетті түрде сақталады. Егер шарт көрсетілмесе, оның мәні ақиқат (true) болып саналады. Мұндайда, цикл шексіз түрге айналып кетеді:

for (;;) команда

Бұл цикл шексіз орындала береді, яғни аяқталмайды. Оны тек цикл ішіндегі break командасы көмегімен ғана аяқтауға болады.

4.7.3 Break және continue командалары

Бұл командалар циклдағы командалардың орындалу реттілігін өзгерту үшін қолданылады.

Continue командасы циклдың онан кейінгі тұрған барлық командаларын аттап өтіп, цикл параметрінің келесі мәніне көшіреді. Break командасы жалпы цикл орындалуын аяқтап, одан кейінгі келесі командаларға көшіреді.

4.14-сурет. Continue және Break командаларының орындалуы

1-мысал (continue). [1,20] аралығынан кездейсоқ түрде алынған 5 жұп санның қосындысын табу керек.

var len = 5; // Сандардың қанша екендігі.

var a = 1; // Аралықтың сол жақ шекарасы.

var b = 20; // Аралықтың оң жақ шекарасы.

var sum = 0; // Қосқыш.

var counter = 0; // сандардың санауышы.

var number; // Кездейсоқ сан.

var str = " "; // Шығаруға арналған қатар.

while (counter < len)

{ number = Math.floor(a + (b-a+1)*Math.random());

if (number % 2) continue;

sum += number; str += number;

if (counter < len-1) str += " + ";

else str += " = ";

counter++;

}

str += sum; alert(str);

Осы мысалдың орындалу нәтижесінің бірі келесі суреттегідей болады. Программаны әр орындаған кезде 1 мен 20 сандарының арасынан жұп сандар кездейсоқ алынатын болғандықтан, нәтиже әрбір программаны қайталап орындаған кезде өзгеріп отырады.

4.15. сурет. 1-мысалдың орындалу нәтижесі

Math.random() стандартты функциясы [0,1] аралығынан кез келген кездейсоқ сан береді. Math.floor(num) стандартты функциясы аргументке тең не одан кіші бүтін сан мәнін береді.

2-мысал (break). Керекті сандар [1,20] аралығынан кездейсоқ түрде алынып отырады. Осы сандардың кезекті келесісі 10-ға тең болғанша, олардың қосындысын табу керек.

var a = 1; // аралықтың сол жақ шекарасы.

var b = 20; // аралықтың оң жақ шекарасы.

var special = 10; // кездейсоқ санның критикалық мәні

var sum = 0; // қосқыш.

var number; // кездейсоқ сан.

var str = ""; // шығару жолы.

for (;;) // шексіз цикл.

{ number = Math.floor(a + (b-a+1)*Math.random());

sum += number; str += number;

if (number == special) break;

str += " + "; }

str += " = " + sum; alert(str);

Бұл мысалда да сандар кездейсоқ алынатын болғандықтан әр түрлі нәтиже береді (4.16-сурет).

4.16-сурет. 2-мысалдың орындалу нәтижелері
3- мысал. функциясы берілген. х аргументі 0-ден 3-ке дейін, 0,5 қадаммен өзгергенде, у функциясының мәндерін табу керек.

var x0 = 0; // х-тің бастапқы мәні

var xk = 3; // х-тің соңғы мәні

var dx = 0.5; // х-тің өзгеру қадамы

var x=x0; // х-ке алғашқы мәнін меншіктеу

var y; // у айнымалысын сипаттау

while (x =< xk)

{ y = x*x - Math.sqrt(x) +1.5;

alert(" x= " + x + " y= " + y);

x+=dx;

}

Бұл программа орындалғанда х-пен у-тің әрбір мәндері жеке терезелерге шығады (4.17-сурет).

4.17-сурет. 3-мысалдың орындалу нәтижесі

Осы мысалдың document.write командасының көмегімен орындалуының нәтижесі келесі суретте көрсетілген:

       
 
4.18-сурет. document.write командасының көмегімен орындалу нәтижесі
 
   


4-мысал. функциясы берілген.

х-тің мәнін енгізе отырып, уфункциясыныңмәнін анықтау керек.

var x = prompt("х-тің мәнін енгізіңіз", "1");

y = (x <= 0)? x*x+x+1:x-Math.sqrt(x+1);

alert ("x="+x+" y=" + y);

Программаны орындаған кезде, х-тің мәнін енгізуге мүмкіндік беретін терезе ашылады (4.19-сурет).

4.19-сурет. 4-мысалдың орындалу нәтижесі

Енді осы функцияның мәнін, х-тің мәні 0-ден 3-ке дейін, 0,5 қадаммен өзгерген кезде анықтау керек болсын.

var x0 = 0; // х-тің бастапқы мәні

var xk = 3; // х-тің соңғы мәні

var dx = 0.5; // х-тің өзгеру қадамы

var x = x0; // х-ке алғашқы мәнін меншіктеу

var y; // у-ті сипаттау

while (x =< xk)

{ y = x*x - Math.sqrt(x) +1.5;

alert(" x= " + x + " y= " + y);

x+=dx;

}

4.7.4 Циклдерді кері бағытта программалау

Келесі мысалда set жиымы (массиві) элементтері қосындысын табу жолы көрсетілген (элементтерді нөмірлеу 0-ден басталады; set.length – жиым қасиеті – оның ұзындығын білдіреді):

var sum = 0;

for(var i=0; i < set.length; i++)

sum += set[i];

Былай да жазуға болады:

var sum = 0;

for(var i = set.length; -- i >= 0;)

sum += set[i];

Екінші тәсіл дұрысырақ, өйткені санды нөлмен салыстыру басқа санмен салыстыруға қарағанда, жылдамырақ орындалады. Басқаша айтсақ, «--i >= 0» шарты «i <set.length» шартына қарағанда тиімдірек болады. Жалпы ереже: санауышы бар циклде санауыш мәні мүмкіндігінше нөлге дейін төмендегені дұрыс болып табылады.

Келесі мысалда 10!= 1*2*...*10 мәні

есептеледі.

var proizvedenie = 1;

for(var i=10; i; --i)

proizvedenie *= i;

alert("10!=1 * 2 *...* 10 =

"+proizvedenie);

Келесі нұсқа:

var sum = 0;

for(var i = set.length; (i --) >= 0;)

sum += set[i];

қате болып табылады, өйткені ондағы i мәнін бірге кеміту шартты тексеруден кейін жазылған, ол оның алдында тұруы тиіс.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: