Põhikooli ja muidugi ka gümnaasiumi õpilased on ikka mega-targad. Informaatika olümpiaad tekkis sel aastal päevakorda ning siis mõtlesin, et proovin kõige lihtsamad ehk põhikooli ülesanded ära lahendada. No ausalt öeldes võttis mul ikka aega, et meelde tuletada mingeid lihtsaid matemaatika põhitõdesid ja alljärgnevale ülesandele lahendus kirjutada. Keeleks valisin puhta C, mis lisas omakorda veidi keerukust keele õppimise näol.
http://www.teaduskool.ut.ee/orb.aw/class=file/action=preview/id=6379/poh.et.pdf
1. Summa - 0,5 sekundit - 20 punkti
Kirjutada programm, mis leiab antud täisarvude A ja B vahele jäävate täisarvude summa (A ja B ise kaasa arvatud).
Sisend. Tekstifaili summa.sis ainsal real on tühikuga eraldatud täisarvud A (−109 <= A <= 109) ja B (−109 <= B <= 109).
Väljund. Tekstifaili summa.val ainsale reale väljastada täisarv S — otsitav summa.
Näide. summa.sis 1 5 | summa.val 15 |
Näide. summa.sis 3 2 | summa.val 5 |
Hindamine. Testides summaarse väärtusega 10 punkti on liidetavate arv <= 10 000.
Lahenduse tegemisel võtsin aluseks Rao koodi ning täiendasin seda viisil, et tööle hakkaks.
Code Snippet
- #include <stdio.h>
- #include <stdlib.h>
-
- FILE *sisf;
- FILE *valf;
-
- int main(int argc, char *argv[])
- {
- int x, y, hoidja;
- double summa;
-
- sisf = fopen( "summa.sis", "r" );
- fscanf( sisf, "%i %i", &y, &x );
-
- printf("X on %i\n", x);
- printf("Y on %i\n", y);
- if(y > x)
- {
- hoidja = y;
- y = x;
- x = hoidja;
- }
-
- for(summa = 0; y <= x; y++)
- {
- summa += y;
- }
-
- printf("Summa on %.f\n", summa);
- valf = fopen("summa.val", "w"); /* avame faili kirjutamiseks */
- fprintf(valf, "%.f\n", summa); /* v?¤ljastame */
- fclose(valf); /* sulgeme faili */
- return 0;
- }