Файл: Основные структуры алгоритмов:сравнительный анализ и примеры их использования.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 05.04.2023

Просмотров: 167

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

операнд1

операнд2

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

1

1

1

1

0

0

0

1

0

0

0

0

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

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

Таблица 1.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)" (логическая операция "!=" означает "не равно"). Допускается объединение нескольких подобных выражений в более сложное выражение с помощью логических операций "&&" ("И"), "||" ("ИЛИ") и "!" ("НЕ").

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

Таблица 1.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

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

!

>>= <<=

= = !=

&&

||

Составные логические выражения обычно применяются в качестве условий в операторах 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.

Практическая часть:

Задание 3.

Даны два вещественных числа x и y. Определить, попадает ли точка с координатами x, y в заштрихованную область.

1

y

1

-1

1

x

-1

-1

  • Вводим исходные данные x и y
  • Проверяем попадает ли точка в область ограниченную линиями .
  • Если попадает, то проверяемпопадает ли в область
  • Если точка попала в указанную область, товыводим на экран «Точка попадает»
  • В противном случае «точка не попадает»

Описание переменных

x, y – Координаты

Листинг программы

#include"iostream"

Usingnamespacestd;

intmain()

{

setlocale(LC_ALL, "russian");

floatx, y;

cout<<"Введите координату x = ";

cin>> x;

cout<<"Введите координату y = ";

cin>>y;

//проверка

if (y<= 1 - x&&y<= x + 1)

{

if ((y <= 0) && (pow(x, 2) + pow(y, 2) <= 1))

{

cout<<"Точка попадает"<<endl;

}

elsecout<<"Точка не попадает \n";

}

else

{

cout<<"Точка не попадает"<<endl;

}

system("pause");

}

Результаты выполнения программы представлены на рисунке 3

Рис.3. Результаты выполнения программы

Задание 4.

Разработать программу в соответствии с заданием. Элементы окружности пронумерованы следующим образом: 1 – радиус R, 2 – диаметр, 3 – длина, 4 – площадь круга. Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данной окружности (в том же порядке).

Словесное описание алгоритма.

  • Выбираем элемент окружности (a).
  • Ввод исходных данные (aa)
  • В зависимости от выбранного элемента окружности будут производится соответствующие подсчеты для нахождения оставшихся элементов окружности.
  • Результат выводим на экран.

Описание переменных

R – Радиус

D – Диаметр

P – Длина

S - Площадь круга

a- Элемент окружности

aa-Значениепараметра а


Листинг программы

#include"iostream"

Usingnamespacestd;

intmain()

{

setlocale(LC_ALL, "russian");

int a;

cout<<"Выбирите 1н из 4 вариантов"<<endl;

cin>> a;

floataa;

cout<<"Введите значение параметра а \n";

cin>>aa;

switch (a)

{

case 1:

cout<<"Ответ: Радиус (R) = "<<aa<<endl;

cout<<"Ответ: Диаметр (D) = "<<aa*2 <<endl;

cout<<"Ответ: Длина (P) = "<< 2 * 3.14*aa<<endl;

cout<<"Ответ: Площадь круга (S) = "<< 3.14*pow(aa, 2) <<endl;

break;

case 2:

cout<<"Ответ: Диаметр (D) = "<<aa<<endl;

cout<<"Ответ: Радиус (R) = "<<aa/2 <<endl;

cout<<"Ответ: Длина (P) = "<< 2 * 3.14*(aa/2) <<endl;

cout<<"Ответ: Площадь круга (S) = "<< 3.14*pow((aa/2), 2) <<endl;

break;

case 3:

cout<<"Ответ: Длина (P) = "<<aa<<endl;

cout<<"Ответ: Радиус (R) = "<<aa/3.14/2 <<endl;

cout<<"Ответ: Диаметр (D) = "<<aa/3.14 <<endl;

cout<<"Ответ: Площадь круга (S) = "<< 3.14*pow((aa / 3.14 / 2), 2) <<endl;

break;

case 4:

cout<<"Ответ: Площадькруга (S) = "<<aa<<endl;

cout<<"Ответ: Радиус (R) = "<<sqrt(aa / 3.14) <<endl;

cout<<"Ответ: Диаметр (D) = "<< (sqrt(aa / 3.14))*2 <<endl;

cout<<"Ответ: Длина (P) = "<< 2 * 3.14*(sqrt(aa / 3.14)) <<endl;

break;

}

system("pause");

}

Результаты выполнения программы представлены на рисунке 4

Рис.4. Результаты выполнения программы

3 Программирование программы цикличных структур

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

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

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

· цикл for

· цикл while

· цикл do…while

Цикл for

Цикл со счетчиком позволяет выполнить один или несколько операторов определенное количество раз. Синтаксис данного цикла:

for (начальная_инструкция; условие; выражение)

{

инструкции;

}

Семантика (смысл) цикла for такова, что сначала выполняется начальная_инструкция - она инициализует переменную, используемую в цикле. Затем проверяется условие. Если оно истинно, то выполняются инструкции, вычисляется выражение, и управление передается обратно в начало цикла for с той разницей, что начальная_инструкция уже не выполняется. Это продолжается до тех пор, пока условие не станет ложно, после чего управление передается следующей_инструкции. Каждый проход цикла называется итерацией цикла.


Начальной_инструкцией может быть просто объявление или же сложное выражение либо инструкция.

Цикл for является итерационной инструкцией, обычно используется с увеличивающейся либо уменьшающейся переменной. Например, в следующем коде инструкция for используется для сложения целых чисел от 1го до 10и:

rez=0;

for(inti=1; i<=10;++i)

rez+=i;

Когда инструкция for начинает выполняться, управляющей переменной i задается начальное значение 1. Затем проверяется условие продолжения цикла i <= 10. Поскольку начальное значение i равно 1, это условие удовлетворяется, так что оператор тела инструкции суммирует к значению переменной rez, равному 0, значение счетчика i, равное 1. Затем управляющая переменная i увеличивается на единицу в выражении ++i и цикл опять начинается с проверки условия его продолжения. Поскольку значение i теперь 2, предельная величина не превышена, так что программа снова выполняет тело цикла. Этот процесс продолжается, пока управляющая переменная i не увеличится до 11 -- это приведет к тому, что условие продолжения цикла нарушится и повторение прекратится. Выполнение программы продолжится с первого оператора, расположенного после цикла for.

Другой пример показывает, как оператор запятая может быть использован для инициализации более одной переменной.

for (j = 0,i = 1; i <= 10; ++i)

j += i;

Основное назначение использования оператора запятая -- помочь программисту использовать несколько выражений задания начальных значений и (или) несколько выражений приращения переменных. Например, в одной структуре for может быть несколько управляющих переменных, которым надо задавать начальное значение и которые надо изменять. Например:

for(i=0,j=0;i<3,j<`4;i++,j+=2)

cout<<i*j;

Данный цикл проведет две итерации, после которых значение счетчика i станет равным 2, а значение счетчика j = 4. При этом условие для второго счетчик не выполняется (т.к. j строго должен быть меньше 4) и цикл будет прерван. На экране будет выведено 02.

В цикле for может присутствовать локальное объявление переменной управления циклом, как в следующем примере.

for (inti = 0; i< N; ++i)

rez+= i*i;

Целая переменная i теперь является объявленной в программе. Это может вносить путаницу, поэтому лучше объявлять все программные переменные в начале блока.

Любое или все выражения в инструкции for могут отсутствовать, но две точки с запятой должны быть обязательно. Если пропущена начальная_инструкция, то никакая инициализация в цикле for не выполняется. Если пропущено выражение, то не производится приращение, а в случае отсутствия условия не производится проверка. Есть специальное правило для тех случаев, когда пропущено условие; в такой ситуации компилятор будет считать условие выполненным всегда. Так, цикл for в следующем фрагменте бесконечен.


for (i = 1, rez = 0 ; ; rez += i++ )

cout<<rez<<endl;

Размещение точки с запятой сразу после правой закрывающей скобки заголовка for делает тело структуры пустым оператором. Обычно это логическая ошибка.

"Приращение” инструкции for может быть отрицательным (в этом случае в действительности происходит не приращение, а уменьшение переменной, управляющей циклом).

Если условие продолжения цикла с самого начала не удовлетворяется, то операторы тела инструкции for не выполняются и управление передается оператору, следующему за for.

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

Хотя управляющая переменная может изменяться в теле цикла for, избегайте делать это, так как такая практика приводит к неявным, неочевидным ошибкам.

Давайте рассмотрим несколько вариантов применения цикла for:

a) Изменение управляющей переменной от 100 до 1 с шагом -1 (с уменьшением на 1).

for (int i = 100; i >= 1; i--)

Распространенная ошибка при программировании, это использование несоответствующей операции отношения в условии продолжения цикла при счете циклов сверху вниз (например, использование i <= 1 при счете циклов сверху до 1 не включая).

b) Изменение управляющей переменной от 7 до 77 с шагом 7.

for (int i = 0; i <= 77; i += 7)

c) Изменение управляющей переменной от 20 до 2 с шагом -2.

for (int i = 20; i >= 2; i -= 2)

d) Изменение управляющей переменной в следующей последовательности:

2, 5, 8, 11, 14.

for (int j = 2;j <= 14; j += 3)

Циклwhile

Когда мы не знаем, сколько итераций должен произвести цикл, нам понадобится цикл while или do...while. Циклический алгоритм while - является циклом с предисловием, а do…while - цикл с постусловием.

Оператор цикла while или цикл while - цикл, повторяющий одно и то же действие, пока условие продолжения цикла while остаётся истинным.

Синтаксис цикла while в C++ выглядит следующим образом.

// форма записи цикла while

while (/*условие продолжения цикла while*/)

{

/*блок операторов*/;

/*управление условием*/;

}

Условие продолжения цикла должно быть истинно - «true», как только условие стало ложным, выполняется выход из цикла. Вначале вычисляется выражение. Если результат отличен от нуля (true), тогда выполняется оператор и управление переходит обратно к началу цикла while. Это приводит к выполнению тела цикла while, а именно оператора, который будет выполняться до тех пор, пока выражение не станет равным нулю (false). Фигурные скобки могут опускаться в том случае, если тело цикла -- это один оператор. Но как правило в цикле выполняется несколько операторов, так как кроме выполнения полезного действия необходимо делать условие цикла while ложным, иначе цикл будет бесконечным, а это, в свою очередь, приведет к зависанию программы.