Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Ohjelman lopetus negatiivisella luvulla?

Sivun loppuun

treenaaja [28.10.2004 09:06:08]

#

Eli ohjelma laskee annettujen arvosanojen keskiarvon ja sen pitäisi pystyä lopettamaan negatiivisella luvulla.

Olen päässyt näin pitkälle:

#include <stdio.h>

int main()  /*esitellään pääohjelma*/
{
    int arvosana, maara = 0, summa = 0;  /*alustetaan kokonaislukumuuttujat*/
    float ka;  /*alustetaan liukulukumuuttuja*/

    /*selostaa ohjelman toiminnan lyhyesti*/
    printf("Ohjelma laskee syötettyjen arvosanojen keskiarvon.\n");
    printf("Lopetus negatiivisella kokonaisluvulla.\n");

   while (arvosana >= 4)
   {
       printf("Anna arvosana (4-10):"); /*pyytää käyttäjää syöttämään arvosanan*/
       scanf("%d", &arvosana);

    if ((arvosana >=4) && (arvosana <=10))
    {
       maara++;
       summa = arvosana + summa;
    }
    }
    printf("Ohjelmaan syötetty %d arvosanaa.\n", maara);
    ka = summa / maara;
    printf("Arvosanojen keskiarvo: %.2f", ka);
}

Miten siis saisin lopetettua ohjelman negatiivisella luvulla, kun se nyt laskee myös tämän luvun mukaan keskiarvoon?

Deewiant [28.10.2004 09:54:49]

#

No siis, laitat tuon if (arvosana >=4) -lauseen jälkeen tällaista:

else if (arvosana < 0) {
    return 0;
}

treenaaja [28.10.2004 10:08:49]

#

Deewiant kirjoitti:

No siis, laitat tuon if (arvosana >=4) -lauseen jälkeen tällaista:

else if (arvosana < 0) {
    return 0;
}

Ei toimi toikaan. Tai nyt se lopettaa ohjelman, mutta sen pitäis kuitenkin tulostaa montako arvosanaa on syötetty ja mikä on niiden keskiarvo. Se ei sais laskee negatiivista lukua keskiarvoon mukaan.

jrantala [28.10.2004 10:52:13]

#

Noh, tulostat vaa kamat ennen tota returnia.

treenaaja [28.10.2004 10:58:23]

#

jrantala kirjoitti:

Noh, tulostat vaa kamat ennen tota returnia.

Koodi nyt:

#include <stdio.h>

int main()  /*esitellään pääohjelma*/
{
    int arvosana, maara = 0, summa = 0;  /*alustetaan kokonaislukumuuttujat*/
    float ka;  /*alustetaan liukulukumuuttuja*/

    /*selostaa ohjelman toiminnan lyhyesti*/
    printf("Ohjelma laskee syötettyjen arvosanojen keskiarvon.\n");
    printf("Lopetus negatiivisella kokonaisluvulla.\n");

    while (arvosana >= 4)
    {
       printf("Anna arvosana (4-10):"); /*pyytää käyttäjää syöttämään arvosanan*/
       scanf("%d", &arvosana);

    if ((arvosana >=4) && (arvosana <=10))
    {
       maara++;
       summa = arvosana + summa;
    }
    else if (arvosana < 0)
    {
    ka = summa / maara;
    printf("Ohjelmaan syötetty %d arvosanaa.\n", maara);
    printf("Arvosanojen keskiarvo: %.2f", ka);
    return 0;
    }
    }
}

...mutta se edelleen laskee tuon negatiivisen luvun jotain kautta mukaan. Missä vielä vika?

mike patto [28.10.2004 12:46:13]

#

Ihan silmämääräisesti tarkasteltun, eikös 'arvosana':ankin joudu se negatiivinen luku (esim -1)? Ja siten 'ohjelmaan syötetty ...' tulostaa +1 kpl:tta arvosanojen lkm:ksi.

treenaaja [28.10.2004 13:41:18]

#

Ongelma ratkesi. Olin määrittänyt muuttujan summa kokonaislukumuuttujaksi, kun se pitää määrittää liukulukumuuttujaksi. Kiitos kaikille avusta!

Deewiant [28.10.2004 13:43:52]

#

EDIT: ai, katos. No mikäs siinä sitten, hyvä =) Jätän tämän silti tähän.

Nyt ongelmanasi on se, että tuo "jos se on alle 0" on "niin kauan kuin se on suurempi tai yhtä kuin 4":n sisällä, joten se ei tietenkään ole koskaan totta.

Väännetään rautalangasta - koko koodi:

#include <stdio.h>

int main()
{
    int arvosana, maara = 0, summa = 0;
    double keskiarvo;

    printf("Ohjelma laskee syötettyjen arvosanojen keskiarvon.\n");
    printf("Lopetus negatiivisella kokonaisluvulla.\n");

    // loputon silmukka
    for (;;) {
        printf("Anna arvosana (4-10):\n");
        scanf("%d", &arvosana);

        if ((arvosana >=4) && (arvosana <=10)) {
            ++maara;
            summa += arvosana;
        } else if (arvosana < 0) {
            keskiarvo = (double)summa / (double)maara;
            printf("Ohjelmaan syötetty %d arvosanaa.\n", maara);
            printf("Arvosanojen keskiarvo: %.2f", ka);
            return 0;
        } else { // jos annetaan luku väliltä 1-3 tai yli 10
            printf("Anna fiksu arvo!\n");
        }
    }
    return 0;
}

Sivun alkuun

Vastaus

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

Tietoa sivustosta