- •Лекция 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. Полиморфизм
- •Библиографический список
2. Линейные вычислительные алгоритмы
Под линейным вычислительным алгоритмом будем понимать последовательность действий, состоящую из команд ввода, вывода и присваивания значений некоторым величинам. При описании таких алгоритмов используется только одна управляющая структура – следование.
Из определения алгоритма следует, что он должен начинаться с описания величин, которые используются при вычислениях. Такие величины подразделяют на переменные и константы. Переменная – именованная величина, значение которой может меняться в ходе вычислений. Имя переменной – это последовательность из букв латинского алфавита, десятичных цифр и символов подчёркивания, начинающаяся не с цифры. Такую последовательность называют идентификатором. Переменные бывают различных типов: целые, вещественные, символьные и др, поэтому при их описании будем указывать тип каждой переменной. Константа – это величина, представляющая фиксированное числовое, строковое или символьное значение. После описания переменных и констант (если они есть) следует описание действий, которые и составляют собственно алгоритм решения поставленной задачи.
Помимо операций ввода-вывода основным элементарным действием в алгоритме является операция присваивания значения переменной. Формат команды присваивания:
<имя переменной> = <выражение>
Знак «=» следует читать как «присвоить». Под командой присваивания понимается последовательность действий:
-
вычисляется выражение;
-
полученное значение записывается в переменную.
Отметим три основных свойства команды присваивания:
-
до тех пор пока переменной не присвоено никакое значение, она остается неопределенной;
-
значение, которое было присвоено переменной, сохраняется в ней до следующей операции присваивания другого значения этой переменной;
-
значение, вновь присвоенное переменной, заменяет её предыдущее значение.
Пример построения линейного вычислительного алгоритма
и соответствующего проекта в среде Visual C++ 6.0
Пример. Разработать алгоритм и составить по нему программу (разработать консольный проект) для вычисления значений функции z = . Область определения функции не учитывать.
Ход выполнения работы
-
Написать алгоритм решения задачи в виде логически правильной последовательности действий.
-
Перевести алгоритм на язык программирования (этот процесс называется кодированием). Ниже приведены алгоритм и соответствующая программа. Программа снабжена комментариями, поясняющими, с какой целью написан тот или иной оператор. Первые два пункта нужно выполнять в тетради по лабораторным работам.
Алгоритм
Программа
объявление вещ: х, у, z
ввод х , у
z=(sin3(x2)+cos(y))/(x2/3+5)
вывод х, у, z
// подключение головных файлов stdio.h и math.h
#include "stdio.h"
#include "math.h"
//заголовок главной функции main()
int main ( )
{
// объявление вещественных переменных x, y, z
float y, z, x;
// вывод на печать строки x=
printf ("x=");
// ввод значения переменной x
scanf ("%i",&x);
// вывод на печать строки у=
printf ("y=");
// ввод значения переменной y
scanf ("%f",&y);
// вычисление значения переменной z с использованием
// математических функций
z=(pow(sin(pow(x,2)),3)+cos(y))/(pow(x,(float)2/3)+5);
// вывод значений переменных x, y, z последовательно
printf ("x=%5i\ty=%f\tz=%7.3f\n",x, y, z);
// завершение работы главной функции
return 1;
}
-
Создать консольное приложение A “Hello, World!” application. Открыть главную функцию main(), для чего нужно выполнить шаги, описанные в Лекции 1.
-
В открывшемся окне редактора необходимо отредактировать текст главной функции следующим образом:
удалить все строки, следующие за строкой #include "stdafx.h".
за указанной строкой напечатать текст программы.
-
Запустить приложение на выполнение, как это описано в Лекции 1.
-
Отладить программу.
-
Сохранить отлаженный проект на рабочем диске.
Примечания:
-
При вычислении знаменателя функции z была применена операция приведения к типу данных: (float)2/3. Причиной этого является то, что знак ‘/’ обозначает операцию целочисленного деления, т.е. при делении целого числа на целое число результат округляется до нуля. Если же один из операндов является вещественной переменной, то в результате получается вещественное значение. В нашем случае операция приведения к типу данных (float) позволяет «перевести» число 2 из разряда целых чисел в разряд вещественных.
-
При запуске программы на экране монитора появится строка
x=_
Часть строки x= выводит на экран функция printf(), мигающий курсор – это приглашение к вводу значения переменной x с клавиатуры. Ввод значения с клавиатуры заканчивается нажатием клавиши <enter>. Приглашение к вводу и считывание значения, введенного с клавиатуры, в ячейку оперативной памяти, отведенную под переменную x, – это результат работы функции scanf().
-
В операторе, отвечающем за вычисление значения переменной z, знаменатель дроби записан в скобках. Необходимо следить за тем, чтобы при вычислении выражений скобки были расставлены правильно, т.е. при записи дробей числитель и знаменатель, представляющие собой сумму, разность или произведение, нужно заключать в скобки; аргументы функций также заключаются в скобки. Очень важно при записи выражений на языке С++ помнить о приоритете операций.
-
Запись \t в форматной строке означает горизонтальную табуляцию, а запись \n – перевод на другую строку.
-
При выводе на печать вещественного значения функцией printf() допустим следующие форматы вывода:
%<количество_позиций_под_значение>.<количество_позиций_под_дробную_часть>f
%<количество_позиций_под_значение>i
В приведенном примере формат вывода %5i означает, что при выводе переменной x под вывод всего значения переменной будет отведено 5 позиций, а формат вывода %7.3f означает, что при выводе переменной z под вывод всего значения переменной будет отведено 7 позиций, из них 3 позиции – под дробную часть.
Лекция 4
Разветвляющиеся вычислительные процессы
Цели:
-
познакомиться с понятием разветвляющегося вычислительного процесса;
-
познакомиться с понятием логического выражения, изучить логические операции и операции отношения и освоить методику построения логических выражений;
-
изучить операторы языка С++, позволяющие реализовывать разветвляющиеся вычислительные алгоритмы.
1. Управляющая структура «развилка».
Логические операции и операции отношения
При описании разветвляющихся вычислительных алгоритмов кроме управляющей структуры «следование» применяется структура «развилка», или «если–то–иначе». Применяется такая структура в случае, когда нужно выбрать одну из имеющихся последовательностей действий в зависимости от выполнения или невыполнения некоторого условия. Форма записи структуры:
если <условие>
действия1
иначе
действия2
все_если
Работа структуры организована по принципу: если <условие> истинно (выполняется), то выполняются действия1; в случае ложности (невыполнения) <условие> выполняются действия2.
Возможна вложенность структур «если–то–иначе» любой глубины, т.е. вместо действия1 и/или действия2 может быть записана еще одна структура «развилка» и т.д.
<условие>, записанное после слова если, представляет собой логическое выражение. Логическое выражение – это два операнда, соединенные либо логической операцией, либо операцией отношения. Под логической операцией понимается одна из операций, связывающих два операнда: И, ИЛИ или операция отрицания НЕ, записываемая перед операндом. Если <условие> – два условия, связанные логической операцией И, то <условие> будет истинным в случае одновременного исполнения этих двух условий. Если <условие> – два условия, связанные логической операцией ИЛИ, то <условие> будет истинным в случае, когда хотя бы одно из этих двух условий будет выполняться. Результаты выполнения логических операций приведены в табл.4.
Таблица 4 |
||||
Значение операнда 1 (оп1) |
Значение операнда 2 (оп2) |
Результат операций |
||
НЕ(оп1) |
(оп1) И (оп2) |
(оп1) ИЛИ (оп2) |
||
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
Под операцией отношения понимается одна из операций, связывающих два операнда: > (больше), >= (больше или равно), < (меньше), <= (меньше или равно), == (равно), != (не равно). Операция отношения позволяет сравнивать числовые выражения по их значениям.
Пример. Определить условие попадания точки с координатами (x;y) в указанную область D:
Напишем условие попадания точки с координатами (x;y) в указанную область. Очевидно, что данная область должна быть разбита на две непересекающиеся области D1 и D2, т.е. D=D1UD2. Таким образом, можно установить, что точка может попасть в D1 или в D2.
Опишем условие попадания точки (х;у) в области D1 и D2:
D1: x>=-4 И x<=4 И y>=0 И y<=2
D2: x>=0 И x<=2 И y>=-2 И y<=0
Таким образом, условие принадлежности точки с координатами (x;y) области D будет следующим:
(x>=-4 И x<=4 И y>=0 И y<=2) ИЛИ (x>=0 И x<=2 И y>=-2 И y<=0)
2. Операторы языка С++, позволяющие реализовывать разветвляющиеся вычислительные алгоритмы
Для реализации разветвляющихся вычислительных алгоритмов в языке С++ предусмотрены условный оператор if(), условное выражение и оператор выбора switch().