- •Лекция 1 Создание консольного приложения
- •2. Консоль. Построение консольного проекта
- •3. Запуск приложения
- •4. Сохранение и редактирование проекта
- •Лекция 2
- •4. Функции форматированного ввода и вывода
- •4.1. Функция форматированного ввода с клавиатуры
- •4.2. Функция форматированного вывода на экран
- •5. Математические функции
- •Лекция 3 Линейные вычислительные процессы
- •1. Алгоритм. Управляющие структуры
- •2. Линейные вычислительные алгоритмы
- •2.1. Условный оператор if()
- •2.2. Условное выражение
- •2.3. Оператор выбора switch()
- •Лекция 5 Программирование разветвляющихся вычислительных процессов
- •Лекция 6 Циклические вычислительные процессы.
- •1. Типы циклов
- •3. Операторы безусловного перехода
- •Лекция 7 Вычисление последовательностей
- •4. Примеры вычисления последовательностей
- •5. Структура алгоритмов вычисления рекуррентных последовательностей
- •Лекция 8 Одномерные массивы
- •1. Массивы
- •1.1. Примеры программ обработки одномерных массивов
- •1.2. Сортировка выбором
- •1.3. Сортировка простыми вставками
- •Лекция 10 Двухмерные массивы
- •1. Двухмерные массивы
- •Лекция 11 Алгоритмы матричной алгебры
- •1. Алгоритмы матричной алгебры
- •Лекция 12 Динамические массивы
- •1. Память компьютера. Адресное пространство
- •2. Динамическая память
- •3. Адреса и указатели
- •4. Указатели и массивы. Динамические массивы
- •5. Проблемы, связанные с указателями
- •6. Поразрядные операции
- •1.2. Способы объявления и обращения к элементам двухмерных массивов
- •Лекция 14 Символы и строки
- •1. Символьный тип данных
- •2. Строки
- •Лекция 15 Структуры
- •1. Понятие структуры
- •2. Определение нового имени типа
- •3. Массивы структур. Указатели на структуры
- •3.1. Определение статического массива структур
- •3.1. Определение динамического массива из n структур
- •Лекция 16 Файлы
- •1. Потоковый ввод-вывод данных
- •3. Понятие файла. Функции работы с файлами
- •Лекция 17 Файлы
- •Лекция 18 Функции пользователя
- •I. Приёмы построения алгоритмов
- •2. Понятие функции
- •2.1. Определение функции
- •2.2. Область видимости переменных
- •2.3. Параметры функции
- •2.4. Описание функции
- •2.5. Организация вызова функции
- •2.5. Передача параметров в функцию
- •3. Рекурсия
- •Лекция 20 Нахождение приближенного значения корня нелинейного уравнения
- •На отрезке [a;b] с заданной точностью eps
- •1.1. Метод дихотомии (половинного деления)
- •1.2. Метод хорд
- •1.3. Метод касательных (Ньютона)
- •Лекция 22 Объектно-ориентированное программирование
- •Полиморфизм – это свойство класса, позволяющее определить одно и то же по имени, но разное по смыслу действие. Основные этапы ооп:
- •Уточнённое имя принадлежит классу (т.Е. Компонентной) функции
- •Лекция 23 Объектно-ориентированное программирование
- •1. Конструкторы и деструкторы
- •1.2. Определение компонентных функций
- •Лекция 25 Объектно-ориентированное программирование
- •1. Свойства классов
- •1.1. Наследование классов
- •1.2. Полиморфизм
- •Библиографический список
Лекция 5 Программирование разветвляющихся вычислительных процессов
Цели:
-
освоить методику написания разветвляющихся вычислительных алгоритмов, перевода таких алгоритмов на язык программирования С++ и разработки соответствующего проекта в среде Visual C++ 6.0.
Пример 1. Разработать алгоритм и составить по нему программу для вычисления значений функции y = f(x). Необходимо учитывать область определения функции:
Ход выполнения работы
-
Построить алгоритм. В задаче требуется вычислить функцию, вид которой зависит от значения аргумента. Поэтому разобьем числовую ось значениями, указанными в формуле на несколько промежутков, указав при этом, какой должен быть результат вычислений на каждом промежутке:
При разработке алгоритма будем рассматривать промежутки числовой оси слева направо. Обозначения в алгоритме: ФНЗ – функция не задана; ФНО – функция не определена.
Записывая основной алгоритм решения задачи, вместо вычислений каждой части функции для упрощения будем писать блок1, блок2 и блок3. Поставим в соответствие каждому блоку алгоритм вычисления конкретной функции с учетом её области определения. Последний этап разработки алгоритма решения исходной задачи – подстановка в основной алгоритм вместо блоков 1,2,3 соответствующих вычислительных алгоритмов.
Сделаем небольшое замечание относительно записи текста алгоритма. Рекомендуется записывать текст алгоритма «ступеньками», т.е. новый блок «если – иначе» нужно записывать с отступом относительно предыдущего блока «если – иначе» и т.д. Так же следует поступать и при записи текста программы, соответствующей алгоритму. Одной из причин этого является то, что структура алгоритма и программы хорошо просматривается, что может помочь при обнаружении синтаксических ошибок.
Основной алгоритм:
объявление переменных вещ: х, у
ввод х
если х<5
блок1
иначе
если x<7
«ФНЗ»
иначе
если x<12
блок2
иначе
если х<=15
«ФНЗ»
иначе
блок3
все_если
все_если
все_если
все_если
Рассмотрим вычисления в каждом из блоков 1, 2 и 3 отдельно.
Блок1. Требуется вычислить функцию . При вычислении учитываем, что подкоренное выражение должно быть больше или равно нулю и при этом знаменатель не должен равняться нулю. Таким образом, получаем:
если cos(х)>0
печать у
иначе
«ФНО»
все_если
Блок2. Требуется вычислить функцию . Здесь никаких ограничений на вычисления нет. Таким образом, получаем:
печать у
Блок3. Требуется вычислить функцию . При вычислении учитываем, что подкоренное выражение должно быть больше или равно. Таким образом, получаем:
если 25-х>=0
печать у
иначе
«ФНО»
все_если
В основной алгоритм вместо блоков 1,2,3 подставим алгоритмы вычисления соответствующих частей функции. В итоге получаем алгоритм решения исходной задачи.
-
Написать программу, соответствующую алгоритму.
Алгоритм
Программа
объявление переменных вещ: х, у
ввод х
если х<5
если cos(х)>0
печать х,у
иначе
«ФНО»
все_если
иначе
если x<7
«ФНЗ»
иначе
если x<12
печать х,у
иначе
если х<=15
«ФНЗ»
иначе
если 25-х>=0
печать х,у
иначе
«ФНО»
все_если
все_если
все_если
все_если
все_если
# include "stdio.h"
# include "math.h"
int main ( )
{
float x,y;
printf ("x=");
// ввод значения переменной x
scanf("%f",&x);
// проверка условий
if (x<5)
if(cos(x)>0)
{
y=1/sqrt(cos(x));
printf ("x=%f,y=%f\n",x,y);
}
else
printf("FNO\n");
else
if(x<7)
printf("FNZ\n");
else
if (x<12)
{
y=pow(x,2);
printf ("x=%f,y=%f\n",x,y);
}
else
if (x<=15)
printf("FNZ\n");
else
if(25-x>=0)
{
y=sqrt(25-x);
printf ("x=%f,y=%f\n",x,y);
}
else
printf("FNO\n");
return 1; }
-
Создать проект и реализовать данную задачу в среде Visual C++ 6.0.
Примечание. В качестве тестового примера можно ввести следующие значения: х=16 и х=30.
Пример 2. Разработать алгоритм и составить по нему программу для вычисления значений функции z = f(x,y) в зависимости от попадания точки с координатами (х,у) в область D (область D выделена серым цветом):
Ход выполнения работы
-
В задаче требуется вычислить функцию, вид которой зависит от координат точки координатной плоскости. Если точка с координатами (х,у) попадает в область D, то вычисляется первая часть функции (в алгоритме – блок 1), в противном случае – вторая часть (блок 2). Процесс написания алгоритма разобьем на четыре этапа:
написание основного алгоритма решения задачи;
определение условия принадлежности точки области D. Так как одна и та же точка не может принадлежать двум непересекающимся областям одновременно, разобьем область D на две области: D1 (треугольник) и D2 (кольцо);
написание вспомогательных алгоритмов вычисления каждой части заданной функции;
написание полного алгоритма решения исходной задачи и соответствующей программы.
Обозначения в алгоритме: ФНО – функция не определена.
Рассмотрим отдельно этапы алгоритма.
-
Запишем основной алгоритм решения задачи:
объявление вещ: x, y, z
ввод х, у
если () или ()
блок 1
иначе
блок 2
все_если
-
Математическое определение условий:
-
. Найдем уравнение прямой, проходящей через точки с координатами (-3;0) и (0;2). Запишем уравнение прямой в общем виде .
Таким образом, уравнение прямой .
.
-
. Определим уравнение окружности с центром в точке (2,0) радиуса R=2: (внешняя окружность). Определим уравнение окружности с центром в точке (2,0) радиуса R=1: (внутренняя окружность). Так как область D2 находится внутри кольца, включая его границы, то условием принадлежности точки (х,у) области D2 будут неравенства: , .
.
-
Вычислительные алгоритмы, соответствующие блокам 1,2:
Блок 1 |
Блок 2 |
если х-у ≠ 0 z=1/(x-y) печать х, у,z иначе «ФНО» все_если |
если ху > 0 z=ln(xy) печать х, у,z иначе «ФНО» все_если |
-
Написать программу, соответствующую алгоритму:
Алгоритм
Программа
объявление переменных вещ: х, у, z
ввод х, у
если (((x>=-3 и x<=0) и (y>=0 и
y<=2*x/3+2)) или
((x-2)*(x-2)+y*y<=4 и
(x-2)*(x-2)+y*y>=1))
если х-у ≠ 0
z=1/(x-y)
печать х, у,z
иначе
«ФНО»
все_если
иначе
если ху > 0
z=ln(xy)
печать х, у,z
иначе
«ФНО»
все_если
все_если
# include "stdio.h"
# include "math.h"
int main ( )
{
float x,y,z;
printf ("x=");
// ввод значения переменной x
scanf("%f",&x);
printf ("y=");
// ввод значения переменной y
scanf("%f",&y);
if((x>=-3&&x<=0&&y>=0&&
y<=2*x/3+2)||(pow(x-2,2)+y*y<=4
&& pow(x-2,2)+y*y>=1))
if(x-y!=0)
{
z=1/(x-y);
printf("x=%f,y=%f,z=%f\n",x,y,z);
}
else
printf("FNO\n");
else
if(x*y>0)
{
z=log(x*y);
printf("x=%f,y=%f,z=%f \n",x,y,z);
}
else
printf("FNO\n");
return 1;
}
-
Создать проект и реализовать данную задачу в среде Visual C++ 6.0.
Примечание. В качестве тестового примера можно ввести значения х=1, у=1 и х=3, у=5.
Пример 3. С клавиатуры вводится целое число от 0 до 99, обозначающее количество копеек. Написать программу, которая должна вывести правильно напечатанное окончание слова «копейка».
Ход выполнения работы
-
Напишем алгоритм решения задачи. Окончания слов будут зависеть от последней цифры чисел из диапазона от 0 до 9 и от 14 до 99. Исключением будут четыре числа: 11, 12, 13 и 14. В алгоритме и программе используем оператор выбора. Ключом для него будет остаток от деления введенного целого числа на 10 (так можно определить последнюю цифру двузначного целого числа).
-
Написать программу, соответствующую алгоритму:
Алгоритм
Программа
объявление переменных цел: х
ввод х
если x>=11 и x<=14
печать «х копеек»
иначе
выбор х%10
случай 1:
«х копейка»
случай 2:
«х копейки»
случай 3:
«х копейки»
случай 4:
«х копейки»
случай 5:
«х копеек»
случай 6:
«х копеек»
случай 7:
«х копеек»
случай 8:
«х копеек»
случай 9:
«х копеек»
все_выбор
все_если
# include "stdafx.h"
# include "stdio.h"
int main( )
{
int x;
printf ("x=");
//ввод х
scanf("%i",&x);
if(x>=11 && x<=14)
printf (“%i копеек\n”,x);
else
{
switch (x%10)
{
case 1:
printf (“%i копейка\n”,x);
break;
case 2:
printf (“%i копейки\n”,x);
break;
case 3:
printf (“%i копейки\n”,x);
break;
case 4:
printf (“%i копейки\n”,x);
break;
case 5:
printf (“%i копеек\n”,x);
break;
case 6:
printf (“%i копеек\n”,x);
break;
case 7:
printf (“%i копеек\n”,x);
break;
case 8:
printf (“%i копеек\n”,x);
break;
case 9:
printf (“%i копеек\n”,x);
break;
}
}
return 1;
}
-
Создать проект и реализовать данную задачу в среде Visual C++ 6.0.