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

  • Лабораторная № 2 Линейный вычислительный процесс Линейным

  • Результат

  • Исходные данные

  • Тестовый пример

  • Индивидуальные задания Создать программу вычисления выражений и выполнить проверку средствами Excel. 1.

  • Тема 2 Разветвляющийся вычислительный процесс

  • Лабораторная работа № 3 Условный оператор Теория

  • Пример использования в инструкции

  • Многократные неравенства

  • Использование = вместо ==

  • Примеры Пример 1.Вычислить А : c c b a 2

  • Практикум ргппу 2017 3 Аннотация


    Скачать 3.14 Mb.
    НазваниеПрактикум ргппу 2017 3 Аннотация
    Дата10.05.2022
    Размер3.14 Mb.
    Формат файлаpdf
    Имя файлаShireva_CCPP.pdf
    ТипПрактикум
    #521016
    страница3 из 10
    1   2   3   4   5   6   7   8   9   10
    Тема № 1 Линейный вычислительный процесс
    Этапы разработки программы
    Разработка любой программы, может быть разбита на ряд этапов.
    1. Определение входных и выходных данных, требований к программе.
    На первом этапе определяются входные и выходные данные программы.
    2. Разработка алгоритма.
    На этом шаге производится определение последовательности действий, ведущих к решению задачи и запись их в виде блок-схемы.
    3. Кодирование (программирование).
    Третий этап - это перевод алгоритма на язык программирования и создание
    исходного текста программы. Программа на любом языке состоит из операторов - так называются отдельные действия, разрешенные в языке.
    4. Компиляция и отладка.
    Исходный текст не будет непосредственно исполняться компьютером - для работы программы ее требуется откомпилировать, т. е., перевести в машинный код.
    Программа, которую удалось откомпилировать, не обязательно работает правильно.
    Она может содержать ошибки, для выявления которых предназначен этап отладки - поиска ошибок в программе.
    Возможны программные ошибки трех видов:

    синтаксические (ошибки в правилах языка);

    алгоритмические (ошибки в логике программы);

    ошибки времени исполнения, возникающие в процессе работы запущенной программы.
    Компилятор способен найти только синтаксические ошибки, для выявления же алгоритмических ошибок служит этап тестирования программы. Ошибки времени исполнения возникают как результат некорректных действий пользователя, недопустимых операций над данными (например, попытки извлечь квадратный корень из отрицательного числа, поделить на ноль) или ошибок программного и аппаратного обеспечения ЭВМ
    5. Тестирование.
    Тестированием называют проверку правильности работы программы на наборах "пробных" (тестовых) данных с заранее известным результатом. Конечно же, тестирование всей программы сразу возможно лишь для несложных учебных задач. Реальные программы, как правило, тестируются "по частям" - отдельными функциями и модулями.
    Блок-схема
    Блок-схема– это последовательность блоков, предписывающих выполнение определенных операций, и связей между этими блоками. Внутри блоков указывается информация об операциях, подлежащих выполнению.
    Блоки соединяются линиями потоков. При соединении блоков следует использовать только вертикальные и горизонтальные линии потоков.
    Горизонтальные потоки, имеющие направление справа налево, и вертикальные

    32 потоки, имеющие направление снизу вверх, должны быть обязательно помечены стрелками.
    Любой алгоритм начинается с блока «Начало», а заканчивается блоком
    «Конец», которые изображаются в виде овалов
    Каждому блоку можно поставить в соответствие оператор языка. Исключение составляет только блоки «Начало» и «Конец».
    На блок-схеме оператор присваивания соответствует блоку процесс:
    На блок-схеме оператор ввода изображается в виде параллелограмма:
    На блок-схеме оператор вывода также изображается в виде параллелограмма:
    Лабораторная № 2 Линейный вычислительный процесс
    Линейным принятоназывать вычислительный процесс, в котором операции выполняются последовательно, в порядке их записи. Каждая операция является самостоятельной, независимой от каких-либо условий. На схеме блоки, отображающие эти операции, располагаются в линейной последовательности.
    Основу программы ЛВП составляют операторы присваивания, ввода и вывода данных.
    Линейные вычислительные процессы имеют место, например, при вычислении арифметических выражений, когда имеются конкретные числовые данные и над ними выполняются соответствующие условию задачи действия.
    В качестве операндов могут выступать стандартные арифметические функции.
    Для использования этих функций требуется дополнительно подключать библиотеки.
    В таблице приведены стандартные математические функции и библиотеки.
    Имя
    Описание
    Тип аргумента
    Библиотека
    M_PI
    Число

    cmath abs(x)
    Абсолютное значение аргумента типа int int cstdlib fabs(x)
    Абсолютное значение аргумента типа double double cmath pow(a,b)
    Возведение a в степень b double cmath cos(X)
    Косинус x (x в радианах) double cmath sin(X)
    Синус x (x в радианах) double cmath acos(x)
    Арккосинус от x. Аргумент функции должен лежать в пределах от —1 до 1 double cmath

    33 asin(x)
    Арксинус от x. Аргумент функции должен лежать в пределах от —1 до 1 double cmath tan(x)
    Тангенс от x (x в радианах) double cmath atan(x)
    Арктангенс от x double cmath exp(x) e
    x
    - экспонента double cmath log(x)
    Натуральный логарифм от x double cmath log10(x)
    Десятичный логарифм x double cmath sqrt(x)
    Квадратный корень Х double cmath srand(time(NULL)) Инициализирует генератор случайных чисел некоторой случайной величиной time.h rand() генерирует последовательность псевдослучайных чисел.
    Всякий раз при ее вызове возвращается число в интервале от
    0 до
    RAND_MAX. int cstdlib
    П
    РИМЕРЫ
    Пример 1.
    Сгенерировать вещественное число в интервале от -10 до 10 и целое число в интервале от -50 до 100
    Исходные данные: интервал для вещественных чисел от -10 до 10, интервал для целых чисел от – 50 до 100.
    Результат: х – вещественное число, n – целое число.

    34
    Пример 2.
    Найти z:
    5 4
    2
    )
    10
    (
    2
    )
    4
    (
    log
    |
    10
    |
    a
    b
    b
    a
    z







    , где
    tgb
    d
    d
    b
    a
    b






    3 25 0
    )
    (
    6 0
    arccos
    ,
    d
    d
    b










    2
    sin
    2
    cos
    1
    )
    2
    sin
    2
    cos
    1
    (
    ,
    k
    tg
    k
    d




    15 1
    cos
    1
    sin
    2

    Для произвольных k и

    Исходные данные: k – вещественный тип,

    будет обозначаться alf – вещественный тип.
    Результат: z – вещественный тип.
    При вычислении надо учитывать, что при вычислении выражения, все переменные, участвующие в этом выражении должны быть известны. Это диктует последовательность вычислений.
    Тестовый пример: при k=1 и

    =1 z=-0,48473. (Проверка результатов выполнялась в
    Excel)
    Контрольные вопросы
    1. Для чего надо подключать библиотеку conio.h?
    2. Какой тип имеет результат выражения 10/2?
    3. Какие ограничения существуют при возведении числа в произвольную степень?

    35 4. Выражение
    a
    2 1
    должно быть записано как 1/(2*a). Почему знаменатель заключен в круглые скобки?
    5. Почему для ввода данных требуется два оператора: cout и cin?
    6. Можно ли в Примере 2 изменить порядок вычислений. Например, a вычислить раньше b?
    7. Почему в программе некоторые числа записываются с точкой ?
    Индивидуальные задания
    Создать программу вычисления выражений и выполнить проверку средствами
    Excel.
    1. Найти t:
    ,
    2
    arctgk
    ae
    c
    t




    где
    k
    k
    a
    c






    sin
    3 3
    2 2
    sin cos
    c
    x
    k


    2
    cos
    1
    lg
    y
    x
    c


    для произвольных x и y.
    2. Найти U:
    wvf
    e
    y
    x
    U




    где
    z
    y
    x
    v
    f
    w





    ln


    3 2
    cos sin
    x
    f
    v


    z
    e
    f
    y
    x



    для произвольных x, y и z.
    3. Найти m:
    3
    a
    x
    n
    m



    где
    t
    x
    b
    n



    sin
    a
    e
    b
    t


    ln
    x
    a
    x
    tg
    b


    для произвольных a и x.
    4. Найти i
    k
    n
    m
    i


    ln где
    b
    m
    m
    k
    sin




    3 2
    d
    m
    tg
    b



    36
    m
    d
    e
    n


    для произвольных d и m.
    5. Найти w
    n
    m
    b
    a
    w


    где
    m
    n
    a
    4
    sin


    m
    k
    b
    n


    k
    e
    b

    для произвольных m и k.
    6. Найти p
    s
    e
    s
    f
    g
    p



    где
    t
    g
    f
    s
    sin


    5 3
    5




    t
    f
    t
    g
    k
    f
    t
    2
    cos


    для произвольных f и k.
    7. Найти a
    d
    c
    b
    e
    e
    e
    a

    где
    d
    c
    b
    2 2
    sin cos


    d
    xy
    e
    d
    c


     
    y
    x
    xy
    e
    d
    y
    x



    lg
    1
    для произвольных x и y.
    8. Найти q
    t
    tgp
    q

    где
    5
    acb
    p

    2
    sin b
    t
    a

    5




    b
    a
    e
    c
    для произвольных a и b
    9. Найти x
    a
    f
    d
    c
    e
    b
    a
    x
    c






    2
    где
    b
    a
    c
    d
    cos sin



    37
    c
    a
    c
    a
    b
    b
    f






    4 2
    3
    b
    tga
    c

    для произвольных a и b
    10.
    Найти z
    1
    ln



    x
    arctgy
    z
    где
    a
    b
    a
    a
    b
    x






    47 2
    1 2
    2 2
     


    a
    e
    x
    y




    1 4
    0 3
    2
    sin
    3
    cos
    5
    c
    a


    для произвольных c и b
    11.
    Найти v
    2 2
    2 1
    2
    n
    m
    u
    tgu
    v






    где


    b
    b
    a
    a
    u
    2
    sin
    2
    cos
    1 2
    sin
    2
    cos
    1 2





    b
    a
    arctgb
    arctga
    m



    ln
    b
    a
    b
    a
    a
    n




    lg
    3 2
    lg для произвольных a и b.
    12.
    Найти f
    ptga
    f
    t
    p
    2 4
    ln
    3



    где


    a
    tg
    x
    p
    2 2
    3 1
    sin cos


    b
    a
    x
    a
    e
    t




    2
    b
    b
    a
    a
    x
    cos sin



    для произвольных a и b.

    38
    Тема 2 Разветвляющийся вычислительный процесс
    Разветвляющимся называется алгоритм, в котором действие выполняется по одной из возможных вервей решения задачи, в зависимости от выполнения условий.
    В отличие от линейных алгоритмов, в которых команды выполняются последовательно одна за другой, в разветвляющиеся алгоритмы входит условие, в зависимости от выполнения или невыполнения которого выполняется та или иная последовательность действий.
    Разветвляющиеся алгоритмы можно реализовать с помощью двух операторов: условного оператора и оператора выбора.
    Лабораторная работа № 3
    Условный оператор
    Теория
    Назначение условного операторы – обеспечить ветвление алгоритма в зависимости от выполнения некоторого условия.
    Блок проверки условия (блок принятия решения): изображается ромбом с двумя выходами «Да» и «Нет». условие да нет
    В языке C++ условный оператор имеет следующий вид: Если условие, записанное после служебного слова .if, верно, то выполняется действие 1, иначе – действие 2.
    Да
    Нет условие
    Действие2
    Действие1 if (
    условие)
    Действие1;
    else
    Действие2;
    Если на ветках «Да» или «Нет» надо выполнять несколько действий, эти операторы надо заключать в операторные скобки { и }.

    39
    Да
    Нет условие
    Действие3
    Действие1
    Действие4
    Действие2
    if (
    условие) {
    Действие1;
    Действие2;
    } else
    {
    Действие3;
    Действие4;
    };
    Существует не полный вариант оператора if, когда ветка «Нет» пустая. условие
    Действие1
    Действие2
    Да
    Нет if (
    условие) {
    Действие1;
    Действие2;
    };
    Условие представляет собой логическое выражение. Логическое выражение
    — это любое выражение, которое может быть либо истинным, либо ложным.
    Логическое выражение состоит из одного или нескольких отношений. Операция отношения выполняет сравнение двух операндов. Результат операции отношения значение булевского типа true или false.
    Основные операции отношения:

    == равно;

    < > не равно;

    >больше;

    < меньше; >=

    >=больше или равно; <=

    <=меньше или равно.
    Если условие имеет более сложный вид, т. е. содержит несколько отношений, эти условия должны содержать логические операции, которые и объединяют отношения. В C++ имеются следующие логические операции: a b
    !a a && b a || b true true false true true true false false false true false true true false true false false true false false

    40
    Пример использования в инструкции if-else: if ((score>0) && (score<10)) cout<<"счет в пределах от 0 до 10.\n"; else cout<<"счет выходит за рамки от 0 до 10.\n";
    Если значение переменной score больше 0 и меньше 10, то выполняется первая cout-инструкция, в противном случае выполняется вторая cout-инструкция.
    Пример использования в инструкции if-else. if ((x==l) || (х==у)) cout<<"х равно 1 или у\n"; else cout<<"х не равно ни 1, ни у\n";
    Если значение переменной х равно 1 или значению у, то выполняется первая cout-инструкция; в противном случае выполняется вторая cout- инструкция.
    Если в логическом выражении круглые скобки опущены, компьютер группирует элементы в соответствии с приоритетом операций. Приоритеты некоторых операций в языке C++ приведены в таблице. Говорят, что оператор имеет
    более высокий приоритет, если по умолчанию он выполняется до другого оператора. Бинарные операторы с одинаковым приоритетом выполняются слева направо; унарные операторы с одинаковым приоритетом — справа налево.
    Унарные операторы
    +, -, ++, --, !
    Строки таблицы расположены в порядке понижения приоритета
    Бинарные арифметические операторы
    *, /, %
    Бинарные арифметические операторы
    +, -
    Логические операторы: <, >, <=, >=
    <, >, <=, >=
    Логические операторы: ==, ! =
    ==, !=
    Логический оператор
    & &
    Логический оператор
    ||
    Иногда в языке C++ в качестве логических значений используются целые числа. В частности, C++ преобразует целое значение 1 в true, a 0 — в false. На самом деле ситуация несколько сложнее, нежели просто использование 1 и 0 в качестве значений true и false соответственно. На самом деле компилятор трактует всякое отличное от нуля значение как true, a 0 — как false. Такое преобразование не создает каких-либо проблем, если не допускать ошибок при составлении логических выражений. До тех пор пока вы не допускаете ошибок в логических выражениях, вам не требуется знать, как логические и целые значения преобразуются друг в друга. Однако эта информация может понадобиться при отладке программ. Из-за этой ситуации компилятор не всегда сообщает об ошибке. Рассмотрим примеры таких ошибок.
    Многократные неравенства
    Не используйте в программе строк с многократными неравенствами, подобными следующим: if (хТак делать нельзя!. cout<<"z находится в интервале между х и у.";
    При использовании приведенного фрагмента программа, скорее всего, откомпилируется и запустится, но результат ее работы, несомненно, будет

    41 неправильным. Проблема не ограничивается только одним знаком < и возникает при использовании любого оператора сравнения. Правильная проверка на при- надлежность переменной диапазону значений использует оператор &&: if ((хПравильная проверка
    cout<<"z находится в интервале от х до у.";
    Использование = вместо ==
    К сожалению, в C++ можно написать множество инструкций, которые, с одной стороны, будут скомпилированы без ошибок, а с другой — будут выполнять не те действия, которые от них ожидают. Иногда можно просто не заметить неверную, запись, и это может привести к серьезным проблемам. На поиск ошибки программист может потратить немало времени, пока не поймет, что именно в программе сделано не так. Одной из распространенных ошибок является использование символа = вместо ==. Рассмотрим, например, инструкцию if-else, которая начинается следующим образом: if (х = 12)
    Да_инструкция; else
    Нет_инструкция
    Вероятно, программист хотел проверить, равно ли значение х числу 12, и на самом деле он должен был написать не =, а ==. Вам кажется, что компилятор должен сообщить об ошибке— ведь выражение х = 12 не является условием, которое может или выполняться, или нет. Это инструкция присвоения, поэтому компилятор должен сообщить об ошибке! К сожалению, на самом деле это не так. В
    C++ х = 12 является выражением, которое имеет значение, и в этом смысле оно не отличается от таких выражений, как х + 12 или 2 + 3. Инструкция присвоения принимает значение выражения, которое находится слева от знака равенства, так что значение инструкции х = 12 равно 12. При обсуждении совместимости типов отмечалось, что ненулевые величины типа int могут быть преобразованы в логиче- ское значение true, а потому в приведенном выше примере всегда будет выполняться первая инструкция (Да_инструкция).
    Такую ошибку очень трудно обнаружить, потому что она не похожа на
    ошибку!. Но если поместить в левую часть соотношения число 12, как показано в следующем примере, то в случае использования одного знака равенства вместо двух компилятор тут же обнаружит ошибку. if(12==х)
    Да_инструкция; else
    Нет_инструкция;
    Помните о том, что использование одного знака равенства = вместо двух == является широко распространенной ошибкой, причем компилятор в таких случаях не выдает сообщений об ошибке, а обнаружить ее самому очень трудно. В C++ многие выполняемые инструкции могут служить выражениями других видов, в частности логическими выражениями в инструкции if-else. Так, если инструкцию присвоения поместить там, где должно быть логическое выражение, то она будет интерпретирована именно так, как ожидается, т.е. как логическое выражение.
    Конечно, формально результат "проверки" такого условия будет абсолютно

    42 корректным, но совершенно не тем, который ожидает допустивший опечатку программист.
    При использовании оператора if следует помнить:

    Если на какой-нибудь ветке надо выполнить несколько действий, эти действия надо заключать в операторные скобки { };

    Если на ветке «Да» используются операторные скобки, перед служебным словом else нельзя ставить точку с запятой;

    Если условный оператор содержит другой условный оператор, то ветка else относится к ближайшему условию. Поэтому, если при вложении операторов if какой-то оператор имеет не полную форму, рекомендуется использовать операторные скобки.

    Если выражение, которое записывается в условии длинное, имеет смысл записать условие как отдельный оператор присваивания. В этом случае следует дополнительно объявить переменную булевского типа и записать туда это выражение.
    Примеры
    Пример 1.
    Вычислить А:
    c
    c
    b
    a



    2
    , где
    20 4



    b
    c
    Для произвольного b.
    Исходные данные: b – вещественного типа.
    Результат: b – вещественного типа.
    Сначала надо вычислить b, которая является частью выражения для вычисления a. При вычислении a может возникнуть ошибка – деление на ноль.
    Следовательно, перед делением надо выполнить проверку. Если знаменатель равен нулю - прекратить вычисление и выйти из программы.
    Тестовый пример:
    при b=1 a=0.468. a.
    при b=5, выводится сообщение «Деление на ноль» b.

    43
    Пример 2.
    Даны два произвольных числа. Определить максимальное и минимальное из этих чисел.
    Исходные данные: x и y – вещественного типа.
    Результат: max и min – вещественного типа.
    Тестовый пример:
    при х=5, y=10, max=10, min=5.

    44
    Пример 3.
    Вычислить z:











    1
    х если
    1,
    1
    x
    1
    - если
    0,
    -1
    x если
    ,
    1
    z
    Для произвольного х.
    Исходные данные: x – вещественного типа.
    Результат: z – вещественного типа.
    Необходимо определить в какую часть числовой оси попадает х
    Тестовый пример: a. при х=-10 z=-1; b. при х=1 z=0; c. при х=5 z=1.
    Пример 4.
    Определить попадает ли точка с координатами (a,b) в заштрихованную область представленную на рисунке.
    Исходные данные: a и b координаты точки– вещественного типа, радиус окружности – 1, половина стороны квадрата – 2.
    Результатом будет сообщение попадает ли точка в данную область.
    Тестовый пример:
    a. при x=0.5, y=0.5, точка не попала в область; b. при x=1.2, y=-1.5, точка попала в область;

    45 c. при x=3, y=-4, точка не попала в область.
    Формула окружности x

    +y
    2
    =r
    2
    , где r – радиус окружности. Для точек вне окружности выполняется неравенство: x

    +y
    2
    >r
    2
    , если центр окружности имеет координаты (0,0) В квадрат попадают точки, для которых выполняется условие
    |x|
    1   2   3   4   5   6   7   8   9   10


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