Kezdőoldal » Számítástechnika » Programozás » Mi a szemantikai hiba az...

Mi a szemantikai hiba az alábbi C# kódrészletben?

Figyelt kérdés

public static Ember[] Különbségszámítás(Ember[] napok)

{

for(int i=0; i<napok.Length; i++)

{

if(i+1==napok.Length)

{

if(napok[0].Nap+365-napok[i].Nap<napok[i].Nap-napok[0].Nap)

napok[i].Nap=napok[0].Nap+365-napok[i].Nap;

else

napok[i].Nap=napok[i].Nap-napok[0].Nap;

}

else

napok[i].Nap=napok[i+1].Nap-napok[i].Nap;

}

return napok;

}


A teljes kód arra szolgálna, hogy megmondja emberek egy csoportjáról, hogy melyik kettő születésnapja van a legközelebb egymáshoz. Ez a függvény számítaná a dátumok közti napok számát. Bemenetként egy növekvő sorrendbe rendezett objektumtömböt kap. Minden objektumnak van lekérdezhető Nap tulajdonsága, ami megadja, hogy az a dátum az év hanyadik napja (szökőnap nélkül).

A for ciklusban folyamatosan vizsgáljuk, hogy elértük-e már az utolsó napot (ha i+1 egyenlő lesz a tömbméretével, akkor ugye a 0-val való indexelés miatt az már kimutatna a tömbből, így i az utolsó index).

Ha még nem értük el, akkor folyamatosan átadjuk a Nap tulajdonságnak új értékként az i és az utánna lévő nap különbségét (mivel növekvően rendezett a tömb, ezt megtehetjük, és visszafele is egyértelműen megmondható, melyik különbség melyik két i-hez tartozik, hiszen a különbségek i-je nem tér el a napok i-jétől).

Eddig jó is, a probléma viszont akkor van, ha elérjük az utolsó i-t. Ilyenkor az ehhez tartozó Napban az év első és utolsó dátumának különbségét kéne eltárolnunk, mivel az évek is ugye körbemennek, és meg kell vizsgálnunk, azt is, hogy nem-e ez a kettő van-e a legközelebb egymáshoz (pl. jan. 1. és dec. 31.).

Ezt úgy gondoltam megvalósítani, hogy megvizsgáltatom vele, hogy melyik kisebb, első dátum + 365 - utolsó dátum vagy az utolsó dátum- első dátum. És amelyik kisebb, azt az értéket tároljuk el a tömb utolsó helyén (amiről később szintén egyértelműen tudjuk, hogy az utolsó és az első i-hez tartozik).

Valami viszont egyértelműen rossz a gondolatmenetemben és/vagy a kódomban, mert a debugger szerint az utolsó Nap helyre (ami megint mondom, már a különbségeket tárolja) az második és az első elem különbsége került, nem az utolsó és az elsőé.

Hol rontottam el?



2016. nov. 30. 23:45
1 2
 11/11 anonim ***** válasza:
Sajnálom, hogy segíteni alig alig tudok, maximum, ha nulláról írnám meg a kódot neked. :'D De, ha ilyenek lesznek a jövő programozói Isten óvja ezt az országot!
2016. dec. 1. 09:47
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!