|
Программирование >> Немодифицирующие последовательные алгоритмы
прикладная программа: метод наименьших квадратов 209 double а, Ь; string FileName; cout Input file: ; cin FileName; ifstream file(FileName.c str()); if (ifile) { cout Cannot open input file.Xn ; return 1; int n = ReadPoints(file, x, y) ; cout << n = n endl; if (n < 2) { cout Too few points.\n ; return 1; if (ComputeCoeff(x, y, a, b) == 0) { cout Vertical line not allowed.\n ; return 1; cout Regression line is у = a + bx, where\n a = << a << and b = << b endl; ShowComputedPoints(x, y, a, b) ; return 0; Для файла data.txt, содержание которого приведено раньше, мы получаем показанные ниже результаты. Первые два столбца содержат заданные точки (х, yGiven), в то время как первый и третий столбцы представляют вычисленные точки (х, yComputed), которые принадлежат линии регрессии, изображенной на рисунке 7.1: Input file: data,txt n = 8 Regression line is у = a + bx, where a = 100.8 and b = 0.845528
8 - 858 Типы начальных значений Обратим внимание на то, что начальные значения, например третий аргумент при вызове SX = accumulate (x.begin о , x.endO, sx) ; задаются в программе с помощью инициализированных переменных, хотя мы могли бы написать вместо этого SX = accumulate (x.begin о , x.endO, 0.0); и не инициализировать переменную sx нулем. Последний вызов алгоритма accumulate является правильным, потому что константа 0.0 принадлежит к типу double. Но стоит отметить, что программа дает неверный результат, если в этом вызове мы заменим 0.0 на значение О типа int. Простой способ избежать таких проблем с неверным типом константы - использовать для начального значения ту же переменную, в которой сохраняется результат работы алгоритма. Этот принцип относится как к алгоритму accumulate, так и к алгоритму inner product. прикладная программа: очень большие числа 8.1. Введение Эта глава сильно отличается от предыдущих. В ней мы рассмотрим полезный на практике класс large, реализующий операции с очень большими числами, для чего он использует контейнеры и алгоритмы STL. Кроме достаточно сложного файла определения, large.cpp, для этого класса имеется соответствующий заголовок - large.h. Класс large используется двумя прикладными программами. Программа largedem.cpp демонстрирует все доступные операции. После этого мы рассмотрим более интересное приложение, программу largepi.cpp, которая вычисляет математическую константу 7t с любым заданным количеством знаков после запятой. Тема настоящей главы была рассмотрена в предыдущей книге Algorithms and Data Structures in С++ (см. библиографию), но без использования STL. Приведенный здесь вариант решения получился проще и элегантнее благодаря использованию вектора STL. Как мы упоминали в разделе 3.7, такая реализация позволяет обойтись без определения конструктора копирования и оператора присваивания. В текстах программ этой главы не используются операторы new и delete, тогда как версия из предыдущей
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |