- •Лекция 1 Создание консольного приложения
- •2. Консоль. Построение консольного проекта
- •3. Запуск приложения
- •4. Сохранение и редактирование проекта
- •Лекция 2
- •4. Функции форматированного ввода и вывода
- •4.1. Функция форматированного ввода с клавиатуры
- •4.2. Функция форматированного вывода на экран
- •5. Математические функции
- •Лекция 3 Линейные вычислительные процессы
- •1. Алгоритм. Управляющие структуры
- •2. Линейные вычислительные алгоритмы
- •Лекция 4 Разветвляющиеся вычислительные процессы
- •1. Управляющая структура «развилка». Логические операции и операции отношения
- •2.1. Условный оператор if()
- •2.2. Условное выражение
- •2.3. Оператор выбора switch()
- •Лекция 5 Программирование разветвляющихся вычислительных процессов
- •Лекция 6 Циклические вычислительные процессы.
- •1. Типы циклов
- •3. Операторы безусловного перехода
- •Лекция 7 Вычисление последовательностей
- •4. Примеры вычисления последовательностей
- •5. Структура алгоритмов вычисления рекуррентных последовательностей
- •Лекция 8 Одномерные массивы
- •1. Массивы
- •1.1. Примеры программ обработки одномерных массивов
- •Лекция 9 Алгоритмы сортировки одномерных массивов
- •1. Сортировка одномерных массивов
- •1.1. Метод пузырька (метод обменной сортировкой с выбором)
- •1.2. Сортировка выбором
- •1.3. Сортировка простыми вставками
- •Лекция 10 Двухмерные массивы
- •1. Двухмерные массивы
- •Лекция 11 Алгоритмы матричной алгебры
- •1. Алгоритмы матричной алгебры
- •Лекция 12 Динамические массивы
- •1. Память компьютера. Адресное пространство
- •2. Динамическая память
- •3. Адреса и указатели
- •4. Указатели и массивы. Динамические массивы
- •5. Проблемы, связанные с указателями
- •6. Поразрядные операции
- •Лекция 13
- •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. Передача параметров в функцию
- •Лекция 19 Многофайловые программы
- •1. Создание многофайловой программы. Создание и добавление головного файла в проект
- •3. Рекурсия
- •Лекция 20 Нахождение приближенного значения корня нелинейного уравнения
- •На отрезке [a;b] с заданной точностью eps
- •1.1. Метод дихотомии (половинного деления)
- •1.2. Метод хорд
- •1.3. Метод касательных (Ньютона)
- •Лекция 21 Нахождение приближенного значения определенного интеграла
- •1. Нахождение приближенного значения определенного интеграла с заданной точностью
- •Лекция 22 Объектно-ориентированное программирование
- •Полиморфизм – это свойство класса, позволяющее определить одно и то же по имени, но разное по смыслу действие. Основные этапы ооп:
- •Уточнённое имя принадлежит классу (т.Е. Компонентной) функции
- •Лекция 23 Объектно-ориентированное программирование
- •1. Конструкторы и деструкторы
- •Лекция 24 Объектно-ориентированное программирование
- •1. Компонентные данные и компонентные функции
- •1.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.