Садржај
3 Променљиве, подаци, типови
3.5 Текстуални подаци (стрингови, ниске)
4 Гранања
4.7 Гранања - разни задаци
5 Петље
5.1 Врсте петљи
5.2 Наредбе break и continue
6 Статички методи
6.4 Корист од метода
7 Низови
7.2 Низови - вежбање
8 Матрице
9 Кориснички дефинисани типови
10 Фајлови

Врсте петљи

У приручнику Увод у програмирање у програмском језику C# погледајте поглавља 4.1, 4.2 и 4.3 (стране 57-68).


Рекли смо да су петље наредбе које омогућавају понављање других наредби. То значи да су петље сложене наредбе, које у себи могу да садрже друге наредбе. Уместо речи петља често се користи и реч циклус (у програмирању су овде речи синоними). На следећем примеру ћемо показати како се користи свака од три врсте петљи које постоје у језику C#.

Скратити следећи програм коришћењем петље.

using System;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Da li ste spremni?");
        Console.WriteLine("10");
        Console.WriteLine("9");
        Console.WriteLine("8");
        Console.WriteLine("7");
        Console.WriteLine("6");
        Console.WriteLine("5");
        Console.WriteLine("4");
        Console.WriteLine("3");
        Console.WriteLine("2");
        Console.WriteLine("1");
        Console.WriteLine("Polazak!");
    }
}

Десет наредби које исписују бројеве од 10 до 1 ћемо заменити петљом, у којој ће се за свако i од 10 до 1 исписати број i. Тиме ћемо добити програм који је краћи, а самим тим и јаснији јер не морамо да пазимо да ли је написан баш сваки број од 10 до 1, да ли су по реду, да ли се неки поновио (било случајно или намерно) итд. Осим тога, програм са петљом је лакше и преправити да одбројава другачије, али о томе више касније.

While петља

Општи облик while наредбе је:

while (uslov)
    telo

Ова наредба дословно значи: „док је испуњен услов, извршавај тело”. Овде uslov представља било какав израз логичког типа, дакле нешто што је тачно или нетачно (има вредност true или false), а telo представља једну или више било којих наредби језика C#. Ако у телу петље има више наредби, оне морају бити окружене витичастим заградама.

Према томе, уместо наредби које исписују бројеве од 10 до 1, можемо равноправно писати и ове наредбе (учинак је исти):

int i = 10;
while (i > 0)
{
    Console.WriteLine(i);
    i--;
}

Након што променљивој i доделимо вредност 10, долазимо до while наредбе, која се извршава овако:

1.      израчуна се услов (i > 0); i је тренутно 10 и јесте веће од 0. Услов петље је испуњен и зато се прелази на тело петље.
        1 a) исписује се вредност i, тј. број 10
        1 b) i се смањује за 1 и постаје 9

2.      израчуна се услов (i > 0); i је тренутно 9 и веће је од 0. Прелази се на тело петље.
        2 a) исписује се вредност i, тј. број 9
        2 b) i се смањује за 1 и постаје 8

...

10.     израчуна се услов (i > 0); i је тренутно 1 и веће је од 0. Прелази се на тело петље.
        10 a) исписује се вредност i, тј. број 1
        10 b) i се смањује за 1 и постаје 0

11.     израчуна се услов (i > 0); i је тренутно 0 и услов више није испуњен. Прелази се на наредбу после тела петље.

Овако изгледа комплетан програм:

Да бисте што боље разумели како овај програм ради, можете да га прекуцате или копирате у ваш Visual Studio пројекат, а затим да га извршавате корак по корак (наредбу по наредбу), тако што притискате тастер F10. На сваки притисак на тастер F10 се извршава по једна наредба.

Важна вежба:

Док извршавате програм корак по корак, гледајте у прозор који се зове Autos (обично је испод прозора са кодом програма) и пратите у њему како се мења вредност променљиве i.

Пре извршавања сваке наредбе предвидите (у себи) шта ће се тачно догодити, то јест која ће бити вредност променљиве и на коју наредбу ће се прећи као следећу. Посебно, настојте да предвидите када ће се са линије 9 скочити на линију 14.

../_images/while_step_by_step.gif

For петља

Општи облик петље for је:

for (inicijalizacija; uslov; korak)
    telo

Овако написана for наредба ради исто што и

inicijalizacija
while(uslov)
{
    telo
    korak
}

Значи, прво се извршава наредба коју смо овде назвали inicijalizacija, затим се проверава услов и док год је он испуњен, понављају се тело петље и наредба коју смо назвали korak. Тако, уместо

int i = 10;
while (i > 0)
{
    Console.WriteLine(i);
    i--;
}

можемо равноправно да пишемо

for (int i = 10; i > 0; i--)
    Console.WriteLine(i);

Сада је вероватно јасније зашто смо наредбе inicijalizacija и korak тако назвали. Мада на месту ових наредби могу да се пишу било које наредбе језика C#, најчешће на месту наредбе inicijalizacija додељујемо некој променљивој (почетну) вредност, а у наредби korak ту вредност мењамо. При томе се вредност променљиве врло често мења само за по један навише или наниже, као и у нашем примеру, али промена у ствари може да буде било каква: за по два или више (чак и не увек исту вредност), може да укључи множење или дељење и тако даље - можемо да изаберемо било који начин који нам одговара.

У примерима попут овог, где треба поновити неку наредбу или наредбе за сваку вредност променљиве из одређеног интервала, for наредба нам даје нешто сажетији запис у коме је комплетно контролисање вредности преоменљиве у једном реду програма. Зато се овакав пример чешће решава помоћу for петље, него помоћу while петље.

Комплетан програм са for петљом изгледа овако:

Важна вежба:

Извршите и овај програм корак по корак (на исти начин као претходни) и пажљиво испратите редослед извршавања наредби и њихових делова, као и тренутке када се мења вредност променљиве.

Do-while петља

Општи облик do-while петље је:

do
    telo
while (uslov)

Овде telo поново представља једну или више наредби, а uslov представља логички израз (израз који има вредност true или false). Ако се тело петље састоји од више наредби, оне и у овом случају морају бити окружене витичастим заградама.

Овако написана do-while наредба ради исто што и

telo
while (uslov)
    telo

Приметимо да се do-while петља разликује од for и while петље између осталог и по томе што се прво изврши тело петље па се проверава да ли је испуњен услов за понављање. Другим речима, тело while или for петље може да се не изврши ни једном (а то се дешава када услов на почетку има вредност false), док се тело do-while петље увек извршава бар једном, без обзира на услов.

Комплетан програм који решава постављени задатак помоћу do-while петље изгледа овако:

Важна вежба:

Поновите још једном поступак извршавања програма корак по корак и пратите вредност променљиве и редослед извршавања наредби.

Питања за проверу знања

    Q-69: Тело петље је …

  • једна или више наредби које се понављају у тој петљи
  • Тачно!
  • "while", "for" или "do-while"
  • Не.
  • витичасте заграде
  • Не.

    Q-70: Када услов петље има вредност true …

  • даље дешавање зависи од тога о којој врсти петље се ради
  • Не.
  • петља завршава са радом и прелази се на наредбу после тела петље
  • Не.
  • извршава се тело петље
  • Тачно!

    Q-71: Тело које петље се увек извршава бар једном?

  • while
  • Не.
  • do-while
  • Тачно!
  • for
  • Не.

Задаци за вежбу

Употребу петљи у програмима можете почети да вежбате на овим задацима.

(Created using Swinx, RunestoneComponents and PetljaDoc)
© 2022 Petlja
A- A+