• Paranoid - курс по анонимности и безопасности в сети от команды codeby. Защита персональных данных, анонимность в сети интернет, настройка виртуальных машин, безопасная передача данных, анти форензика и еще много всего полезного. Подробнее ...

Вычислить С Точностью ε Сумму И Указать Количество Учтенных Слаг

07.09.2013
4
0
#1
Даны действительные x,ε(x ≠ 0,ε > 0)и целые k,a,n числа. Вычислить с точностью
ε сумму и указать количество учтенных слагаемых. Считать, что требуемая
точность достигнута, если вычислена сумма нескольких первых слагаемых и
очередное слагаемое оказалось по модулю меньше, чем ε , - это и все последующие
слагаемые можно уже не учитывать. Проверить правильность вычислений на
тестовых примерах, используя возможности отладчика, проследить изменение
значений слагаемых суммы ряда, выполнив отладку цикла.

Подскажите пожалуйста...

2.jpg
Код:
#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <clocale>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
setlocale(0,"Rus");
double x, e;
cout<<"Введите значение аргумента x = ";
cin>>x;
cout<<"Введите значение точности вычисляемой суммы (e>0) e = ";
cin>>e;
double summa = 0; //в переменной summa накапливаем сумму ряда
if (e>0) //точность E должна быть больше нуля
{
//вычисляем первое слагаемое ряда
int k = 2k+1;
double k_element = pow(-1.,k*(x,4k+3));
//вычисление суммы ряда
while (k_element > e && k <= INT_MAX)
{
cout<<"k = "<<k<<"\t"<<k_element<<"\n";
k_element *= x;
k_element /= k;
summa += k_element/4k+3;
k++;
}
cout<<"Сумма ряда = "<<summa<<"\n";
cout<<"Количество учтенных слагаемых = "<<k-1<<"\n";
}
else  
cout<<"Ошибка ввода. Точность больше нуля!\n";
system("pause");
return 0;
}
 

Вложения

  • 5.4 КБ Просмотры: 201
R

rrrFer

#2
приведенная программа не работает или работает неправильно? - в чем подсказать?
 
R

rrrFer

#4
компилятор выдаёт ошибку, не компилируеться... не могу понять, в чём дело!
какую ошибку выдает компилятор?
и какой именно компилятор вы используете?

у меня компилятор gcc, он будет ругаться уже на первой строке:
#include "stdafx.h"

а потом еще тут: (потому что тип _TCHAR не стандартный)
int _tmain(int argc, _TCHAR* argv[])

а потом он скажет, что функции main нету в вашей программе (_tmain он не принимает во внимание).

Ну а дальше я код смотреть не стал, не знаю что ему еще может не понравиться.

У вас какой компилятор, какие ошибки? - как грится..."это форум программистов, а не экстрасенсов", угадывать тут никто не будет.
 
07.09.2013
4
0
#5
какую ошибку выдает компилятор?
и какой именно компилятор вы используете?

у меня компилятор gcc, он будет ругаться уже на первой строке:
#include "stdafx.h"

а потом еще тут: (потому что тип _TCHAR не стандартный)
int _tmain(int argc, _TCHAR* argv[])

а потом он скажет, что функции main нету в вашей программе (_tmain он не принимает во внимание).

Ну а дальше я код смотреть не стал, не знаю что ему еще может не понравиться.

