Интерполирование

Автор работы: Пользователь скрыл имя, 21 Апреля 2013 в 16:05, контрольная работа

Описание работы

Задачи программы:
Найти значение функции в заданной точке (абсцисса вводится с клавиатуры);
Требуемая точность – 10^(-4);
Таблица значений функций в равно отстоящих узлах хранится в текстовом файле специального формата;
Вывод результатов по желанию пользователя: на экран или в текстовый файл

Файлы: 1 файл

Программирование_типовой.docx

— 18.92 Кб (Скачать файл)

Московский Энергетический Университет

(Технический Университет)

 

кафедра Автоматизации систем управления тепловыми процессами

 

 

 

 

 

 

 

 

 

 

 

 

 

Типовой расчет

на тему:

Интерполирование

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Студент:

Касаткин И.В.

Группа:

ТФ-07-09

Преподаватель:

Черняев А.Н.


 

 

 

 

 

Москва 2012

Задачи программы:

  • Найти значение функции в заданной точке (абсцисса вводится с клавиатуры);
  • Требуемая точность – 10^(-4);
  • Таблица значений функций в равно отстоящих узлах хранится в текстовом файле специального формата;
  • Вывод результатов по желанию пользователя: на экран или в текстовый файл.

Исходные данные:

  • Действительное число – значение абсциссы, которая вводится с клавиатуры;
  • Путь к файлу, который содержит таблицу значений (вводится с клавиатуры);
  • Таблица значений функции, которая хранится в текстовом файле с точностью 0.0001;
  • Сообщение пользователя о том, куда он хочет выводить результаты: на экран или в текстовый файл.

 

#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;

}


Информация о работе Интерполирование