Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции по С++.doc
Скачиваний:
34
Добавлен:
15.12.2018
Размер:
2.31 Mб
Скачать

2. Линейные вычислительные алгоритмы

Под линейным вычислительным алгоритмом будем понимать последовательность действий, состоящую из команд ввода, вывода и присваивания значений некоторым величинам. При описании таких алгоритмов используется только одна управляющая структура – следование.

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

Помимо операций ввода-вывода основным элементарным действием в алгоритме является операция присваивания значения переменной. Формат команды присваивания:

<имя переменной> = <выражение>

Знак «=» следует читать как «присвоить». Под командой присваивания понимается последовательность действий:

  • вычисляется выражение;

  • полученное значение записывается в переменную.

Отметим три основных свойства команды присваивания:

  1. до тех пор пока переменной не присвоено никакое значение, она остается неопределенной;

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

  3. значение, вновь присвоенное переменной, заменяет её предыдущее значение.

Пример построения линейного вычислительного алгоритма

и соответствующего проекта в среде Visual C++ 6.0

Пример. Разработать алгоритм и составить по нему программу (разработать консольный проект) для вычисления значений функции z = . Область определения функции не учитывать.

Ход выполнения работы

  1. Написать алгоритм решения задачи в виде логически правильной последовательности действий.

  2. Перевести алгоритм на язык программирования (этот процесс называется кодированием). Ниже приведены алгоритм и соответствующая программа. Программа снабжена комментариями, поясняющими, с какой целью написан тот или иной оператор. Первые два пункта нужно выполнять в тетради по лабораторным работам.

    Алгоритм

    Программа

    объявление вещ: х, у, z

    ввод х , у

    z=(sin3(x2)+cos(y))/(x2/3+5)

    вывод х, у, z

    // подключение головных файлов stdio.h и math.h

    #include "stdio.h"

    #include "math.h"

    //заголовок главной функции main()

    int main ( )

    {

    // объявление вещественных переменных x, y, z

    float y, z, x;

    // вывод на печать строки x=

    printf ("x=");

    // ввод значения переменной x

    scanf ("%i",&x);

    // вывод на печать строки у=

    printf ("y=");

    // ввод значения переменной y

    scanf ("%f",&y);

    // вычисление значения переменной z с использованием

    // математических функций

    z=(pow(sin(pow(x,2)),3)+cos(y))/(pow(x,(float)2/3)+5);

    // вывод значений переменных x, y, z последовательно

    printf ("x=%5i\ty=%f\tz=%7.3f\n",x, y, z);

    // завершение работы главной функции

    return 1;

    }

  3. Создать консольное приложение AHello, World!” application. Открыть главную функцию main(), для чего нужно выполнить шаги, описанные в Лекции 1.

  4. В открывшемся окне редактора необходимо отредактировать текст главной функции следующим образом:

удалить все строки, следующие за строкой #include "stdafx.h".

за указанной строкой напечатать текст программы.

  1. Запустить приложение на выполнение, как это описано в Лекции 1.

  2. Отладить программу.

  3. Сохранить отлаженный проект на рабочем диске.

Примечания:

  1. При вычислении знаменателя функции z была применена операция приведения к типу данных: (float)2/3. Причиной этого является то, что знак ‘/’ обозначает операцию целочисленного деления, т.е. при делении целого числа на целое число результат округляется до нуля. Если же один из операндов является вещественной переменной, то в результате получается вещественное значение. В нашем случае операция приведения к типу данных (float) позволяет «перевести» число 2 из разряда целых чисел в разряд вещественных.

  2. При запуске программы на экране монитора появится строка

x=_

Часть строки x= выводит на экран функция printf(), мигающий курсор – это приглашение к вводу значения переменной x с клавиатуры. Ввод значения с клавиатуры заканчивается нажатием клавиши <enter>. Приглашение к вводу и считывание значения, введенного с клавиатуры, в ячейку оперативной памяти, отведенную под переменную x, – это результат работы функции scanf().

  1. В операторе, отвечающем за вычисление значения переменной z, знаменатель дроби записан в скобках. Необходимо следить за тем, чтобы при вычислении выражений скобки были расставлены правильно, т.е. при записи дробей числитель и знаменатель, представляющие собой сумму, разность или произведение, нужно заключать в скобки; аргументы функций также заключаются в скобки. Очень важно при записи выражений на языке С++ помнить о приоритете операций.

  2. Запись \t в форматной строке означает горизонтальную табуляцию, а запись \n – перевод на другую строку.

  3. При выводе на печать вещественного значения функцией printf() допустим следующие форматы вывода:

