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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.11.2009, 16:37   #1
AxGreg
 
Регистрация: 06.11.2009
Сообщений: 4
По умолчанию Лабораторная на С++ (Массивы, разложение в ряд Тейлора)

Прошу помощи, ибо не получается (
I.
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1)сумму элементов массива с нечетными номерами;
2)сумму элементов массива, расположенных между первым и последним отрицательными элементами.

Первое сделал, а вот второе никак не получается.
Код:
// massivs.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;

int main()
{
	const int N=10;
	int i, x1, x2, j, k;
	double mas[N], sum1, sum2, indMin, indMax, mas1, mas2;
	//ввод массива
	cout << "\n enter elements of massiv mas.\n";
	for (i=0; i<N; i++)
	{
		cout << "mas[" << i << "] = ";
		cin >> mas[i];
	}
	//находим сумму элементов с нечетными номерами
	for (i=0, sum1=0; i<N; i++, i++)
	{
	sum1+=mas[i];
	}
	cout << "Summa elements of massiv=" << sum1;
	//Находим индекс первого отрицательного элемента	
	for (i=0; i<N; i++)
	{
		if (mas[i]<0) break;
		indMin=i+1, mas1=mas[i+1];
		
	}	
	//находим индекс первого отрицательного элемента с конца
	for (j=N; j>i; j--)
	{
		if (mas[j]<0) break; 
		indMax=j+1, mas2=mas[i+1];
		
	}
	//считаем сумму чисел, заключенную между первым и последним отрицательными элементами
	for (k=indMin+1, sum2=0; k<indMax; k++)
	{
		sum2+=mas[k];
	}
	
	cout << "\n summa ot - k -:" << sum2;
	cout << "\nI=" << indMin;
	cout << "\nmas[i]=" << mas1;
	cout << "\n J=" << indMax;
	cout << "\n mas[j]=" << mas2;
	system("pause");
	return 0;
}
Финальный вывод строк делал, дабы увидеть какие значения принимаю переменные. Собственно нахождение индекса первого отрицательного элемента работает нормально, а вот второй не получается. Благодаря break он принимает какие-то гигантские значения, а без него доходит до первого отрицательного...
p.s. находил тут похожу тему, переделывал...но все-равно никак(

II.
Вычислить с помощью разложения в ряд Тейлора значение функции с точностью . Вывести на экран полученное значении и значение функции, посчитанное с помощью математических функций библиотеки <math.h>.
http://i050.radikal.ru/0911/29/7f5d00dedccb.png - функция. bb-кодами не хочет вставляться(
Код:
#include "stdafx.h"
#include "iostream"
#include "conio.h"
#include "math.h"
using namespace std;

int main()
{
	double x, y, eps, Cn, Y1;
	int n;
	cout << "Enter X and EPS: ";
	cin >> x >> eps;
	n=0;
	Cn=x;
	y=2*x;
	while (fabs(y)<eps)
	{
		Cn*=(pow(x, (2*n+1))/(2.0*n+1));
		y+=Cn;
		n++;
		cout << " \n Y: "  << y;
		cout << "\n Step: " << n;
	}
	Y1=log10((1+x)/(1-x));
	cout << "\n Value of function Y1=" << Y1;
	cout << "\n Value of function Y=" <<y;
	system("Pause");
	return 0;
}
Пытался решить но не получается, не понимаю, что значит точность в данном контексте. Пример с лекции вобще не логичен

Последний раз редактировалось AxGreg; 06.11.2009 в 16:41.
AxGreg вне форума Ответить с цитированием
Старый 06.11.2009, 17:00   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

I. немного подправил, должно работать

Код:
double mas[N], sum1=0, sum2=0, indMin, indMax, mas1, mas2;

...

//находим сумму элементов с нечетными номерами
for (i=1; i<N; i+=2)
{
   sum1+=mas[i];
}
cout << "Summa elements of massiv=" << sum1;
//Находим индекс первого отрицательного элемента	
for (i=0; i<N; i++)
{
           if (mas[i]<0) 
           {
		indMin=i, mas1=mas[i+1];
                      break;		
	}
}	
//находим индекс первого отрицательного элемента с конца
for (j=N-1; j>i; j--)
{
 	if (mas[j]<0) 
           {                     
		indMax=j, mas2=mas[i+1];
	           break;	
	}
}
//считаем сумму чисел, заключенную между первым и последним отрицательными элементами
for (k=indMin+1; k<indMax; k++)
{
	sum2+=mas[k];
}

Последний раз редактировалось counter; 06.11.2009 в 17:06.
counter вне форума Ответить с цитированием
Старый 06.11.2009, 17:15   #3
AxGreg
 
Регистрация: 06.11.2009
Сообщений: 4
По умолчанию

Спасибо почему-то не подумал, что break можно вставлять после "перехвата" индекса и значения. Убрал из нахождения значения +1, ибо сбивалось.
AxGreg вне форума Ответить с цитированием
Старый 06.11.2009, 17:28   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

II.

Код:
#include "iostream"
#include "conio.h"
#include "math.h"
using namespace std;

int main()
{
	double x,y,eps,Cn;
	int n;
	cout<<"Enter X and EPS: ";
	cin>>x>>eps;
	n=1;
    Cn=2*x;

	do	{
		y=pow(x,n)/(2*n+1);
		Cn+=2*y;
		n+=2;
		cout<<"\n y : "<<y;
		cout<<"\n n : "<<n-2;		
	}while (fabs(y)>eps);

	cout<<"\n\nValue of function Y="<<y;
	_getch();
	return 0;
}
counter вне форума Ответить с цитированием
Старый 06.11.2009, 17:36   #5
AxGreg
 
Регистрация: 06.11.2009
Сообщений: 4
По умолчанию

А разве тут
Код:
y=pow(x,n)/(2*n+1);
не должно быть так
Код:
y=pow(x,2*n+1)/(2*n+1);
?
По функции получается, что x в степени 2*n+1...
AxGreg вне форума Ответить с цитированием
Старый 06.11.2009, 17:43   #6
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от AxGreg Посмотреть сообщение
А разве тут
Код:
y=pow(x,n)/(2*n+1);
не должно быть так
Код:
y=pow(x,2*n+1)/(2*n+1);
?
По функции получается, что x в степени 2*n+1...
ну может быть, алгоритм от этого не изменится
counter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ряд Тейлора в паскале Ku6ep Помощь студентам 2 10.04.2010 20:16
Графическая и на ряд Тейлора Proxy Помощь студентам 2 05.05.2009 22:11
Ряд Тейлора siriusz Общие вопросы C/C++ 6 06.02.2009 20:26
Разложение в ряд Маклорена Mari Помощь студентам 2 03.02.2008 23:23