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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2012, 10:08   #1
6002theJuicy
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 11
Смущение циклическая программа с++

помогите пожалуйста...
дали задание написать простую циклическую программу
задание: вычислить с точностью до 10го знака после запятой сумму 1+1/1!+1/2!+1/3!+......
единицу же можно принять как 1/0! ?
вобщем задание дали и ничего не объяснили
работаем в ms visual studio.
я думаю,что задание можно принять как сумма 1/n! и в программе задать переменную n
и еще,получается программу бесконечную надо делать? тогда лучще с while(true) или с помощью for? просто в последнем надо писать конечное значение а его нет о.о
надеюсь хоть на какую то помощь!))
6002theJuicy вне форума Ответить с цитированием
Старый 25.02.2012, 10:54   #2
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
вычислить с точностью до 10го знака после запятой
Точный результат брать-то откуда, чтобы точность посчитать?

Короче, вот. Код не компилил, но работать стопудово должен.
Код:
#include <iostream>

using namespace std;


int main(void)
{
	double sum = 1;
	double eps = 1E-10;
	double temp;
	int fact = 1;
	int i = 1;		
	do
	{
		fact *= i;
		temp = 1/fact;
		sum += temp;
		i++;
	}while(temp > eps);
}
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.

Последний раз редактировалось MooNDeaR; 25.02.2012 в 10:59.
MooNDeaR вне форума Ответить с цитированием
Старый 25.02.2012, 11:00   #3
6002theJuicy
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 11
По умолчанию

Цитата:
Сообщение от MooNDeaR Посмотреть сообщение
Точный результат брать-то откуда, чтобы точность посчитать?
это все задание какое есть о.о
6002theJuicy вне форума Ответить с цитированием
Старый 25.02.2012, 11:00   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

в Си не силён, но что-то такое должно работать:
Код:
double Summa(double &Sum, double &Delta, int N)
{
if (Delta >  1.0E-10){
Delta = Delta/N;
Sum = Sum + Delta;
Summa(Sum, Delta, N+1);
}
}
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 25.02.2012, 11:02   #5
6002theJuicy
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 11
По умолчанию

Цитата:
Сообщение от MooNDeaR Посмотреть сообщение
Точный результат брать-то откуда, чтобы точность посчитать?

Короче, вот. Код не компилил, но работать стопудово должен.
Код:
#include <iostream>

using namespace std;


int main(void)
{
	double sum = 1;
	double eps = 1E-10;
	double temp;
	int fact = 1;
	int i = 1;		
	do
	{
		fact *= i;
		temp = 1/fact;
		sum += temp;
		i++;
	}while(temp > eps);
}
спасибо) буду разбираться) только вот факториал... где он? Оо
6002theJuicy вне форума Ответить с цитированием
Старый 25.02.2012, 11:03   #6
6002theJuicy
Пользователь
 
Регистрация: 25.02.2012
Сообщений: 11
По умолчанию

а еще для суммы не надо прописывать <math.h> ?
6002theJuicy вне форума Ответить с цитированием
Старый 25.02.2012, 11:06   #7
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
а еще для суммы не надо прописывать <math.h> ?
Нафига?
Цитата:
только вот факториал... где он?
Вот он:
Код:
#include <iostream>

using namespace std;


int main(void)
{
	double sum = 1;
	double eps = 1E-10;
	double temp;
	int fact = 1;
	int i = 1;		
	do
	{
		fact *= i;
		temp = 1/fact;
		sum += temp;
		i++;
	}while(temp > eps);
}
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 25.02.2012, 12:17   #8
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от 6002theJuicy Посмотреть сообщение
Код:
#include <iostream>

using namespace std;


int main(void)
{
	double sum = 1;
	double eps = 1E-10;
	double temp;
	int fact = 1;
	int i = 1;		
	do
	{
		fact *= i;
		temp = 1/fact;
		sum += temp;
		i++;
	}while(temp > eps);
}
спасибо) буду разбираться) ...
Разбирайся, разбирайся... Сперва разберись, почему в этом "стопудово работающем" коде, при заказанной точности 1.e-10, цикл всего два раза выполняется. А когда с этим разберёшься и исправишь, разберись, почему на последней итерации факториал отрицательным получается...
Vago вне форума Ответить с цитированием
Старый 25.02.2012, 21:16   #9
MooNDeaR
В стагнации
Участник клуба
 
Аватар для MooNDeaR
 
Регистрация: 29.07.2011
Сообщений: 1,303
По умолчанию

Цитата:
Разбирайся, разбирайся... Сперва разберись, почему в этом "стопудово работающем" коде, при заказанной точности 1.e-10, цикл всего два раза выполняется. А когда с этим разберёшься и исправишь, разберись, почему на последней итерации факториал отрицательным получается...
Хреново видимо разбирались вы. Вся ошибка состояла в банальной строчке
Цитата:
temp = 1.0/fact;
Просто выполнялось целочисленное деление. Факториал, кстати, сделайте типа long.

P.S.
Прежде чем писать сообщения в таком тоне, напиши свой вариант.

P.P.S.
Неужели мой код настолько непонятен?
E-mail: pashaworking@gmail.com | ICQ: 479914426 | Skype: moondearr
Понять, чего от тебя требует заказчик – это уже половина всей работы, а иногда и полностью выполненное задание.
MooNDeaR вне форума Ответить с цитированием
Старый 25.02.2012, 22:13   #10
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от MooNDeaR Посмотреть сообщение
Хреново видимо разбирались вы. Вся ошибка состояла в ...
Да я-то, как раз, разобрался. Но сдавать-то "стопудово работающий" код - не мне...

Цитата:
Сообщение от MooNDeaR
Факториал, кстати, сделайте типа long.
Сделал. Значение fact для i = 17 - отрицательное.

Цитата:
Сообщение от MooNDeaR
Прежде чем писать сообщения в таком тоне, напиши свой вариант.
Прежде чем пытаться взять человека "на слабО", может стоит, за то что тебе в твоей программе такие ляпы находят, смирить гордыню и "спасибо" сказать?...

Цитата:
Сообщение от MooNDeaR Посмотреть сообщение
Неужели мой код настолько непонятен?
Да нет, логика, структура - как раз вполне прозрачна. Опять же, дробные части уже не отбрасываем! Хорошо! Осталось только переполнение побороть...

Удачи в профессиональной карьере! Чао!
Vago вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Циклическая структура overlor Паскаль, Turbo Pascal, PascalABC.NET 5 28.01.2012 23:12
Циклическая ссылка iami Microsoft Office Excel 7 04.07.2011 15:24
Циклическая задача. Паскаль Lion8990 Паскаль, Turbo Pascal, PascalABC.NET 2 16.12.2010 00:32
циклическая структура Яська Помощь студентам 1 26.10.2009 18:57