Форум программистов, компьютерный форум CyberForum.ru

Неправильно считает, очень прошу помочь - C++

Войти
Регистрация
Восстановить пароль
 
Yulya92
Сообщений: n/a
12.11.2009, 18:20     Неправильно считает, очень прошу помочь #1
1:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <math.h>
float epswhile(float x,float eps, float& posl,int& z)
{ float s=0,sl=0,d; int i=1;
  posl=0; 
  while(fabs(sl)<=eps)
    {
      d=i+1;
      sl=(pow(-1,d)*log(i*x))/i*(i*i+1);
      s=s+sl;
      posl=sl;
      i++;
    }
  z=i-1;
  return s;
}
2:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <math.h>
float epsdo(float x,float eps, float& posl,int& z)
{ float s=0,sl=0,d; int i=1;
  posl=0; d=i+1;
  do
    {
      s=s+sl;
      posl=sl;
      sl=(pow(-1,d)*log(i*x))/i*(i*i+1);
      i++;
    }
  while(fabs(sl)<=eps);
  z=i-1;
  return s;
}
3:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <math.h>
float epsfor(float x,float eps, float& posl,int& z)
{ float s=0,sl=0,d; int i;
  posl=0; d=i+1;
  for(i=1;fabs(sl)<=eps;i++)
    {
      s=s+sl;
      posl=sl;
      sl=(pow(-1,d)*log(i*x))/i*(i*i+1);
    }
  z=i-1;
  return s;
}
4:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <conio.h>
float epswhile(float x,float eps, float& posl,int& z);
float epsdo(float x,float eps, float& posl,int& z);
float epsfor(float x,float eps, float& posl,int& z);
using namespace std;
 
void main (void)
{ float x, eps,posl,s,sl;int z,Cycle;
  char Ans;
  setlocale (LC_ALL, "rus");
  do
  {
    cout <<"Введите действительные числа х и Е такие, что 0<E<=1 \n";
    cin>>x>>eps;
 
   if (eps>0 && eps<=1)
        {cout<<"Решить задачу с помощью \n 1-while \n 2-for \n 3-do...while";
             cin>>Cycle;
             switch (Cycle) 
             {
              case 1: sl=epswhile(x, eps,posl,z);break;
              case 2: sl=epsdo(x, eps,posl,z);break;
              case 3: sl=epsfor(x, eps,posl,z);break;
              default: cout<<"\n введите число от 1 до 3 \n";
             }
            cout<<"сумма S="<<s<<"\n последнее слогаемое вошедшее в сумму равно "<<posl<<"\n его номер "<<z;
        }
       else cout<<"Е не принадлежит заданному промежутку";
    
       cout<<"\n Повторить?\t Y/N";
    cin>>Ans;
  } 
  while (Ans=='Y');
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.11.2009, 18:20     Неправильно считает, очень прошу помочь
Посмотрите здесь:

Прошу помочь C++
программа неправильно считает C++
Очень прошу помочь... C++
C++ прошу помочь найти ошибку
Прошу помочь распределить время на изучение C++ C++
прошу помочь с программой на с++ C++
C++ Неправильно считает
C++ Прошу помочь в написании програмы ( оплачу)
C++ Программа неправильно считает
С++ неправильно считает C++
Неправильно считает C++
C++ Прошу объяснить о ссылках,указателях,стрелке -> и двоеточиях :: очень прошу я не понял синтаксис

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Iworb
анимешник++
 Аватар для Iworb
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 411
12.11.2009, 18:58     Неправильно считает, очень прошу помочь #2
в первом ты не присвоил начальное значение d

Добавлено через 24 секунды
а не, все норм.

Добавлено через 1 минуту
нужна проверка на х>0

Добавлено через 1 минуту
C
1
  if((x<0)||(eps<0)) return s;
попробуй добавить это

Добавлено через 6 минут
а вот и ошибка:
C
1
2
3
case 1: sl=epswhile(x, eps,posl,z);break;
              case 2: sl=epsdo(x, eps,posl,z);break;
              case 3: sl=epsfor(x, eps,posl,z);break;
заменить на
C
1
2
3
case 1: s=epswhile(x, eps,posl,z);break;
              case 2: s=epsdo(x, eps,posl,z);break;
              case 3: s=epsfor(x, eps,posl,z);break;
ведь ты возвращаешь значение s

Добавлено через 3 минуты
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <math.h>
float epswhile(float x,float eps, float& posl,int& z)
{ float s=0,sl=0,d; int i=1;
  posl=0; 
  while(fabs(sl)<=eps)
        {
          d=i+1;
          sl=(pow(-1,d)*log(i*x))/i*(i*i+1);
          s=s+sl;
          posl=sl;
          i++;
        }
  z=i-1;
  return s;
}
я конечно не уверен, но чтобы найти posl нужно заменить строчку или на &posl=&sl или на *posl=*sl(точно не помню на что), чтобы после возврата функцией значения s значение posl сохранялось

Добавлено через 55 секунд
и вообще - нафига его передавать функции?????

Добавлено через 20 секунд
ведь именно функция его и ищет

Добавлено через 2 минуты
вообщем во все 3 функции добавь проверку икса на положительность (чтобы логарифм не ругался)

Добавлено через 2 минуты
1. Если не ошибаюсь, то так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <math.h>
float epswhile(float x,float eps, int& z)//а зачем вообще у тебя z?? объясни код программы(в данном случае, что делает именно эта переменная)
{ float s=0,sl=0,d; int i=1;
  posl=0; 
  while(fabs(sl)<=eps)
        {
          d=i+1;
          sl=(pow(-1,d)*log(i*x))/i*(i*i+1);
          s=s+sl;
          *posl=sl;
          i++;
        }
  z=i-1;
  return s;
}
Добавлено через 5 минут
ладно, мне пора, если что тебе помогут - тут есть такие люди, но вообщем пару ошибок нашел =^_~=
Yulya92
Сообщений: n/a
12.11.2009, 21:50     Неправильно считает, очень прошу помочь #3
спасибо за помощ Iworb..

Вот задание:
http://img687.imageshack.us/img687/4759/17699271.jpg

Добавлено через 1 час 55 минут
не работает, ночь сидела, даже не знаю, что еще может быть

Добавлено через 22 секунды
помогите пожалуйста
Том Ардер
Модератор
 Аватар для Том Ардер
3646 / 2265 / 276
Регистрация: 15.06.2009
Сообщений: 3,978
13.11.2009, 00:28     Неправильно считает, очень прошу помочь #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Основная ошибка - чрезмерное усложнение.

Вот вычислительная часть:

C++
1
2
3
4
5
6
7
8
9
10
11
12
float sum = 0,
    sign = 1;
float term;  // текущее слагаемое ряда
int i = 1;
 
do
{
    term = log(i*x)/(i*(i*i+1));
    sum += sign*term;
    sign = -sign;     // зачем же юзать pow(-1,d)?
    i++;
} while (fabs(term) > eps);
Добавлено через 4 минуты
Цитата Сообщение от Yulya92 Посмотреть сообщение
log(i*x))/i*(i*i+1)
Знаменатели везде у тя неправильные!
Yandex
Объявления
13.11.2009, 00:28     Неправильно считает, очень прошу помочь
Ответ Создать тему
Опции темы

Текущее время: 05:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru