[C++]Rozkład na sumę 2 kwadratów

kubek1
Użytkownik
Użytkownik
Posty: 249
Rejestracja: 15 wrz 2008, o 19:35
Płeć: Mężczyzna
Lokalizacja: Syberia
Podziękował: 15 razy
Pomógł: 32 razy

[C++]Rozkład na sumę 2 kwadratów

Post autor: kubek1 »

Witam. Korzystam z Microsoft Visual C++ 6.0 i mam problem z programem rozkładającym liczbę na sumę dwóch kwadratów (program nie daje prawidłowych wyników dla dowolnych liczb). Daję tu kod źródłowy:

Kod: Zaznacz cały

#include <iostream>
#include <conio.h>
#include <cmath>

void main()
{
	unsigned int a;
	unsigned int b;
	unsigned int c;
	std::cout<<"Rozklad na sume 2 kwadratow"<<std::endl;
	std::cout<<"___________________________"<<std::endl;
	std::cout<<"Wprowadz liczbe naturalna:"<<std::endl;
	std::cin>>a;
	for(int i=1;pow(i,2)<=a;++i)
	{
		b=a-pow(i,2);
		c=pow(b,0.5);
		if(c==floor(b))
		{ 
			std::cout<<b<<"  "<<c<<std::endl;
		}
	}
	std::cout<<"Liczby nie mozna juz rozlozyc";
	getch();
}
Co można tu poprawić?
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

[C++]Rozkład na sumę 2 kwadratów

Post autor: matshadow »

Ten program wypisze rozkłady bez powtórzeń, pisany pod Dev-C++

Kod: Zaznacz cały

#include<iostream>
#include<cmath>
#include <conio.h>
using namespace std;
bool kwad(int n)
{
    double a=sqrt(double(n));
    a=int(a);
    return a*a==n;
}


main()
{
    int a;
    bool ok=false;
    scanf("%d",&a);
    for(int i=1;i<=a/2;i++)
       if(kwad(i)&&kwad(a-i))
       {
            printf("%d %d
",i,a-i);
            ok=true;
       }
    if(!ok) printf("Nie da sie
");
    getch();
    return(0);
}
Xitami

[C++]Rozkład na sumę 2 kwadratów

Post autor: Xitami »

matshadow pisze:

Kod: Zaznacz cały

    ...
    for(int i=1;i<=a/2;i++)
    ...
Dla a>4 \(\displaystyle{ \left(\frac{a}{2}\right)^2 > a}\)
Zgrabniej byłoby napisać for( i=1; i*i<a; i++)
matshadow pisze:

Kod: Zaznacz cały

       ...
       if(kwad(i)&&kwad(a-i))
       ...
Czemu dwa razy sprawdzać "kwadratowość"? if (kwad(a-i*i))
kubek1
Użytkownik
Użytkownik
Posty: 249
Rejestracja: 15 wrz 2008, o 19:35
Płeć: Mężczyzna
Lokalizacja: Syberia
Podziękował: 15 razy
Pomógł: 32 razy

[C++]Rozkład na sumę 2 kwadratów

Post autor: kubek1 »

matshadow, dzięki Mimo że kod jest pod Dev C++, to jednak mój kompilator to przełknął
ODPOWIEDZ