Petlja unutar petlje

Petlja unutar petlje

offline
  • Pridružio: 09 Sep 2021
  • Poruke: 25

Pozdrav svima,

Imam problem u vezi jednog zadatka u C programskom jeziku. Naime, zadatak je sledeći:
Napisati program koji pronalazi sve Pitagorine trojke brojeva, od kojih nijedan nije veći od unetog broja n.

E sad, ovo rešenje nije najelegantnije jer ima duplikata (početne varijacije rade korektno,ali posle već ne) ali mi je bitno da shvatim kako funkcioniše ugnježdeni for. Konkretno, shvatam kako radi for unutar fora, ali ovaj zadatak zahteva i treći for i tu se maltene pogubim u postupku na koji program radi.
Početno rešenje;

#include <stdio.h>
#include <stdlib.h>

int main()
{
int n, i, j, k;

printf("Unesite najveci moguci broj za pitagorine trojke: ");
scanf("%i", &n);

printf("Pitagorine trojke su: \n");
for (i = 1; i <= n; i++){
for(j = 1; j <= n; j++)
for(k =1; k <= n; k++)
if (i * i == k * k - j * j)
printf("(%i, %i, %i)\n", i, j, k);
}

return 0;
}

Uzeću za primer da nam je n = 15 i za prvi par brojeva bi trebao da ispiše (3, 4, 5) i ono što me tu buni je kako ta 3 fora funkcionišu, u smislu kojim redosledom proveravaju uslove i ostalo?
Ovo je neko moje razmišljanje (za sad pogrešno):
1. Ulazimo u prvi for, gde se za i = 1 proverava da li je ono <= n. Uslov je tačan
2. Ulazi u drugi for gde je uslov takođe tačan
3. Ulazimo u treći for, takođe tačan
4. Proverava se da li je k na kvadrat = j na kvadrat + i na kvadrat. Uslov je netačan i za tu vrednost preskače se deo kod printf-a.
Iznad navedeno mi je jasno, e sad,deo koji mi nije najjasniji, kojim redosledom program dalje ide, tj. od kog fora tako da stigne baš do početnih brojeva 3/4/5 uzastopno?

Hvala puno unapred na pomoći.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
online
  • Pridružio: 31 Dec 2015
  • Poruke: 1272

Mozda bi ti pomoglo da ispises i, j, k u svakoj iteraciji. Onda ces videti kako se krecu vrednosti promenljivih i kakav je redosled njihovih promena.

U sustini, prvo ce biti i = j = k = 1, u sledecoj iteraciji ce i = j = 1, a k ce se povecati na 2 i tako sve dok k ne stigne do 15. Onda ce se j povecati za jedan i bice 2, a k ce se vratiti sa 15 na 1 i pocece ponovo da raste do 15, tako da je sada stituacija i = 1, j = 2. Kada k ponovno dostigne 15, j ce se ponovo povecati za 1 i bice 3. Onda je situacija i = 1, j = 3, a k se ponovo vraca na 1 i sve ponovo. To ce se desavati dok j ne dodje do 15. Onda ce se i povecati za 1 i bice 2, a j i k ce se vratiti na 1. Tada situacija postaje i = 2, j = 1, k = 1. Na dalje se sve ponavlja. Sve ce se zavrsiti kada bude i = j = k = 15.

Uslovi iz for petlji se proveravaju u svakom trenutku kada promenljiva iz for petlje treba da se poveca za 1 (u ovom slucaju), a uslov iz if-a se proveravaju pri svakoj iteraciji.

Nadam se da nisam negde pogresio u pisanju. Mislim da bi ti od najvece pomoci bilo da uradis ono sto sam u prvoj recenici napisao.



offline
  • Pridružio: 09 Sep 2021
  • Poruke: 25

Hvala puno, sada sam u potpunosti skontao princip.

online
  • Pridružio: 31 Dec 2015
  • Poruke: 1272

Nema na cemu. Drago mi je da sam pomogao.

Ko je trenutno na forumu
 

Ukupno su 942 korisnika na forumu :: 31 registrovanih, 6 sakrivenih i 905 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., bokisha253, braca57, Denaya, DPera, Frunze, goxin, JOntra, Još malo pa deda, Kubovac, Lieutenant, MB120mm, mercedesamg, milenko crazy north, Milos ZA, MilosKop, milutin134, minmatar34957, nenad81, ObelixSRB, raptorsi, Recce, repac, Sass Drake, Sirius, Srle993, stegonosa, vathra, Vlad000, vladaa012, yufighter