Tietorakenteet¶
Tietojen tarkistus (1p)¶
Otetaan kevyt lähtö C-kielen tietorakenteisiin. Laadi funktio joka tarkistaa ylittääkö tietorakenteen taulukossa annetun indeksin osoittama arvo kynnysarvon (engl. threshold). Jos kynnysarvo ylittyy, tulostetaan kaikki tietorakenteen jäsenen arvot CSV-formaatissa kahden desimaalin tarkkuudella. Muuten älä tulosta mitään.
Funktio noudattaa seuraavaa prototyyppiä:
void tarkistus(struct mpudata_t mpu, uint8_t index, float threshold);
.. ja tietorakennetta:
struct mpudata_t {
float data[6];
};
Esimerkki.
struct mpudata_t values = { { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0 } }; tarkistus(values, 5, 3.21); ..tulostaa seuraavan rivin, koska index=5 -> values[5]=6.0 joka on isompi kuin kynnysarvo 3.21: 1.00,2.00,3.00,4.00,5.00,6.00
Vihjeet
Viestit
Anna palautetta
Koitko tämän tehtävän hyödylliseksi oppimisen kannalta?
Kommentteja tehtävästä?
Polkulaskuri (3p)¶
Laske pisteiden kautta matkustavan olion matka.
Pisteet ja polku annetaan tietorakenteina
piste
ja polku
. Nyt *pisteet
on osoitin yhteen suuntaan linkitettyyn listaan, eli jokainen struct piste
osoittaa seuraavaan pisteeseen ja listan loppua merkitsee NULL
osoittimen arvona.struct piste {
int koordinaatit[3];
struct piste *seuraava;
};
struct polku {
double matka;
struct piste *pisteet;
};
Olio kulkee suoria pitkin ideaalisessa Euklidisessa avaruudessa, eli pisteiden välisten etäisyyksien laskemiseen käytetään Euklidista etäisyyttä. Kaikki pisteet esitetään kolmiulotteisina vektoreina.
Esimerkki polun pituuden laskemisesta:
\text{Olkoon pisteet}
a_1 = (1, 2, 3), a_2 = (3, 4, 6)\;\text{ja}\;a_3 = (4, 4, 4).
\text{Lasketaan peräkkäisten pisteiden etäisyys:}
\begin{aligned}
d(a_1, a_2) &= \sqrt{(a_{11} - a_{21})^2 + (a_{12} - a_{22})^2 + (a_{13} - a_{23})^2}\\
&= \sqrt{(1 - 3)^2 + (2 - 4)^2 + (3 - 6)^2} = \sqrt{4 + 4 + 9} = \sqrt{17}
\end{aligned}
\begin{aligned}
d(a_2, a_3) &= \sqrt{(a_{21} - a_{31})^2 + (a_{22} - a_{32})^2 + (a_{23} - a_{33})^2}\\
&= \sqrt{(3 - 4)^2 + (4 - 4)^2 + (6 - 4)^2} = \sqrt{1 + 0 + 4} = \sqrt{5}
\end{aligned}
\text{Tällöin polun }a_1 \rightarrow a_2 \rightarrow a_3 \text{ pituus on}
d(a_1, a_2) + d(a_2, a_3) = \sqrt{17} + \sqrt{5}.
Käytä funktiolle prototyyppiä
void laske_kuljettu_matka(struct polku *polku);
ja tallenna tulos tietorakenteen polku
jäseneen matka
.Vinkki. Nyt argumentti on osoitin, joten kertaa luentomateriaalista miten sellaisen tietorakenteen jäseniin osoitetaan.
Vinkki.
Vinkki.
math.h
-kirjastosta löytyy funktio sqrt(), jolla voi laskea neliöjuuria.
Vihjeet
Viestit
Anna palautetta
Koitko tämän tehtävän hyödylliseksi oppimisen kannalta?
Kommentteja tehtävästä?
Anna palautetta
Kommentteja tehtävästä?