У вас какой компилятор, какие ошибки? - как грится..."это форум программистов, а не экстрасенсов", угадывать тут никто не будет.
Вот ошибка:
1>------ Rebuild All started: Project: Lab_1, Configuration: Debug Win32 ------
1> stdafx.cpp
1> Lab_1.cpp
1>c:\users\сергей\documents\visual studio 2012\projects\kytepov\lab_1\lab_1.cpp(24): error C2059: syntax error : 'bad suffix on number'
1>c:\users\сергей\documents\visual studio 2012\projects\kytepov\lab_1\lab_1.cpp(24): error C2146: syntax error : missing ')' before identifier 'k'
1>c:\users\сергей\documents\visual studio 2012\projects\kytepov\lab_1\lab_1.cpp(24): error C2059: syntax error : ')'
1>c:\users\сергей\documents\visual studio 2012\projects\kytepov\lab_1\lab_1.cpp(31): error C2059: syntax error : 'bad suffix on number'
1>c:\users\сергей\documents\visual studio 2012\projects\kytepov\lab_1\lab_1.cpp(31): error C2146: syntax error : missing ';' before identifier 'k'
1>c:\users\сергей\documents\visual studio 2012\projects\kytepov\lab_1\lab_1.cpp(31): warning C4552: '+' : operator has no effect; expected operator with side-effect
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

Работаю в Visual Studio 2012, консольное приложение!
 
R

rrrFer

#6
Но это ошибки не от того кода, который ты на форум кинул.
компилятор тебе сообщил об ошибках в 24 и 31 строчках.
В 24 ему не хватает скобочки и не нравится число перед переменной, в частности.
Но в коде, который лежит на форуме 24 строка состоит только из фигурной скобки ("{").

Научись уже задавать вопросы нормально.

Скорее всего 24 строка кода форума - это 21 строка в том коде что ты компилировал.
Код:
double k_element = pow(-1.,k*(x,4k+3));
Что такое 4k ?

А 31 строка соответствует 28.

Код:
summa += k_element/4k+3;
имена переменных не могут начинаться с цифры (если ты хотел сделать 4к переменной) и 4к - это не число.


-----------добавил


Да и вообще все как-то не так, по заданию тебе нужен факториал, где он?
Я не вижу где ты инициализируешь переменные перед циклом (в задании сказано что сумма считается от k = 0, а где ты присваиваешь переменной-счетчику ноль?)

Это типа k-тый элемент?:
Код:
k_element *= x;
k_element /= k;
Тогда у тебя ряд (x^n) / (k^n), а не тот, который по заданию.
 
07.09.2013
4
0
#7
Но это ошибки не от того кода, который ты на форум кинул.
компилятор тебе сообщил об ошибках в 24 и 31 строчках.
В 24 ему не хватает скобочки и не нравится число перед переменной, в частности.
Но в коде, который лежит на форуме 24 строка состоит только из фигурной скобки ("{").

Научись уже задавать вопросы нормально.

Скорее всего 24 строка кода форума - это 21 строка в том коде что ты компилировал.
Код:
double k_element = pow(-1.,k*(x,4k+3));
Что такое 4k ?

А 31 строка соответствует 28.

Код:
summa += k_element/4k+3;
имена переменных не могут начинаться с цифры (если ты хотел сделать 4к переменной) и 4к - это не число.


-----------добавил


Да и вообще все как-то не так, по заданию тебе нужен факториал, где он?
Я не вижу где ты инициализируешь переменные перед циклом (в задании сказано что сумма считается от k = 0, а где ты присваиваешь переменной-счетчику ноль?)

Это типа k-тый элемент?:
Код:
k_element *= x;
k_element /= k;
Тогда у тебя ряд (x^n) / (k^n), а не тот, который по заданию.
вот и попросил помощи, разобраться в коде, можешь редактировать... я просто только начинающий, поступил на физ-тех помоги, а!
 
07.09.2013
4
0
#8
Но это ошибки не от того кода, который ты на форум кинул.
компилятор тебе сообщил об ошибках в 24 и 31 строчках.
В 24 ему не хватает скобочки и не нравится число перед переменной, в частности.
Но в коде, который лежит на форуме 24 строка состоит только из фигурной скобки ("{").

Научись уже задавать вопросы нормально.

Скорее всего 24 строка кода форума - это 21 строка в том коде что ты компилировал.
Код:
double k_element = pow(-1.,k*(x,4k+3));
Что такое 4k ?

А 31 строка соответствует 28.

Код:
summa += k_element/4k+3;
имена переменных не могут начинаться с цифры (если ты хотел сделать 4к переменной) и 4к - это не число.


