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 хостинг.

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

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз
Г

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

  • Нәтиже:66ұпай,
  • Бағалау ұпайлары-1
t

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

  • Нәтиже:33ұпай,
  • Бағалау ұпайлары-10
t

Qt - Тест 001. Сигналы и слоты

  • Нәтиже:52ұпай,
  • Бағалау ұпайлары-4
Соңғы пікірлер
G
GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssrАқп. 8, 2024, 6:43 Т.Қ.
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
F
FynjyШілде 22, 2024, 4:15 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCT
BlinCTМаусым 25, 2024, 1 Т.Ж.
Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
BlinCT
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
Evgenii Legotckoi
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

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