JavaScript, osztással kapcsolatos feladat
Gimnáziumban tanulok programozni, de a tanárom nem magyaráz érthetően, és nem tudom megoldani a feladatot, ami igy hangzik: 2 véletlenszerű számot generálunk 10 és 80 között. a, nézzük meg melyiknek van több osztója b,melyik számnak nagyobb az osztói összege.
Valaki tudna segiteni?
■ Valaki tudna segiteni?
var darab = 2 var szam =
osztóinak az összege
Upsz. Valami bonyolultabb
off
Akár így, akár úgy, gerinctelenség másokkal megcsináltatni aztán beadni, hogy milyen fej voltál.
az jelentett élvezetet, hogy
Akár így, akár úgy,
Továbbá arról se felejtkezzünk el, hogy iskolában, egyetemen olyan feladatokat szoktak adni, ami a már megszerzett ismeretanyagra épül. Meg arra hivatkozni, hogy a tanár nem érthetően magyaráz, eléggé gyenge kifogás, mert bizony a diák felelőssége, hogy ha nincs meg valami, akkor visszakérdezzen.
Már párszor leírtam, hogy az ilyen kész kódokkal többet lehet ártani, mint segíteni, mert az illető nem fog megtanulni gondolkodni, hanem mindig vissza fog járni ide, és persze lesznek is, akik megoldják helyette a feladatait, és ennyi erővel hívhatnánk a Weblabort Amatőrfórumnak is. Szerintem célszerűbb lenne vagy elhajtani őket, vagy pedig ötletet adni, hogy merre induljanak el.
Másik megoldás
Én azért nem ezt a
Hibás
Upsz. A for feltétel. Valóban
Ez egy szimpla szövegértéses
Na most az egyszer:
2 véletlenszerű számot generálunk 10 és 80 között
a, nézzük meg melyiknek van több osztója
b, melyik számnak nagyobb az osztói összege
Legyen az első szám 13, a második 49. (2 véletlen szám generálása)
Ott van a 13-as, annak 1 és 13 az osztója. (osztók listájának lekérése)
Ezt úgy lehet megnézni, hogy egyesével megnézzük az összes számra 1 és 13 között, hogy ha leosztjuk vele a 13-at, akkor egész számot kapunk e.
Na most nem muszáj végigmenni, elég 13/2=6,5-ig menni, utána már úgysem lesz több osztó, mert mindegyik 1 és 2 közötti törtet fog adni.
Nézzük a 49-eset: 1, 7, 49 ugyanilyen alapon. (osztók listájának lekérése)
Persze biztosan vannak okosabb módszerek is ennek kiderítésére, de nem vagyok progmatos.
Osztók száma: (osztók listájából az osztók száma 2x)
13: 2
49: 3
tehát 49-nél van több. (összehasonlítás)
Osztók összege: (osztók listájából az osztók összege 2x)
1+13=14
1+7+49=57
a másodiknak nagyobb. (összehasonlítás)
Na most hogyan lehet ezt a feladatot modellezni?
Nézzük meg, hogy mi lesz az eredményben?
- a random számok
- melyiknél nagyobb az osztók száma
- melyiknél nagyobb az osztók összege
Mit csináltunk, amikor ezekre rájöttünk, nézzük végig.
- véletlen szám generálása
- osztók listájának lekérése
- osztók listájából az osztók száma
- összehasonlítás
- osztók listájából az osztók összege
- összehasonlítás
Na most ebből nagyjából látszik a struktúra. (Ha nem látszana, akkor elindulhatunk az eredményből is, aztán tdd-vel úgy is eljutunk a programhoz, de azt itt elmagyarázni túl hosszadalmas lenne.)
Mit látunk ránézésre abból, hogy mit csináltunk kézzel?
- Kell egy generator osztály, ami véletlen számokat ad.
- Kell egy osztó lista osztály, ami a megadott szám alapján számolódik, amiből le lehet kérni az osztók számát és azok összegét.
- Kell egy egész szám összehasonlító osztály.
- Kell egy osztály, ami leírja a feladatot.
- Kell egy osztály, ami tárolja az eredményt.
- Kell egy osztály, ami megjeleníti az eredményt.
Na most azért írjunk interface-t mindegyikhez.
Elsőre ez a sok gépelés értelmetlennek tűnhet, de ha megnézed a lényegi részt, amit kiemeltem, akkor azt elolvasva tudod, hogy mit csinál a kód, nem kell kibogarászni az algoritmusból... És ugye mi szerzők vagyunk, akiknek olvasói vannak, szóval a programodat az utánad jövő fejlesztőknek: az olvasóknak írod, és nem magadnak. Ha ők nem értik ránézésre, hogy mit csinál a program, akkor sokat fogsz csuklani te és drága jó anyád...
szerk:
A Sorter nem a legjobb megnevezés ide, a Comparer viszont még rosszabb lenne, mert az általában true-t ad, ha egyenlőek az értékek, és false-t ha nem azok. A Sorter-nél jobb elnevezés nem jutott eszembe eddig.
Először is köszi a