Hei
olen aika hukassa. Minun pitäisi tehdä tehtävä. eikä aukea, vaikka olen illan yrittänyt. Pitäisi laskea lentoradan korkein kohta. Laadi sovellus, jonka avulla lasketaan lentoradankorkein kohta, kun pallo heitetään ilmaan 30 asteen kulmassa ja se lentää 45 m matkan. teht ratkaisemiseksi käytä hyväksi seuraavia yhtälöä y=-ax(toiseen) b ja yhtälön derivaattaa y' =-2a(-22,5) = tan 30 astetta. Kun tiedetään, että 30 astetta =1/ neliöjuuri3(rad=pi/6), voidaan lentoradan korkein kohta laskea. Määritä tehtävässä seuraavat tiedot: Lähtökulma muuttuu välillä 25-45 (5)asteen välein ja lentomatka kasvaa kulman muutoksen seurauksena 7m. Talleta tiedot tiedostoon. Olisin kiitollinen avusta.
olen aika hukassa. Minun pitäisi tehdä tehtävä. eikä aukea, vaikka olen illan yrittänyt. Pitäisi laskea lentoradan korkein kohta. Laadi sovellus, jonka avulla lasketaan lentoradankorkein kohta, kun pallo heitetään ilmaan 30 asteen kulmassa ja se lentää 45 m matkan. teht ratkaisemiseksi käytä hyväksi seuraavia yhtälöä y=-ax(toiseen) b ja yhtälön derivaattaa y' =-2a(-22,5) = tan 30 astetta. Kun tiedetään, että 30 astetta =1/ neliöjuuri3(rad=pi/6), voidaan lentoradan korkein kohta laskea. Määritä tehtävässä seuraavat tiedot: Lähtökulma muuttuu välillä 25-45 (5)asteen välein ja lentomatka kasvaa kulman muutoksen seurauksena 7m. Talleta tiedot tiedostoon. Olisin kiitollinen avusta.
Vastaukset 12
Vanhimmat
Faktat:
Lähtökulma 30 astetta 30*PII / 180 rad
lentomatka 45m (oletan, että ilman vastus on 0), tällöin voidaan perustellusti päätellä, että lentoradan korkein kohta on puolivälissä (45 / 2) metriä.
Nyt pitää muodostaa toisen asteen yhtälö, lentokorkeus(h) matkan (s) funktiona.
Tästä se lähtee yhtälöthän sinulle oli jo annettu. Kysy lisää jos tuntuu vielä hankalalta.
Kiitos vinkeistä! Kokeillaan.
ilmeisesti tuossa on tarkoituksena väsätä funktio tyyliin:
double laskeLentoradanKorkeinKohta(double lahtokulma, double lentomatka);
Eli itse ratkoisin paperilla sopivan kaavan laskea tuo asia annettujen tietojen perusteella. Sitten kirjoittaisin kaavan C-kiellellä.
Sen jälkeen sinä voit tehdä vaikka:
printf("%f\n", laskeLentoradanKorkeinKohta(25.0, 45.0));
jne..
Pyörittelin tuota vielä hiukan ja sain johdetuksi seurazvan kaavan, jolla sain ihan oikean tuloksenkin omasta mielestäni ainakin ihan järkevä tuloste tulee. Lähdin ratkomaan asiaa ihan vinon heittoliikken kautta, jossa usein tunnetaan alkunopeus ja kulma, mutta ei lakikorkeutta eikä kappaleen lentämän matkan pituutta.
Mikäli sinulle on fysiikka tuttua on näistä kaavoista varmastikin apua. Ensin symbolit ja sitten kaavat.
Va = Alkunopeus
Vx = x-akselin nopeus
Vy = y-akselin nopeus
sx = kappaleen kulkema matka
sy = kappaleen korkeus
a = kulma
Järkevintä lienee muuttaa heti kulmat radiaaneiksi. 1rad = PII*aste/180, joten sijoitetaan ja saadaan että a(rad) = PII*30/180. En laita lukuarvoa, koska muuten tulee liikaa pyöristysvirhettä.
Laskun kannalta oleellinen luku Va on tuntematon, joten se tulee ratkaista seuraavaksi. Alla on välivaiheineen ratkaistu alkunopeuden laskeminen.
Eli kappaleen kulkema matka sx = Va * cos(a) * 2 * t (t on nousuaika lakikorkeuteen). Yhtälössä on edelleen tuntematon muuttuja t, joten ratkaistaan t y-akselin nopeudesta ja sijoitetaan se äskeiseen yhtälöön.
Vy = Va * sin(a) - gt t = (Va * sin(a)) / g
Sijoittamalla saamme, että kappaleen kulkema matak sx on:
sx = Va * cos(a) * 2 * (Va * sin(a)) / g.
Asetetaan äskeisen kaavan tulokseksi haluttu matka , josta ratkaisemme Va:n siis
sx = Va * cos(a) * 2 * (Va * sin(a)) / g = 45
Va * cos(a) * 2 * (Va * sin(a)) / g = 45 || * g
Va * cos(a) * 2 * (Va * sin(a)) = 45g ||Yhdistetään termit
Va^2 * cos(a) * 2 * sin(a)) = 45g || :2
Va^2 * cos(a) * sin(a) = 45g / 2 || :sin(a)
Va^2 * cos(a) = 45g / 2 * sin(a) || :cos(a)
Va^2 = 45g / 2 * sin(a) * cos(a) ||sqrt
Va = sqrt(45g / 2 * sin(a) * cos(a)
Nyt meillä on kaikki tarvittava tieto tehtävän ratkaisua varten. Siis lasketaan kappaleen alkunopeus. Yksinkertaisuuden vuoksi annan tuloksen suoraan Va = 22.57.
Lasketaan y-akselin nopeus Vy = Va * sin(a)
Lasketaan nousuaika lakikorkeuteen t = Vy / g
Lasketaan lopuksi lakikorkeus sy. sy = Vy * t - 0.5 * g *t^2 ~ 6.49m
Mikäli tuli asiavirhe niin ilomoittakaa, mutta omalla koneella tuli ihan fiksuja tuloksia.
Ratkaistaan ensin a:
-2*a*(-22.5)= tan(pi/6) =>
a = tan(pi/6)/(-2*-22.5)
Sitten b pisteessä x = -22.5 y = 0:
y=-a(x*x) b =>
b = a*(-22.5*-22.5) =>
b = 6.495
Korkein kohta on kun x =0, joten:
y = -a(0*0) b = 6.495
Siis korkein kohta on 6.495 ~ 6.5 m
Yksinkertaista, tohtori Watson.
(Tuostahan saa helposti C funktion esim:
float korkein_kohta( float kulma, float pituus);)
Oikeassapa olet lähdin ratkaisemaan liian hankalasti asiaa. Hieno asia on kuitenkin että osuttiin samaan lopputulokseen.
Juu ja toinen fyssalla, toinen matikalla, joten todennäköisyys että vastaus olisi jopa oikein on hmm... melko suuri.
Tätä alla olevaa kohtaa en vielä tajua?
Halutaanko vaan että kokeilen näillä luvuilla kyseistä ohjelmaa ja tallennan tulokset tekstitiedostoon vai pitäisikö nämä sijoittaa jotenkin ohjelman sisään. Miten te ymmärrätte ton.
Kiitos ohjelma toimii kyllä. En vaan saa tekstitiedostoon vielä tallettumaan korkeinta kohtaa, vaikka muutan matkan ja kulman arvoa. Mustaan laatikkoon kyllä tulee oikea arvo.
"Määritä tehtävässä seuraavat tiedot: Lähtökulma muuttuu välillä 25-45 (5)asteen välein ja lentomatka kasvaa kulman muutoksen seurauksena 7m. Talleta tiedot tiedostoon." Olisin vielä kiitollinen avusta.
Käytä näitä fopen, fprintf ja fclose. esim.
http://www.cs.helsinki.fi/u/jplindst/c/tiedosto.html#102
for(kulma = 25; kulma < 46; kulma = 5){
KorkeinKohta(kulma, pituus);
pituus = 7;
}
Tuossa KorkeinKohta(kulma, pituus) on se algoritmi, jota tässä on yritetty ratkaista. Itse ymmärsin sen näin. Tallennus menee taasen näin.
ofstream ulos("tiedot.txt", ios::app);
ulos
"... mutta voin senkin kohta tehdä."
Kannattaako se valmiina antaa? Nm. "aika hukassa" pitäisi kai jotain oppiakin. Mulla on kyllä ratkaisu valmiina (C:llä) ja voin sen tänne laittaa jos "aika hukassa" sen haluu. Itselleen hallaa sillä vaan tekee ... Sitäpaitsi kyllä jo annetuilla ohjeilla pitäisi koodi vääntyä.
Tarkoitin että koodailen sen itselleni en tänne ajatellut valmista laittaa. Tarkemmin ajateltuna tuo for-lausekin oli liikaa. Olen vahvasti samaa mieltä ettei valmista ratkaisua kannata antaa koskaan.