Srednia arytmetyczna.

Odpowiedz Nowy wątek
2011-07-11 11:07
0

Witam mam problem z następującym zadaniem:

"Napisz program, który pobiera liczby całkowite do momentu wpisania przez użytkownika cyfry 0. Po zakończeniu wczytywania danych wejściowych program powinien wyświetlić ilość wpisanych liczb parzystych (z wyłączeniem zera) i ich średnią wartość oraz ilość wpisanych liczb nieparzystych i ich średnią wartość"

Napisałem coś takiego:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main(void)
{
    int a;
    int parzyste = 0;
    int nieparzyste = 0;
    int suma_p = 0;
    int suma_n = 0;
    float srednia_p;
    float srednia_n;
 
    printf("Podaj ciag liczb\n");
    while ((a = getchar()) != '0')
    {
        if ((a % 2) == 0)
        {
            suma_p = suma_p + a;
            parzyste++;
        }
        else if ((a % 2) != 0)
        {
            suma_n = suma_n + a;
            nieparzyste++;
        }
    }
    if (nieparzyste != 0)
    {
        srednia_n = (suma_n / nieparzyste);
        printf("Wpisales %d liczb nieparzystych\n", nieparzyste);
        printf("Ich srednia to %.2f\n", srednia_n);
    }
    if (parzyste != 0)
    {
        srednia_p = (suma_p / parzyste);
        printf("Wpisales %d liczb parzystych\n", parzyste);
        printf("Ich srednia to %.2f", srednia_p);
    }
    getchar();
    getchar();
    return 0;
}

Program źle wypisuje średnie wartości. Np. po wpisaniu liczb 1234567890 otrzymuje taki napis:

Wpisales 5 liczb nieparzystych
Ich srednia to 53.00
Wpisales 4 liczb nieparzystych
Ich srednia to 53.00

Zupełnie nie wiem czemu otrzymuję taki dziwny wynik.

Pozostało 580 znaków

2011-07-11 11:17
1

Do 'a' dostajesz numer ASCII znaku wpisanego, a nie cyfrę. Tak się składa, że jak odejmiesz od 'a' 48, to będziesz mieć cyfrę jaka została wpisana, bo 0 to 48, 1 - 49, 2 - 50 ... 9 - 57.
Przed sprawdzeniem zrób a -= 48 i gra gitara.

Pozostało 580 znaków

2011-07-11 11:32
bo

Ja myślę, że program jest całkowicie błędny. Wczytuje pojedyncze znaki, tzn. liczby jednocyfrowe, a ma wczytywać liczby całkowite.
Nie wiem czy treść zadania została poprawnie zacytowana:

do momentu wpisania przez użytkownika cyfry 0

Dalszy część zadania sugeruje, że powinno być do momentu wpisania przez użytkownika liczby 0.

Nie przeczytałem treści zadania. Zgadzam się ;) - Sarrus 2011-07-11 11:34

Pozostało 580 znaków

2011-07-11 12:08
1

Zamień: while ((a = getchar()) != '0')na while(scanf("%d",&a)!=0)

To rozwiązanie jest zapewne zgodne z intencją autora zadania. Jest niezgodne z treścią zadania podaną na forum. - bogdans 2011-07-11 12:28

Pozostało 580 znaków

2011-07-11 13:09
0

Dzięki panowie, faktycznie program został źle napisany. Teraz jest ok i raczej działa dobrze:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int main(void)
{
    int a;
    int parzyste = 0;
    int nieparzyste = 0;
    int suma_p = 0;
    int suma_n = 0;
    float srednia_p;
    float srednia_n;
 
    printf("Podaj liczbe\n");
    while ((scanf("%d", &a) == 1) && (a != 0))
    {
        if ((a % 2) == 0)
        {
            suma_p = suma_p + a;
            parzyste++;
        }
        else if ((a % 2) != 0)
        {
            suma_n = suma_n + a;
            nieparzyste++;
        }
    printf("Podaj liczbe\n");
    }
    if (nieparzyste != 0)
    {
        srednia_n = (suma_n / nieparzyste);
        printf("Wpisales %d liczb nieparzystych\n", nieparzyste);
        printf("Ich srednia to %.2f\n", srednia_n);
    }
    if (parzyste != 0)
    {
        srednia_p = (suma_p / parzyste);
        printf("Wpisales %d liczb parzystych\n", parzyste);
        printf("Ich srednia to %.2f", srednia_p);
    }
    getchar();
    getchar();
    getchar();
    return 0;
}
edytowany 1x, ostatnio: olek1, 2011-07-11 13:09

Pozostało 580 znaków

2011-07-11 15:16
O_o
0
        getchar();
        getchar();
        getchar();

A to to co za trójchwytne widły? o_O

Żadne trójchwytne widły;d Po prostu w Visual Studio zawsze włączam program prze wciśnięcie F5 i czasem jeden albo dwa getchar() nie wystarcza i konsola zbyt szybko się wyłącza.;] - olek1 2011-07-11 19:42

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0