Программирование >>  Немодифицирующие последовательные алгоритмы 

1 ... 65 66 67 [ 68 ] 69 70 71 ... 78


прикладная программа: метод наименьших квадратов 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

yGiven

yComputed

118.10

118.13

118.25

118.22

118.20

118.26

118.40

118.34

118.40

118.39

118.50

118.43

118.45

118.47

118.50

118.56

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, тогда как версия из предыдущей



1 ... 65 66 67 [ 68 ] 69 70 71 ... 78

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика