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

Найти ошибку - C++

Восстановить пароль Регистрация
 
kinoman471
 Аватар для kinoman471
4 / 4 / 0
Регистрация: 18.04.2012
Сообщений: 58
13.06.2012, 17:18     Найти ошибку #1
Пусть х1=0.3; х2=-0.3; хi=i+sin(xi-2), i=3, 4, … Среди х1, …, х100 найти бли-
жайшее к какому-нибудь целому.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    double nums[100];
nums[0] = 0.3;
nums[1] = -0.3;
double k = 1;
 
double max = nums[0];
for (int i = 3; i <= 100; i++) {
    nums[i - 1] = i + sin(nums[i - 3]);
    if (nums[i - 1] % k > max % k)
    max = nums[i - 1];
}
cout<<max;
}
Почему не работает код?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cactus09
Чайник
 Аватар для cactus09
69 / 69 / 4
Регистрация: 15.02.2012
Сообщений: 475
13.06.2012, 17:29     Найти ошибку #2
вот рабочий
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    double nums[100];
nums[0] = 0.3;
nums[1] = -0.3;
double k = 1;
 
double max = nums[0];
for (int i = 3; i <= 100; i++) {
    nums[i - 1] = i + sin(nums[i - 3]);
    if (int(nums[i-1])%int(k) > int(max)%int(k))
    max = nums[i - 1];
}
cout<<max<<endl;
system("PAUSE");
}
А неработает потому что % нужны int, а ты им даеш double
kinoman471
 Аватар для kinoman471
4 / 4 / 0
Регистрация: 18.04.2012
Сообщений: 58
13.06.2012, 17:34  [ТС]     Найти ошибку #3
само решение задачи правильное?
ответ выдает 0,3
edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
13.06.2012, 17:48     Найти ошибку #4
использовать остаток от деления дробного числа не имеет смысла, используйте библиотечные функции для округления дробных чисел ( ceil(), floor() ), ищите разницу между целым и дробным числами, и выводите то, у которого эта разница наименьшаяя
kinoman471
 Аватар для kinoman471
4 / 4 / 0
Регистрация: 18.04.2012
Сообщений: 58
13.06.2012, 17:51  [ТС]     Найти ошибку #5
Цитата Сообщение от edward_jonson Посмотреть сообщение
используйте библиотечные функции для округления
какие?
edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
13.06.2012, 17:55     Найти ошибку #6
Цитата Сообщение от kinoman471 Посмотреть сообщение
какие?
ceil() и floor()
kinoman471
 Аватар для kinoman471
4 / 4 / 0
Регистрация: 18.04.2012
Сообщений: 58
13.06.2012, 17:55  [ТС]     Найти ошибку #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
 const int n = 100;
 int i,c;
 int b = 0.1;
 int k = 0;
 double x[n];
 x[0] = 0.3;
 x[1] = -0.3;
 for (int i = 2; i <= 100; i++)
 {
  x[i] = i + sin(x[i - 2]) ;
 }
 for (i = 0; i<n; i++)
 int c = x[i];
 if (c-x[i-1] < x[i+1]-c)
 cout<<x[i-1];
 else
 cout<<x[i+1];
 return 0;
}
вот так пробовал. не работает
edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
13.06.2012, 18:13     Найти ошибку #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <cmath>
using namespace std;
 
int main()
{
    double nums[100];
    nums[0] = 0.3;
    nums[1] = -0.3;
 
    unsigned nearest_i = 0;
 
    double nearest_e = ceil(nums[0]) - nums[0] > nums[0] - floor(nums[0]) ? nums[0] - floor(nums[0]) : ceil(nums[0]) - nums[0];
 
    for (int i = 2; i < 100; i++)
    {
        nums[i] = i + sin(nums[i - 2]);
        double temp_e = ceil(nums[i]) - nums[i] > nums[i] - floor(nums[i]) ? nums[i] - floor(nums[i]) : ceil(nums[i]) - nums[i];
        if ( temp_e < nearest_e )
        {
            nearest_e = temp_e;
            nearest_i = i;
        }
    }
 
    cout << nums[nearest_i];
 
}
Добавлено через 4 минуты
Т.к. в последовательности имеется целое число, что по условию и будет ближайшим к целому, то будет выведено первое целое число в последовательности.
kinoman471
 Аватар для kinoman471
4 / 4 / 0
Регистрация: 18.04.2012
Сообщений: 58
13.06.2012, 18:18  [ТС]     Найти ошибку #9
что такое unsigned, это тип int?
edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
13.06.2012, 18:36     Найти ошибку #10
Цитата Сообщение от kinoman471 Посмотреть сообщение
что такое unsigned, это тип int?
беззнаковый целый тип. Однако, хочу заметить, что не факт, что выведенное число является целым, т.к. cout выводит 5 знаков после запятой, а отклонение от целого числа может быть меньше чем 0.00001, но это число всё равно будет выведено, как целое

Добавлено через 7 минут
проще говоря, для чистоты эксперимента, нужно добавить #include <iomanip>, и 26-ю строку, где вывод наиболее близкого к целому, изменить на
C++
1
cout << setprecision(20) << nums[nearest_i];
Поправлю себя: целых чисел в последовательности нет, просто некоторые из них выводятся как целые.
kinoman471
 Аватар для kinoman471
4 / 4 / 0
Регистрация: 18.04.2012
Сообщений: 58
13.06.2012, 19:03  [ТС]     Найти ошибку #11
слишком сложные фунцкии. нам их еще не объясняли, возможно ли решить задачу, используя простые?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2012, 19:27     Найти ошибку
Еще ссылки по теме:

C++ Найти сумму первых n-четных натуральных чисел (найти ошибку)
Найти ошибку C++
C++ Задача из Златопольского: "Найти числа с известным количеством делителей". Не могу найти ошибку

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

Или воспользуйтесь поиском по форуму:
edward_jonson
 Аватар для edward_jonson
157 / 157 / 25
Регистрация: 23.02.2011
Сообщений: 388
13.06.2012, 19:27     Найти ошибку #12
Цитата Сообщение от kinoman471 Посмотреть сообщение
слишком сложные фунцкии. нам их еще не объясняли, возможно ли решить задачу, используя простые?
функции ceil() и floor() не сложнее в использовании, чем sin()
Yandex
Объявления
13.06.2012, 19:27     Найти ошибку
Ответ Создать тему
Опции темы

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