Lue ensin tällä sivulla olevat yleisohjeet. Tarkemmat tiedot löytyvät tehtäväkohtaisista ohjeista. Jokaiseen tehtävään on saatavilla oma zip-tiedosto, josta löytyvää koodia voit käyttää ratkaisujesi pohjana.
| Tehtävä | Palautuksia | Pisteet | Max. | Taso | Pak. | Määräaika |
|---|---|---|---|---|---|---|
| Pre0: Lähtötasotesti | ||||||
Tässä tehtävässä ei tarvitse erikseen miettiä suoritustehoa. Yksinkertaisin mieleesi tuleva ratkaisu on todennäköisesti riittävän nopea. Tehtävä ei vaadi erityisiä tekniikoita tai rinnakkaisuuden hyödyntämistä, vaan kaikenlaiset oikein toimivat ratkaisut hyväksytään. |
||||||
| – | – | 1 + 0 | ★ | Pak. | 2026-08-31 klo 23:59:59 | |
Kirjoita funktio, joka käyttää syötteenä bittikarttakuvaa ja suorakulmion koordinaatteja. Funktion tehtävä on laskea suorakulmion sisällä olevien pikselien keskimääräinen väriarvo.
Tulosten tallentamista varten on määritelty seuraava tyyppi:
struct Result {
float avg[3];
};
Toteuta seuraavanlainen funktio:
Result calculate(int ny, int nx, const float *data,
int y0, int x0, int y1, int x1)
Tässä data on värikuva, jossa on ny*nx pikseliä. Jokainen pikseli muodostuu punaisesta, vihreästä ja sinisestä värikanavasta. Taulukossa nimeltä data on yhteensä ny*nx*3 liukulukua.
Värikanavat on numeroitu 0 <= c < 3, x-koordinaatit 0 <= x < nx ja y-koordinaatit 0 <= y < ny. Väriarvo tallennetaan taulukon alkioon data[c + 3 * x + 3 * nx * y].
Parametrit y0, x0, y1 ja x1 kuvaavat suorakulmion sijaintia. Suorakulmion vasemman yläkulman koordinaatit ovat (x0, y0) ja oikean alakulman koordinaatit (x1-1, y1-1). Suorakulmion leveys on siis x1-x0 pikseliä ja korkeus y1-y0 pikseliä. Koordinaatit täyttävät ehdot 0 <= y0 < y1 <= ny ja 0 <= x0 < x1 <= nx.
Tuloksen alkion avg[c] tulee sisältää aritmeettinen keskiarvo suorakulmion sisällä olevien pikseleiden värikanavan c arvoista.
Vaikka syöte ja tuloste ovat yksinkertaisen tarkkuuden liukulukuja, kaikissa laskutoimituksissa on käytettävä kaksinkertaisen tarkkuuden liukulukuja. Vasta tulos pyöristetään yksinkertaiseen tarkkuuteen.
Voit olettaa, että syötekuvassa on enintään 10 miljoonaa pikseliä.