Tehtävänä on:
Tee ohjelma, joka ottaa vastaan kolme kokonaislukua ja tulostaa syötetyistä luvuista sekä pienimmän että suurimman. Pääohjelman tulee kysyä ja vastaanottaa kokonaisluvut. Laadi funktiot suurin() ja pienin(), jotka saavat parametreina syötetyt luvut. Vastaavasti funktiot palauttavat nimensä mukaiset arvot.
Vihje
Voit käyttää ohjelmassasi yhdistettyjä vertailuja ja if-else rakennetta.
Esimerkkitulostus
Anna 1. luku:1
Anna 2. luku:2
Anna 3. luku:3
Syöttämistäsi luvuista suurin oli 3 ja pienin 1.
Osaan tehdä tämän ohjelman suurinpiirtein oikein, mutta miten tuon suurimman/pienimmän luvun tulostamisen oikein saa tehtyä?
ideana staattisesti kolmelle (tee itse looppi ja numerot vaikka tauluun)
int pieni(int v1, int v2, int v3) { int pienin; pienin = v1; if (v2 < pienin) { pienin = v2; } else if (v3 < pienin){ pienin = v3; } return pienin; }
siitä vaan sitten teet koodin.
#include <stdio.h> int suurin(int v1, int v2, int v3); int pienin(int v1, int v2, int v3); int main() { int v1,v2,v3,suurin,pienin; printf("Anna 1. luku:"); scanf("%d",&v1); printf("Anna 2. luku:"); scanf("%d",&v2); printf("Anna 3. luku:"); scanf("%d",&v3); printf("Syöttämistäsi luvuista suurin oli %d ja pienin %d. \n",suurin,pienin); return 0; } int suurin(int v1, int v2, int v3) { int suurin; suurin = v1; if (v2 > suurin) { suurin = v2; } else if (v3 > suurin){ suurin = v3; } return suurin; } int pienin(int v1, int v2, int v3) { int pienin; pienin = v1; if (v2 < pienin) { pienin = v2; } else if (v3 < pienin){ pienin = v3; } return pienin; }
Olen tehnyt tommoisen koodin. Viope C ajaa ohjelman hyvin, mutta tulokset ovat ihan päin mettää:
OHJELMASI EI TOIMI OIKEIN
Ohjelmasi tulosti seuraavasti:
Anna 1. luku:1
Anna 2. luku:2
Anna 3. luku:3
Syöttämistäsi luvuista suurin oli 0 ja pienin -1484046528.
Ohjelman olisi pitänyt tulostaa näin:
Anna 1. luku:1
Anna 2. luku:2
Anna 3. luku:3
Syöttämistäsi luvuista suurin oli 3 ja pienin 1.
(Mod. Edit. Kooditagit edelleenkin. Koetahan jo oppia.)
Funktioita pitäisi kutsuakin.
int p = pienin(v1, v2, v3); printf("Pienin: %d\n", p); printf("Suurin: %d\n", suurin(v1, v2, v3));
#include <stdio.h> int suurin(int v1, int v2,int v3); int pienin(int v1, int v2,int v3); int main() { int v1,v2,v3; printf("Anna 1. luku:"); scanf("%d",&v1); printf("Anna 2. luku:"); scanf("%d",&v2); printf("Anna 3. luku:"); scanf("%d",&v3); int p = pienin(v1, v2, v3); printf("Syöttämistäsi luvuista suurin oli %d ja pienin %d. \n", suurin(v1, v2, v3),p); return 0; } int suurin(int v1, int v2,int v3) { int suurin; suurin = v1; if (v2 > suurin) { suurin = v2; } else if (v3 > suurin){ suurin = v3; } return suurin; } int pienin(int v1, int v2,int v3) { int pienin; pienin = v1; if (v2 < pienin) { pienin = v2; } else if (v3 < pienin){ pienin = v3; } return pienin; }
Tällä hetkellä on tommonen koodi ja tulostaa näin:
OHJELMASI EI TOIMI OIKEIN
Ohjelmasi tulosti seuraavasti:
Anna 1. luku:1
Anna 2. luku:2
Anna 3. luku:3
Syöttämistäsi luvuista suurin oli 2 ja pienin 1.
Ohjelman olisi pitänyt tulostaa näin:
Anna 1. luku:1
Anna 2. luku:2
Anna 3. luku:3
Syöttämistäsi luvuista suurin oli 3 ja pienin 1.
Mitähän mahtaa olla vikana?
Muuta
else if (v3 < pienin){ pienin = v3; }
muotoon
if (v3 < pienin){ pienin = v3; }
Sama myös "suurin"-funktiossa.
No juu nyt toimii kiitoksia kaikille avusta.
Saman voisi tehdä myös vain kahden muuttujan suuruusvertailuja ketjuttamalla: min(a, b, c) = min(a, min(b, c)) ja vastaavasti max(a, b, c) = max(a, max(b, c)).
int min(int x, int y) { if (x < y) { return x; } else { return y; } }
Vastaava max-funktiolle.
Aihe on jo aika vanha, joten et voi enää vastata siihen.