liczby pitagorejskie

0

Witam, mam problem z takim oto programem:

Liczby pitagorejskie można opisać następująco:
a2 + b2 = c^2
gdzie a, b, c są całkowite. Napisz program znajdujšcy wszystkie wartości c
w przedziale [1, a], które sš liczbami pitagorejskimi . Dla przykładu:
32 + 42 = 5^2

Zupełnie nie mam pomysłu jak go ruszyć... Jedyne co mi przychodzi do głowy, to jakaś forma sprawdzania na zasadzie:
c=sqrt(a2+b2) i wtedy jeśli round(c)=c mamy podany dobry wynik... Ale to tyle co umiem wymyślić i nie mam pojęcia jak to zapisać sensownie...

Proszę o podpowiedzi :) Nie zależy mi na gotowcach, bowiem chcę się nauczyć jak to się robi, a nie pojechać na 'kopiuj+wklej' :)

0
  • Deklarujesz 3 zmienne całkowite
  • Robisz 3 pętle for dla każdej zmiennej (zagnieżdżone). Przebieg pętli daj na początek od 1 do Zakres (możesz później trochę zawęzić)
  • Jeśli zmienne spełniają warunek to je drukujesz
  • Koniec (cała procedura drukująca trójki pitagorejskie to 4 linijki kodu)
0

spróbuj trochę jaśniej pisać.
potrzebujesz wypisać tylko wartości "c" ? czy wszystkie trójki? a może tylko jedną liczbę, oznaczającą ILOŚĆ takich wartości c w zadanym przedziale? jeśli rozwiązania są sprawdzane automatycznie, to może to zaważyć o ocenie całego zadania.

masz wypisać tylko 'trójki właściwe'? (nie będące wielokrotnościami innych), czy wszystkie możliwe?
np, trójka 5,12,13 jest 'właściwa' (niektórzy mówią 'pierwotna') natomiast 10,24,26 już nie (bo jest wielokrotnością 5,12,13). Chcesz wypisywać wszystkie, czy tylko te właściwe?

zasada jest prosta, tak jak ktoś wyżej wspomniał:
3 zagnieżdżone pętle: (G to górne ograniczenie podane programowi)

  • zakres pierwszej (zmienna sterująca 'a') od 1 do G-2.
  • zakres drugiej (zmienna sterująca 'b') od a+1 do G-1.
    ----> opcjonalnie: w tym miejscu sprawdzenie, czy liczby a, b są względnie pierwsze (czy ich NWD =1). Jeśli umieścisz sprawdzanie względnej pierwszości liczb A, B w tym miejscu, to w efekcie otrzymasz tylko 'trójki właściwe'. NWD można sprawdzić najłatwiej rekurencyjnym euklidesem (function nwd(a,b: longint):longint; begin if b=0 then nwd:=a else nwd:=nwd(b, a mod b); end; ) - tylko trzeba pamiętać o tym, żeby nie 'przepuszczać' pętli dalej, jeśli NWD<>0.
  • zakres trzeciej (zmienna sterująca 'c') od b+1 do G.
    ---> w tym miejscu:
    if sqr(a)+sqr(b)=sqr(c) then MAMY TRÓJKĘ (i tutaj, w zależności co chcesz, aby było wynikiem: albo powiększasz licznik rozwiązań /inc(licznik)/, albo wypisujesz na ekran 'c' /writeln(c); /, albo wypisujesz wszystkie trzy liczby: /writeln(a,' ',b,' ',c).

SQR- podniesienie do kwadratu. nie mylić ze SQRT- pierwiastek 2-go stopnia.

0

Mam tylko c do wypisania ;) Już się z tym uporałam, ale dzięki za podpowiedzi :) Nie było takie trudne jak mi się na początku wydawało :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1