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

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

Войти
Регистрация
Восстановить пароль
 
kinoman471
4 / 4 / 0
Регистрация: 18.04.2012
Сообщений: 58
#1

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

13.06.2012, 17:18. Просмотров 448. Ответов 11
Метки нет (Все метки)

Пусть х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;
}
Почему не работает код?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2012, 17:18     Найти ошибку
Посмотрите здесь:

найти ошибку - C++
#include&lt;iostream&gt; using namespace std; int min(int a,int min = 1000){ for (int i = 0; i &lt;= 4; i++) if (a &lt; min) min = a; ...

Найти ошибку - C++
Добрый день. Есть задача с codeforces (условие). Вот моё решение: #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; ...

найти ошибку - C++
немогу найти ошибку помогите пожалуйста.

Найти ошибку - C++
Необходимо удалить элементы массива, находящихся в данном промежутке #include &lt;cstdlib&gt; #include &lt;cmath&gt; #include &lt;iostream&gt; ...

найти ошибку... - C++
В прошлый раз так никто и не помог... Программа вводит по строкам двумерный массив, и вычисляет сумму элементов по строкам... ...

Найти ошибку - C++
Не могу понять, что не так в программе, она запускается, но выдает не совсем, то что нужно, а нужно именно преобразовать слова null, one,...

найти ошибку - C++
#include &lt;iostream&gt; #include &lt;locale&gt; #include &lt;string&gt; using namespace std; struct seyf { int god; char name ; char...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
4 / 4 / 0
Регистрация: 18.04.2012
Сообщений: 58
13.06.2012, 17:34  [ТС]     Найти ошибку #3
само решение задачи правильное?
ответ выдает 0,3
edward_jonson
158 / 158 / 25
Регистрация: 23.02.2011
Сообщений: 392
13.06.2012, 17:48     Найти ошибку #4
использовать остаток от деления дробного числа не имеет смысла, используйте библиотечные функции для округления дробных чисел ( ceil(), floor() ), ищите разницу между целым и дробным числами, и выводите то, у которого эта разница наименьшаяя
kinoman471
4 / 4 / 0
Регистрация: 18.04.2012
Сообщений: 58
13.06.2012, 17:51  [ТС]     Найти ошибку #5
Цитата Сообщение от edward_jonson Посмотреть сообщение
используйте библиотечные функции для округления
какие?
edward_jonson
158 / 158 / 25
Регистрация: 23.02.2011
Сообщений: 392
13.06.2012, 17:55     Найти ошибку #6
Цитата Сообщение от kinoman471 Посмотреть сообщение
какие?
ceil() и floor()
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
158 / 158 / 25
Регистрация: 23.02.2011
Сообщений: 392
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
4 / 4 / 0
Регистрация: 18.04.2012
Сообщений: 58
13.06.2012, 18:18  [ТС]     Найти ошибку #9
что такое unsigned, это тип int?
edward_jonson
158 / 158 / 25
Регистрация: 23.02.2011
Сообщений: 392
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
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++
#include &lt;vcl.h&gt; #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #pragma hdrstop class...

найти ошибку - C++
выдает ошибку #include&lt;iostream.h&gt; void main() {double k,x; cout&lt;&lt;&quot;Vvedite x&quot;; cin&gt;&gt;x; double kx,s; kx=x/1; ...

Найти Ошибку БД - C++
Уважаемые, форумчане большая просьба помочь с БД, Задание Составить программу, которая описывает структуру в соответствии с вариантом...

Найти ошибку - C++
#include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;string&gt; using namespace std; template &lt;class Type&gt; struct Vector3D { ...

Найти ошибку - C++
Нужно, чтобы при вводе номера месяца выбивалось его название и кол-во дней. Но в 13й строке ошибка: #include &lt;iostream&gt; ...


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

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

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