Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

алгоритмизация и программирование 5 глава




17. Вычислить площадь круга и равнобедренной трапеции, описанной около него, если периметр трапеции равен р, а угол при нижнем основании равен а.

18. Вычислить объем призмы, боковые грани которой – квадраты. Основанием призмы служит равносторонний треугольник, по который известно, что радиус вписанной в него окружности равен r.

Контрольные вопросы

1. Что такое программа на С++?

2. Какая программа является линейной?

3. Какова структура программы на С++?

4. Что такое идентификатор?

5. По каким правилам создаются идентификаторы в С++?

6. Что такое тип величины?

7. Какие типы величин используются в языке С++?

8. Какие типы величин относятся к простым типам?

9. В каком диапазоне могут изменяться переменные типа int и float?

10. Как описываются переменные в С++? (Привести пример.)

11. Что такое операторные скобки? Каково их назначение?

12. Как выполняется команда присваивания?

13. Какая инструкция предназначена для вывода на экран сообщений?

14. Какая инструкция предназначена для ввода данных?

15. Что такое заголовочный файл? Приведите пример заголовочного файла.

16. Каково назначение заголовочных файлов?

17. Как сохранить программу? (Устно)

18. Как осуществить компиляцию текста программы? (Устно)

19. Как осуществить запуск программы? (Устно)

20. Как считать готовую программу с диска? (Устно)


Пример выполнения лабораторной работы

ЗаданиеI. Напишите программу для расчета по двум формулам. Отсутствующие в библиотеке языка функции выразите через имеющиеся.

Решение

1. Математическая модель

В библиотеке math.h языка С++ отсутствует функция ctg (x), поэтому выразим ее через имеющуюся функцию tg (x), используя известное соотношение:

.

Запись выражений на языке С++ примет вид:

z1 = tan (x) - 1/ tan (7*pi/6); z2 = tan (7*pi/8) - sqrt (3.0) * tan (pi/8) * tan (x).

Аргументы: х – вещественного типа.

Результаты: z 1, z 2 – вещественного типа.

2. Алгоритм (блок - схема)

z1 = tan (x) - 1/ tan (7*pi/6); z2 = tan (7*pi/8) - sqrt (3.0) * tan (pi/8) * tan (x);
Ввод х
Начало  
Вывод z1, z2
Конец  

3. Программа

//подключение заголовочных файлов

#include <iostream> //для организации ввода-вывода в С++

#include <conio.h> //для организации консольного ввода-вывода

#include <math.h> //для работы с математическими функциями

using namespace std; // описание пространства имен std

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

{ // тело функции

const double pi = 3.14159265359; // описание константы

double z1, z2, x; // описание переменных

cout<<" Введите х = "; // вывод сообщения на экран

cin>>x; // ввод переменной х

//вычисляем значения переменных z1, z2

z1 = tan(x)-1/tan(7*pi/6); //присвоение переменной z1 значения выражения

z2 = tan(7*pi/8)-sqrt(3.0)*tan(pi/8)*tan(x);

cout<<" z1 = "<<z1<<" z2 = "<<z2; // вывод данных на экран

_getch(); //функция ожидания нажатия клавиши из conio.h

return 0; //главная функция возвращает целочисленное значение 0

}

4. Результат работы программы

Введите х = 4

z1 = -0.57

z2 = -1.24

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

Решение

1. Математическая модель

Аргументы: радиус окружности r, вещественного типа.

Результаты: длина окружности l и площадь круга S, вещественного типа.

2. Блок – схема 3. Программа
Ввод r
Вывод l, S
l = 2*pi *r; S = pi* r*r;
Конец
Начало  

  //программа нахождения длины окружности и площади // круга заданного радиуса #include <iostream> #include <conio.h>   using namespace std;   int main()//заголовок главной функции {//описание переменных, начальные установки setlocale(LC_ALL,"Rus"); double pi = 3.14; double r, l, S; cout<<"Введите радиус: r = "; cin>>r; // ввод переменной //вычисление по формулам l = 2*pi*r; S = pi*r*r; //вывод данных cout<<endl<<"Длина окружности: l = "<<l; cout<<endl<<"Площадь окружности: S = "<<S; _getch(); //главная функция возвращает целое значение 0 return 0; }

4. Результат работы программы:

Введите радиус: r = 5

Длина окружности: l = 31.4

Площадь круга: S = 78.5


3. Операторы ветвления

3.1. Простые и составные условия

