- •О.Л. Викентьева, А.Н. Гусин, O.A. Полякова
- •ПРОЕКТИРОВАНИЕ ПРОГРАММ И ПРОГРАММИРОВАНИЕ НА C++
- •1. СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ
- •10.1. Базовые конструкции структурного программирования
- •10.3. Составные операторы
- •10.4. Операторы выбора
- •10.5. Операторы циклов
- •10.6. Операторы перехода
- •11. ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ С ИСПОЛЬЗОВАНИЕМ ОСНОВНЫХ ОПЕРАТОРОВ C++
- •11.2. Программирование арифметических циклов
- •11.3. Программирование итерационных циклов
- •11.4. Программирование вложенных циклов
- •12. МАССИВЫ
- •12.1. Определение массива в C/C++
- •12.2. Примеры решения задач с использованием массивов
- •13. УКАЗАТЕЛИ
- •13.1. Понятие указателя
- •13.2. Динамическая память
- •13.3. Операции с указателями
- •14. ССЫЛКИ
- •15.3. Динамические массивы
- •СИМВОЛЬНАЯ ИНФОРМАЦИЯ И СТРОКИ
- •16.1. Представление символьной информации
- •16.2. Библиотечные функции для работы со строками
- •16.3. Примеры решения задач с использованием строк
- •17. ФУНКЦИИ В C++
- •17.1. Объявление и определение функций
- •17.2. Прототип функции
- •17.3. Параметры функции
- •17.4. Локальные и глобальные переменные
- •17.5. Функции и массивы
- •17.5.1. Передача одномерных массивов как параметров функции
- •17.5.2. Передача строк в качестве параметров функций
- •17.5.3. Передача многомерных массивов в функцию
- •17.6. Функции с начальными значениями параметров (по умолчанию)
- •17.7. Подставляемые (inline) функции
- •17.8. Функции с переменным числом параметров
- •17.9. Рекурсия
- •17.11. Шаблоны функций
- •17.12. Указатель на функцию
- •17.13. Ссылки на функцию
- •18. ТИПЫ ДАННЫХ, ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ
- •18.1. Переименование типов
- •18.2. Перечисления
- •18.3. Структуры
- •18.3.1. Работа со структурами
- •18.3.2. Битовые поля
- •18.3.3. Объединения
- •19. ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ
- •19.1. Создание элемента списка
- •19.2. Создание списка из п элементов
- •19.3. Перебор элементов списка
- •19.4. Удаление элемента с заданным номером
- •19.5. Добавление элемента с заданным номером
- •19.6. Двунаправленные списки
- •19.7. Очереди и стеки
- •19.8. Бинарные деревья
- •19.9. Обход дерева
- •19.10. Формирование дерева
- •19.11. Удаление элемента из дерева
- •19.12. Обработка деревьев с помощью рекурсивного обхода
- •20. ПРЕПРОЦЕССОРНЫЕ СРЕДСТВА
- •20.1. Стадии и команды препроцессорной обработки
- •20.2. Директива #define
- •20.3. Включение текстов из файлов
- •20.4. Условная компиляция
- •20.5. Макроподстановки средствами препроцессора
- •21.1. Проектирование программы
- •21.2. Кодирование и документирование программы
- •СПИСОК ЛИТЕРАТУРЫ
- •ПРОЕКТИРОВАНИЕ ПРОГРАММ И ПРОГРАММИРОВАНИЕ НА C++
f o r (d = 1 0 0 .0 ; d < 1 5 0 . 0 ; d * = l . 1 ) /^ к о р р е к ц и я с по
мощью ум н ож ени я*/ |
|
|
{ |
|
|
о п е р а т о р ; |
|
|
} |
|
|
5 . |
|
|
f o r |
(x = l;y < = 7 5 ;y = 5 * (x + + )+ 1 0 )/^ к о р р е к ц и я |
с по |
мощью |
ар и ф м е ти ч ес к о го вы раж ен и я*/ |
|
{ |
|
|
о п е р а т о р ; |
|
|
} |
|
|
6 . |
|
|
f o r |
(х= 1, у= 0 ; х < 1 0 ; х++; у+=х) ; ^ и с п о л ь з о в а н и е |
|
н е с к о л ь к и х корректирую щ их выраж ений, тел о |
цикла |
|
о т с у т с т в у е т * / |
|
|
10.6. Операторы перехода |
|
Операторы перехода выполняют безусловную передачу управления. |
||
• |
b r e a k - оператор прерывания цикла. |
|
{ |
|
|
о п е р а т о р ; |
|
|
i f |
(<вы раж ение__условие>) |
b r e a k ; |
о п е р а т о р ; |
|
|
} |
|
|
Таким образом, оператор b r e a k |
целесообразно использовать, ко |
гда условие продолжения итераций надо проверять в середине цикла.
/* Н ай ти |
сумму |
ч и с е л , |
ч и с л а |
в в о д я т с я |
с клави а |
||
туры |
до |
т е х |
п о р , |
п о ка не |
б у д е т |
в вед ен о |
100 чисел |
или |
0 . * / |
|
|
|
|
|
|
f o r ( s = 0 , |
i = l ; |
i< 1 0 0 ;i+ + ) |
|
|
|||
{ |
|
|
|
|
|
|
|
c in > > x ; |
|
|
|
|
|
||
i f ( |
x==0) b r e a k ; /* е с л и в вел и 0, то |
суммирова |
|||||
ние |
з а к а н ч и в а е т с я * / |
|
|
|
s+ = x ;
}
• |
t i n u e |
- переход к следующей итерации цикла. Он ис |
||||
пользуется, когда тело цикла содержит ветвления. |
|
|||||
//Н а й т и |
к о л и ч еств о и сумму |
полож ительных |
чисел |
|||
f o r ( |
k=0, s = 0 , х =1 ; х !=0;) |
|
|
|||
{ |
|
|
|
|
|
|
c in > > x ; |
|
|
|
|
||
i f |
(x<=0) |
c o n tin u e ; |
|
|
||
k++; |
s+=x; |
|
|
|
||
} |
|
|
|
|
|
|
• |
g o to |
<метка> - передает управление оператору, |
который |
|||
содержит метку. |
|
|
|
|||
В |
теле |
той |
же функции должна |
присутствовать конструкция |
||
< м етк а> : о п ер ат о р ; |
|
|
Метка - это обычный идентификатор, областью видимости кото рого является функция. Оператор g o to передает управления операто ру, стоящему после метки. Использование оператора g o to оправдано, если необходимо выполнить переход из нескольких вложенных циклов или переключателей вниз по тексту программы или перейти в одно место функции после выполнения различных действий.
Применение g o to нарушает принципы структурного и модуль ного программирования, по которым все блоки, из которых состоит программа, должны иметь только один вход и только один выход.
Нельзя передавать управление внутрь операторов i f , s w itc h и циклов. Нельзя переходить внутрь блоков, содержащих инициали зацию, на операторы, которые стоят после инициализации,
i n t |
к; |
g o to |
ш; |
int a=3,b=4;
к=а+Ь;
m: int с=к+1;
В этом примере при переходе на метку ш не будет выполняться инициализация переменных а, b и к.
• r e t u r n - оператор возврата из функции. Он всегда заверша ет выполнение функции и передает управление в точку ее вызова.
Вид оператора:
r e t u r n [вы р аж ен и е];
11. ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ С ИСПОЛЬЗОВАНИЕМ ОСНОВНЫХ ОПЕРАТОРОВ C++
Решение задач по программированию предполагает выполнение ряда этапов:
1. Разработка математической модели. На этом этапе определя ются исходные данные и результаты решения задачи, а также мате матические формулы, с помощью которых можно перейти от исход ных данных к конечному результату.
2.Разработка алгоритма. Определяются действия, выполняя ко торые можно будет от исходных данных придти к требуемому ре зультату.
3.Запись программы на некотором языке программирования. На этом этапе каждому шагу алгоритма ставится в соответствие конст рукция выбранного алгоритмического языка.
4.Выполнение программы (исходный модуль -» компилятор ->
-> объектный модуль —>компоновщик —> исполняемый модуль).
5. Тестирование и отладка программы. При выполнении про граммы могут возникнуть ошибки трех типов:
-синтаксические - исправляются на этапе компиляции;
-исполнения программы (деление на 0, логарифм от отрица
тельного числа и т.п.) - исправляются при выполнении программы;
- семантические (логические) ошибки - появляются из-за не правильно понятой задачи, неправильно составленного алгоритма.
Чтобы устранить эти ошибки, программа должна быть выполне на на некотором наборе тестов. Цель процесса тестирования - опре деление наличия ошибки, нахождение места ошибки, ее причины и соответствующие изменения программы - исправление. Тест - это набор исходных данных, для которых заранее известен результат. Тест, выявивший ошибку, считается успешным. Отладка программы заканчивается, когда достаточное количество тестов выполнилось неуспешно, т.е. программа на них выдала правильные результаты.
Для определения достаточного количества тестов существует два подхода. При первом подходе программа рассматривается как «черный ящик», в который передают исходные данные и получают результаты. Устройство самого ящика неизвестно. При этом подходе, чтобы осуществить полное тестирование, надо проверить программу на всех входных данных, что практически невозможно, поэтому
Математическая модель:
Ок=1 || II || III || VI, где I, II, III, IV - условия попадания точки в заштрихованную область для каждого квадранта.
Квадрант I: Область формируется прямыми ОХ и 0Y, прямой, проходящей через точки (0, 1) и (1, 0) и прямой, проходящей через
точки (0, 3) и (2, 0).
Необходимо определить уравнения прямых у = ах + Ь. Решаем
две системы уравнений: |
|
|
1 ) |
1 = а - 0 + Ь ;0 = а |
1 +Ь; |
2 ) |
2 = а*0 + Ь ;0 = а |
3 + Ь; |
Из этих систем получаем следующие уравнения прямых:
У= -1 х + 1;
у= -2/3 х + 1;
Тогда условие попадания точки в I квадрант будет выглядеть сле дующим образом:
у>=-х+1&&у<=-2/Зх+2&&у>=0&&х>=0.
Квадранты II и III: Область формируется прямыми ОХ и 0У
и двумя окружностями, описываемыми формулами х2 + у2 |
1, |
х2 + у2- 9 .
Тогда условие попадания точки во II и III квадранты будет вы глядеть следующим образом:
х2+у2>=1&& х2+у2<=9&&&&х<=0.
Квадрант IV: Область формируется двумя прямоугольниками. Точка может попадать либо в первый прямоугольник, либо во второй.
Условие попадания точки в IV квадрант будет выглядеть сле дующим образом:
(х>=0&&х<= 1&&у<=-1 &&у>=-3)|| (х>=1&&х<=3&&у<=0&&у>=-3).
Программа:
#include ciostream.h> #include <math.h>
void main()
{
float x,y; cout<<"\nEnter x, y"; cin>>x»y;
bool Ok=(y>=-x+l&&y<=2/3*x+2&&x>=0&&y>=0) II