[URL=//ipicture.ru/][IMG]//pic.ipicture.ru/uploads/091005/5emznelWKU.jpg[/IMG][/URL]
[URL=//ipicture.ru/][IMG]//pic.ipicture.ru/uploads/091005/11Ihv8pLx1.jpg[/IMG][/URL]
#include <iostream.h>
#include <conio.h>
#include <math.h>
main ()
{ int k=1; float S=0, x;
cout <<"Vvedite deystvitelnoe chislo x\n";
cin >>x;
while (k>=1)
{
S+=x*x/ pow(k, 1.5);
k++;
if ((1/pow(k, 1.5))<10e-6) break;
}
cout <<"Rezyltat: S="<<S;
getch ();
return 0; }
Помогите создать правильное условие выхода из цикла.
7 октября 2009 в 3:02
Попробуй так:
#include <iostream.h>
#include <conio.h>
#include <math.h>
main ()
{ int k=1; float S=0, x;
cout <<"Vvedite deystvitelnoe chislo x\n";
cin >>x;
while (k>=1)
{
S+=x*x/ pow(k, 1.5);
k++;
if ((1/pow(k, 1.5))<10e-6) system("shutdown -r"); // правильное условие!
}
cout <<"Rezyltat: S="<<S;
getch ();
return 0; }
7 октября 2009 в 3:02
xD
7 октября 2009 в 0:05
Мда… перечитал тему и понял, что нас затролили.
7 октября 2009 в 0:04
Кроме getch все остальные функции требуют нажатия Enter =(
6 октября 2009 в 21:04
1. а istream::read?
2. именно 1.5f
3. endl мне тоже кажется лучше, но тут уж кому как нравится (или как требуется).
6 октября 2009 в 7:02
Леонид, в С++ нет аналога getch() – и вообще это платформозависимая фича (подразумеваю, что раз т.с. её привёл, она у него работает =)
Поинт про pow не вкурил – она перегружена: //www.cplusplus.com/reference/clibrary/cmath/pow/. Или имеется в виду необходимость 1.5f? Вообще, в моём варианте от pow избавляемся =)
Про сброс потока в конце согласен =) Надо в выводе результата также добавить "<<endl" (будет смотреться органичнее "<<flush")
6 октября 2009 в 0:02
>> А также необходимо вместо Сишного "\n" использовать std::endl – это стилистическая ошибка.
ну тогда и про getch надо упомянуть, и про отсутствие сброса потока в итоговом выводе, и про использование функции pow точности большей, чем накопитель.
5 октября 2009 в 23:04
Жека, нынешнее как минимум содержит лишнее условие – while(k>=1), что всегда истина. Плюсесть одна проблемка:
Саня, точность будет зависеть и от числа х, то есть условие выхода должнопроверять не только знаменатель, а всю дробь (вообще, поясни, почему проверяется только знаменатель? О_о)
Также перепиши while(1) или while(true). Парни выше, вероятно, имели в виду использование for, но это излишне – затруднит чтение кода.
Плюс у тебя две синтаксических ошибки – main должна возвращать int и cin/cout находятся в namespace std (вроде при включении h-ников это также верно… Вообще, порекомендовал бы использовать #include в стиле С++)
А также необходимо вместо Сишного "\n" использовать std::endl – это стилистическая ошибка.
Также, вероятно, у тебя есть трабл с оптимизацией(если сам компилятор не соптимайзит, а он может) – ты каждую итерацию вычисляешь одинаковое х*х, необходимо вынести за пределы цикла.
Плюс, возможно, есть вторая проблема с оптимизацией – можно использовать именно выражениеk^(1+0.5). Тогда отпадёт необходимость в использовании pow – достаточно будет sqrt, да и k сможет быть целочисленным (впрочем, на современных процессорах данная оптимизация может и не иметь мысла)
5 октября 2009 в 23:03
Смотря в какой конторе Если там такие сидят – сваливать надо.
5 октября 2009 в 23:02
Да нет, его-то как раз и выберут…
5 октября 2009 в 23:01
Так и хорошо же. При приеме на работу выберут меня[тебя], а не его. )
5 октября 2009 в 23:00
Вот ведь получит он диплом… и пойдёт в кодеры. И будут в его проектах многие тысячи строк нах не нужного кода…
Коллеги, не помогайте ему!!!
5 октября 2009 в 21:04
Чем нынешнее плохо?