Сделай Сам Свою Работу на 5

Пример программы, вычисляющей по номеру месяца время года, ему соответствующее.





Лабораторная работа №2

Ветвления

Основной конструкцией ветвления в языке С++ является оператор if (условный оператор), имеющий следующий синтаксис:

 

if (<логическое_выражение>)

<оператор1>;

Else

<оператор2>;

Вначале вычисляется логическое выражение, указанное в круглых скобках, если оно окажется истинными (true), то выполняется <оператор1>, а затем управление передается оператору, следующему за конструкцией if (при этом <оператор2> не выполняется). Если же выражение окажется ложным (false), то выполняется <оператор2>, а затем управление передается оператору, следующему за конструкцией if.

Конструкция if изображается следующим образом с помощью блок-схем:

 

 

 

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

 

#include <iostream>

using namespace std;

 

int main()

{

int a, b, max;

//Вводим значения переменных a и b с клавиатуры

cin >> a >> b;

//Если a больше b, то

if (a > b)

max = a; //переменной max присвоить значение переменной a

else //иначе (a меньше или равно b)

max = b; //переменной max присвоить значение переменной b

//Выводим найденный максимум чисел a и b



cout << max << endl;

return 0;

}

Часть оператора if, относящуюся к ветке «иначе» (еlse), можно опускать, если она в программе не нужна. В этом случае оператор if будет выглядеть так:

 

if (<логическое_выражение>)

<оператор1>;

Пример программы, вычисляющей максимум двух целых чисел, введенных с клавиатуры, без использования части «иначе» (else):

 

#include <iostream>

using namespace std;

 

int main()

{

int a, b, max;

//Вводим значения переменных a и b с клавиатуры

cin >> a >> b;

//В начале полагаем, что максимум равен значению переменной b

max = b;

//Если a больше max, то

if (a > max)

max = a; //переменной max присвоить значение a

//Выводим найденный максимум чисел a и b

cout << max << endl;

return 0;

}

Если при истинности или ложности логического выражения нужно выполнить не один оператор, а несколько, то в этом случае применяется составной оператор. Составной оператор – последовательность операторов, заключенных в фигурные скобки {}.

Так <оператор1> и <оператор2> исходной конструкции if могут быть составными, т.е. состоять из нескольких простых операторов, объединенных фигурными скобками {}:



 

if (<логическое_выражение>)

{

<оператор1_1>;

<оператор1_2>;

...

<оператор1_n>;

}

Else

{

<оператор2_1>;

<оператор2_2>;

...

<оператор2_m>;

}

 

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

 

if (x >= y)

{

f = x * y;

y++;

}

else

{

f = x + y;

y--;

}

 

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

 

Операции отношения: <, >, <= (меньше или равно), >= (больше или равно), == (равно), != (не равно).

Примеры:

a < b – a меньше b;

c <= 2.0 – c меньше или равно 2.0;

a + 2 >= c * 3 – a + 2 больше или равно c * 3;

x == y * 2 – x равно y * 2;

z != a + b – z не равно a + b.

 

Логические операции: ! (отрицание), && (логическое «И», конъюнкция), || (логическое «ИЛИ», дизъюнкция).

Пусть a, b – некоторые логические выражения, тогда дадим формальные определения данных операций:

!a – истинно ó a – ложно;

a && b – истинно ó оба выражения a и b истинны;

a || b – истинно ó хотя бы одно из выражений a или b является истинным.

Приоритетность выполнения логических операций: ! – имеет наибольший приоритет, && - средний и || - наименьший.

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

Примеры:

1.0 <= x && x <= 2.0 – определяет, принадлежит ли x отрезку [1.0, 2.0]

x < 1.0 || x >= 2.0 – определяет, принадлежит ли x объединению (-¥, 1.0)È[2.0, +¥)

x <= 3.0 && y <= 5.0 || x + y >= 1.5



!(a <= 7) && (a > 3 || a * 2 < a + 10)

 

Пример фрагмента программы, определяющей принадлежит ли точка с координатами (x, y) прямоугольнику ABCD, имеющему следующие координаты вершин: A(0, 0), B(0, b), C(a, b), D(a, 0):

 

 

