Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Yura_al
1 / 1 / 0
Регистрация: 25.11.2009
Сообщений: 3
#1

в чем моя ошибка?? - C++

25.06.2010, 17:18. Просмотров 406. Ответов 7
Метки нет (Все метки)

вот программа на паскале:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var
  tmp, find : real;
  k         : real;
 
begin
  k:= 1;                           
  tmp:= 1;                       
  find:= 0.5;                  
 
  repeat
    k:=k+1;                       
    tmp:= tmp*(1-(1/sqr(k)))     
  until abs(tmp - find) < 0.00001; 
 
  writeln('Ответ: ', k-1:1:0);
  readln;
end.
эту задачу переделал на С++, но ответ выдает с ошибкой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <math.h>
#include <conio.h>
#include <windows.h>
#include <iostream>
 
using namespace std;
int main()
{ int k=1;
double tmp=1;
double find=0.5;
double t;
for (;;) {
k= ++k;
tmp= tmp*(1-(1/(k*k)));
t= tmp - find;
if (t<0)
t= -t;
if (t<0.00001)
  break;
}
cout << k;
getch();
}
в чем ошибка??
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2010, 17:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос в чем моя ошибка?? (C++):

В чем моя ошибка ? - C++
задача ввести в Мэмо числа , поместить в массив и найти минимальное из них , выводя его в Эдит ... в чем я ошибся ?? подскажите...

В чем моя ошибка? - C++
В чем моя ошибка? #include &lt;iostream.h&gt; main() { int x, y, z; x=2+n; y=3.5+x; cout...

В чем моя ошибка?(ООП, классы) - C++
Что изменить в файле functionss.h? Заранее спасибо!!! Задание: Определить класс «матрица». В класс включить два конструктора: 1)...

подскажите пожалуйста, в чем моя ошибка? - C++
подскажите пожалуйста, в чем моя ошибка? надо определить точки принадлежащие и не пренадлежащие темной фигуре... ...

Пытаюсь создать описание класса одномерных массивов строк. В чем моя ошибка? - C++
Помогите пожалуйста! Пытаюсь создать описание класса одномерных массивов строк. В чем моя ошибка? #include &lt;iostream&gt; #include...

Программа на контестере проходит только 1 тест из 9. Можете объяснить, в чем моя ошибка и как ее исправить! - C++
Объясните, в чем моя ошибка в решении задачи. Условие: 103. Подсчет войск ограничение времени на тест: 0.5 сек. ...

7
TrenAr
21 / 20 / 2
Регистрация: 21.06.2010
Сообщений: 80
26.06.2010, 00:00 #2
В 14 строке я бы написал просто "k++;"
15 строку я бы записал так: tmp *= (double) (1-(1/(k*k)));
Аналогично добавил бы (double) в строке 16.
Кроме того, в С тоже есть функция abs - не стоит изобретать велосипеды в 17 строке
0
Yura_al
1 / 1 / 0
Регистрация: 25.11.2009
Сообщений: 3
26.06.2010, 00:18  [ТС] #3
исправив все как сказано, получаю чистое окно без результата. оставив 14 строчку без изменения получаю ошибку приложения: "Исключение unknown software exception в приложении ..."
чем это может быть связано??
0
TrenAr
21 / 20 / 2
Регистрация: 21.06.2010
Сообщений: 80
26.06.2010, 00:32 #4
Вот так у меня компилирует и даже что-то выводит (написано на С):

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <math.h>
#include <stdio.h>
 
int main()
{
    int k=1;
    double tmp=1;
    double find=0.5;
    double t;
    do
    {
        k++;
        tmp *= (double) (1-(1/(k*k)));
        t = (double) tmp - find;
    } while ( abs( t ) >= 0.00001 );
    printf("%d", k );
    
    return 0;
}
1
dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 284
26.06.2010, 00:47 #5
TrenAr лучше использовать не
C
1
while ( abs( t ) >= 0.00001 );
а наверно
C
1
while ( fabs( t ) >= 0.00001 );
в данной программе все числа double типа
Можно формулировку задания? Просто условие в цикле у всех разное. Я как понимаю, мы в условии всего лишь задаем точность.
2
Yura_al
1 / 1 / 0
Регистрация: 25.11.2009
Сообщений: 3
26.06.2010, 00:59  [ТС] #6
спасиба, этот вариант рабочий. Теперь осталось тока выяснить почему ответ выдает некорректный, т.к. должен получится 5000, а выдает тока 2

Добавлено через 6 минут
Известно равенство:
алгебраическая сумма (1-1/sqr(k)) от k=2 до бесконечности = 0,5

сколько сомножителей надо взять в произведении, чтобы равенство выполнялось до пятой значащей цыфры, т.е. с погрешностью не более 10^(-5)
0
dxdy
97 / 97 / 5
Регистрация: 14.06.2010
Сообщений: 284
26.06.2010, 01:23 #7
В данном примере получается 5000:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <math.h>
#include <iostream>
using namespace std;
 
int main()
{
    int k = 1;
    double tmp = 1.0;
    double find = 0.5;
    double t = 0.0;
    do
    {
        k++;
        tmp *= (double) (1.0 -(1.0/(k*k)));
        t = tmp - find;
    } while ( fabs( t ) > 0.0001 );
    printf("%d", k );
    
    return 0;
}
1
TrenAr
21 / 20 / 2
Регистрация: 21.06.2010
Сообщений: 80
26.06.2010, 02:34 #8
Цитата Сообщение от dxdy Посмотреть сообщение
TrenAr лучше использовать не
Да, если поставить fabs вместо abs, а так же правильно выставить (double) возле переменной, а не в начале функции присваивания - всё работает

Т.е. короче, вывод - при работе с вещественными числами, везде где только можно надо ставить числа с точкой, а при их отсутствии (только переменные в выражении) - вставлять (double \ float).

Т.е. вариант:
C
1
tmp *= ( 1 - ( 1 / ( (double) k * k )));
тоже рабочий
2
26.06.2010, 02:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2010, 02:34
Привет! Вот еще темы с ответами:

В чем моя ошибка? Оператор "<<" - C++
Разбирал пример. #include &lt;iostream&gt; using namespace std; int main() { enum Days { Sunday, Monday, Tuesdey, Wednesday,...

где моя ошибка? - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; int main() { int i,j; string s,sl,b; ...

В чём заключается моя ошибка? - C++
#include &quot;iostream&quot; using namespace std; int main () { int n,a,b,c; //a-количество часов //b-количество минут ...

Исправьте пожалуйста, где моя ошибка? спасибо - C++
//Дана целочисленная матрица À(N, N). // Найдите номер первой из ее строк, // которые начинаются с К положительных чисел подряд. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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