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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2009, 22:39   #1
Vultar
Пользователь
 
Регистрация: 12.11.2009
Сообщений: 12
По умолчанию Перегрузка функции в С++

Помогите пожалуйста исправить ошибку!
Вот код:
Код:
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
int fact (int k)
{
if (k<0)
cout <<"\n ERROR:this value of factorial is wrong";
if (k==0 || k==1)
return 1;
return (k*fact(k-1));
}

int main()
{
	const int maxiter=500;
	int n;
	double x, Eps;
    double y, yp;
	int k;
	cout<<"Vvedite argument"<<endl;
	cin>>x;
	if (x==0)
    cout<<"Wrong value of argument"<<endl;
	cout<<"Vvedite tochnost"<<endl;
	cin>>Eps;
	if (Eps<0)
    cout<<"Wrong value of tochnost"<<endl;
	n=((2*k)+1);
	y=1;
	y=yp;
	for (k=0;fabs(yp)>Eps;k++)
	{
		yp*=((pow(-1,k))*(pow(x,n)))/((fact(k)*n));
		y+=yp;
	}
	if (k<maxiter)
	{
		cout<<"\nZnachenie funkcii:"<<y<<" dlia x= "<<x<<endl;
		cout<<"\nVichisleno posle"<<k<<" iterazii"<<endl;
	}
	if (k>maxiter)
		cout<<"Riad rashoditsa";
	return 0;
}
ошибка в выделенной строке следующая:
Ошибка 1 error C2668: pow: неоднозначный вызов перегруженной функции

Последний раз редактировалось Stilet; 19.11.2009 в 11:41.
Vultar вне форума Ответить с цитированием
Старый 18.11.2009, 22:57   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

какой компилятор? в вижуале нет перегруженной функции pow(int,int)

чтобы решить вану проблему нужно явно привести параметр функции к типу float или double

Код:
yp*=((pow((double)-1,k))*(pow(x,n)))/((fact(k)*n));
counter вне форума Ответить с цитированием
Старый 18.11.2009, 23:28   #3
Vultar
Пользователь
 
Регистрация: 12.11.2009
Сообщений: 12
Вопрос

Спасибо за помощь,но теперь,после внедрения рекомендованых выше изменений, у меня другой вопрос:
в строке
n=((2*k)+1);
Предупреждение1 warning C4700: использована неинициализированная локальная переменная "k"
а в строке
y=yp;
Предупреждение2 warning C4700: использована неинициализированная локальная переменная "yp"
Поясните пожалуйста что не так.
Vultar вне форума Ответить с цитированием
Старый 19.11.2009, 01:03   #4
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Vultar Посмотреть сообщение
Спасибо за помощь,но теперь,после внедрения рекомендованых выше изменений, у меня другой вопрос:
в строке
n=((2*k)+1);
Предупреждение1 warning C4700: использована неинициализированная локальная переменная "k"
а в строке
y=yp;
Предупреждение2 warning C4700: использована неинициализированная локальная переменная "yp"
Поясните пожалуйста что не так.
возможно, дело в том, что и правда использована неинициализированная локальная переменная?
m0nax вне форума Ответить с цитированием
Старый 19.11.2009, 01:54   #5
Vultar
Пользователь
 
Регистрация: 12.11.2009
Сообщений: 12
По умолчанию

А как ее инициализировать?Разве объявления в теле функции недостаточно?
Vultar вне форума Ответить с цитированием
Старый 19.11.2009, 03:21   #6
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

инициализация в данном случае это присваивание значения
m0nax вне форума Ответить с цитированием
Старый 19.11.2009, 11:30   #7
Vultar
Пользователь
 
Регистрация: 12.11.2009
Сообщений: 12
Вопрос

Я что-то вообще не пойму что нужно сделать.......Разве
y=yp не достаточно?Покажите пожалуйста,а то я совершенно не понимаю в чем проблема
Vultar вне форума Ответить с цитированием
Старый 19.11.2009, 13:12   #8
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от Vultar Посмотреть сообщение
в строке
n=((2*k)+1);
Предупреждение1 warning C4700: использована неинициализированная локальная переменная "k"
Дело в том, что в этом выражении переменная k не имеет корректного значения (k=1245120), что приведет к некорректному результату вычисления.
Вам надо либо ввести значение k с клавиатуры (cin>>k либо инициализировать ее при объявлении (int k=3).

Цитата:
Сообщение от Vultar Посмотреть сообщение
а в строке
y=yp;
Предупреждение2 warning C4700: использована неинициализированная локальная переменная "yp"
то же самое, что и в предыдущем случае, но возможно здесь нужно так yp=y;

Последний раз редактировалось counter; 19.11.2009 в 13:14.
counter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка в С++ Tat-ka Помощь студентам 1 08.11.2009 03:26
перегрузка alema Общие вопросы C/C++ 2 28.10.2009 21:20
Перегрузка nevermind_111 Общие вопросы .NET 2 14.10.2009 12:40
Перегрузка ++ counter Общие вопросы C/C++ 3 20.12.2008 13:30
перегрузка + softrix Общие вопросы C/C++ 2 21.06.2008 22:27