Evgenii Legotckoi
Evgenii LegotckoiМаусым 9, 2017, 6:37 Т.Ж.

C++ - Сабақ 004. Шарттар мен циклдар

C++ таңдалған шарттар мен циклдар үшін операторлардың стандартты жиынын қамтамасыз етеді.

Код тармақтарының шартының конструкцияларына қатысты түйінді сөздер:

  • егер
  • басқа
  • ауыстырып қосқыш
  • іс
  • үзіліс
  • әдепкі

Цикл конструкцияларына қатысты кілт сөздер:

  • істеу
  • әзірше
  • үзіліс
    *жалғастыру
  • үшін

Шарт мәлімдемелері

if мәлімдемесі

if операторын қолданатын шарт конструкциясы келесідей құрылады:

int x = 56;

bool check_x()
{
    if (x > 0)
        return true;
    return false;
}  

Бұл жағдайда шарт жақшаға if операторынан кейін қойылады. Бұл конструкцияда return true; коды, егер x 0-ден үлкен болса, орындалады. Келесі жол қайтару жалған; енді шарт орындалғанда орындалатын кодқа сілтеме жасамайды. Шарт конструкцияларында бұл шарт орындалғанда, егер код бұйра жақшаға жиектелмесе, яғни шарт бойынша орындалатын кодтың денесі құрылмаса, тек бір ғана код жолы орындалады. Екі код опциясын қарастырыңыз:

Бірінші нұсқа:

int x = 56;

bool check_x()
{
    if (x > 0)
        x = 0;
        return true;
    return false;
}  

Бұл кодта return true; әрқашан орындалады, өйткені тек x = 0; жолы шарт бойынша орындалатын кодқа жатады.

Екінші нұсқа:

int x = 56;

bool check_x()
{
    if (x > 0)
    {
        x = 0;
        return true;
    }
    return false;
}  

Бұл кодта true true; тек x > 0 шарты ақиқат болса ғана орындалады.

басқа оператор

else операторы if операторымен бірге шарттар тізбегін құру үшін қолданылады.

int x = 56;

bool check_x()
{
    if (x > 0)
    {
        x = 0;
        return true;
    }
    else if (x < 0)
    {
        x = 0;
        return false;
    }
    else
    {
        return false;
    }
}

else операторы алдыңғы шарт орындалмаған жағдайда жаңа шартты қосу үшін де – else if. конструкциясын немесе алдыңғы шарттар орындалмаған жағдайда шарттар тізбегіндегі соңғы код ретінде де пайдаланылуы мүмкін. Сондай-ақ, егер код бір жолға сәйкес келсе, код денесі үшін бұйра жақшаларды қолданбауға болады.

Мәлімдемелердің ауысуы, регистр, үзіліс, әдепкі

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

int x = 100;

bool check_x()
{
    switch (x)  
    {
        case 0:
            return true;
        case 50:
            x = 0:
            break;
        case 100:
            return false;
        default:
            return false;
    }

Жоғарыда келтірілген кодта x айнымалысының 0, 50, 100 сандарына теңдігі тексеріледі. default операторы шарттардың ешқайсысы сәйкес келмесе, орындалатын кодты таңдайды. Сондай-ақ, жағдай 50: бар код блогында break операторы қосылғанына назар аударыңыз, бұл мәлімдеме шарттан шығады, ал return операторы функциядан шығады. Егер үзіліс операторын қоспасаңыз, онда кодтың орындалуы жағдай 100: блок: . ауыстырып-қосу жағдайы конструкциясының бұл мүмкіндігінің арқасында сізге қажет шарттарды біріктіруге болады. бірдей кодты орындау үшін. Мысалы:

int x = 100;

bool check_x()
{
    switch (x)  
    {
        case 0:
        case 50:
        case 100:
            return true;
        default:
            return false;
    }
}

Осылайша, 0, 50, 100-ге тең x үшін функция ақиқат мәнін қайтарады, ал қалған барлық мәндер үшін функция жалған мәнін қайтарады.

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

int x = 100;

int check_x()
{
    switch (x)  
    {
        case 0:
        {
            int y = 1;
            return y;
        }
        case 50:
        {
            int y = 2;
            return y;
        }
        case 100:
        {
            int y = 3;
            return y;
        }
        default:
            return x;
    }
}

Осылайша, қолдану аясын шектеу арқылы біз жағдай жағдайында бірдей атпен айнымалыларды пайдалану мүмкіндігін аламыз. Бірақ бұйра жақшалармен шектелген аумақтан тыс, бұл жағдайда y айнымалысы болмайтынын ұмытпаңыз.

Цикл мәлімдемелері

while операторы

while операторы шарт орындалғанша кодты өз денесінде қайталайды. Мысалы:

int i = 0;

while (i < 10)
{
    i = i + 1;
}

Бұл кодта цикл орындалғаннан кейін i 10-ға тең болады.

мәлімдеме жасаңыз

do операторы while операторымен бірге пайдаланылады және циклдің шарты тексерілгенге дейін цикл денесін кем дегенде бір рет орындауға мүмкіндік береді. Мысалы:

int i = 15;

do
{
    i = i - 5;
    std::cout << i << std::endl;
}
while (i > 0  && i < 13);

Бұл кодта I айнымалысы бастапқыда шартқа сәйкес келмейді және әдеттегі while циклінде цикл денесінің коды орындалмады, бірақ мұнда do-while циклі қолданылғандықтан, тексеру цикл денесі болғаннан кейін жүргізіледі. орындалды. Нәтижесінде std::cout шығысы келесідей болады:

10
5
0

Неліктен шығыста 0 бар, сіз сұрай аласыз ба? Өйткені, ол шартқа сай келмейді. Тағы да, өйткені тексеру цикл денесінде кодты орындағаннан кейін орындалады. Яғни, циклдің денесі орындалды, содан кейін тексеру орындалды, нәтижесінде цикл өз жұмысын аяқтайды.

үзіліс мәлімдемесі

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

int i = 15;

while (i < 50)
{
    if (i < 0)
    {
        break;
    }
    i = i - 5;
}

Бұл жасанды мысалда i айнымалысының өсудің орнына азаюына байланысты мәңгілік цикл пайда болады және цикл шартына сәйкес шығу тек i 50-ден үлкен болса ғана орындалады. Бірақ break операторының арқасында және i айнымалысының теріс мәніне арналған сынақ бағдарламасының орындалуы i 0-ден аз болған кезде бұл циклден шығады.

мәлімдемені жалғастыру

Бұл мәлімдеме циклдің итерациясын үзуге және циклдің негізгі бөлігіндегі барлық кодты орындамас бұрын циклдің жаңа итерациясын бастауға мүмкіндік береді. Мысалы:

int i = 0;

while (i < 5)
{
    if (i == 3)
    {
        i = i + 1;
        continue;
    }

    std::cout << i << std::endl;
    i = i + 1;
}

Бұл кодты орындаған кезде біз келесі нәтижені аламыз:

0
1
2
4

Яғни, 3 санының шығуы өткізіп жібереді.

for мәлімдемесі

for операторы бар циклдер айнымалылардың инициализациясын, шартын және осы айнымалылардың өзгеруін біріктіруге мүмкіндік береді.

Яғни, келесі while циклі

int i = 0;

while (i < 10)
{

Келесі for цикліне баламалы болады:

for (int i = 0; i < 10; i++)
{
    // ToDo Something
}

Бұл циклдің артықшылығы I айнымалысы for циклінің жергілікті ауқымында болады.

for циклдерін бір түрдегі бірнеше айнымалылармен инициализациялауға болады. Мысалы:

for (int i = 0, *p = &i; i < 9; i += 2) {
    std::cout << i << ':' << *p << ' ';
}

Сондай-ақ, шарт айнымалының мәлімдемесі, инициализациясы болуы мүмкін. Мысалы:

char cstr[] = "Hello";
for (int n = 0; char c = cstr[n]; ++n) {
    std::cout << c;
}

C++11 стандартын ескере отырып, auto операторын айнымалы тип ретінде пайдалануға болады, ол инициализатордан айнымалының түрін шығаруға мүмкіндік береді:

std::vector<int> v = {3, 1, 4, 1, 5, 9};
for (auto iter = v.begin(); iter != v.end(); ++iter) {
    std::cout << *iter << ' ';
}

Сондай-ақ қызықты сәт - инициализатор, шарт және өзгерту блогы өрнек болуы мүмкін:

int n = 0;
for (std::cout << "Loop start\n";
     std::cout << "Loop test\n";
     std::cout << "Iteration " << ++n << '\n')
{
    if(n > 1)
        break;
}

C++ 11 стандартынан бастап, for циклдері итерацияны қолдайтын контейнерлерді қайталау мүмкіндігіне ие. Мысалы, стандартты кітапханадағы векторлық контейнер:

std::vector<int> v = {0, 1, 2, 3, 4, 5};

for (const int& i : v) 
    std::cout << i << ' ';

Бұл кодта цикл құрылымы келесідей:

for (извлекаемый из контейнера при каждой итерации объект : контейнер)
{
    // Тело цикла
}

Ауқымға негізделген циклдер автоматты мәлімдемені де қолдайды. Мысалы:

std::vector<int> v = {0, 1, 2, 3, 4, 5};

for (auto& i : v) 
    std::cout << i << ' ';
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
OI
  • Ora Iro
  • Жел. 24, 2024, 6:38 Т.Ж.

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:40ұпай,
  • Бағалау ұпайлары-8
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:50ұпай,
  • Бағалау ұпайлары-4
m
  • molni99
  • Қаз. 26, 2024, 1:37 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:80ұпай,
  • Бағалау ұпайлары4
Соңғы пікірлер
ИМ
Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectМаусым 4, 2022, 3:49 Т.Ж.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9AnonimҚаз. 25, 2024, 9:10 Т.Ж.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Бізді әлеуметтік желілерде бақылаңыз