В C++ условие – выражение логического типа (bool), которое может принимать одно из двух значений: «истина» (true) или «ложь» (false). Внутренняя форма представления значения false - 0 (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1.

Используются шесть операторов, позволяющих сравнивать между собой значения выражений, числовых переменных, а также значение переменной и константу:


> (больше),

< (меньше),

== (равно),

!= (не равно),

>= (больше либо равно),

<= (меньше либо равно).


Условия, которые составлены с использованием одного оператора сравнения, называются простыми условиями, например, x + y > 0.

Общий вид:

выражение оператор сравнения выражение

Из простых условий, которые являются выражениями логического типа можно строить сложные условия, применяя к ним, как к операндам, логические операторы:! (не), && (и), || (или).

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

Итак, составные условия – это простые условия, связанные при помощи логических операторов: (x > 5) || (a + b < 0).

Операция &&

Логическую операцию && (и) используют, если нужно, чтобы одновременно выполнялись два условия. C++ это записывается так:

(условие1) && (условие2)

На практике эта логическая операция часто применяется для создания условия принадлежности некоторой переменной указанному промежутку. Например, составим условие, которое будет истинно тогда и только тогда, когда переменная х принадлежит промежутку от 10 до 20: 10 < x < 20. Т.е., когда х >10 и x < 20. На языке С++ это записывается так: (x > 10) && (x < 20).

Операция ||

Логическую операцию || (или) используют, когда хотят сформулировать условие, которое будет истинно в том случае, когда верно хотя бы одно условие из двух. В C++ эта операция используется так:

(условие1) || (условие2)

Операция!

Логическую операцию! (не – логическое отрицание) используют, если нужно проверить условие (выражение) на ложность. Эта операция делает ложным истинное условие и истинным ложное. Запись операции:

! (условие)

В таблице 6 приводятся результаты применения логических операторов к операндам логического типа. Для наглядности вместо значения false используется 0, true – 1.

Таблица 6 – Логические операции

 

a b a && b a || b ! a
         
         
         
         

 

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

3.2. Составной оператор

К составным операторам относятся собственно составные операторы и блоки.

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

Формат оператора:

{

оператор1;

оператор2;

...

операторN;

}

Блок отличается тем, что в его состав входят описания каких-либо объектов программы. Например:

{// Это составной оператор n ++; S += n; } {// Это блок int n = 0; n ++; S += n; }

Блоки, чаще всего, используются в качестве тела функции. Составной оператор используется в любом случае, когда несколько операторов следует объединить в один. Это необходимо в условных операторах и операторах цикла, согласно синтаксису которых, исполнимым является только один оператор. Чаще всего, составной оператор формирует ветвь условного оператора или тело цикла в операторах цикла.

3.3. Условная операция (?:)

Эта операция тернарная, то есть имеет три операнда.

Формат операции:

операнд_1? операнд_2: операнд_3

Первый операнд может иметь арифметический тип или быть указателем. Он оценивается с точки зрения его эквивалентности нулю (операнд, равный нулю, рассматривается как false, не равный нулю – как true). Если результат вычисления операнда 1 равен true, то результатом условной операции будет значение второго операнда, иначе – третьего операнда. Вычисляется всегда либо второй операнд, либо третий. Их тип может различаться. Условная операция является сокращенной формой условного оператора if.

Пример: Вывести на экран минимальное из двух значений.

#include <stdio.h>

int main ()

{

int a = 10, b = 5, min;

min = (b < a)? b: a;

printf(“Наименьшее число: %d”, min);

return 0;

}

Результат работы программы:

Наибольшее число: 5

Другой пример применения условной операции. Требуется, чтобы некоторая целая величина увеличивалась на 1, если ее значение не превышает n, а иначе принимала значение 1:

i = (i < n)? i + 1: 1;

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

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

Формат оператора:

if (условие)оператор 1; else оператор 2;

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

1. Вычисляется значение условия (выражения), которое может иметь арифметический тип или тип указателя.

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

Довольно часто в случае ложности условия не нужно производить никаких действий. Допускается использование краткой формы условного оператора:

if ( условие ) оператор;

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

Если после условия или служебного слова else требуется выполнить несколько операторов, то их оформляют в виде составного.

Таблица 7 – Графическая интерпретация условного оператора.

Неполная форма записи Полная форма записи
если-то
условие
оператор
+
a)

 

оператор 1
оператор 2
оператор n
условие
+
b)

если-то-иначе

 

b)
условие
оператор 1
оператор 2
+
a)

оператор 1
оператор 2
оператор n
условие
+
оператор 1
оператор 2
оператор n

       

Замечание. В таблице 7приводятся блок-схемы возможных вариантов алгоритма команды «Ветвление» (условного оператора) случаи

a) для простых операторов;

b) для составных, когда при выполнении условия или при не выполнении его требуется исполнить несколько операторов: оператор 1, оператор 2, …, оператор n. В программе данную серию операторов: оператор 1, оператор 2, …, оператор n оформляют в виде составного оператора или блока, заключив их в операторные скобки.

Структура команды «Ветвление» называется вложенной, если после условия или служебного слова else используются вновь условные операторы. Число вложений может быть произвольным. При этом справедливо следующее правило: служебное слово else всегда относится к ближайшему if.


Пример. Cоставить программу нахождения минимального из трех чисел, введенных с клавиатуры.

1 вариант решения: 2 вариант решения:
Начало
Ввод чисел a,b,с
Конец
a<b
+
Вывод max  
+
b<c
max:=b  
max:=c  
+
a<с
max:=a  
max:=c  

Вывод max
Начало
Ввод чисел a,b,с
Конец
max:=a  
max>b
max:=b
+
max>с
max:=с
+

