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

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

Войти
Регистрация
Восстановить пароль
 
 
maxim12345
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
#1

x^2 + y^2 = k^2 - C++

28.09.2013, 17:15. Просмотров 591. Ответов 19
Метки нет (Все метки)

Помогите, пожалуйста, написать такую программу: Нужно ввести число k и вывести все натуральные решения x^2 + y^2 = k^2 Те решения, что получены перестановкой х и у считать совпадающими. Спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
28.09.2013, 17:16 #2
что не получается?
0
maxim12345
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
28.09.2013, 17:19  [ТС] #3
Ну так примерно я представляю, как это должно выглядеть математически, но а как написать это в си++ - вообще не получается(
0
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
28.09.2013, 17:25 #4
Цитата Сообщение от maxim12345 Посмотреть сообщение
x^2 + y^2 = k^2
x*x + y*y == k*k

примерно так
1
maxim12345
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
28.09.2013, 17:29  [ТС] #5
C++
1
2
3
4
5
6
7
8
#include <stdio.h>
#include <math.h>
 
int main()
{
    int k, x, y;
    
    scanf("%d",&k);
смотрите, вот занесли это целое число в переменную к, а что дальше?
0
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
28.09.2013, 17:36 #6
дальше нужно искать все натуральные числа x и y чтобы выполнялось условие x^2 + y^2 = k^2

x и y будут больше 0 и меньше k, т.е. методом перебора можно проверить все варианты

C++
1
2
3
4
for (int x = 1; x < k; x++)
   for (int y = 1; y < k; y++)
      if (x*x + y*y == k*k)
         .. // условие выполняется, значит что-то делаем
1
maxim12345
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
28.09.2013, 17:50  [ТС] #7
а что-то - это можно вывести все натуральные решения?

т.е. это должно выглядеть так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    int k, x, y;
 
    scanf("%d",&k);
    
    for (int x = 1; x < k; x++)
    for (int y = 1; y < k; y++)
    if (x*x + y*y == k*k)
    {
        printf( здесь нужно вывести все натуральные решения? Я пишу это "%d",x && "%d",y  а он бред какой-то выдает)
    }
}
как вообще вывести эти решения?
0
Stanis
52 / 41 / 8
Регистрация: 16.12.2012
Сообщений: 144
28.09.2013, 17:53 #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
29
30
31
32
33
34
35
36
37
#include <iostream>
using std::endl;
using std::cout;
using std::cin;
using std::right;
#include <iomanip>
using std::setw;
 
int main()
{
    int x=0,y=0,k=0;
    while (true)
    {
        cout<<"Input a natural number k"<<endl;
        cin>>k;
        while(k%1!=0 || k<0)
        {
            cout<<" Number k is not natural! Please input natural number k."<<endl;
            cin>>k;
        }
        cout<<right<<setw(6)<<"X"<<setw(6)<<"Y"<<endl;
        for (x=0;x<=k;x++)
        {
            for (y=0;y<=k;y++)
            {
                if ((x*x+y*y)==(k*k))
                {
                    cout<<right<<setw(6)<<x<<setw(6)<<y<<endl;
                }
            }
        }
        
    }
 
    system("pause");
    return 0;
}
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
28.09.2013, 17:54 #9
Или такой вариант:
C++
1
2
3
4
5
6
7
8
for( int x=1; x*x<k*k/2; ++x )
    {
        double y = sqrt(k*k - x*x);
        if( static_cast<int>(y) == y )
        {
            cout << x << " " << y << endl;
        }
    }
Итераций меньше, но они тяжелее.
1
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
28.09.2013, 17:55 #10
можно так сделать

C++
1
2
3
4
5
6
7
8
    int k;
 
    cin >> k;
 
    for (int x = 1; x < k; x++)
        for (int y = 1; y < k; y++)
            if (x*x + y*y == k*k)
                cout << x << "^2 + " << y << "^2 = " << k*k << endl;
1
maxim12345
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
28.09.2013, 18:04  [ТС] #11
За коды всем спасибо) Но а именно вот с этим кодом, что у меня, можно его дописать, используя printf (а то препод объяснять заставит)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    int k, x, y;
 
    scanf("%d",&k);
    
    for (int x = 1; x < k; x++)
    for (int y = 1; y < k; y++)
    if (x*x + y*y == k*k)
    {
        printf( здесь нужно вывести все натуральные решения? Я пишу это "%d",x && "%d",y  а он бред какой-то выдает)
    }
}
0
Stanis
52 / 41 / 8
Регистрация: 16.12.2012
Сообщений: 144
28.09.2013, 18:24 #12
Вот так
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
29
30
31
32
#include <cstdlib>
#include <stdio.h>
 
int main()
{
    int x=0,y=0,k=0;
    while (true)
    {
        printf("Input a natural number k\n");
        scanf("%d",&k);
        while(k%1!=0 || k<0)
        {
            printf("Number k is not natural! Please input natural number k\n");
            scanf("%d",&k);     
        }
        printf("X     Y\n");
        for (x=0;x<=k;x++)
        {
            for (y=0;y<=k;y++)
            {
                if ((x*x+y*y)==(k*k))
                {
                    printf("%d     %d\n",x,y);
                }
            }
        }
        
    }
 
    system("pause");
    return 0;
}
1
maxim12345
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
28.09.2013, 18:24  [ТС] #13
Подскажите, пожалуйста, как это сделать?
0
Stanis
52 / 41 / 8
Регистрация: 16.12.2012
Сообщений: 144
28.09.2013, 18:26 #14
Цитата Сообщение от maxim12345 Посмотреть сообщение
Подскажите, пожалуйста, как это сделать?
Я же написал .
1
maxim12345
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
28.09.2013, 18:30  [ТС] #15
Stanis, а имеено в моем том коде можно это сделать?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int main()
{
    int k, x, y;
 
    scanf("%d",&k);
    
    for (int x = 1; x < k; x++)
    for (int y = 1; y < k; y++)
    if (x*x + y*y == k*k)
    {
        printf( здесь что-то вставить?)
    }
}
0
28.09.2013, 18:30
Ответ Создать тему
Опции темы

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