Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Suurin ja pienin kolmesta luvusta (C)

Sivun loppuun

Plasmidi [27.09.2007 12:53:20]

#

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

K_L [27.09.2007 13:07:31]

#

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.

Plasmidi [27.09.2007 15:58:56]

#

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

Metabolix [27.09.2007 16:01:53]

#

Funktioita pitäisi kutsuakin.

int p = pienin(v1, v2, v3);
printf("Pienin: %d\n", p);
printf("Suurin: %d\n", suurin(v1, v2, v3));

Plasmidi [27.09.2007 16:54:02]

#

#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?

Legu [27.09.2007 16:59:03]

#

Muuta

else if (v3 < pienin){
  pienin = v3;
}

muotoon

if (v3 < pienin){
  pienin = v3;
}

Sama myös "suurin"-funktiossa.

Plasmidi [27.09.2007 17:09:18]

#

No juu nyt toimii kiitoksia kaikille avusta.

Sami [27.09.2007 18:32:20]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta