Главная страница
Навигация по странице:

  • Основные вопросы

  • Следование, ветвление и цикл называют базовыми конструкциями структурного программирования. Идея структурного программирования

  • Следованием

  • Оператор «выражение»

  • Операторы ветвления Условный оператор if

  • \n

  • Вопросы для самоконтроля

  • Лекция Базовые конструкции языков программирования. Лекция 4 Базовые конструкции языков программирования. Лекции 4. Базовые конструкции современных языков программирования Основные вопросы Идея структурного программирования


    Скачать 108 Kb.
    НазваниеЛекции 4. Базовые конструкции современных языков программирования Основные вопросы Идея структурного программирования
    АнкорЛекция Базовые конструкции языков программирования
    Дата27.09.2022
    Размер108 Kb.
    Формат файлаdoc
    Имя файлаЛекция 4 Базовые конструкции языков программирования.doc
    ТипЛекции
    #699113

    Тема лекции №4. Базовые конструкции современных языков программирования
    Основные вопросы:

    1. Идея структурного программирования

    2. Оператор «выражение»

    3. Операторы ветвления


    В теории программирования доказано, что программу для решения задачи любой сложности можно составить только из трех структур, называемых следованием, ветвлением и циклом. Этот результат установлен Боймом и Якопини еще в 1966 году путем доказательства того, что любую программу можно преобразовать в эквивалентную, состоящую только из этих структур и их комбинаций.

    Следование, ветвление и цикл называют базовыми конструкциями структурного программирования.

    Идея структурного программирования

    Как уже было отмечено выше, любую программу можно составить только из структур трех типов: следования, ветвления и цикла (это базовые конструкции).

    • Следованием называется конструкция, представляющая собой последовательное выполнение двух или более операторов (простых или составных).

    • Ветвление задает выполнение либо одного, либо другого оператора в зависимости от выполнения какого-либо условия.

    • Цикл задает многократное выполнение оператора.



    Особенностью базовых конструкций является то, что любая из них имеет только один вход и один выход, поэтому конструкции могут вкладываться друг в друга произвольным образом, например, цикл может содержать следование из двух ветвлений, каждое из которых включает вложенные циклы.

    Идеей использования базовых конструкций является получение программы простой структуры. Такую программу легко читать (а программы чаще приходится читать, чем писать), отлаживать и при необходимости вносить в нее изменения. Структурное программирование часто называли «программированием без goto», и в этом есть большая доля правды: частое использование операторов передачи управления в произвольные точки программы затрудняет прослеживание логики ее работы. С другой стороны, никакие принципы нельзя возводить в абсолют, и есть ситуации, в которых использование goto оправдано и приводит, напротив, к упрощению структуры программы.

    В большинстве языков высокого уровня существует несколько реализаций базовых конструкций; в C++ есть три вида циклов и два вида ветвлений (на два и на произвольное количество направлений). Они введены для удобства программирования, и в каждом случае надо выбирать наиболее подходящие средства. Главное, о чем нужно помнить даже при написании самых простых программ, — что они должны состоять из четкой последовательности блоков строго определенной конфигурации. «Кто ясно мыслит, тот ясно излагает» — практика давно показала, что программы в стиле «поток сознания» нежизнеспособны, не говоря о том, что они просто некрасивы.
    Рассмотрим операторы языка, реализующие базовые конструкции структурного программирования в C++.
    Оператор «выражение»

    Любое выражение, завершающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении выражения. Частным случаем выражения является пустой оператор ; (он используется, когда по синтаксису оператор требуется, а по смыслу — нет).
    Примеры:

    i++; // выполняется операция инкремента
    а* = b + с; // выполняется умножение с присваиванием
    fun(i, к); // выполняется вызов функции

    Операторы ветвления

    Условный оператор if

    Условный оператор if используется для разветвления процесса вычислений на два направления. Формат оператора:

    if( выражение ) оператор_1; [else оператор_2;]

    Сначала вычисляется выражение, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю (имеет значение true), выполняется первый оператор, иначе — второй. После этого управление передается на оператор, следующий за условным.

    Одна из ветвей может отсутствовать, логичнее опускать вторую ветвь вместе с ключевым словом else. Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок, иначе компилятор не сможет понять, где заканчивается ветвление. Блок может содержать любые операторы, в том числе описания и другие условные операторы (но не может состоять из одних описаний). Необходимо учитывать, что переменная, описанная в блоке, вне блока не существует.
    Примеры:
    if (а<0) b = 1; //1
    if (ad || a==0)) b++; else {b *= a; a = 0;} //2
    if (a
    if (a++) b++; // 4
    if (b>a) max = b; else max = a; //5
    В примере 1 отсутствует ветвь else. Подобная конструкция называется «пропуск оператора», поскольку присваивание либо выполняется, либо пропускается в зависимости от выполнения условия.

    Если требуется проверить несколько условий, их объединяют знаками логических операций. Например, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие а<Ь и одно из условий в скобках. Если опустить внутренние скобки, будет выполнено сначала логическое И, а потом — ИЛИ.
    Оператор в примере 3 вычисляет наименьшее значение из трех переменных. Фигурные скобки в данном случае не обязательны, так как компилятор относит часть else к ближайшему if.
    Пример 4 напоминает о том, что хотя в качестве выражений в операторе if чаще всего используются операции отношения, это не обязательно.

    Конструкции, подобные оператору в примере 5, пройде и нагляднее записывать в виде условной операции (в данном случае: max = (b > а) ? b : а;).
    Пример. Производится выстрел по мишени, изображенной на рис. ниже. Определить количество очков.

    #include
    int main(){
    float x, у: int kol;
    cout << "Введите координаты выстрела\n"; cin >> x >> у;
    if ( x*x + y*y < 1 ) kol = 2;
    else if( x*x + y*y < 4 ) kol = 1:
    else коl = 0;
    cout << "\n Очков: " << kol;
    return 0;
    }

    Тип переменных выбирается исходя из их назначения. Координаты выстрела нельзя представить целыми величинами, так как это приведет к потере точности результата, а счетчик очков не имеет смысла описывать как вещественный. Даже такую простую программу можно еще упростить с помощью промежуточной переменной и записи условия в виде двух последовательных, а не вложенных, операторов if (обратите внимание, что в первом варианте значение переменной коl присваивается ровно один раз, а во втором — от одного до трех раз в зависимости от выполнения условий):

    #1nc!ucle
    int main(){
    float x, у, temp; int коl;
    cout << "Введите координаты выстрела\n"; cin >> X >> у;
    temp = x * x + y * y;
    коl = 0;
    if (temp < 4 ) коl = 1;
    if (temp < 1 ) kol = 2:
    cout << "\n Очков: " << kol;
    return 0;
    }

    Если какая-либо переменная используется только внутри условного оператора, рекомендуется объявить ее внутри скобок, например:

    if (int i = fun(t)) a -= 1; else a += 1;

    Объявление переменной в тот момент, когда она требуется, то есть когда ей необходимо присвоить значение, является признаком хорошего стиля и позволяет избежать случайного использования переменной до ее инициализации. Объявлять внутри оператора if можно только одну переменную. Область ее видимости начинается в точке объявления и включает обе ветви оператора.
    Вопросы для самоконтроля:

    1. Функциональное программирование?

    2. Процедурное (императивное) программирование?

    3. Динамический язык?

    4. Что такое объектно-ориентированный язык программирования?


    написать администратору сайта