Step 3 (S-42203)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/13377/step/3

'Функции и циклы

Функции иногда используются для того, чтобы реализовать выход из вложенных циклов. Оператор
return позволяет немедленно завершить выполнение функции в любом её месте, в том числе внутри вложенных циклов. '

Предположим, что мы хотим проверить, есть ли такие целые Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle i, j \gt 0} , что Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle i^2 + j^2 = x } .  Мы можем сделать это просто перебрав все возможные значения для пар Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle (i, j)}


bool found = 0;
for (int i = 1; i*i < x; ++i) 
{
    for (int j = i; j*j < x; ++j) 
    {
         if ( i*i + j*j == x )
         {
             found = true;
             break; // выходим из вложенного цикла
         }
    }
    if (found) // выходим из внешнего цикла
         break;
}


В данном примере нам пришлось в двух местах обрабатывать выход из цикла, т.к. оператор break выходит только из самого вложенного цикла. Если обернуть этот код в функцию, то вместо оператора breakможно будет использовать оператор return.


bool check(int x)
{
    for (int i = 1; i*i < x; ++i) 
    {
        for (int j = i; j*j < x; ++j) 
        {
            if ( i*i + j*j == x )
                return true;           
        }
    }
    return false;
}


Использование оператора return вместо break позволило сделать код проще, т.к. нам не потребовалось выход из каждого цикла по отдельности — как только мы найдём подходящие Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle i} и Failed to parse (MathML with SVG or PNG fallback (recommended for modern browsers and accessibility tools): Invalid response ("Math extension cannot connect to Restbase.") from server "https://api.formulasearchengine.com/v1/":): {\displaystyle j} , мы сразу завершаем выполнение функции и выходим изо всех циклов.