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

C++ задача - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.65
dimacat
Сообщений: n/a
04.10.2008, 19:26     C++ задача #1
Вообщем имеется задача: Рассчитайте значение e в степени x, используя формулу: e^x = 1+x/1! +x^2/2!+x^3/3!+…

Решить её можно так: не решать факториалы, а просто решения x, x/2, x/3 и т.д. доумнажать на предыдущий результат.

Вот решение:
Код
#include <iostream> 

using namespace std;

 

int main()
{
	int x;
	float e, pr;
	cout<<"Vvedite x:"<<endl;
	cin>>x;
	pr=1;
	for (int i=1; x; i++)
	{
		e=pr*x/i;
		pr=e;
	}
		cout<<e<<endl;
	return 0;
}
Вроде бы всё верно, но почему-то не выводит значение. Вернее, считает почему-то до бесконечности, насколько я понял. В чём проблема? Где рыть?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimacat
1 / 1 / 0
Регистрация: 04.10.2008
Сообщений: 96
04.10.2008, 19:34     C++ задача #2
Ах, да забыл ещё попросить помочь вот с такой задачей: Известно, что любое натуральное число можно представить в виде суммы не более чем четырех квадратов натуральных чисел или, что то же самое, в виде сумы четырех квадратов неотрицательных чисел (теорема Лагранжа). Дано натуральное n. Указать такие неотрицательные целые x,y,z,t, что n=x*x+y*y+z*z+t*t.

Мне написаный код не нужен. Мне нужно чтобы кто-нибудь подсказал, как это реализовать. Заранее спасибо!
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.10.2008, 19:35     C++ задача #3
Найдите на этом форуме тему, по поводу того, что "ААА! Мое консольное окно куда-то исчезает! АА!".
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
04.10.2008, 20:10     C++ задача #4
"for(int i=1;x;i++)"
цикл бесконечный,x в цикле не меняется.Думаю,подразумевалось
i<=x
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.10.2008, 20:22     C++ задача #5
консоль, все равно, закроется
А так бесконечный, да. На него даже внимания не обратил. Только из-за незнания синтаксиса, имхо.

Добавлено через 4 минуты 2 секунды
XuTPbIu_MuHTAu, что по поводу второй думаешь? Перебором можно. Но че-то не катит...
dimacat
1 / 1 / 0
Регистрация: 04.10.2008
Сообщений: 96
04.10.2008, 20:27     C++ задача #6
2 XuTPbIu_MuHTAu: спасибо огромное. всё заработало.
2 Vourhey: но я совсем не имел ввиду, что у меня проблемы с консолью.
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.10.2008, 20:55     C++ задача #7
Цитата Сообщение от dimacat Посмотреть сообщение
2 Vourhey: но я совсем не имел ввиду, что у меня проблемы с консолью.
Я очень рад за тебя.

Добавлено через 27 минут 50 секунд
Самое простое решение - обычным перебором:
Код
root = sqrt(n);
for (a=0;a<= root;a++) 
	for (b=a;b<=root;b++) 
		for (c=b;c<=root;c++) 
			for (d=c;d<=root;d++) 
				if ((a*a+b*b+c*c+d*d)==n) 
//Нашлось...
Но это не оптимально.
dimacat
1 / 1 / 0
Регистрация: 04.10.2008
Сообщений: 96
04.10.2008, 22:34     C++ задача #8
хм, а что означает ошибка: 'sqrt': identifier not found, even with argument-dependent lookup ?
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
04.10.2008, 22:38     C++ задача #9
dimacat,
Код
#include <math.h>
Vourhey, по поводу второй подумаю
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
04.10.2008, 22:51     C++ задача #10
Ну можно попробовать еще разделить на множители и с ними работать.
qwone
8 / 8 / 1
Регистрация: 18.08.2008
Сообщений: 129
04.10.2008, 23:03     C++ задача #11
Vourhey почти верно
только циклы делать убывающими
1) x от корень из n до 1
2) у от корень из (n-x*x) до 1
3) z от корень из (n-x*x-y*y) до 1
4) t от корень из (n-x*x-y*y-t*t) до 1
разумеется если найдется одно решение оно будет не одно,а факториал 4 то есть 24
x,y,z,t равноценные в выражении

да вот еще чтобы проверить программу на глючность надо сначало проверить на числе
n=1*1+2*2+3*3+4*4=30
dimacat
1 / 1 / 0
Регистрация: 04.10.2008
Сообщений: 96
04.10.2008, 23:21     C++ задача #12
2 Vourhey: Спасибо огромное за помощь. Вторая программа тоже заработала!
ytrewq
Сообщений: n/a
30.01.2009, 18:11     C++ задача #13
По поводу оптимальности
Объявляем такой меп:
map <int, pair <int, int> > m;

m.clear();

for(int i = 1; i * i <= n; ++i)
for(int j = i; j * j + i * i <= n; ++j)
m[i * i + j * j] = make_pair(i, j);

for(int i = 1; i * i <= n; ++i)
for(int j = i; j * j + i * i <= n; ++j){
pair <int, int> p = m[n - i * i - j * j];
if (p.first > 0)
cout << i << " " << j << " " << p.first << " " << p.second;
}
}


писал не в среде, так что не судите строго за синтаксические ошибки
Yandex
Объявления
30.01.2009, 18:11     C++ задача
Ответ Создать тему
Опции темы

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