-----------добавил


Да и вообще все как-то не так, по заданию тебе нужен факториал, где он?
Я не вижу где ты инициализируешь переменные перед циклом (в задании сказано что сумма считается от k = 0, а где ты присваиваешь переменной-счетчику ноль?)

Это типа k-тый элемент?:
Код:
k_element *= x;
k_element /= k;
Тогда у тебя ряд (x^n) / (k^n), а не тот, который по заданию.
Переписал код, вот теперь компилятор не ругается, всё работает - только не правильно считает - помоги пожалуйсто!

#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <clocale>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
setlocale(0,"Rus");
double x, e;
cout<<"Введите значение аргумента x = ";
cin>>x;
cout<<"Введите значение точности вычисляемой суммы (e>0) e = ";
cin>>e;
double summa = 0; //в переменной summa накапливаем сумму ряда
if (e>0) //точность E должна быть больше нуля
{
//вычисляем первое слагаемое ряда
double summa = 0.5;
double k_element=1;
int k = 1;
//вычисление суммы ряда
while (k_element > e && k <= INT_MAX)
{
cout<<"k = "<<k<<"\t"<<k_element<<"\n";
k_element *=((1.,k)*x,4*k+3);
k_element /= 2*k+1;
k++;
summa /=4*k+3;
}
cout<<"Сумма ряда = "<<summa<<"\n";
cout<<"Количество учтенных слагаемых = "<<k-1<<"\n";
}
else
cout<<"Ошибка ввода. Точность больше нуля!\n";
system("pause");
return 0;
}


Добавлено:
Но это ошибки не от того кода, который ты на форум кинул.
компилятор тебе сообщил об ошибках в 24 и 31 строчках.
В 24 ему не хватает скобочки и не нравится число перед переменной, в частности.
Но в коде, который лежит на форуме 24 строка состоит только из фигурной скобки ("{").

Научись уже задавать вопросы нормально.

Скорее всего 24 строка кода форума - это 21 строка в том коде что ты компилировал.
Код:
double k_element = pow(-1.,k*(x,4k+3));
Что такое 4k ?

А 31 строка соответствует 28.

Код:
summa += k_element/4k+3;
имена переменных не могут начинаться с цифры (если ты хотел сделать 4к переменной) и 4к - это не число.


-----------добавил


Да и вообще все как-то не так, по заданию тебе нужен факториал, где он?
Я не вижу где ты инициализируешь переменные перед циклом (в задании сказано что сумма считается от k = 0, а где ты присваиваешь переменной-счетчику ноль?)

Это типа k-тый элемент?:
Код:
k_element *= x;
k_element /= k;
Тогда у тебя ряд (x^n) / (k^n), а не тот, который по заданию.
Переписал код, вот теперь компилятор не ругается, всё работает - только не правильно считает - помоги пожалуйсто!

#include "stdafx.h"
#include <iostream>
#include <cmath>
#include <clocale>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
setlocale(0,"Rus");
double x, e;
cout<<"Введите значение аргумента x = ";
cin>>x;
cout<<"Введите значение точности вычисляемой суммы (e>0) e = ";
cin>>e;
double summa = 0; //в переменной summa накапливаем сумму ряда
if (e>0) //точность E должна быть больше нуля
{
//вычисляем первое слагаемое ряда
double summa = 0.5;
double k_element=1;
int k = 1;
//вычисление суммы ряда
while (k_element > e && k <= INT_MAX)
{
cout<<"k = "<<k<<"\t"<<k_element<<"\n";
k_element *=((1.,k)*x,4*k+3);
k_element /= 2*k+1;
k++;
summa /=4*k+3;
}
cout<<"Сумма ряда = "<<summa<<"\n";
cout<<"Количество учтенных слагаемых = "<<k-1<<"\n";
}
else
cout<<"Ошибка ввода. Точность больше нуля!\n";
system("pause");
return 0;
}
 
R

rrrFer

#9
Код:
#include <iostream>
#include <cmath>