double x, y, a, b;

cin >> x >> y;

cin >> a >> b;

if (0.0 <= x && x <= a && 0.0 <= y && y <= b)

cout << "Point belongs to rectangle." << endl; //Принадлежит

else

cout << "Point is out of rectangle." << endl; //Не принадлежит

 

Также операторы if могут быть вложены друг в друга.

Пример фрагмента программы, определяющей принадлежность точки прямоугольнику с помощью вложенных операторов if:

 

double x, y, a, b;

cin >> x >> y;

cin >> a >> b;

if (0.0 <= x && x <= a)

if (0.0 <= y && y <= b)

cout << "Point belongs to rectangle." << endl; //Принадлежит

else

cout << "Point is out of rectangle." << endl; //Не принадлежит

else

cout << "Point is out of rectangle." << endl; //Не принадлежит

 

Дополнительной конструкцией ветвления в языке С++ является оператор выбора switch. Он имеет следующий синтаксис:

 

switch (<выражение>)

{

case <конст1>:

<оператор1_1>;

<оператор1_2>;

<оператор1_n1>;

case <конст2>:

<оператор2_1>;

<оператор2_2>;

<оператор2_n2>;

default:

<оператор1>;

<оператор2>;

<операторm>;

}

 

Оператор выбора выполняется следующим образом:

1. Вычисляется значение выражения в круглых скобках.

2. Последовательно сравнивается значение выражения с константами <конст1>, <конст2>…

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

4. Если в списке операторов встретился break, то осуществляется переход на следующий оператор за конструкций switch, иначе – выполняются операторы из нижележащих наборов операторов (относящихся к другим константам) до тех пор, пока не встретится break или не закончится switch.

5. Если значение выражения не совпало ни с одной из констант, то выполняются операторы секции default (по умолчанию). Если данная секция отсутствует, то управление передается первому оператору, следующему за конструкцией switch.

Пример программы, которая в зависимости от значения переменной n использует различные формулы для вычисления функции f:

 

 

#include <iostream>

using namespace std;

 

int main()

{

double x, y, f;

int n;

 

//Читаем значение переменных n, x, y

cout << "n = ";

cin >> n;

cout << "x = ";

cin >> x;

cout << "y = ";

cin >> y;

//Конструкция выбора

switch (n)

{

case 1: //Если n равно 1

f = x + y; //вычисляем f по первой формуле

break; //выход из конструкции switch

//(переход к оператору печати значения f)

case 2: //Если n равно 2

f = 2.0 * x * y; //вычисляем f по второй формуле

break; //выход из конструкции switch

case 3: //Если n равно 3

f = x - 3.0 * y + 1.0; //вычисляем f по третьей формуле

break; //выход из конструкции switch

case 4: //Если n равно 4

f = y; //вычисляем f по четвертой формуле

break; //выход из конструкции switch

}

//Выводим на экран вычисленное значение f

cout << "f = " << f << endl;

return 0;

}

Обратите внимание! В конце каждого набора операторов следует ставить оператор break, иначе начнут выполняться операторы, соответствующие следующей константе. Например, если исключить break из набора операторов, соответствующих case 1, то после выполнение оператора “f = x + y;” начнет выполняться оператор “f = 2.0 * x * y;”.

 

Если двум константам, идущим последовательно в конструкции switch, соответствует один и тот же набор операторов, то их можно объединить, сделав пустым набор операторов у первой константы.

 

Пример программы, вычисляющей по номеру месяца время года, ему соответствующее.

#include <iostream>

using namespace std;

 

int main()

{

int month; //Переменная для хранения номера месяца

 

//Вводим номер месяца

cout << "Enter month no. : ";

cin >> month;

//Используем конструкцию выбора для определения времени

//года

switch (month)

{

//Если значение month равно 1, 2 или 12

case 1:

case 2:

case 12:

cout << "Winter" << endl; //выводим на экран "Зима"

break;

//Если значение month равно 3, 4 или 5

case 3:

case 4:

case 5:

cout << "Spring" << endl; //весна

break;

//Если значение month равно 6, 7 или 8

case 6:

case 7:

case 8:

cout << "Summer" << endl; //лето

break;

//Если значение month равно 9, 10 или 11

case 9:

case 10:

case 11:

cout << "Autumn" << endl; //осень

break;

//Если другое значение

default:

cout << "Error!!!" << endl; //выводим ошибку

}

return 0;

}

В данной программе константам 12, 1, 2 соответствует один и тот же набор из двух операторов: вывод на экран строки “Winter” и break. Поэтому просто друг за другом записываются три данные константы, после чего указывается общий набор операторов:

 

case 1:

case 2:

case 12:

cout << "Winter" << endl;

break;

 

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

 

Задание 1. Решение квадратного уравнения.

 

Написать программу, решающую квадратное уравнение для введенных вещественных коэффициентов , и .

Наберите и протестируйте работу данной программы:

 

#include <iostream>

#include <math.h> //Подключаем для фунции sqrt

using namespace std;

 

int main()

{

double a, b, c;

double D, x1, x2;

 

//Вводим значения коэффициентов уравнения

cout << "a = ";

cin >> a;

cout << "b = ";

cin >> b;

cout << "c = ";

cin >> c;

//Вычисляем дискриминант

D = b * b - 4.0 * a * c;

//Если дискриминант неотрицателен

if (D >= 0.0)

{

//Вычисляем корни уравнения

x1 = (-b + sqrt(D)) / (2.0 * a);

x2 = (-b - sqrt(D)) / (2.0 * a);

//Если дискриминант положителен (вложенный условный оператор)

if (D > 0)

{

//Выводим значения обоих корней

cout << "x1 = " << x1 << endl;

cout << "x2 = " << x2 << endl;

}

else //иначе (дискриминант равен нулю)

//Выводим значения совпадающих корней

cout << "x1 = x2 = " << x1 << endl;

}

else //иначе (дискриминант отрицателен)

//Сообщаем, что нет решений

cout << "No solution" << endl;

return 0;

}

 

 

Задание 2. Использование одиночного условного оператора.

Пример.Написать программу, определяющую принадлежит ли точка с координатами (x, y) кругу с центром (a, b) и радиусом R.

Решение

#include <iostream>

using namespace std;

 

int main()

{

//Определяем переменные:

//a, b - координаты центра круга

//R - радиус круга

//x, y - координаты точки

double a, b, R, x, y;

 

//Вводим параметры круга

cout << "Entering circle data" << endl;

cout << "a = ";

cin >> a;

cout << "b = ";

cin >> b;

cout << "R = ";

cin >> R;

//Вводим координаты точки

cout << "Entering point data" << endl;

cout << "x = ";

cin >> x;

cout << "y = ";

cin >> y;

//Если точка удовлетворяет неравенству круга, то

if ((x - a) * (x - a) + (y - b) * (y - b) <= R)

//выводим, что она принадлежит ему

cout << "Point belongs to circle." << endl;

else //иначе

//выводим, что она не принадлежит ему

cout << "Point is out of circle." << endl;

return 0;

}

 

Решить по вариантам:

 

Вариант 1.Определить, является ли введенное число положительным или отрицательным.

Вариант 2.Определить, является ли введенное целое число четным или нечетным.

Вариант 3.Определить, делится ли введенное целое число на 5 или не делится.

Вариант 4.Даны два натуральных числа m и n. Определить, делится ли m на n без остатка.

Вариант 5.Дано двузначное число, определить, делится ли на 7 его сумма цифр.

Вариант 6.Определить, является ли введенное натуральное число двузначным.

Вариант 7.Определить, является ли введенное натуральное число трехзначным.

Вариант 8.Даны стороны прямоугольника и радиус круга. Определить, какая из фигур имеет большую площадь.

Вариант 9.Даны сторона квадрата и радиус окружности. Определить, какая из фигур имеет большую длину контура.

Вариант 10.Дана сторона куба и радиус шара. Определить, какая из фигур имеет больший объем.

Вариант 11.Даны две величины объема: одна в сантиметрах кубических, другая в метрах кубических. Определить, какая из них больше.

Вариант 12.Даны массы и объемы двух тел. Определить, какое из них имеет большую плотность.

Вариант 13.Даны длины сторон треугольника и радиус круга. Определить, какая из фигур имеет большую площадь.

 

 

Задание 3. Составные логические выражения в условном операторе.

См. пример в начале о точке и прямоугольнике.

Используя логические операции в условии оператора if, решить по вариантам:

Вариант 1.Дано натуральное число. Определить, является ли оно четным четырехзначным числом.

Вариант 2.Дано трехзначное натуральное число. Определить, является ли оно нечетным числом, сумма цифр которого делится на 13.

Вариант 3.Программа вводит год в виде целого числа. Определить, является ли он високосным. Год считается високосным, если он делится на 4, исключая года, делящиеся на 100, но не делящиеся на 400. Например, 2010 – високосный год (делится на 4, но не на 100); 1800, 1900, 2100 – не високосные (делятся на 100, но не на 400); 1600, 2000, 2400 – високосные (делятся на 400).

Вариант 4.Дано трехзначное натуральное число. Определить, равны ли все его цифры.

Вариант 5.Дано трехзначное натуральное число. Определить, есть ли у него одинаковые цифры.

Вариант 6.Дано четырехзначное натуральное число. Определить, есть ли в его записи хотя бы одна четная цифра.

Вариант 7.Дано четырехзначное натуральное число. Определить, является ли оно палиндромом, т.е. числом, запись которого будет одинакова при чтении слева направо и справа налево. Например, 1221, 2332 – палиндромы.

Вариант 8.Написать программу, определяющую принадлежит ли точка с координатами (x, y, z) прямоугольному параллелепипеду, заданному координатами двух его противоположных вершин, при условии, что его грани параллельны координатным плоскостям.

Вариант 9.Даны три положительных вещественных числа. Определить, существует ли треугольник с заданными сторонами.

Вариант 10.Треугольник задан длинами своих сторон. Определить, является ли он равносторонним.

Вариант 11.Треугольник задан длинами своих сторон. Определить, является ли он разносторонним.

Вариант 12.Написать программу, определяющую принадлежит ли точка с координатами (x,y) отрезку, концы которого заданы координатами (x1,y1) и (x2,y2).

Вариант 13.Треугольник задан длинами своих сторон. Определить, является ли он равнобедренным.

 

 

Задание 4. Вложенные условные операторы.

См. пример в начале о точке и прямоугольнике.

Используя вложенные условные операторы, решить по вариантам:

 

Вариант 1.Дано натуральное число. Определить делится ли оно одновременно на 10 и 15.

Вариант 2.Найти наибольшее из трех данных вещественных чисел.

Вариант 3.Найти наименьшее из трех данных вещественных чисел.

Вариант 4.Треугольник задан длинами своих сторон. Определить, является ли он прямоугольным.

Вариант 5.Дано трехзначное натуральное число. Определить его наименьшую цифру.

Вариант 6.Определить произведение двух наименьших из трех данных чисел.

Вариант 7.Определить сумму двух наибольших из трех данных чисел.

Вариант 8.Определить среднее из трех данных чисел a, b и с. Среднее число больше или равно min{a,b,c} и меньше или равно max{a,b,c}.

Вариант 9.Программа вводит целое число из отрезка [0; 9999]. Результат его работы вывод фразы, характеризующей данное число: «однозначное число», «двузначное число», «трехзначное число», «четырехзначное число» (выводить фразы на экран можно на английском или транслитом).

Вариант 10.Программа вводит целое число из отрезка [0; 999]. Результат его работы вывод фразы, характеризующей данное число: «четное однозначное число», «нечетное однозначное число» «четное двузначное число», «нечетное двузначное число», «четное трехзначное число», «нечетное трехзначное число» (выводить фразы на экран можно на английском или транслитом).

Вариант 11.Треугольник задан длинами своих сторон. Определить, является ли он тупоугольным.

Вариант 12.Треугольник задан длинами своих сторон. Определить, является ли он остроугольным.

Вариант 13.Программа вводит возраст человека в виде целого числа N. Результат ее работы – вывод правильной (с точки зрения русского языка) фразы «Вам N лет/год/года» (выводить фразу на экран можно транслитом).

Задание 5. Условный оператор и работа с символами.

 

Пример.Проверить, является ли введенный символ строчной латинской буквой.

Решение

#include <iostream>

using namespace std;

 

int main()

{

//Определяем переменную для хранения вводимого символа

char ch;

//Просим пользователя ввести символ

cout << "Enter character : ";

//Читаем символ с клавиатуры

cin >> ch;

//Если код символа ch больше или равен кода символа 'a'

// и меньше или равен кода символа 'z', то

//(дело в том, что в кодировке ASCII алфавитные символы

//имеют последовательные коды, коды цифр также последовательны)

if (ch >= 'a' && ch <= 'z')

{

//выводим на экран, что ch - строчная латинская буква

cout << ch << " is lowercase latin letter" << endl;

}

else //иначе

{

//выводим, что ch не является строчной латинской буквой

cout << ch << " is not lowercase latin letter" << endl;

}

return 0;

}

 

Решить по вариантам:

 

Вариант 1.Проверить, является ли введенный символ цифрой.

Вариант 2.Проверить, является ли введенный символ заглавной латинской буквой.

Вариант 3.Проверить, является ли введенный символ знаком препинания (точкой, запятой, восклицательным знаком).

Вариант 4.Проверить, является ли введенный символ знаком препинания (точкой, точкой с запятой, вопросительным знаком).

Вариант 5.Проверить, является ли введенным символ разделителем (пробелом, левой или правой фигурной скобкой).

Вариант 6.Проверить, является ли введенный символ знаком арифметической операции (+, -, *, /).

Вариант 7.Проверить, является ли введенный символ специальным знаком (#, $, ^, @).

Вариант 8.Проверить, является ли введенный символ специальным знаком (`, ~, &, |).

Вариант 9.Проверить, является ли введенный символ скобкой ((, ), }, {, [, ]).

Вариант 10.Проверить, является ли введенный символ четной цифрой.

Вариант 11.Проверить, является ли введенный символ нечетной цифрой.

Вариант 12.Проверить, является ли введенный символ строчной или заглавной буквой латинского алфавита.

Вариант 13.Проверить, является ли введенный символ заглавной буквой латинского алфавита или цифрой.

 

Задание 6. Работа с оператором выбора switch.

 

См. примеры в начале.

Решить по вариантам:

 

Вариант 1.Написать программу, запрашивающую номер дня недели и выдающую в ответ его название.

Вариант 2.Написать программу, запрашивающую цифру от 0 до 9 и выдающую английское (немецкое) слово, соответствующее ее названию.

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

Вариант 4.Написать программу, запрашивающую номер месяца и выдающую в ответ его название.

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

Вариант 6.Написать программу, запрашивающую цифру от 0 до 9 и выдающую английское (немецкое) слово, соответствующее ее названию.

Вариант 7.Написать программу, запрашивающую номер месяца и выдающую в ответ его название.

Вариант 8.Написать программу, запрашивающую номер дня недели и выдающую в ответ его название.

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

Вариант 10.По году в номере группы определить, на каком курсе учится студент.

Вариант 11.По номеру класса определить в начальной школе, среднем звене или в старших классах обучается ученик.

Вариант 12.Написать программу, определяющую по номеру месяца номер квартала, к которому он относится.

Вариант 13.Написать программу-калькулятора, которая вводит два вещественных числа a и b, а также символ операции c (+, -, /, или *). Программа должна выполнять соответствующие операции вычисления над веденными числами и выдавать результат.

 

Задание 7. Дополнительные задачи (по желанию):

  1. Написать программу, определяющую принадлежит ли тока с координатами (x, y) треугольнику, заданному координатами его вершин.
  2. Написать программу, определяющую результат пересечения двух прямоугольников, стороны которых параллельны координатным осям.
  3. Написать программу, вычисляющую дату, следующую за данной. Дата задается тремя числами d, m, y, обозначающими соответственно день, месяц и год.

 

 

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.