ďťż

Ładny brzuch

fajny problem :
mam takie cosik

#include <iostream>
#include <conio.c>
#include <cmath>
using namespace std;
int main()
{
    clrscr();
int a = 5438;
int b;
double c;
int w=15001900;
for(b=1;b>w;b++)
{
  c= pow((a*a+b*B), 1/2);
  if(c == int)
  { cout << b << endl << c<<endl;
                     
}
   
}

w jest dowalna liczba napisana tylko ak zeby w instrukcji for bylo g00d :)
ale dokladnie chodz mi oto :"if(c == int)" che zeby program sprawdzal czy c jest liczba naturalna no i jezeli jest no to ja wypisze...
progam ma za zadanie wyliczyc pozostałe boki trójkąta prostakatnego majac tylko jedna przyprostokatna trojkata a wzor jest wlasnie taki
a*a=b*b+c*c <=>
a=sqrt(b*b+c*c)
bok b jest caly czas powiekszany o 1 :)
a bok a to jest dowolna liczba.



Jakoś dziwnie wyglada ten program, np.
for(b=1;b>w;b++) //przecież tym wypadku pętla nigdy się nie zacznie!

naturalność można sprawdzić np.:
double a=12.5;
if(!(a-(int)a))
//jest naturalna

A poza tym obliczanie boków tr. pros. na podstawie przyprostkokatnej nie ma sensu!

Troszke zagmatwales to zadanie. Nie chce mi sie zglebiaz w to zadanie. Jesli troszke lepiej objasnisz o co Ci chodzi to z checia sprobuje pomoz. Rozumiem, ze chcesz obliczac dwa pozostale boki trojkata, majac tylko jeden z nich i zadnych inncyh danych, takich chociazby jak kat miedzy nimi? Jesli tak to jest to niemozliwe. Mam uwage tak jak poprzednik do tej petli - ona w takiej postaci (przez kos poprzedzajacy ja) nigdy nie bedzie dzialac poprawnie. Ostania juz uwaga to co do int w=15001900; // przekraczasz tym przypisaniem zakres integer (od okolo -32000 do okolo 32000). Napisz troszke dokladnie to o co Ci chodzi, byc moze wtedy bedziemy wstanie cos wiecej pomoz.

Test na liczbę całkowitą możesz przeprowadzić przez if(c % 1 == 0). Radze dokładniej wyjaśnić drugi problem, bo nie mogę się połapać o co chodzi :/




Test na liczbę całkowitą możesz przeprowadzić przez if(c % 1 == 0)...
bzdura :P
niby jak to ma dzialac jesli operator modulo mozna zastosowac tylko do typow calkowitych? jezeli c jest obiektem typu float to kod taki sie nawet nie skompiluje :P


bzdura :P
niby jak to ma dzialac jesli operator modulo mozna zastosowac tylko do typow calkowitych? jezeli c jest obiektem typu float to kod taki sie nawet nie skompiluje :P

Witam,
Fakt dla obiektow typu float warunek if(c%1==0)
nie bedzie dzialal.
Wymyslilem troche inny test:
if(c/abs( c )==1)
//calkowita
else
//rzeczywista

Co do petli to ona moze sie zaczac (czasem) wlasnie ze wzgledu na przekroczenie zakresu int.
Jesli natomiast chodzi o trojkat to da sie go (chyba) w ten sposob wyliczyc.
Np:
zaczynamy dla a=3;
a^2 + b^2 = c^2 (tw.Pitagorasa).
jesli je przeksztalcimy to
c= sqrt(a^2+b^2);
teraz zwiekszajac b ciagle o 1 to byc moze dotrzemy do trojkata prostokatnego (niestety nie zawsze)
Kat nie jest w tym przypadku potrzebny bo przeciez ma byc to trojkat prostokatny.
Idac dalej tym torem.
a=3 b=1
c= sqrt(9+1) //nie jest calkowita
a=3 b=2
c =sqrt(9+4)//nie jest calkowita
a=3 b=3
c =sqrt(9+9)//nie jest calkowita
a=3 b =4
c = sqrt(9+16)=5 //calkowita!!!!
Niestety nei zawsze prowadzi to do dobrego rozwiazania. Zalezy to od doboru czynnika a.
Tutaj celowo wzialem "trojke pitagorejska".
PS.Osobiscie uwazam ze ten sposob generowania trojkatow prostokatnych jest troche glupi...
Jesli jednak chcesz uzyskac to w ten sposob to moge sie pokusic o napisanie dzialajacego kodu..
Daj znac jesli tak.
Pozdrawiam


Witam,
Fakt dla obiektow typu float warunek if(c%1==0)
nie bedzie dzialal.
Wymyslilem troche inny test:
if(c/abs( c )==1)
//calkowita
else
//rzeczywista

twoj kod jest bledny dla liczb z przedzialu otwartego (-1,1) :P:P


twoj kod jest bledny dla liczb z przedzialu otwartego (-1,1) :P:P

w linii: if(c/abs( c )==1) masz powazny blad :]
jezeli c jest z przedzialu (-1,1) to abs© = 0, wiec dzielisz przez zero, a tak nie mozna i dlatego dostajesz ladny error division by zero :)

w poprzednim poscie napisalem dlaczego c nigdy nie powinno byc zerem
jesli zalozenia bede spelnione (mozna sprawdzac wprowadzane a i b przeciez)
to division error nigdy nie wystapi
Pozdrawiam

qrna po co tyle odpowiedzi ??? skromnie prosze 'w' jest dowolna liczba dzieki za odpowiedzi
zaraz sprawdzer program dzienks :)


Test na liczbę całkowitą możesz przeprowadzić przez if(c % 1 == 0).


bzdura :P
niby jak to ma dzialac jesli operator modulo mozna zastosowac tylko do typow calkowitych? jezeli c jest obiektem typu float to kod taki sie nawet nie skompiluje :P

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •