1 ©Павловская Т.А. (СПбГУ ИТМО) Управляющие операторы языка высокого уровня Реализуют логику выполнения программы: следование ветвление цикл передача управления.

Презентация:



Advertisements
Похожие презентации
1 ©Павловская Т.А. (СПбГУ ИТМО) Управляющие операторы языка высокого уровня Реализуют логику выполнения программы: следование ветвление цикл передача управления.
Advertisements

1 ©Павловская Т.А. (СПбГУ ИТМО) Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
©ρŧą Базовые конструкции языка.
Лекция 7. Структура языка С/С++. Операторы ветвления: условный оператор if. Полное ветвление. Неполное ветвление. Оператор множественного выбора switch.
1 ©Павловская Т.А. Язык С# Курс «С#. Программирование на языке высокого уровня» Павловская Т.А.
Операторы языка с++. Операторы в языке C++ предназначены для описания действий. Любой оператор может быть помечен меткой. Операторы отделяются друг от.
Глава 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор присваивания Простой и составной операторы Условный оператор Оператор множественного выбора Оператор цикла с предусловием.
Обработка исключительных ситуаций Исключительная ситуация (исключение) – это ошибка, возникающая во время выполнения программы. Например, ошибка работы.
Лекция 8. Структура языка С/С++. Циклы с предусловием и постусловием. Реализация циклов с помощью операторов ветвления и передачи управления. Операторы.
Переменные и операторы УРОК 2. Переменные ПЕРЕМЕННАЯ – ?... контейнер для хранения данных. Переменная имеет имя – это….? последовательность букв, цифр.
1 Программирование на языке Паскаль Ветвления. 2 Разветвляющиеся алгоритмы Задача. Ввести два целых числа и вывести на экран наибольшее из них. Идея решения:
Министерство образования Республики Беларусь Белорусский государственный университет Управляющие структуры языков программирования.
Повторение действий в turbo pascal. Циклы.
Тест классы По программированию Pascal.
Операторы языка Си Лекция 5.
Тема: Управление потоком в PHP Изучить возможности языка PHP при решении задач, требующих использования условного оператора. Рассмотреть примеры управления.
1 Программирование на языке Паскаль Циклы. 2 Цикл – это многократное выполнение одинаковой последовательности действий. цикл с известным числом шагов.
Лекция 4 Программирование на Паскале. Элементы языка Турбо Паскаль 7.0. Типы данных. Управляющие конструкции.
Лекция 4 Инструкции. Инструкции С++ инструкция: объявление ; выражение opt ; { последовательность_инструкций opt } if ( условие ) инструкция if ( условие.
Занятие 2. Конструкции принятия решений. Конструкции принятия решений позволяют приложениям проверять условия и выбирать направление действий. Другим.
Транксрипт:

1 ©Павловская Т.А. (СПбГУ ИТМО) Управляющие операторы языка высокого уровня Реализуют логику выполнения программы: следование ветвление цикл передача управления

©Павловская Т.А. (СПбГУ ИТМО) 2 Блок (составной оператор) Блок последовательность операторов, заключенная в операторные скобки: begin end – в Паскале { } - в С-подобных языках Блок воспринимается компилятором как один оператор и может использоваться всюду, где синтаксис требует одного оператора, а алгоритм нескольких. Блок может содержать один оператор или быть пустым.

©Павловская Т.А. (СПбГУ ИТМО) 3 Оператор «выражение» Любое выражение, завершающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении выражения. i++; // выполняется операция инкремента a *= b + c; // выполняется умножение с присваиванием fun( i, k ); // выполняется вызов функции

©Павловская Т.А. (СПбГУ ИТМО) 4 Пустой оператор пустой оператор ; используется, когда по синтаксису оператор требуется, а по смыслу нет: while ( true ); Это цикл, состоящий из пустого оператора (бесконечный) ;;; Три пустых оператора

5 ©Павловская Т.А. (СПбГУ ИТМО) Операторы ветвления: развилка (if) переключатель (switch)

©Павловская Т.А. (СПбГУ ИТМО) 6 Условный оператор if if ( a < 0 ) b = 1; if ( a d || a == 0)) ++b; else {b *= a; a = 0; } if ( a < b ) if ( a < c ) m = a; else m = c; else if ( b < c ) m = b; else m = c; if ( выражение ) оператор_1; [else оператор_2;]

