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

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

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

примерно так
maxim12345
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
28.09.2013, 17:29  [ТС]     x^2 + y^2 = k^2 #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);
смотрите, вот занесли это целое число в переменную к, а что дальше?
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
28.09.2013, 17:36     x^2 + y^2 = k^2 #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)
         .. // условие выполняется, значит что-то делаем
maxim12345
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
28.09.2013, 17:50  [ТС]     x^2 + y^2 = k^2 #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  а он бред какой-то выдает)
    }
}
как вообще вывести эти решения?
Stanis
52 / 41 / 8
Регистрация: 16.12.2012
Сообщений: 144
28.09.2013, 17:53     x^2 + y^2 = k^2 #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;
}
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
28.09.2013, 17:54     x^2 + y^2 = k^2 #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;
        }
    }
Итераций меньше, но они тяжелее.
User409368
191 / 168 / 6
Регистрация: 09.09.2013
Сообщений: 524
28.09.2013, 17:55     x^2 + y^2 = k^2 #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;
maxim12345
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
28.09.2013, 18:04  [ТС]     x^2 + y^2 = k^2 #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  а он бред какой-то выдает)
    }
}
Stanis
52 / 41 / 8
Регистрация: 16.12.2012
Сообщений: 144
28.09.2013, 18:24     x^2 + y^2 = k^2 #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;
}
maxim12345
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
28.09.2013, 18:24  [ТС]     x^2 + y^2 = k^2 #13
Подскажите, пожалуйста, как это сделать?
Stanis
52 / 41 / 8
Регистрация: 16.12.2012
Сообщений: 144
28.09.2013, 18:26     x^2 + y^2 = k^2 #14
Цитата Сообщение от maxim12345 Посмотреть сообщение
Подскажите, пожалуйста, как это сделать?
Я же написал .
maxim12345
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
28.09.2013, 18:30  [ТС]     x^2 + y^2 = k^2 #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( здесь что-то вставить?)
    }
}
Stanis
52 / 41 / 8
Регистрация: 16.12.2012
Сообщений: 144
28.09.2013, 18:34     x^2 + y^2 = k^2 #16
[QUOTE=maxim12345;5111432]Stanis, а имеено в моем том коде можно это сделать?


То что я написал по сути и есть твой код , просто там еще проверка на то что бы k было целым и неотрицательным , и немного оформлено , что бы выводилось в понятном виде , а основной код именно такой же как твой .
maxim12345
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
28.09.2013, 18:36  [ТС]     x^2 + y^2 = k^2 #17
А можно тогда убрать эту проверку и сделать его как-нибудь без while?
Stanis
52 / 41 / 8
Регистрация: 16.12.2012
Сообщений: 144
28.09.2013, 18:43     x^2 + y^2 = k^2 #18
Цитата Сообщение от maxim12345 Посмотреть сообщение
А можно тогда убрать эту проверку и сделать его как-нибудь без while?
ок щас

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <cstdlib>
#include <stdio.h>
 
int main()
{
    int x,y,k;
    
        printf("Input a natural number k\n");//предлагает ввести k
        scanf("%d",&k);//принимает k
        printf("X     Y\n");// выводит строку X   Y
        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);//выводит сами x    y
                }
            }
 
    system("pause");// что бы программа не закрывалась сразу после вывода результата
    return 0;
}
maxim12345
2 / 2 / 0
Регистрация: 28.09.2013
Сообщений: 72
28.09.2013, 18:46  [ТС]     x^2 + y^2 = k^2 #19
Воо, этого я и хотел, спасибо
Qwertiy
817 / 625 / 75
Регистрация: 20.08.2013
Сообщений: 2,525
18.10.2013, 18:59     x^2 + y^2 = k^2 #20
maxim12345, в соответствии с требованием
Цитата Сообщение от maxim12345 Посмотреть сообщение
Те решения, что получены перестановкой х и у считать совпадающими.
границы циклов должны быть другие:
C++
1
2
3
4
for(x=0; x<=k; ++x) // <= а не < если k может быть 0
  for(y=x; y<=k; ++y) // не от 0
    if(x*x+y*y==k*k)
      printf("%-4d %-4d\n", x, y);
Yandex
Объявления
18.10.2013, 18:59     x^2 + y^2 = k^2
Ответ Создать тему
Опции темы

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