%<количество_позиций_под_значение>.<количество_позиций_под_дробную_часть>f

%<количество_позиций_под_значение>i

В приведенном примере формат вывода %5i означает, что при выводе переменной x под вывод всего значения переменной будет отведено 5 позиций, а формат вывода %7.3f означает, что при выводе переменной z под вывод всего значения переменной будет отведено 7 позиций, из них 3 позиции – под дробную часть.

Лекция 4

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

Цели:

  • познакомиться с понятием разветвляющегося вычислительного процесса;

  • познакомиться с понятием логического выражения, изучить логические операции и операции отношения и освоить методику построения логических выражений;

  • изучить операторы языка С++, позволяющие реализовывать разветвляющиеся вычислительные алгоритмы.

1. Управляющая структура «развилка».

Логические операции и операции отношения

При описании разветвляющихся вычислительных алгоритмов кроме управляющей структуры «следование» применяется структура «развилка», или «если–то–иначе». Применяется такая структура в случае, когда нужно выбрать одну из имеющихся последовательностей действий в зависимости от выполнения или невыполнения некоторого условия. Форма записи структуры:

если <условие>

действия1

иначе

действия2

все_если

Работа структуры организована по принципу: если <условие> истинно (выполняется), то выполняются действия1; в случае ложности (невыполнения) <условие> выполняются действия2.

Возможна вложенность структур «если–то–иначе» любой глубины, т.е. вместо действия1 и/или действия2 может быть записана еще одна структура «развилка» и т.д.

<условие>, записанное после слова если, представляет собой логическое выражение. Логическое выражение – это два операнда, соединенные либо логической операцией, либо операцией отношения. Под логической операцией понимается одна из операций, связывающих два операнда: И, ИЛИ или операция отрицания НЕ, записываемая перед операндом. Если <условие> – два условия, связанные логической операцией И, то <условие> будет истинным в случае одновременного исполнения этих двух условий. Если <условие> – два условия, связанные логической операцией ИЛИ, то <условие> будет истинным в случае, когда хотя бы одно из этих двух условий будет выполняться. Результаты выполнения логических операций приведены в табл.4.

Таблица 4

Значение операнда 1 (оп1)

Значение операнда 2 (оп2)

Результат операций

НЕ(оп1)

(оп1) И (оп2)

(оп1) ИЛИ (оп2)

0

0

1

0

0

0

1

1

0

1

1

0

0

0

1

1

1

0

1

1

Под операцией отношения понимается одна из операций, связывающих два операнда: > (больше), >= (больше или равно), < (меньше), <= (меньше или равно), == (равно), != (не равно). Операция отношения позволяет сравнивать числовые выражения по их значениям.

Пример. Определить условие попадания точки с координатами (x;y) в указанную область D:

Напишем условие попадания точки с координатами (x;y) в указанную область. Очевидно, что данная область должна быть разбита на две непересекающиеся области D1 и D2, т.е. D=D1UD2. Таким образом, можно установить, что точка может попасть в D1 или в D2.

Опишем условие попадания точки (х;у) в области D1 и D2:

D1: x>=-4 И x<=4 И y>=0 И y<=2

D2: x>=0 И x<=2 И y>=-2 И y<=0

Таким образом, условие принадлежности точки с координатами (x;y) области D будет следующим:

(x>=-4 И x<=4 И y>=0 И y<=2) ИЛИ (x>=0 И x<=2 И y>=-2 И y<=0)

2. Операторы языка С++, позволяющие реализовывать разветвляющиеся вычислительные алгоритмы

Для реализации разветвляющихся вычислительных алгоритмов в языке С++ предусмотрены условный оператор if(), условное выражение и оператор выбора switch().