Программная реализация разветвляющихся алгоритмов

Автор работы: Пользователь скрыл имя, 12 Января 2014 в 17:21, лабораторная работа

Краткое описание

Цель работы: изучение основных средств языка программирования С++, необходимых для кодирования алгоритма с разветвляющейся структурой.
Задачи работы:
- изучить написание логических выражений на языке С++;
- научиться использовать операцию условия, условный оператор if … else, переключатель switch для организации разветвления в программе;
- научиться применять операторы передачи управления break, return;
- освоить использование средств автоматизации процесса отладки в интегрированной среде программирования Microsoft Visual C++ 2005 Express Edition.

Прикрепленные файлы: 1 файл

5fan_ru_Программная реализация разветвляющихся алгоритмов.doc

— 311.50 Кб (Скачать документ)

Программная реализация разветвляющихся алгоритмов

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

Задачи  работы:

    • изучить  написание логических выражений на языке С++;
    • научиться использовать операцию условия, условный оператор    if … else, переключатель switch для организации разветвления в программе;
    • научиться применять операторы передачи управления break, return;
    • освоить использование средств автоматизации процесса отладки в интегрированной среде программирования Microsoft Visual C++ 2005 Express Edition.

4.1. Порядок выполнения работы

  1. Изучите теоретические сведения к данной лабораторной работе (п. 4.2)
  2. Ознакомьтесь с постановкой задачи (п. 4.3). Вариант задания соответствует вашему номеру в списке группы.
  3. Разработайте блок-схему алгоритма решения поставленной задачи.
  4. Составьте программу на языке С++ и подготовьте наборы тестовых исходных данных. Выполните отладку  программы на тестовых данных.
  5. Подготовьте отчет по лабораторной работе. Отчет должен включать в себя:

-  титульный лист;

-  цель лабораторной работы;

-  постановку задачи;

    • блок схему алгоритма решения поставленной задачи;
    • текст программы с комментариями;
    • наборы тестовых исходных данных с соответствующими результатами работы программы (разработайте столько тестовых примеров, чтобы проверить каждую ветвь решения вашей задачи);
    • краткие ответы на контрольные вопросы;
    • выводы по лабораторной работе.
    1. Защитите лабораторную работу перед преподавателем.

4.2. Общие сведения

Вычислительный процесс называется разветвляющимся, если для его реализации предусмотрено несколько направлений (ветвей). Каждое разветвление является следствием проверки какого-либо условия, при выполнении которого вычисления идут по одной ветви, а при невыполнении – по другой.

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

- условный оператор (if...else);

- переключатель (switch).

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

4.2.1. Логические значения и выражения

Язык Си++ унаследовал от языка Си соглашение, согласно которому целочисленные значения и, соответственно, арифметические выражения, дающие целочисленный результат, могут в зависимости от контекста трактоваться как логические, если они встречаются там, где предусмотрено наличие логического значения (выражения-условия в условных операторах и операторах цикла). Целое значение 0 считается логическим "false" (ложное значение), а ненулевое целое – логическим "true" (истинным значением). Кроме того, в языке Си++ был еще добавлен специальный логический тип bool. Переменные типа bool могут принимать значения true и false, которые при необходимости автоматически преобразуются в выражениях в значения 1 и 0. Тип данных bool можно использовать в программах точно так же, как и другие базовые типы, такие как int, char, float, double и др. (например, для описания переменных, принимающих логические значения, или для создания функций, возвращающих значения типа bool).

В языке С++ определены следующие логические операции:

 

&&                   И

||                        ИЛИ

!                          НЕ

 

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

Приоритет у  логических && и ||  операций ниже, чем у операций отношения.

 

Логическая  операция И (&&) вырабатывает  значение  1 (истина),  если  оба операнда  имеют  ненулевое значение. Если один из операндов равен 0 (ложь), то результат также равен нулю. В табл. 4.1 показаны результаты логической операции И для различных значений операндов.

Таблица 4.1 – Результаты логической операции И

операнд1

операнд2

операнд1 && операнд2

1

1

1

1

0

0

0

1

0

0

0

0


 

Если значение первого  операнда   равно нулю, то второй операнд не вычисляется.

               

Логическая  операция  ИЛИ (||) вырабатывает значение  0,  если оба операнда  имеют значение  0. Если какой-либо из операндов имеет ненулевое значение, то результат операции равен  1.  Если  первый операнд имеет ненулевое значение, то второй операнд не вычисляется. В табл. 4.2 показаны результаты логической операции ИЛИ для различных значений операндов.

Таблица 4.2 – Результаты логической операции ИЛИ

операнд1

операнд2

операнд1 || операнд2

1

1

1

1

0

1

0

1

1

0

0

0


 

Логическая  операция  НЕ (!) вырабатывает значение  1 (истинно), если операнд имеет значение ложно ( 0 ) и наоборот.

 

Интуитивно логические выражения наподобие "2<7", "1.2!=3.7" и "6>=9" воспринимаются человеком как утверждения, которые могут быть "истинными (true)" или "ложными (false)" (логическая операция "!=" означает "не равно"). Допускается объединение нескольких подобных выражений в более сложное выражение с помощью логических операций "&&" ("И"), "||" ("ИЛИ") и "!" ("НЕ").

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

Таблица 4.3. – Примеры логических выражений

 

Выражение

Значение выражения

(6 <= 6) && (5 < 3)

(6 <= 6) || (5 < 3)

(5 != 6)

(5 < 3) && (6 <= 6) || (5 != 6)

(5 < 3) && ((6 <= 6) || (5 != 6))

!((5 < 3) && ((6 <= 6) || (5 != 6)))

false

true

true

true

false

true


 

По приоритетам от высшего к низшему операции отношения и логические операции располагаются следующим образом:

 

                               !

                               >   >=     <    <=

                                = =     !=

                                &&

                              ||      

 

В таблице в четвертом примере  выражение истинно, поскольку приоритет операции "&&" выше, чем у "||". Приоритет (порядок выполнения) различных операций Си++ можно узнать в учебнике или руководстве по языку Си++, а также в справочной системе Visual C++ (тема Operator Precedence). Если у вас возникают сомнения относительно приоритета операций, применяйте круглые скобки (). Применение этих скобок облегчает чтение программ.

Составные логические выражения обычно применяются в качестве условий в операторах if и в циклах for. Например:

...

...

if ( total_test_score >= 50 && total_test_score < 65 )

cout << "Вы прошли тест со  средним результатом.\n";

...

...

Поскольку в Си++ истинное значение ("true") представляется в виде целого числа 1 (большинство компиляторов любое положительное число считают истинным значением), а ложное значение ("false") – в виде значения 0, то это может привести к ошибкам. Например, легко напечатать "=" вместо "= =". Поэтому фрагмент программы

...

if ( number_of_people = 1 )

cout << "Есть только один  человек.\n";

...

всегда будет выводить сообщение "Есть только один человек", даже если до оператора if переменная "number_of_people" была больше 1.

4.2.2. Условная операция

В отличие от других операций языка С++ условная операция используется с тремя операндами, поэтому она называется тернарной. В изображении условной операции два размещенных не подряд символа ' ? ' и     ' : ', которые связывают три операнда-выражения:

выражениие_1 ? выражение_ 2 : выражение_ 3

Первым вычисляется  значение выражения_1. Если оно истинно, т.е. не равно нулю, то вычисляется значение выражения_2, которое становится результатом условной операции. Если при вычислении выражения_1 получится 0, то в качестве результата берется значение выражения_3. Классический пример:

х < 0 ? -х : х ;

Данное выражение возвращает абсолютное значение переменной х.

Применение условной операции зачастую может служить  заменой условному оператору if … else, если требуется в дальнейшем использовать тот результат, который дает выполнение указанной операции.

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

