Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2012, 23:04   #1
Kristino4ka
Пользователь
 
Регистрация: 25.05.2012
Сообщений: 12
Вопрос Не могу доделать

вот задание:

Составить программу для вычисления значения неэлементарной функции y = f(x). Реализовать решение несколькими способами:
1) полное ветвление;
2) краткая форма ветвления с использованием составных логических выражений;
3) с использованием условной операции.
Подобрать самостоятельно значения входных данных, демонстрирующие правильность работы программы. Количество тестов должно быть не менее 7 (внутри каждого интервала и на границах).
Аргумент функции прочитать из заранее подготовленного текстового файла In.txt, полученное значение функции вывести на экран и записать в выходной файл Out.txt
вот функция:
y= cosx/x+10 при x<-3
е в степени 0.1x при -3<=x<4
lgx при 4<=x<6
sin в квадрате x при x>=6
Аргумент записанный в файле=1
Каждая программа почему то выдаёт свой результат
код 1
Код:
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
int main()
{
   double x,y;
    fstream g("C:/In.txt",ios::in);
	g>>x;
	g.close();
	{
	if (x<-3)
    y=cos(x)/x+10;
	else
	if (x<=3&&x<4) 
	y=exp(0.1*x);
	else
    if (x<=4&&x<6) 
	y=log(x);
	else
    if (x>=6) 
	y=(1-cos(2*x))/2;
	}
	cout<<"y="<<y<<endl;
    fstream f ("C:/Out.txt",ios:: out);
	f<<y<<endl;
	f.close();
	system ("pause");
	return 0;
}
выдаёт результат=1.10517
код 2
Код:
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
int main()
{
    double x,y;
    fstream g("C:/In.txt",ios::in);
	g>>x;
	g.close();
	{
	if (x<-3)
    y=cos(x)/x+10;
    if (x<=3&&x<4) 
	y=exp(0.1*x);
	if (x<=4&&x<6) 
	y=log(x);
	if (x>=6) 
	y=(1-cos(2*x))/2;
	}
	cout<<"y="<<y<<endl;
    fstream f ("C:/Out.txt",ios:: out);
	f<<y<<endl;
	f.close();
	system ("pause");
	return 0;
}
выдаёт результат=0
код 3
Код:
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;
int main()
{
    double x,y;
    fstream g("C:/In.txt",ios::in);
	g>>x;
	g.close();
	y=(x<-3)?cos(x)/x+10: (x<=3&&x<4)?exp(0.1*x): (x<=4&&x<6)?log(x): (1-cos(2*x))/2;
		cout<<"y="<<y<<endl;
    fstream f ("C:/Out.txt",ios:: out);
	f<<y<<endl;
	f.close();
	system ("pause");
	return 0;
}
выдаёт такой же результат как и 1 код=1.10517
ошибки нигде не вылазиют.... помогите исправить код, чтоб всё было верно

Последний раз редактировалось Kristino4ka; 25.05.2012 в 23:10.
Kristino4ka вне форума Ответить с цитированием
Старый 25.05.2012, 23:34   #2
Kristino4ka
Пользователь
 
Регистрация: 25.05.2012
Сообщений: 12
По умолчанию

Помощь уже не нужна, сама исправила свои тупые ошибки
Kristino4ka вне форума Ответить с цитированием
Старый 26.05.2012, 06:17   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Полная форма:
Код:
if () {

}
else if () {

}
else {

}
Краткая форма:
Код:
if () {

}
In.txt
Цитата:
-2
-3
-1
3
4
5
6
7
Вот так посимпатичнее смотрится:
Код:
#include <iostream>
#include <cmath>
#include <fstream>
using namespace std;

/*
Функция y = f(x):
y = (cos(x)/x)+10 при x < -3
y = exp(0.1*x) при -3 <= x < 4
y = log(x) при 4 <= x < 6
y = (sin(x)) ^ 2 при x>=6
*/

double func1(double x);
double func2(double x);
double func3(double x);

int main()
{
    double x;
    ifstream infile;
    infile.open("In.txt");

    ofstream outfile;
    outfile.open("Out.txt");
    
    while (!infile.eof()) {
        infile >> x;
        outfile << func1(x) << "    " << func2(x) << "    " << func3(x) << endl;
    }

    cout << "See file: Out.txt" << endl;

    infile.close();
    outfile.close();
    return 0;
}

// полное ветвление
double func1(double x)
{
    double y;

    if (x < -3) {
        y = (cos(x)/x)+10;
    }
    else if ((-3 <= x) && (x < 4)) {
        y = exp(0.1*x);
    }
    else if ((4 <= x) && (x < 6)) {
        y = log(x);
    }
    else {
        y = pow(sin(x), 2.0);
    }

    return y;
}

// краткая форма ветвления с использованием составных логических выражений
double func2(double x)
{
    double y;

    if (x < -3) {
        y = (cos(x)/x)+10;
    }

    if ((-3 <= x) && (x < 4)) {
        y = exp(0.1*x);
    }

    if ((4 <= x) && (x < 6)) {
        y = log(x);
    }

    if (x >= 6) {
        y = pow(sin(x), 2.0);
    }

    return y;
}

// с использованием условной операции
double func3(double x)
{
    double y;

    (x < -3) ? (y = (cos(x)/x)+10) : ((-3 <= x) && (x < 4)) ?
                  (y = exp(0.1*x)) : ((4 <= x) && (x < 6)) ?
                      (y = log(x)) : (y = pow(sin(x), 2.0));

    return y;
}
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу доделать Sylar9 Общие вопросы C/C++ 2 26.05.2012 12:12
НЕ могу доделать! FraerFAkk Microsoft Office Access 2 08.04.2012 13:51
Не могу доделать задачу X-REY Паскаль, Turbo Pascal, PascalABC.NET 1 25.10.2011 20:50
не могу доделать на си VIKA1829 C# (си шарп) 3 27.02.2011 14:40
Не могу доделать ymanety Общие вопросы C/C++ 0 09.11.2010 22:11