Автор работы: Пользователь скрыл имя, 21 Апреля 2013 в 16:05, контрольная работа
Задачи программы:
Найти значение функции в заданной точке (абсцисса вводится с клавиатуры);
Требуемая точность – 10^(-4);
Таблица значений функций в равно отстоящих узлах хранится в текстовом файле специального формата;
Вывод результатов по желанию пользователя: на экран или в текстовый файл
Московский Энергетический Университет
(Технический Университет)
кафедра Автоматизации систем управления тепловыми процессами
Типовой расчет
на тему:
Интерполирование
Студент: |
Касаткин И.В. |
Группа: |
ТФ-07-09 |
Преподаватель: |
Черняев А.Н. |
Москва 2012
Задачи программы:
Исходные данные:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
#include <locale.h>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "rus");
double a=0;
double b;
double a1, a2, b1, b2;
string path;
int precision();
cout.precision(.4);
cout<<"Введите путь к файлу: ";
cin>>path;
ifstream ifile(path.c_str(), ios::in);//объявление и открытие файлового потока для чтения, с_стр - преобразование из типа стринг в массив символов
if (ifile == NULL)
{
cout << "Файл не найден" << endl;
system("PAUSE");
return 1;
}
do
{
cout<<"Введите абсциссу: ";
cin>>a;
ifile >> a1 >> b1;
if (a < a1)
{
cout << "Ошибка! (Абсцисса не достигает диапазона)" << endl;
ifile.seekg(0,ios::beg);//
cout << "Повторить? y/n "<<endl;
continue;
}
do
{
ifile >> a2 >> b2;
if (a == a1)
{
b = b1;
break;//выход из цикла, к выводу результатов
}
if (a == a2)
{
b = b2;
break;
}
if ((a1 < a) && (a < a2))
{
b = (((b1-b2)*(a-a2))/(a1-a2))+b2;
break;
}
a1 = a2;//переопределение переменых для следующего шага
b1 = b2;
}
while (!ifile.eof());//ведем расчет пока не конец файла
if (a > a2)
{
cout<< "Ошибка! (Абсцисса превышает диапазон)" << endl;
ifile.seekg(0,ios::beg);
cout << "Повторить? y/n "<<endl;
continue;
}
cout << "Результат: " << b << endl;
cout << "Записать в файл? y/n "<< endl;
if (getch() == 'y')//возвращает код нажатой клавиши пользователем и сравнивается с y
{
cout << "Введите имя файла: ";
cin >> path;
ofstream ofile(path.c_str(), ios::app);// иос простанство имен, апп - для дозаписи
ofile << b << endl;
ofile.close();
}
ifile.seekg(0,ios::beg);
cout << "Повторить? y/n "<<endl;
}
while (getch() == 'y');
ifile.close();
return 0;
}