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

  • Общие сведения

  • Пример2 (вложение условных операторов)

  • Этапы решения задачи

  • Задачи для индивидуального решения

  • Лабораторная работа № 3 Программирование структур ветвления с применением оператора множественной выборки Цель работы

  • !!! МЕТОДИЧКА_Срр_Часть1. Учебнометодическое пособие предназначено для студентов, изучающих дисциплину Программирование


    Скачать 2.01 Mb.
    НазваниеУчебнометодическое пособие предназначено для студентов, изучающих дисциплину Программирование
    Анкорcxfsd
    Дата04.03.2022
    Размер2.01 Mb.
    Формат файлаpdf
    Имя файла!!! МЕТОДИЧКА_Срр_Часть1.pdf
    ТипУчебно-методическое пособие
    #382624
    страница2 из 6
    1   2   3   4   5   6

    Лабораторная работа №2
    Программирование разветвляющихся алгоритмов
    Цель работы: научиться правильно использовать условный оператор if; научиться составлять программы решения задач на разветвляющиеся алгоритмы.
    Общие сведения
    Алгоритм называется разветвляющимся, если последовательность шагов в нем определяется некоторым условием. Выполнение конкретной ветви алгоритма определяется входными данными задачи.
    Ветвление осуществляется с помощью оператора if, который имеет следующий формат: if (выражение) оператор-1; [else оператор-2;]
    Выполнение оператора if начинается с вычисления выражения.
    Далее работа этого оператора осуществляется по следующей схеме:

    если выражение истинно (т.е. отлично от нуля), то выполняется оператор-1;

    если выражение ложно (т.е. равно нулю),то выполняется оператор-2;

    если выражение ложно и отсутствует оператор-2 (в квадратные скобки заключена необязательная конструкция), то выполняется следующий за if оператор.
    Пример: if (i < j)i++; else {j = i-3; i++; }
    В данном примере показано, что на месте оператор-1, так же как и на месте оператор-2 могут находиться как простые, так и сложные конструкции.
    Если вторая часть оператора if отсутствует (else …), то оператор записан в неполной форме.
    Например: if (i < j)i++;
    Допускается использование вложенных операторов if. Для того, чтобы программа была более наглядной и удобной для чтения, целесообразно выделять операторы и конструкции во вложенных операторах if с помощью фигурных скобок (даже если они не требуются). При отсутствии фигурных скобок компилятор связывает каждое ключевое слово else с наиболее близким оператором if, для которого нет else.
    Примеры: if (t>b)
    { if (b < r) r=b;
    } else r=t;
    Если же в программе опустить фигурные скобки, стоящие после оператора if, то программа будет иметь следующий вид: if ( a>b ) if ( b < c ) t=b; else r=t;
    В этом случае else воспринимается как часть второго оператора if.
    В операторе ветвления, используемом в языке Си, для написания выражений используются следующие операции отношения:
    == равно
    != не равно
    > больше
    >= больше или равно
    < меньше
    <= меньше или равно

    В операциях отношения могут использоваться переменные целого, плавающего типа, а так же типа указателя, при этом в каждой операции могут участвовать переменные различных типов. Результатом операции будет 0 (ложь) или 1 (истина).
    Кроме арифметических операций языка С можно применять логические операции, к которым относятся:
    && – операция логического "И",
    || – операция логического "ИЛИ",
    ! – операция логического "НЕ".
    В логических операций могут использоваться переменные того же типа данных, что и в операциях отношения.
    Логические выражения вычисляются слева направо, при этом, если результата первого условия достаточно, чтобы определить результат всей операции, то остальные условия не вычисляются.
    В языке Си нет логического типа как в языке Паскаль. Вместо значений true и false в языке Си принято нулевое значение за истину, а не нулевое (чаще единица) – за ложь.
    Результат логических операций имеет целочисленный тип (int) и может принимать только одно из двух значений: 0 или 1.
    Например:
    3<5
    результат 1
    3>5
    результат 0
    6!=1 || 2>5
    результат 1
    8>2 && 4>5
    результат 0
    В языке Си имеется одна тернарная операция – операция «условие» (не путать с условным оператором), которая имеет следующий формат: операнд-1 ? операнд-2 : операнд-3;
    Операнд-1 может быть только целого, плавающего типа или указателем. Он оценивается с точки зрения его эквивалентности 0. Если операнд-1 не равен 0 (истина), то вычисляется операнд-2 и его значение является результатом операции. Если операнд-1 равен 0 (ложь), то вычисляется операнд-3 и его значение является результатом операции. Следует отметить, что вычисляется либо операнд-2, либо операнд-3
    , но не оба. Тип результата зависит от типов операнда-2 и операнда-3.
    Пример: max = (d<=b) ? b : d;
    Здесь переменной max присваивается максимальное значение переменных d и b.
    Каждый оператор, каждое определение и каждое описание в программе на языке
    Си завершает точка с запятой ";".
    Любое допустимое выражение, за которым следует ";", воспринимается как оператор.
    При выполнении арифметических и логических операций следует следить за приоритетами этих операций и порядком их вычисления (таблица 2.1).
    Наивысшим приоритетом в языке Си является приоритет равный 1. Операции с наибольшими приоритетами вычисляются первыми. Операции одного ранга имеют одинаковый приоритет, и если их в выражении несколько, то они выполняются в соответствии с правилом ассоциативности, либо слева направо, либо справа налево.

    Табл. 2.1 Приоритеты операций
    Ранг
    Операция
    Ассоциативность
    1
    () [] -> . справа налево
    2
    !

    -(смена знака) ++ -- &(адрес) * (тип) sizeof слева направо
    3
    * / % справа налево
    4
    + - справа налево
    5
    << >> справа налево
    6
    < <= >= > справа налево
    7
    == != справа налево
    8
    & справа налево
    9
    ^ справа налево
    10
    | справа налево
    11
    && справа налево
    12
    || справа налево
    13
    ? слева направо
    14
    = *= /= %= += -= &= ^= |= <<= >>= слева направо
    15
    , справа налево
    Использование оператора if рассмотрим на следующих примерах.
    Пример1: Ввести два целых числа и вывести на экран наибольшее из них.
    Идея решения: надо вывести на экран первое число, если оно больше второго, или второе, если оно больше первого. Составим схему алгоритма (рисунок 2.1).
    Окончательно программа имеет вид:
    #include using namespace std;
    #include int main()
    { float a, b, max; cout<<"a="; cin>>a; cout<<"b="; cin>>b; if (a>b) max = a; else max = b; cout<<"max="; cout< _getch(); return 0;
    }
    Рис.
    2.1. Полная форма ветвления
    Пример2 (вложение условных операторов): Дано действительное число а. Для функции f(a), график которой представлен на рисунке 2.2, вычислить значение f(a).
    Рис. 2.2. График функции

    Этапы решения задачи:
    1. Математическая модель: функция вычисляется по следующей формуле
    2. Составим общую схему алгоритма (рисунок 2.3).
    Рис. 2.3. Алгоритм решения задачи
    Детализируем блок «Определяем к какому промежутку относится x» (рисунок 2.4).
    Рис. 2.4. Ветвление блока
    Добавим блоки вычисления функции на каждом из промежутков (рисунок 2.5).

    Рис. 2.5. Блок определения промежутка для переменной x.
    Окончательный алгоритм представлен на рисунке 2.6.
    Рис. 2.6. Общая схема вычисления функции по заданному значению x

    Дальнейшая детализация не требуется. Переводим блок-схему на язык С++:
    #include using namespace std;
    #include int main(void)
    { float a, f; cout<<"a="; cin>>a; if (a<-1) f= -a-1; else if ((a>=-1) && (a<0)) f = a+1; else if ((a>=0) && (a<1)) f= -a+1; else f = a+1; cout<<"f="; cout< _getch(); return 0;
    }
    Реализовав данную программу в интегрированной среде программирования, получим результирующее окно, представленное на рисунке 2.7.
    Рис. 2.7. Окно выполнения задачи
    В завершение работы хотелось бы привести перечень служебных символов (табл.
    2.2), которые используются с одной стороны для организации процесса вычислений, а с другой – для передачи компилятору определенного набора инструкций.
    Таблица 2.2 Специальные символьные комбинации
    Комбинация
    Наименование
    \a
    Звонок
    \t
    Горизонтальная табуляция
    \n
    Переход на новую строку
    \v
    Вертикальная табуляция
    \r
    Возврат каретки
    \"
    Кавычки
    \'
    Апостроф
    \0
    Символ с кодом ноль
    \\
    Обратная дробная черта
    Примеры использования управляющего символа: cout << "Это строка один\nЭто строка два"; \\вывод двух строк cout << 1 << '\n' << 0 << '\n' << 0 << '\n' << 1 \\вывод каждого
    \\ из чисел 1, 0, 0 и 1, каждое на отдельной строке

    Задачи для индивидуального решения:
    1. Написать программу вычисления площади кольца. Программа должна проверять правильность исходных данных. Ниже представлен рекомендуемый вид экрана во время работы программы (данные, введенные пользователем, выделены полужирным шрифтом):
    Вычисление площади кольца.
    Введите радиус кольца (см) —> 3.5
    Радиус отверстия (см) —> 7
    Ошибка! Радиус отверстия не может быть больше радиуса кольца.
    2. Написать программу вычисления стоимости покупки с учетом скидки. Скидка в
    10% предоставляется, если сумма покупки больше 1000 руб. Ниже представлен рекомендуемый вид экрана во время работы программы:
    Вычисление стоимости покупки с учетом скидки.
    Введите сумму покупки и нажмите -> 1200
    Вам предоставляется скидка 10%
    Сумма покупки с учетом скидки: 1080.00 руб.
    3. Выяснить поместится ли квадрат со стороной А внутрь окружности радиусом R и если он не помещается, то выяснить поместится ли окружность внутрь квадрата.
    4. Заданы вещественные числа x и y. Определить и вывести на экран монитора номер квадранта декартовой системы координат, в котором расположена точка М(x,y).
    5. Проверить, можно ли из четырех отрезков, длины которых введены с клавиатуры, составить параллелограмм.
    Вариант 1 1.
    Переменные X, Y, Z имеют положительные значения. Определить, можно ли построить треугольник с длинами сторон X, Y, Z. Если можно, то какой он получится: прямоугольный, остроугольный или тупоугольный.
    2.
    Дано целое трехзначное число. Определить, все ли цифры этого числа различны.
    Вариант 2 1.
    Выяснить, принадлежит ли точка с координатами (x,y) области, ограниченной точкой начала координат и точкой с координатами x=3 и y=sqrt(x).
    2.
    Определить, являются ли значения целочисленных переменных N и М кратными 3. Если оба значения кратны 3, то вычислить их сумму, в противном случае - разность.
    Вариант 3 1.
    Выяснить, можно ли построить треугольник из отрезков с длинами a, b, c и если треугольник существует, выяснить является ли он тупоугольным или прямоугольным.
    2.
    Даны целые числа X, Y. Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а если равны, то единицей.
    Вариант 4 1.
    Даны три действительных числа. Выбрать из них те, которые принадлежат интервалу (1, 3).
    2.
    Даны действительные числа a, b, c и x, y. Выяснить, пройдет ли кирпич с ребрами a, b, c в прямоугольное отверстие со сторонами x и y.

    Вариант 5 1.
    Выяснить, поместится ли прямоугольник со сторонами А и В внутрь окружности радиусом R и если он не помещается, то выяснить поместится ли окружность внутрь квадрата.
    2.
    Даны значения a, b и c. Удвоить эти числа, если a>b>c, и заменить их абсолютными значениями, если это не так.
    Вариант 6 1.
    Определить, есть ли среди цифр заданного четырехзначного числа одинаковые.
    2.
    Заданы площади круга и квадрата. Определить поместится ли квадрат внутрь круга.
    Вариант 7 1.
    Два прямоугольника заданы длинами их сторон. Выяснить можно ли первый прямоугольник целиком поместить во втором. Стороны прямоугольников параллельны.
    2.
    Определить, какая из двух точек - M1(x1,y1) или M2(x2,y2) - расположена ближе к началу координат. Вывести на экран дисплея координаты этой точки.
    Вариант 8 1.
    Даны действительные числа x, y. Если x, y отрицательны, то каждое значение заменить его модулем; если отрицательное только одно из них, то оба значения увеличить на 0.5; если оба значения не отрицательны и ни одно из них не принадлежит отрезку [0.5, 2.0], то оба значения уменьшить в 10 раз; в остальных случаях x, y оставить без изменения.
    2.
    Выяснить, принадлежит ли точка с координатами (x,y) квадрату со стороной A и с центром в начале координат.
    Вариант 9 1.
    Определить, попадает ли точка M(x,y) в круг радиусом r и центром в точке (x0,y0).
    2.
    Написать программу вычисления стоимости покупки с учетом скидки.
    Скидка в 3% предоставляется в том случае, если сумма покупки больше
    500 руб., в 5% — если сумма больше 1000 руб.
    Рекомендуемый вид экрана во время работы программы:
    Вычисление стоимости покупки с учетом скидки.
    Введите сумму покупки и нажмите

    ->
    640
    Вам предоставляется скидка
    3%
    Сумма покупки с учетом скидки: 620.80 руб.
    Вариант 10 1.
    Даны два целых числа X и Y. Если X четное число, а Y не четное число, то оба эти числа заменить их модулями. Если X положительное нечетное число, а Y положительное четное число, то оба эти числа увеличить на 2.
    Во всех остальных случаях числа оставить без изменения.
    2.
    Две точки заданы на плоскости своими координатами, которые могут быть как декартовыми, так и полярными. Требуется вычислить расстояние между этими двумя точками.

    Лабораторная работа № 3
    Программирование структур ветвления с применением оператора множественной
    выборки
    Цель работы:
    1) изучить правила программирования ветвящихся алгоритмов с помощью оператора множественного выбора;
    2) получить практические навыки программирования задач с множественным ветвлением.
    Общие сведения:
    Кроме использования условного оператора, для осуществления выбора между двумя альтернативами в зависимости от входного значения можно использовать и оператор множественного выбора
    Синтаксис оператора switch: switch (выражение)
    { case константное выражение: оператор или группа операторов; break; case константное выражение: оператор или группа операторов; break; case константное выражение: оператор или группа операторов; break;
    … defaulf: оператор или группа операторов;
    }
    Результат вычисленного выражения сравнивается с каждым из константных выражений
    . Если находится совпадение, то управление передается оператору, связанному с данным case. Исполнение продолжается до конца тела оператора switch или пока не встретится оператор break, который передает управление из тела switch оператору, следующему за switch. Оператор или группа операторов, стоящий после ключевого слова default, выполняется, если выражение не соответствует ни одному из константных выражений в case.
    Константные выражения могут быть только целыми или символьными константами. Они является ключевыми для выбора из нескольких вариантов и должны быть уникальны. Каждый вариант начинается со слова case с последующим константным выражением.
    Помимо операторов, помеченных ключевым словом case, может быть, раздел со словом default.
    Схема выполнения оператора switch (отличающаяся от соответствующего оператора в языке программирования Pascal) следующая:

    вычисляется выражение в круглых скобках;

    вычисленные значения последовательно сравниваются с константными выражениями
    , следующими за ключевыми словами case;

    если одно из константных выражений совпадает со значением выражения, то управление передается на оператор, помеченный соответствующим ключевым словом case;

    если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default, а в случае его отсутствия управление передается на следующий после switch оператор.

    Ключевые слова case и default существенны только при начальной проверке, чтобы определить начальную точку выполнения тела оператора switch. Дальше выполняются все операторы от начального (определенного выражением) оператора до конца тела switch вне зависимости от ключевых слов, если только в каком-то операторе не встретится оператор break, который передаст управление из тела switch на следующий оператор за оператором switch.
    Пример: int i=2; switch (i)
    { case 1: i += 2; case 2: i *= 3; case 0: i /= 2; case 4: i -= 5; default: ;
    }
    Выполнение оператора switch начинается с оператора, находящегося после конструкции case 2. В результате вычислений переменной i присваивается значение 6, далее последовательно выполняются все операторы, стоящие ниже (строки case 0 и case 4
    ). В процессе вычислений переменная i изменит свое значение на 3, а затем на -2.
    За ключевым словом default стоит пустой оператор, который не изменяет значения переменной.
    Другой пример: Для двух переменных x и y посчитать выражения, в зависимости от типа операции ZNAC. char ZNAC; int x,y,z; switch (ZNAC)
    { case '+': x = y + z; break; case '-': x = y - z; break; case '*': x = y * z; break; case '/': x = u / z; break; default : ;
    }
    Оператор break завершает выполнение оператора switch и передает управления оператору, следующему за switch.
    Еще один пример: switch (c)
    { case `A': capa++; case `a': letter++; default: total++;
    } при с='A' инкрементируются переменные capa, letter, total, при c='a' – letter и total, при всех остальных значениях символьных констант – только total.
    Пример 1. Написать программу, которая по введенному с клавиатуры номеру дня недели выводит на экран название этого дня.
    #include using namespace std;
    #include int main(void)
    {
    int num; cout << "Enter number of a day of the week >"; cin >> num; // Ввод данных switch (num)
    // Выбор варианта
    { case 1: cout << "Monday" << endl; break; case 2: cout << "Tuesday" << endl; break; case 3: cout << "Wednesday" << endl; break; case 4: cout << "Thursday" << endl; break; case 5: cout << "Friday" << endl; break; case 6: cout << "Saturday" << endl; break; case 7: cout << "Sunday" << endl; break; default: cout << "Number is incorrect" << endl;
    }
    _getch(); return 0;
    }
    Реализовав данную программу в интегрированной среде программирования, получим результирующее окно, представленное на рисунке 3.1 (для номера недели 7).
    Рис. 3.1. Окно выполнения задачи
    Кроме того, в данной лабораторной работе (как преддверие к следующим работам) необходимо сказать несколько слов об объявлении переменных. Прочитайте данный раздел и используйте изложенные в нем сведения для выполнения этой и последующих работ.
    1   2   3   4   5   6


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