Pomoc przy pierwszym algorytmie

0

Witam wszystkich!!!
Bardzo pilnie potrzebuje pomocy, dostałem zadanie które jest warunkiem zaliczenia semestru i nie moge dać sobie z tym rady bo jest to mój pierwszy agorytm.

Treść zadania:
"Znaleźć wszystkie trójki liczb naturalnych i,j,k<100 spełniające zależność:
i2(kw)+j2(kw)=k2(kw)

Chodzi o napisanie algorytmu potem prezentacji graficznej a na końcu implementacja, mi głównie chodzi o to żeby ktoś mi pomógł to zacząć.

Dzięki wielkie i pozdrawiam.

0

Mozna wykorzystac metode silowa albo zauwazyc, ze w zadaniu moza o twierdzeniu Pitagorasa.
Wiadomo, ze boki trojkata prostokatnego zwiazane sa zaleznoscia:

a = 2n + 1, b = 2n(n + 1), c = 2n(n + 1) + 1, gdzie n jest liczba naturalna >= 1.

Wystarczy wiec przeleciec w petli n od 1 do 99.

PS. Co masz na mysli wowiac o reprezentacji graficznej?

0

PS. Co masz na mysli wowiac o reprezentacji graficznej?

ja bym zastosował metodę brutalnej siły czyli trzy pętelki pozagnieżdzane od 1 do 99 i sprawdzanie warunku :)

Co do PS to pewnie chodzi o schemat blokowy.

0

Racja Ktos, przykład w ibpro

INT i, j, k, counter
for i = 1 to 99
	for j = i to 99
		for k = 1 to 99
			if i^2 + j^2 = k^2
				print i, j, k
				counter++
			endif
		next k
	next j
next i

znajduje 50 wyników w czasie 312ms (athlon xp 2800+)
pętla z J nie zaczyna od 1 żeby nie duplikować wyników

0

Nastepnym krokiem optymalizacji jest:

for k = j + 1 to 99
  if i^2 + j^2 = k^2

:)

0

WIELKIE WIELKIE WIELKIE DZIĘKI!!!!

a=2n+1, b=2n(n+1), c=2n(n+1)+1 faktycznie działa,
a teraz kod. Niestety musi zawierać w sobie tylko jedną pętlę i ma być naj<ort>prostrzy</ort> w świecie, czy mogłoby to wyglądać w ten sposub?

int i, j, k counter;
           for i, j, k = 1 to 99;
             if i^2+j^2=k^2;
               printf (i, j, k);
            counter++

Troche skrucony kod który podał @sapero ale jak myślicie, zadziała?
Sorry ale jeszcze nie pamiętam składni C i na pewno jest odgroma błędów, więc proszę o porawki.

0

No cóż facet jak zobaczył wzory na a, b i c zbaraniał i kazał mi zrobić to od nowa z trzema pętlami. W takim razie chciałbym prosić o opinię na temam tego alborytmu:

1.Podstaw wartości dla i, j, k od 1 do 99
2.Sprawdź czy i2+j2=k^2, jeśli tak to przejdź do pt.3, jeśli nie przejdź do pt.1
3.Wypisz i, j, k
4.jeśli i=99, j=99, k=99 zakończ, jeśli nie wróć do pt.1

Czegoś mi tu brakuje, ale nie wiem czego. Jak wypisać wyniki, czy zapisywać je pokolei do pliku np. tekstowego, czy użyć bazy danych do zapisu wyników czy <ort>po prostu</ort> za każdym razem wyświetlał się wynik?
Poprosze o sugestie.

0

No dobra widze, że nikt tym się nie interesuje, w takim razie mam jeszcze jeden problem. Napisałem już ten program ale zamiast podawać wszystkie trujki liczb spełniających warunek i2+j2=k^2 wyświetla mi tylko jedną trujkę i=100, j=100, k=100 co oczywiście jest błędem poniewasz przekroczyły dopuszczalną wartość 99 i kończy prace. Zamieszczam poniżej kod:

#include <stdio.h>
int main ()
{
int a, b, c;
  for(a=1; a<100; a++);
   {
      for(b=c; b<100; c++);
    { 
	 for(c=1; c<100; c++);
        {
           if((c*c)+(b*b)==(a*a));
          {
	    printf("i=%d, j=%d, k=%d\n", c, b, a);
          }  
          
        }
    } 
   }
   return 0;
}

Kolega mi poradził aby zmienić warunek z (aa)+(bb)=(cc) na taki jak wyżej czyli (cc)+(bb)=(aa). ale to też nic nie dało i efekt ten sam.
Bardzo prosze o pomoc ;(

0

PO FOR NIE STAWIA SIĘ ŚREDNIKA!!! TAK SAMO PO IF!!!

//hmmm a jadenak się znalazły liczby ;)

0
#include <stdio.h>
int main ()
{
int a, b, c;
  for(a=1; a<100; a++)
    for(b=1; b<100; b++)
      for(c=1; c<100; c++)
        if((a*a)+(b*b)==(c*c))
          printf("%d %d %d\n",a,b,c);
  getchar();
  return 0;
}

Pozdrawiam

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