Условный оператор может иметь одну из двух форм: или полную форму – if … else, или сокращенную форму – if …(т.е. без else).

В случае полной формы синтаксис условного оператора имеет вид:

      if  (выражение-условие)

оператор1  

                else

                    оператор2

Такой условный оператор работает следующим образом. Вычисляется выражение-условие, и, если оно истинно (т.е. значение выражения отлично от нуля), то выполняется оператор1, а если выражение-условие ложно (значение выражения равно нулю), то выполняется оператор2.

Пример 4.1.

/*Выполнение деления  в программе 

с проверкой делителя на равенство   нулю*/

#include <stdio.h>

#include < conio.h >

int main()

{ float x,y ;

 puts( "Введите делимое и делитель");

 scanf("%f  %f", &x, &y);

 if (y==0.0)

    puts("На нуль делить нельзя !");

else

   printf( "Частное равно %f \n", x/y);

getch();

 return 0; }

 

В условном операторе  в качестве оператора1 и/или оператора2 могут использоваться несколько операторов, тогда эту группу операторов следует заключить в фигурные скобки, чтобы превратить несколько операторов в один составной оператор (или блок).

Пример 4.2.

/* Эта программа запрашивает  у пользователя текущий год,  возраст

пользователя и еще один год. Затем программа вычисляет возраст

пользователя, который будет у  него во втором введенном году.*/

#include <iostream>

#include < conio.h >

using namespace std;

int main()

{

int year_now, age_now, another_year, another_age;

cout << "Введите текущий год и нажмите ENTER.\n";

cin >> year_now;

cout << "Введите свой  возраст (в годах).\n";

cin >> age_now;

cout << "Введите год,  для которого вы хотите узнать  свой возраст.\n";

cin >> another_year;

another_age = another_year - (year_now - age_now);

if (another_age >= 0)

{

cout << "В " << another_year << " году вам ";

cout << another_age << "\n";

}

else

{

cout << "В " << another_year << " вы еще не родились!\n";

}

getch();

return 0; }

Синтаксис сокращенной формы условного оператора выглядит так:

      if  (выражение-условие)

оператор  

В этом случае работа условного оператора заключается в следующем: если выражение-условие истинно, то выполняется оператор из тела оператора if, а если выражение ложно, то никакие действия в теле оператора if не выполняются, и управление сразу передается на оператор, следующий по тексту программы за оператором if.

Пример 4.3.

/*Программа, выполняющая сортировку  трех введенных чисел

 по возрастанию*/

#include <iostream>

#include <conio.h>

using namespace std;

void main()

{

float a,b,c,h;

cout<<"Введите 3 числа";

  cin>>a>>b>>c;

  cout<<"Исходная последовательность a="<<a;

  cout<<" b="<<b<<" c="<<c<<endl;

  if(a>b)

   {

     h=a;

     a=b;

     b=h;

     }

   if(a>c)

    {

     h=a;

     a=c;

     c=h;

     }

     if(b>c)

      {

       h=b;

       b=c;

       c=h;

       }

    cout<<"Упорядоченная по возрастанию последовательность a="<<a;

    cout<<" b="<<b<<" c="<<c<<endl;

  getch();  }

Условные операторы могут быть вложенными друг в друга, когда один условный оператор располагается в теле другого условного оператора, причем глубина вложенности может быть любой. Вложенные условные операторы позволяют организовать в программе так называемое "множественное ветвление".

Пример 4.4.

//Фрагмент программы, иллюстрирующий использование

//вложенных друг в друга условных операторов

...

if (total_test_score < 50)

cout << "Вы не прошли тест. Выучите материал как следует.\n";

else if (total_test_score < 65)

         cout << "Вы прошли тест со средним результатом.\n";

       else if (total_test_score < 80)

                 cout << "Вы хорошо выполнили тест.\n";

              else if (total_test_score < 95)

Информация о работе Программная реализация разветвляющихся алгоритмов