int main(){
int k;
float x, k4, k2, x4k, s, e;

do {
std::cout << "x: ";
std::cin >> x;
} while (x > 1 || x < -1);

do {
std::cout << "e: ";
std::cin >> e;
} while (e < 0);

k = 0, k4 = 3, k2 = 1; x4k = x * x * x, s = 0;

for (;;) {
float t = (k&1?-1:1) * x4k / (k2 * k4);
if (fabs(t) < e)
break;

++k;
x4k *= x * x * x * x;
k2 *= k * 2 * (k * 2 + 1);
k4 += 4;

s += t;
}

std::cout << s;

}
 
07.09.2013
4
0
#10
Код:
#include <iostream>
#include <cmath>

int main(){
int k;
float x, k4, k2, x4k, s, e;

do {
std::cout << "x: ";
std::cin >> x;
} while (x > 1 || x < -1);

do {
std::cout << "e: ";
std::cin >> e;
} while (e < 0);

k = 0, k4 = 3, k2 = 1; x4k = x * x * x, s = 0;

for (;;) {
float t = (k&1?-1:1) * x4k / (k2 * k4);
if (fabs(t) < e)
break;

++k;
x4k *= x * x * x * x;
k2 *= k * 2 * (k * 2 + 1);
k4 += 4;

s += t;
}

std::cout << s;

}
я так понял, ты упростил выражение? но оно всё равно не считает!

Добавлено:
Код:
#include <iostream>
#include <cmath>

int main(){
int k;
float x, k4, k2, x4k, s, e;

do {
std::cout << "x: ";
std::cin >> x;
} while (x > 1 || x < -1);

do {
std::cout << "e: ";
std::cin >> e;
} while (e < 0);

k = 0, k4 = 3, k2 = 1; x4k = x * x * x, s = 0;

for (;;) {
float t = (k&1?-1:1) * x4k / (k2 * k4);
if (fabs(t) < e)
break;

++k;
x4k *= x * x * x * x;
k2 *= k * 2 * (k * 2 + 1);
k4 += 4;

s += t;
}

std::cout << s;

}
я так понял, ты упростил выражение? но оно всё равно не считает!
 
07.09.2013
4
0
#12
ниче я не упростил, все работает. Что значит "не считает"?
ну т.е. я вот значение х ввожу всё больше одного, оно опять просит ввести х, а когда 1 или -1 то просит ввести значение суммы е, оно только с отрицательными числами работает, остальные не канают и сразу мне ответ выбивает 0... просто без коментов вообще не могу зарозбраться в коде, я к преподу подходил, она сама говорит, что это твой знакомый наверно упростил условие и прорешал, а также сказала, что x4k = x * x * x, так нельзя!
ну в общем, я уже сам запутался как можно, где правильно!
там же должно Вычислить с точностью
ε сумму и указать количество учтенных слагаемых.
а оно не то пальто какое-то((( друг выручай, горю, может есть какой-то вариант другой решения поставленной задачи?

Добавлено:
ниче я не упростил, все работает. Что значит "не считает"?
ну т.е. я вот значение х ввожу всё больше одного, оно опять просит ввести х, а когда 1 или -1 то просит ввести значение суммы е, оно только с отрицательными числами работает, остальные не канают и сразу мне ответ выбивает 0... просто без коментов вообще не могу зарозбраться в коде, я к преподу подходил, она сама говорит, что это твой знакомый наверно упростил условие и прорешал, а также сказала, что x4k = x * x * x, так нельзя!
ну в общем, я уже сам запутался как можно, где правильно!
там же должно Вычислить с точностью
ε сумму и указать количество учтенных слагаемых.
а оно не то пальто какое-то((( друг выручай, горю, может есть какой-то вариант другой решения поставленной задачи?
 
R

rrrFer

#13
на выражение посмотри внимательно. При |x| > 1 ряд расходящийся, каждый последующий член ряда больше предыдущего и задача решения не имеет.
а также сказала, что x4k = x * x * x, так нельзя!
почему?