c-ohjelmointi

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.
12990
Äänestä

Muut lukivat myös

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.

Äänestä
  • Kiitos vinkeistä! Kokeillaan.

    Äänestä

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..

Äänestä
  • 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.

    Äänestä

  • teuro kirjoitti:

    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);)

    Äänestä

  • ----------- kirjoitti:

    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.

    Äänestä

  • teuro kirjoitti:

    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.

    Äänestä

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.

Äänestä

  • 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

    Äänestä

  • teuro kirjoitti:

    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ä.

    Äänestä

  • ----------- kirjoitti:

    "... 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.

    Äänestä

Kommentoi aloitusta


aika hukassa kirjoitti:

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.

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu