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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2008, 22:39   #1
Amen
Заблокирован
Форумчанин
 
Регистрация: 22.01.2008
Сообщений: 121
По умолчанию Помогите с решением

У меня тут пара задачек, помогите, кто сможет.

1. Дана длина L окружности, найти её радиус R и площадь S круга, ограниченного сей окружностью.
#include<iostream.h>
#include<math>
int main()
{
int L,R,S; const P=3.14;
cout<<"L=";
cin>>L;
R=L/(2*P);
S=P*pow(R,2);
cout<<"R="<<R;
cout<<"S="<<S;
cin>>S;

return 0;
}
Вроде код правильный, но ответ выводит неправильный.

2. Дано число а>1.Вывести наибольшее из целых чисел К, для которых сумма 1+1/2+,,,+1/К будет меньше а, и саму эту сумму

Буду очень признателен за помощь.
Amen вне форума Ответить с цитированием
Старый 30.01.2008, 22:47   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Я же Вам в той теме еще написал, поменяйте int L,R,S на float L,R,S.
B_N вне форума Ответить с цитированием
Старый 30.01.2008, 22:52   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
int L,R,S;
Длина окружности и плошадь круга по определению не могут быть целыми числами, и программа твоя вообще ничего кроме сообщения об ошибке выдавать не должна.
puporev вне форума Ответить с цитированием
Старый 31.01.2008, 19:43   #4
Amen
Заблокирован
Форумчанин
 
Регистрация: 22.01.2008
Сообщений: 121
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
Я же Вам в той теме еще написал, поменяйте int L,R,S на float L,R,S.
Большое спасибо, всё сошлось. А со второй задачкой никак?
Amen вне форума Ответить с цитированием
Старый 31.01.2008, 19:55   #5
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Amen Посмотреть сообщение
Большое спасибо, всё сошлось. А со второй задачкой никак?
Ну у Вас у самого мысли есть какие? Всё-таки, согласитесь, помочь человеку, у которого что-то не получается и писать задачки в пустоту несколько разные вещи.
B_N вне форума Ответить с цитированием
Старый 31.01.2008, 20:11   #6
Amen
Заблокирован
Форумчанин
 
Регистрация: 22.01.2008
Сообщений: 121
По умолчанию

Цитата:
Сообщение от B_N Посмотреть сообщение
Ну у Вас у самого мысли есть какие? Всё-таки, согласитесь, помочь человеку, у которого что-то не получается и писать задачки в пустоту несколько разные вещи.
Согласен.
Мысли-то есть. Я так понял: сначала нужно присвоить К и S значение 1.
затем, увеличивая число К на один, проверять значение S - не больше ли оно десяти.
к=1, s=1<10, следовательно проверяем дальше
к=2, s=1+1/2
и т.д., пока сумма s не станет больше "10".
как только s достигнет крайнего значения, вывести текущее значение К и S.

бред, конечно, но вот до чего я додумался

#include<iostream.h>
#include<math>
int main()
{
int a;
cout<<"a=";
cin>>a;
int k=1;
int s=1;
while(s=a)
while(k=1000000)
s+=1/k;
cout<<"s="<<s;
cin>>s;
return 0;
}
Amen вне форума Ответить с цитированием
Старый 31.01.2008, 20:38   #7
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

В принципе, почти так.

Только у Вас во-первых старая ошибка - путаете целые и вещественные типы, во-вторых S вначале должна быть равна нулю (K с единицы начинаем), в-третьих, забываем увеличивать K, в четвертых у вас перепутаны условия обоих циклов - нам надо считать пока меньше, а не пока равно - S мы вообще можем проскочить и из первого цикла никогда не выйдем (из второго вообще не вышли бы - K не увеличивалась) Вот так можно исправить

Код:
#include <iostream.h>
int main()
{
	int a;
	long k=1;
	float s=0;

	cout<<"a=";
	cin>>a;
	
	while(s < a) 
		while(k < 1000000) 
			s += 1/(float)k++;
	
	cout<<"s="<<s;
	cin>>s;
	return 0;
}
Но еще нужно предусмотреть условие выхода в том случае, если K уже кончилась, а S всё ещё меньше A.
B_N вне форума Ответить с цитированием
Старый 31.01.2008, 20:42   #8
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

1.Начальное значение s=0;
2.Выполняем цикл пока s<=a.
3.Выводим не s=, а s-1/k, т.к. последняя сумма будет больше а,
и не k, а k-1, т.к. k тоже будет следующий за нужным. Когда сделаешь, проверь при небольших а(1.5,1.75,2.0).
puporev вне форума Ответить с цитированием
Старый 31.01.2008, 21:14   #9
Amen
Заблокирован
Форумчанин
 
Регистрация: 22.01.2008
Сообщений: 121
По умолчанию

Если я правильно понял, то программа должна выглядеть так
#include <iostream.h>
int main()
{
int a;
long k=1;
float s=0;

cout<<"a=";
cin>>a;

while(s <= a)
while(k < 1000000)
s += 1/(float)k++;

cout<<"s="<<s-1/k;
cout<<"k="<<k-1;
cin>>s;


return 0;
}

только вот цикл не хочет кончаться. При любом а ответ выходит такой
S=14,3574, к =999999
Amen вне форума Ответить с цитированием
Старый 31.01.2008, 21:18   #10
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
while(k < 1000000)
Это то зачем?
puporev вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите, пожалуйста, с решением Akademik Помощь студентам 2 23.04.2008 23:17
Помогите с решением функций. Nikopol Помощь студентам 6 15.06.2007 23:57
Помогите с решением задачи!Please! Инзия Помощь студентам 3 11.03.2007 07:50