- •ГЛАВА 7. ОСНОВЫ АЛГОРИТМИЗАЦИИ
- •1. ПОНЯТИЕ ОБ АЛГОРИТМЕ
- •2. ОСНОВНЫЕ СТРУКТУРЫ
- •2.1. Структура «следование»
- •2.2. Структура «развилка»
- •2.3. Структура «цикл»
- •3. ОСНОВНЫЕ ТИПЫ АЛГОРИТМОВ
- •3.1. Линейный алгоритм
- •3.2. Разветвленный алгоритм
- •3.3. Циклический алгоритм
- •Практические задания
- •1. Алгоритмы линейной структуры
- •2. Алгоритмы разветвляющейся структуры
- •3. Алгоритмы циклической структуры (цикл «ПОКА»)
- •4. Алгоритмы циклической структуры (цикл «ДО»)
- •ГЛАВА 8. ОСНОВЫ ПРОГРАММИРОВАНИЯ В СРЕДЕ VISUAL С++ 2005
- •ВВЕДЕНИЕ
- •1. РАЗРАБОТКА ПРОГРАММЫ
- •2. ПЕРЕМЕННЫЕ
- •3. ЛИНЕЙНАЯ ПРОГРАММА
- •3.1. Оформление линейной программы
- •3.2. Программирование в стандартизованной среде CLR
- •Практические задания
- •Русская система мер
- •4. ПРОГРАММА С ВЕТВЛЕНИЕМ
- •Практические задания
- •5. ЦИКЛ С ПАРАМЕТРОМ
- •6. ЦИКЛ «ПОКА»
- •Практические задания
- •7. ОДНОМЕРНЫЕ МАССИВЫ
- •7.1. Понятие об одномерном массиве
- •7.2. Сортировка в одномерном массиве
- •Практические задания
- •8. ДВУМЕРНЫЕ МАССИВЫ
- •8.1. Понятие о двумерном массиве
- •8.2. Датчик случайных чисел
- •Практические задания
- •9. ФУНКЦИИ
- •9.1. Понятие о пользовательских функциях
- •Рис. 8.20. Пятиугольник со сторонами a, b, c, d, f и диагоналями h,g.
- •9.2. Рекурсия
- •9.3. Вызов функции из функции
- •9.4. Функция типа void и глобальные переменные
- •9.5. Передача в функцию имени функции
- •Практические задания
- •10. СОБСТВЕННАЯ БИБЛИОТЕКА ПРОГРАММИСТА
- •10.1. Перегрузка функций
- •Рис. 8.25. Результат работы программы примера
- •11. ПЕРЕЧИСЛИМЫЙ ТИП
- •11.1. Понятие о перечислимом типе
- •11.2. Множественный выбор
- •12. УКАЗАТЕЛИ
- •12.1. Понятие об указателях
- •12.2. Указатели и функции
- •12.3. Указатели и динамические массивы
- •12.4. Указатели и перегрузка операций
- •13. ОБРАБОТКА СИМВОЛЬНЫХ СТРОК
- •13.1. Символьные переменные
- •13.2. Символьные строки (как массивы символов)
- •13.3. Обработка массивов строк
- •Практические задания
- •14. СТРУКТУРЫ
- •Практические задания
- •15. КЛАССЫ
- •15.1. Понятие класса
- •15.2. Открытые и закрытые члены класса
- •15.3. Конструкторы и деструкторы
- •Практические задания
- •Раздел А
- •Раздел Б
- •16. ФАЙЛЫ
- •16.1. Работа с текстовыми файлами
- •16.2. Работа со структурами в файлах
- •16.3. Работа с классами в файлах
- •Практические задания
- •Раздел А
- •Раздел Б
- •ПРИЛОЖЕНИЯ
- •Приложение 1. Список библиотечных функций
- •Математические функции
- •Строковые функции (для работы с символьными массивами)
- •Приложение 2. План лабораторных работ
- •ГЛАВА 9. ПРИЛОЖЕНИЯ WINDOWS FORMS
- •ВВЕДЕНИЕ
- •1. РАЗРАБОТКА ПРИЛОЖЕНИЯ
- •3. ДИНАМИЧЕСКИЕ ССЫЛКИ НА ОБЪЕКТЫ
- •3.1 Понятие о динамических ссылках.
- •3.2. Программа «Калькулятор»
- •4. ИСПОЛЬЗОВАНИЕ ТАЙМЕРА. КОМПОНЕНТ CHECKBOX
- •4.1 Таймер
- •4.2. Компонент CheckBox
- •5. СПИСКИ ВЫБОРА И ПОЛОСЫ ПРОКРУТКИ. ГРАФИЧЕСКИЕ КОМПОНЕНТЫ В C++Builder
- •5.1. Список выбора ListBox
- •5.2. Полосы прокрутки
- •5.3. Графика
- •6. РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИ.
- •6.1. Чтение и запись текстового файла
- •ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ
- •Раздел 1. Кнопки, метки и окна редактирования
- •Раздел 2. Радиокнопки
- •Раздел 3. Полосы прокрутки
- •Раздел 4. Обработка текстовых файлов
- •ЛИТЕРАТУРА
- •ТЕСТЫ
- •Тесты по основам алгоритмизации
- •Тесты по программированию на С++
- •Учебное издание
72
9.5. Передача в функцию имени функции
Как передать в функцию имя функции? Точно так же, как любую другую величину: в списке параметров перед именем параметра указать его тип. Значит, специально нужно будет определить собственный тип для функции. А правильнее задать синоним с помощью ключевого слова typedef:
typedef double (*Pfun) (double, double)
(в данном случае описали функциональный типPfun для функции от двух параметров)
Пример 9.6. Создадим программу с функцией для вывода таблицы значений произвольной функции в заданных пределах и с указанным шагом. И соответственно нужную функцию будем туда передавать (в функцию вывода).
//передача в функцию имени функции
//для построения таблицы переданной функции
#include <iostream> #include <math.h> #include <iomanip> #include <windows.h> using namespace std;
typedef double(*Pfun)(double);
void print_tabl(Pfun fun, double xn, double xk, double dx); double cosh(double x);
int main()
{ double xn, xk, dx; char str[256];
AnsiToOem("введите xn, xk, dx ",str); cout<<str; cin>>xn>>xk>>dx;
print_tabl(cosh, xn, xk, dx); return(0);
}
void print_tabl(Pfun fun, double xn, double xk, double dx) {double x; cout<<"--------------------------------------\n";
cout<<"| |
X |
| |
Y |
|\n" ; |
cout<<"------------------------------------- |
|
|
|
|\n"; |
for (x= xn; x<=xk; x+=dx) |
|
|
||
cout<<"\n"<<setw(15)<< x <<setw(15)<<fun(x); |
||||
cout<<"\n------------------------------------ |
|
|
|
|\n"; |
} |
|
|
|
|
double cosh(double x) |
|
|
||
{ double y; |
|
|
|
|
y=(exp(x)+exp(-x))/2; |
|
|
||
return(y) |
; |
} |
|
|
73
В результате выполнения программы получим, например, такой результат (рис. 8.24)
Рис. 8.24. Результат работы примера 9.6
Практические задания
9.1.Даны числа a, b, c, d. Получить x = max(a, b), y = max(c, d), z = max(x, y). Вычисление max(k, m) (большего из двух чисел k, m) оформить функцией.
9.2.Оформить функцию step(x, n) от вещественного х и целого n, вычисляющую (через последовательное умножение) xn и проверить ее в работе.
9.3.Даны координаты вершин двух треугольников. Определить, какой из них имеет большую площадь. Вычисление площади треугольника по координатам оформить функцией.
9.4.Даны четыре натуральных числа. Найти наименьшее общее кратное (НОК) для этих четырех чисел. Поиск НОК двух чисел оформить функцией.
9.5.Даны координаты n точек на плоскости в виде масивов X, Y. Найти наиболее и наименее удаленные точки. Вычисление расстояния между парой точек оформить функцией.
74
9.6. Даны отрезки a, b, c, d. Для каждой тройки этих отрезков, из которых можно построить треугольник, напечатать площадь данного треугольника. Вычисление площади треугольника по -за данным сторонам x, y, z с проверкой существования такого треугольника оформить функцией.
9.7. Рассчитать набор из n чисел Фибоначчи: 1, 1, 2, 3, 5, 8, 13, 21... (т.е. f(n) = f(n – 1) + f(n – 2)). Для вычисления очередного числа Фибоначчи оформить рекурсивную функцию.
9.8. Дано число n. Получить все простые делители этого числа. Процедуру распознания простого числа оформить отдельно. (Напомним, что простым называется число, которое не имеет целочисленных делителей, кроме единицы и самого себя).
9.9. Составить программу, которая число, заданное в десятичной системе счисления, переведет в: а) двоичную систему счисле-
ния; б) восьмеричную. Перевод |
в каждую |
из |
систем |
счисления |
||
оформить отдельной функцией. |
|
|
|
|
|
|
9.10. Составить программу, которая позволит вычислитьN-ю |
||||||
степень числа X, пользуясь формулой: |
N =0, |
|
|
|
||
ì1, |
|
при |
|
|
|
|
X N = ï1/ X |N| |
при |
N <0, |
|
|
|
|
í |
N -1 |
|
|
|
|
|
ï |
при |
N >0. |
|
|
|
|
îX × X |
|
|
|
|
||
Оформить вычисление |
такой |
степени |
в |
виде |
рекурсивной |
|
функции. |
|
|
|
|
|
|
9.11. Написать функцию, которая сравнивает два целых числа и возвращает результат сравнения в виде одного из знаков: >, < или =. Проверить ее в работе, написав программу с ее использованием.
9.12. Написать функцию, которая вычисляет сопротивление цепи состоящей из двух проводников. Параметрами ее являются значения сопротивлений, а также тип соединения– последовательное или параллельное (цифрами 1 или 2). Проверить ее в работе, написав программу с ее использованием.
9.13. Написать функцию для вычисления заданного процента введенного числа. У функции два параметра – процент и само число. Проверить ее в работе, написав программу с ее использованием.
9.14. Написать функцию, которая вычисляет доход по вкладу. Исходными данными для функции являются: величина вклада, процентная ставка (годовых) и срок вклада (количество дней). Проверить ее в работе, написав программу с ее использованием.
9.15. Написать подпрограмму, которая возвращает преобразованную к верхнему регистру строку, полученную в качестве аргу-
75
мента (т.е. вместо малых букв выводит строку заглавными буквами). Проверить ее в работе, написав программу с ее использованием.
9.16. Написать функцию решения квадратного уравнения. Исходными данными для подпрограммы должны быть коэффициенты уравнения, а выдавать подпрограмма должна сообщение о том, есть корни или нет корней, их количество и их значение. Проверять вводимые данные (коэффициент при x2 не должен быть нулем). Проверить ее в работе, написав программу с ее использованием.
9.17. Написать функцию, которая выводит на экран строку, состоящую из звездочек. Длина строки (количество звездочек) задается извне. Проверить ее в работе, написав программу с ее использованием.
9.18. Дано натуральное число n. Среди чисел 1, 2, ..., n найти все те, которые можно представить в виде суммы квадратов двух натуральных чисел. (Определить функцию, позволяющую распознавать полные квадраты.)
9.19. Даны действительные числах1, у1, х2, у2, ..., х10, у10. Найти периметр десятиугольника, вершины которого имеют соответственно координаты (х1, у1), (х2, у2), ..., (х10, у10). (Определить функцию вычисления расстояния между двумя точками, заданными своими координатами.)
9.20. Дано натуральное числоn. Выяснить, имеются ли среди чисел n, n + 1, ..., 2n близнецы, т.е. простые числа, разность между которыми равна двум. (Определить процедуру, позволяющую распознавать простые числа.)
В пяти следующих задачах потребуется сократить обыкновенную дробь результата. Процедуру сокращения дроби оформить в виде отдельной функции(напомним, что для этого нужно искать наибольший общий делитель для числителя и знаменателя дроби).
9.21. Cоставить программу для сложения двух обыкновенных дробей a/b + c/d.
9.22. Cоставить программу для вычитания двух обыкновенных дробей a/b – c/d.
9.23. Cоставить программу для умножения двух обыкновенных дробей a/b * c/d.
9.24. Cоставить программу для деления двух обыкновенных дробей a/b : c/d.
9.25. Cоставить программу для возведения в степень обыкновенной дроби.