Программа на С++
//min_of_3_numbers; #include <conio.h> #include <iostream> using namespace std;   int main() { setlocale(LC_ALL,"Rus"); int a, b, c, max; cout<<"\nВведите 3 числа через пробел: "; cin>>a>>b>>c; if (a < b) if (a < c) max = a; // случай, когда a < b else max = c; else if (b < c) max = b; // случай, когда a >= b else max = c; cout<<"Минимальное число = "<< max; _getch(); return 0; } //min_of_3_numbers; #include <conio.h> #include <iostream> using namespace std;   int main() { setlocale(LC_ALL,"Rus"); int a, b, c, max; cout<<"\nВведите 3 числа через пробел: "; cin>>a>>b>>c; max = a; if (b < max) max = b; if (c < max) max = c; cout<<"Минимальное число = "<<max; _getch(); return 0; }

Результат работы программы:

Введите 3 числа через пробел:

12 5 -7

Минимальное число = -7

3.5. Оператор switch

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

Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений. Блок-схема оператора выбора (switch) предложена в таблице 8.

Формат оператора:

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

{

case константное_выражение_1: [оператор_1];

case константное_выражение_2: [оператор_2];

case константное_выражение_n: [оператор_n];

[ default: оператор_n + 1];

}

Оператор выбора является обобщением условного оператора. Выполнение оператора начинается с вычисления выражения (оно должно быть целочисленным), а затем управление передается первому оператору из списка, помеченного константным выражением, значение которого совпало с вычисленным. После этого, если выход из переключателя явно не указан, последовательно выполняются все остальные ветви. Затем управление передаётся оператору, следующему за оператором выбора. Если значение выражения не совпадает ни с одним константным выражением, то выполняется оператор n + 1.

Таблица 8 – Оператор выбора (блок-схема)

Неполная форма записи Полная форма записи
выбор

оператор 1
условие 1
+
оператор 2
условие 2
оператор n
условие n
+
+

выбор-иначе

условие 2
условие n
оператор 1
условие 1
+
оператор 2
оператор n
+
+
оператор n+1

       

Значение выражения и констант оператора switch должны быть одного и того же типа. Тип может быть любым целочисленным. В качестве константы допускается использование списка констант (например, case1: case3: case5: [оператор_1];), а в качестве оператора – составной оператор.

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

Выход из переключателя обычно выполняется с помощью операторов break или return. Оператор break выполняет выход из самого внутреннего из объемлющих его операторов switch, for, while и do. Оператор return выполняет выход из функции, в теле которой он записан.

3.6. Оператор перехода goto

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

Формат оператора:

goto метка;

В теле той же функции должна присутствовать ровно одна конструкция вида:

метка: оператор;

Оператор goto передает управление на помеченный оператор.

Метка – это обычный идентификатор, областью видимости которого является функция, в теле которой он задан.

Использование оператора безусловного перехода оправданно, как правило, в двух случаях:

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

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

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

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


Пример: Дано число m (1 £ m £ 7). Вывести на экран название дня недели, который соответствует этому номеру.

блок-схема программа
n = 2  
n = 7  
n = 1
+
+
+
начало
конец
ввод n
'понедельник'
'вторник'
n = 3  
+
'среда'
n = 4  
+
'четверг'
n = 5  
+
'пятница'
n = 6  
+
'суббота'
'воскресенье'
' неверный номер '

//switch; #include <conio.h> #include <iostream> using namespace std;   int main() { setlocale(LC_ALL,"Rus"); int n; metka: cout<<"\nВведите номер дня недели: "; cin>>n; switch (n) { case 1: cout<<"\nПонедельник";break; case 2: cout<<"\nВторник";break; case 3: cout<<"\nСреда";break; case 4: cout<<"\nЧетверг";break; case 5: cout<<"\nПятница";break; case 6: cout<<"\nСуббота";break; case 7: cout<<"\nВоскресенье";break; default: cout<<"\nНеверный ввод\n"; goto metka; } _getch(); return 0; }

 

Результат работы программы:

Введите номер дня недели: 12

 

Неверный ввод

 

Введите номер дня недели: 2

 

Вторник


Лабораторная работа № 3
Программирование алгоритмов разветвляющейся структуры

ЦЕЛЬ РАБОТЫ: приобретение навыков программирования вычислительных разветвляющихся процессов с использованием условного, составного операторов, оператора выбора (множественного ветвления) и оператора безусловного перехода.

Выполнение работы: в соответствии с вариантом составить и реализовать программы.

Задание I

Решить задачу с использованием конструкции ветвления:

1. Расстояние от дома до школы S км. До начала урока осталось t минут. Ученик идет со скоростью v. Определить, придёт ли он раньше звонка, после звонка или во время.

2. Даны действительные числа x, y и z. Найти min(x, y, z).

3. Вычислить значение функции

4. Возвести в квадрат большее из трёх заданных чисел.

5. Определить, есть ли среди трёх заданных чисел чётные.

6. Вывести на экран три заданных числа в порядке убывания.

7. Определить, принадлежит ли точка А (а 1, а 2) кольцу, определяемому окружностями: x 2 + y 2 = 1 и x 2 + y 2 = 16.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...