©Павловская Т.А. (СПбГУ ИТМО) 7 Пример x y using System; namespace ConsoleApplication1 { class Class1 { static void Main() { Console.WriteLine( "Введите координату x" ); double x = Convert.ToDouble(Console.ReadLine() ); Console.WriteLine( "Введите координату у" ); double y = double.Parse(Console.ReadLine() ); if ( x * x + y * y

©Павловская Т.А. (СПбГУ ИТМО) 8 Пример x y 1 -1 if ( x < -2 ) y = 0; if ( x >= -2 && x < -1 ) y = -x - 2; if ( x >= -1 && x < 1 ) y = x; if ( x >= 1 && x < 2 ) y = -x + 2; if ( x >= 2 ) y = 0; if ( x -2 ) y = -x - 2; if ( x > -1 ) y = x; if ( x > 1 ) y = -x + 2; if ( x > 2 ) y = 0;

©Павловская Т.А. (СПбГУ ИТМО) 9 Проверка вещественных величин на равенство Из-за погрешности представления вещественных значений в памяти следует ее избегать, вместо этого лучше сравнивать модуль разности с некоторым малым числом. float a, b; … if ( a == b ) … // не рекомендуется! if ( Math.Abs(a - b) < 1e-6 ) … // надежно! Значение величины, с которой сравнивается модуль разности, следует выбирать в зависимости от решаемой задачи и точности участвующих в выражении переменных. Снизу эта величина ограничена определенной в классах Single и Double константой Epsilon. Это минимально возможное значение переменной такое, что Epsilon != 1.0

©Павловская Т.А. (СПбГУ ИТМО) 10 Оператор выбора switch switch ( выражение ){ case константное_выражение_1: [ список_операторов_1 ] case константное_выражение_2: [ список_операторов_2 ] case константное_выражение_n: [ список_операторов_n ] [ default: операторы ] }

©Павловская Т.А. (СПбГУ ИТМО) 11 Пример: Калькулятор на четыре действия using System; namespace ConsoleApplication1 { class Class1 { static void Main() { Console.WriteLine( "Введите 1й операнд:" ); double a = double.Parse(Console.ReadLine()); Console.WriteLine( "Введите знак" ); char op = (char)Console.Read(); Console.ReadLine(); Console.WriteLine( "Введите 2й операнд:" ); double b = double.Parse(Console.ReadLine()); double res = 0; bool ok = true ; switch (op) { case '+' : res = a + b; break; case '-' : res = a - b; break; case '*' : res = a * b; break; case '/' : res = a / b; break; default : ok = false; break; } if (ok) Console.WriteLine( "Результат: " + res ); else Console.WriteLine( "Недопустимая операция" ); }}}

12 ©Павловская Т.А. (СПбГУ ИТМО) Операторы цикла

©Павловская Т.А. (СПбГУ ИТМО) 13 Структура оператора цикла Усл-е Начальные значения Тело цикла Модиф-я параметра Усл-е Начальные значения Тело цикла Модиф-я параметра

©Павловская Т.А. (СПбГУ ИТМО) 14 Цикл с предусловием while ( выражение ) оператор using System; namespace ConsoleApplication1 { class Class1 { static void Main() { double Xn = -2, Xk = 12, dX = 2, t = 2, y; Console.WriteLine( "| x | y |" ); double x = Xn; while ( x

©Павловская Т.А. (СПбГУ ИТМО) 15 Цикл с постусловием do оператор while выражение; using System; namespace ConsoleApplication1 { class Class1 { static void Main() { char answer; do { Console.WriteLine( "Купи слоника, а?" ); answer = (char) Console.Read(); Console.ReadLine(); } while ( answer != 'y' ); }

©Павловская Т.А. (СПбГУ ИТМО) 16 Цикл с параметром for ( инициализация; выражение; модификации ) оператор; int s = 0; for ( int i = 1; i

©Павловская Т.А. (СПбГУ ИТМО) 17 using System; namespace ConsoleApplication1 { class Class1 { static void Main() { double Xn = -2, Xk = 12, dX = 2, t = 2, y; Console.WriteLine( "| x | y |"; for ( double x = Xn; x

©Павловская Т.А. (СПбГУ ИТМО) 18 Рекомендации по написанию циклов не забывать о том, что если в теле циклов while и for требуется выполнить более одного оператора, нужно заключать их в блок; убедиться, что всем переменным, встречающимся в правой части операторов присваивания в теле цикла, до этого присвоены значения, а также возможно ли выполнение других операторов; проверить, изменяется ли в теле цикла хотя бы одна переменная, входящая в условие продолжения цикла; предусматривать аварийный выход из итеративного цикла по достижению некоторого предельно допустимого количества итераций.

19 ©Павловская Т.А. (СПбГУ ИТМО) Передача управления

©Павловская Т.А. (СПбГУ ИТМО) 20 Передача управления оператор break завершает выполнение цикла, внутри которого записан; оператор continue выполняет переход к следующей итерации цикла; оператор return выполняет выход из функции, внутри которой он записан; оператор throw генерирует исключительную ситуацию; оператор goto выполняет безусловную передачу управления

©Павловская Т.А. (СПбГУ ИТМО) 21 Пример: вычисление суммы ряда Написать программу вычисления значения функции sin с помощью степенного ряда с точностью по формуле:

©Павловская Т.А. (СПбГУ ИТМО) 22 using System; namespace ConsoleApplication1 { class Class1 { static void Main() { double e = 1e-6; const int iterLimit = 500; Console.WriteLine( "Введите аргумент:" ); double x = Convert.ToDouble(Console.ReadLine()); Пример: вычисление суммы ряда bool error = false; // признак ошибки double c = x, y = c; // член ряда и сумма ряда for ( int n = 1; Math.Abs(c) > e; n++ ) { c *= - x * x / ((2 * n ) * ( 2 * n + 1 )); y += c; if ( n > iterLimit ) { error = true; break; } } if ( error ) Console.WriteLine( "Ряд расходится" ); else Console.WriteLine( "Сумма ряда - " + y ); }}} end.

©Павловская Т.А. (СПбГУ ИТМО) 23 Оператор return завершает выполнение функции и передает управление в точку ее вызова: return [ выражение ]; Оператор goto goto метка; В теле той же функции должна присутствовать ровно одна конструкция вида: метка: оператор; goto case константное_выражение; goto default;

24 ©Павловская Т.А. (СПбГУ ИТМО) Обработка исключений Исключительная ситуация, или исключение это возникновение непредвиденного или аварийного события, которое может порождаться некорректным использованием аппаратуры. Например, это деление на ноль или обращение по несуществующему адресу памяти. Исключения позволяют логически разделить вычислительный процесс на две части обнаружение аварийной ситуации и ее обработка.

©Павловская Т.А. (СПбГУ ИТМО) 25 Возможные действия при ошибке прервать выполнение программы; возвратить значение, означающее «ошибка»; вывести сообщение об ошибке и вернуть вызывающей программе некоторое приемлемое значение, которое позволит ей продолжать работу; выбросить исключение Исключения генерирует либо система выполнения, либо программист с помощью оператора throw.

©Павловская Т.А. (СПбГУ ИТМО) 26 Некоторые стандартные исключения ИмяПояснение ArithmeticException Ошибка в арифметических операциях или преобразованиях (является предком DivideBeZeroException и OverFlowException ) DivideByZeroException Попытка деления на ноль FormatException Попытка передать в метод аргумент неверного формата IndexOutOfRangeException Индекс массива выходит за границы диапазона InvalidCastException Ошибка преобразования типа OutOfMemoryException Недостаточно памяти для создания нового объекта OverFlowException Переполнение при выполнении арифметических операций StackOverFlowException Переполнение стека

©Павловская Т.А. (СПбГУ ИТМО) 27 Оператор try Служит для обнаружения и обработки исключений. Оператор содержит три части: контролируемый блок составной оператор, предваряемый ключевым словом try. В контролируемый блок включаются потенциально опасные операторы программы. Все функции, прямо или косвенно вызываемые из блока, также считаются ему принадлежащими; один или несколько обработчиков исключений блоков catch, в которых описывается, как обрабатываются ошибки различных типов; блок завершения finally, выполняемый независимо от того, возникла ли ошибка в контролируемом блоке. Синтаксис оператора try: try блок [ catch-блоки ] [ finally-блок ]

©Павловская Т.А. (СПбГУ ИТМО) 28 Механизм обработки исключений Обработка исключения начинается с появления ошибки. Функция или операция, в которой возникла ошибка, генерируют исключение; Выполнение текущего блока прекращается, отыскивается соответствующий обработчик исключения, и ему передается управление. В любом случае (была ошибка или нет) выполняется блок finally, если он присутствует. Если обработчик не найден, вызывается стандартный обработчик исключения.

©Павловская Т.А. (СПбГУ ИТМО) 29 Пример 1: try { // Контролируемый блок } catch ( OverflowException e ) { // Обработка переполнения } catch ( DivideByZeroException ) { // Обработка деления на 0 } catch { // Обработка всех остальных исключений }

©Павловская Т.А. (СПбГУ ИТМО) 30 Пример 2: проверка ввода static void Main() { try { Console.WriteLine( "Введите напряжение:" ); double u = double.Parse( Console.ReadLine() ); Console.WriteLine( "Введите сопротивление:" ); double r = double.Parse(Console.ReadLine() ); double i = u / r; Console.WriteLine( "Сила тока - " + i ); } catch ( FormatException ) { Console.WriteLine( "Неверный формат ввода!" ); } catch // общий случай { Console.WriteLine( "Неопознанное исключение" ); } }

©Павловская Т.А. (СПбГУ ИТМО) 31 Оператор throw throw [ выражение ]; Пример: throw new DivideByZeroException(); Параметр должен быть объектом, порожденным от стандартного класса System.Exception. Этот объект используется для передачи информации об исключении его обработчику.

©Павловская Т.А. (СПбГУ ИТМО) 32 Базовые конструкции структурного программирования Целью использования базовых конструкций является получение программы простой структуры. Такую программу легко читать, отлаживать и при необходимости вносить в нее изменения. Особенностью базовых конструкций является то, что любая из них имеет только один вход и один выход, поэтому конструкции могут вкладываться друг в друга

©Павловская Т.А. (СПбГУ ИТМО) 33 Рекомендации по программированию Главная цель, к которой нужно стремиться, получить легко читаемую программу возможно более простой структуры. Создание программы надо начинать с определения ее исходных данных и результатов. Следующий шаг записать на естественном языке (возможно, с применением обобщенных блок-схем), что именно и как должна делать программа. При кодировании необходимо помнить о принципах структурного программирования: программа должна состоять из четкой последовательности блоков базовых конструкций. Имена переменных должны отражать их смысл. Переменные желательно инициализировать при их объявлении Следует избегать использования в программе чисел в явном виде. Программа должна быть «прозрачна». Для записи каждого фрагмента алгоритма необходимо использовать наиболее подходящие средства языка.

©Павловская Т.А. (СПбГУ ИТМО) 34 В программе полезно предусматривать реакцию на неверные входные параметры. Необходимо предусматривать печать сообщений или выбрасывание исключения в тех точках программы, куда управление при нормальной работе программы передаваться не должно. Сообщение об ошибке должно быть информативным и подсказывать пользователю, как ее исправить. После написания программу следует тщательно отредактировать Комментарии должны представлять собой правильные предложения без сокращений и со знаками препинания

©Павловская Т.А. (СПбГУ ИТМО) 35 Форматирование программы Вложенные блоки должны иметь отступ в 3–5 символов Форматируйте текст по столбцам везде, где это возможно: string buf = "qwerty"; double ex = ; int number = 12; byte z = 0;... if ( done ) Console.WriteLine( "Сумма ряда - " + y ); else Console.WriteLine( "Ряд расходится" );... if ( x >= 0 && x < 10 ) y = t * x; else if ( x >= 10 ) y = 2 * t; else y = x; После знаков препинания должны использоваться пробелы: f=a+b; // плохо! Лучше f = a + b;

©Павловская Т.А. (СПбГУ ИТМО) 36 "Вопрос «Как писать хорошие программы на С++?» напоминает вопрос «Как писать хорошую английскую прозу?». Есть два совета: «Знай, что хочешь сказать» и «Тренируйся. Подражай хорошему стилю». Оба совета годятся как для С++, так и для английской прозы, и обоим одинаково сложно следовать." Б. Страуструп