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

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

Войти
Регистрация
Восстановить пароль
 
kkk008009kkk
46 / 46 / 1
Регистрация: 24.03.2011
Сообщений: 315
#1

Не могу найти ошибку - C++

05.04.2012, 04:13. Просмотров 556. Ответов 10
Метки нет (Все метки)

Добрый день.

Имеется задача:
Дано натуральное n. Подсчитать количество решений неравенства x2 + y2 < n в натуральных (неотрицательных целых) числах, не используя действий с вещественными числами.
Написал код:

#include <stdio.h>
#include <conio.h>

main()
{
int i,x,y,z,o;
scanf("%d",&z);
o=0;
for (x=0;x<=z;x++) {
for (y=0;y<=z;y++) {
if (x*x+y*y<=z) o++;
}}
printf("%d",o);
getch();
}


Но вычисляет он неверно. Объясните, пожалуйста, в чем ошибка.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2012, 04:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не могу найти ошибку (C++):

Найти слова, повторяющиеся более одного раза, не могу найти ошибку - C++
#include &lt;iostream&gt; using namespace std; void obr1(char **s, char **mas, int n, int m) { int i; int k; char *tm; for(i...

Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку) - C++
// Заданы матрицы X(8;4),Y(5;5),Z(6;9). // Для каждой из матриц определить строку, в которой находится наименьшее // количество...

Не могу найти ошибку - C++
В общем суть программы состоит в том чтобы решить нелинейное уравнение x3+x2-4x-4=0 двумя методами хорд и итераций, есть исходник , вот...

Не могу найти ошибку - C++
Компилятор выдает такую ошибку: fatal error C1075: конец файла обнаружен ранее, чем левая фигурная скобка &quot;{&quot; в...

Не могу найти ошибку - C++
Всем привет. НАчал читать учебник Дейтеля (5е издание), дошел до момента &quot;отделение интерфейса от реализации&quot;, и в примерах, которые...

Не могу найти ошибку - C++
Добрый день, программа не компилируется, не могу найти ошибку. Заранее спасибо. #include &lt;stdio.h&gt; #include &lt;math.h&gt; int main() ...

10
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
05.04.2012, 04:37 #2
Так x2 это x в квадрате или все таки x * 2? Для этого кстати на форуме есть BB code )

Добавлено через 8 минут
Вот пример для x2 + y2 < n:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cmath>
 
/*
 *
 */
int main() {
    int n = 100, count = 0, lim = 0;
 
    lim = std::sqrt( n );
 
    for ( int x = 0; x < lim; x++ ) {
        for ( int y = 0; y < lim; y++ )
        if ( x * x + y * y < n ) {
        count++;
        std::cout << count << ": " << x << " * " << x << " + " << y << " * " << y << " = " << ( x * x + y * y ) << std::endl;
        }
    }
    
    return 0;
}
Думаю понятно почему предел до которого считаем x и y это корень из n?
0
ATEUCT
18 / 18 / 2
Регистрация: 28.02.2012
Сообщений: 35
05.04.2012, 04:38 #3
для таких ошибок используется вывод промежуточных результатов, там и найдёшь в чём проблема
0
kkk008009kkk
46 / 46 / 1
Регистрация: 24.03.2011
Сообщений: 315
05.04.2012, 09:05  [ТС] #4
Toshkarik, Что это за программа? В любом случае, она ничего не считает. Хотя бы для n=3.

Возможно, я что-то не понял.
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
05.04.2012, 15:19 #5
Вот немного подправил, нужно считать до корня включительно. Так же немного изменил вывод, что бы было более понятно.
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 <iostream>
#include <cmath>
 
/*
 *
 */
int main() {
    int n = 3, count = 0, lim = 0;
 
    lim = std::sqrt( n );
 
    std::cout << "x * x + y * y < n\nn = " << n << std::endl;
 
    for ( int x = 0; x <= lim; x++ ) {
        for ( int y = 0; y <= lim; y++ )
            if ( x * x + y * y < n ) {
                count++;
                std::cout << count << ": ( x = " << x << ", y = " << y << " )    " << x << " * " << x << " + " << y << " * " << y << " = " << ( x * x + y * y ) << std::endl;
            }
    }
 
    return 0;
}
При n == 3.
1
kkk008009kkk
46 / 46 / 1
Регистрация: 24.03.2011
Сообщений: 315
05.04.2012, 19:26  [ТС] #6
Toshkarik, Теперь все понял. Спасибо. В принципе, и моя программа правильная, просто условия не до конца понял вчера.


Думаю понятно почему предел до которого считаем x и y это корень из n?
Да.
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
05.04.2012, 19:33 #7
только вычисление корня - это операция с вещественным числом =)
1
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
05.04.2012, 20:06 #8
Nekto, есть перегрузка функции которая принимает целочисленный параметр, но возвращает все равно double. Но в программе используются только целочисленные переменные, я думаю это и имелось ввиду в задании. Если не использовать вычисление корня то алгоритм будет просто не эффективным. Хотя может есть еще какой то способ, математику подзабыл немного.
1
kkk008009kkk
46 / 46 / 1
Регистрация: 24.03.2011
Сообщений: 315
05.04.2012, 21:03  [ТС] #9
Но в программе используются только целочисленные переменные, я думаю это и имелось ввиду в задании.
Да, это имелось ввиду.
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
05.04.2012, 21:06 #10
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>
using namespace std;
int main()
{
 setlocale(LC_ALL,"Russian");
 cout<<"Enter n: ";
 int n;
 cin>>n;
 cout<<"x*x + y*y < n\nxВєN, yВєN"<<endl;
 int count=0;
 for (int i=1;2*i*i<n ;i++)
  {
   count++;
   cout<<"x="<<i<<" y="<<i<<endl;
   for (int j=i+1;j*j+i*i<n; j++)
    {
     count+=2;
     cout<<"x="<<i<<" y="<<j<<endl;
     cout<<"x="<<j<<" y="<<i<<endl;
     }
  }
 cout<<count<<" results\n";
 system("pause");
 return 0;
}
Не уверен с границами циклов, надо подумать
1
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
05.04.2012, 21:24 #11
Вы наверно имели ввиду вот это
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
/*
 *
 */
int main() {
    int n = 3, count = 0;
 
    std::cout << "x * x + y * y < n\nn = " << n << std::endl;
 
    for ( int x = 0; x * x < n ; x++ ) {
        for ( int y = 0; y * y < n; y++ )
            if ( x * x + y * y < n ) {
                count++;
                std::cout << count << ": ( x = " << x << ", y = " << y << " )    " << x << " * " << x << " + " << y << " * " << y << " = " << ( x * x + y * y ) << std::endl;
            }
    }
 
    return 0;
}
Но проблема в том, что выражения x * x и y * y считаются на каждой итерации циклов.
1
05.04.2012, 21:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2012, 21:24
Привет! Вот еще темы с ответами:

Не могу найти ошибку! - C++
Только-только начал работать с функциями и не могу понять, почему в моей игре(кидаешь с компьютером кубик) и у пользователя и у программы...

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

Не могу найти ошибку - C++
Сумму элементов последовательности, расположенных между первым и вторым положительными элементами. При помощи итераторов. Если нету...

Не могу найти ошибку - C++
Вот моя задача и к ней я должен придумать обработку исключений Поле first - положительное целое число, цена товара, поле second -...


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

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

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