Hogyan kéne megoldani ezt a feladatot C-ben?
Egy vitorlás hajó által megtett útról egy olyan adathalmaz keletkezett, amelyben minden bejegyzés egy pozícióból és egy időtartamból áll. A pozíció egy kétdimenziós pont, melyen a hajó áthaladt, az időtartam pedig az az idő, ami alatt az előző pozíciótól az aktuális pozícióig elért. A pozíciók között (megfelelő közelítéssel) a hajó egyenesen haladt. A pontok euklideszi térben értelmezettek (laposföldön...), a koordináták méterben vannak megadva (azonban nem feltétlenül egész számok). Az időtartam óra, perc és másodperc tagból áll.
Hozd létre a bejegyzések tárolásához szükséges struktúrákat az alábbi azonosítókkal:
point
x (valós)
y (valós)
time
hour (egész)
minute (egész)
second (egész)
record
position (point)
interval (time)
Írj függvényt in_seconds névvel, mely egy time típussal megadott időintervallumot átvált az eltelt másodpercek számára!
Írd meg a distance nevű függvényt, mely két point típusú pont közötti távolsággal tér vissza!
Írj függvényt average_speed névvel, mely record típusú elemekből álló tömböt kap paraméterként, és visszatér az utazás átlagsebességével m/s mértékegységben (az átlagsebesség a szakaszok összhosszának és az összes eltelt időnek a hányadosa). A tömb első elemének interval tagja irreleváns, hiszen az első pont elérése előtti eseményekre nem vagyunk kíváncsiak.
Eddig erre jutottam: [link]
Igen, ott a vége nincsen túlságosan befejezve, de nem tudom hogyan csináljam.
"typedef struct"
Itt nem adtál nevet a változóknak, csak a típust írtad le.
"int distance(point b)"
Itt két point típusú változó a bemenő paraméter és azoknak a távolságát kell kiszámolni.
Ha nem jut eszedbe, hogyan kell, gondolj egy vektor hosszára.. vagy csak a Pitagorasz-tételre!
"void average_speed(record[], double atlag)"
Ez nem void. A paraméterbe nem kell az atlag.. hanem az lesz a visszatérési értéke.
Lényegében végigmész egy ciklussal, összeadod külön-külön a távolságokat és az időket, utána tudsz átlagot számolni.
Euklideszi térben távolság számításáról itt olvashatsz bövebben: [link]
#1 > Itt nem adtál nevet a változóknak, csak a típust írtad le.
Szerintem itt pont ezt akarta a kérdezö.
Az average_speed szignatúrájába szerintem írd bele a tömb hosszát is, mert valószínüleg fordításidöben nem fogod tudni a hosszát
typedef struct {
point;
time;
} record;
Erre gondoltam, csak rosszul másoltam ki...
Itt nincs név, csak típus. Még a feladat leírásában is szerepel, hogy mi legyen.. persze el lehet tőle térni..
Nem tudom, hogy te módosítottad a codeshare-en a kódot vagy valaki más, de két double különbségét ne int-ként tárold! :)
(Meg persze nem is feltétlenül kell azoknak a köztes eredményeknek változót deklarálni.)
Ne 0-tól, hanem 1-től indítsd a ciklust!
A legelső record időpontjával még nem kell számolni, ahogy a feladat is írja.
A distance() pedig két pontot vár, tehát átadod neki az "i"-ediket és az "i-1"-ediket.
A 16. és 17. sorban még mindig nem adtál nevet a változóknak. Ez így neked működik? Igazából a feladat leírása is megadja, hogy mit kell odaírnod.
Már alakul...
Viszont a "tomb[i]" az egy teljes record.
Annak még hivatkozz a .position és .interval részére amikor átadod az in_seconds() és distance() függvényeknek.
Valamint írj egy main()-t és próbáld futtatni.
Aztán majd a hibaüzenetek megmondják, hogy mit kell még pontosítanod.
A kód mostani állapotában van egy elég jó példa, hogy miért fontos jó neveket adni a változóidnak. Nézd meg ezt a függvényt:
Elsöre nem feltételnül látszik a probléma, de ha átnevezem az osszeg1, osszeg2 változókat osszeg_ido és osszeg_tavolsag-ra( [link] egyböl látszik a probléma: idöt osztunk távolsággal, ebböl tuti nem jön ki sebesség. Az osztót és az osztandót felcserélted.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!