Obliczanie sredniej arytmetycznej liczb, ktorych suma cyfr jest parzysta

0

Witam, jestem ogórkiem w programowaniu. Musze przygotowac program, ktory bedzie obliczal srednia arytmetyczna liczb, ktorych suma cyfr jest parzysta.
Najpierw sobie napisalem schemat blokowy, a nastepnie napisalem kod.
Pierwsze co w nim jest nie tak, ze wyskakuje blad na samym koncu, nie wiedziec czemu
Drugie, ze chyba mam za duzo zmiennych, przynajmniej tak mi sie wydaje, przez co kod moze wydawac sie nieczytelny:P

Ktoś poratuje? Oczywiscie wszystko w jezyku C.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int stoper,x;
    int sumacyfr = 0;
    int cyfra=0;
    int suma= 0 ;
    int liczba=0;
    double srednia;
    printf("Podaj stoper\n");
    scanf("%d",&stoper);
    printf("Podaj liczbe\n");
    scanf("%d",&x);
    while(x!=stoper)
    {
        while(x!=0)
        {
            cyfra = x % 10;
            sumacyfr  = sumacyfr+cyfra;
            x = x/ 10;
            if(x=0)
            {
                if(sumacyfr%2==0)
                    suma = suma +x;
                liczba++;
            }
        }


        printf("Podaj nastepna liczbe\n");
        scanf("%d",&x);
    }
    if(liczba=0)
        printf("Nie ma sredniej arytmetycznej, poniewaz liczb jest za malo");
        else{
            double srednia =suma/liczba;
    printf("%lf",srednia);}
    return 0;
}

1

Czym jest stoper? No i czy masz zliczać średnią tylko dla parzystych, czy jak będzie nieparzysta to też ma być uwzględniana w wyniku, w sensie dodawana do ilości elementów. Co do aktualnie zauważonych błędów to to jest źle

			if(x=0)
            {
                if(sumacyfr%2==0)
                    suma = suma +x;
                liczba++;
            }

powinno być

if(x==0)
{
	...........
	suma = suma +sumacyfr;
	...........
}

Bo nawet warunek podpowiada, że x =0, w sumie to tam mają być dwa znaki ==, bo tak to masz przypisanie do x wartości 0. To samo w warunku na końcu, pewnie przez to błąd bo robisz liczba = 0 czyli w warunku jest 0 czyli false czyli przechodzi do else a tam jest dzielenie przez zmienną "liczba", której przypisałeś 0, a jak wiadomo dzielić przez 0 nie można

if(liczba==0
{
}
0

Dzieki za odpowiedz.
Stoper jest to zmienna, w ktorej chodzi o to, że na samym początku podajemy liczbę, która ma kończyć program tzn. na przykład. Stoperem jest liczba 40, podajemy liczbe 30,50,100,200, suma się cały czas zwiększa, ale gdy podamy 40, to wychodzimy automatycznie z pętli i jest obliczana średnia z podanych liczb.

Kod aktualnie wygląda tak, nie wiem co dalej zmienic, bo dalej srednia wychodzi 0 :D

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int stoper,x;
    int sumacyfr = 0;
    int cyfra=0;
    int suma= 0 ;
    int liczba=0;
    double srednia=0;
    printf("Podaj stoper\n");
    scanf("%d",&stoper);
    printf("Podaj liczbe\n");
    scanf("%d",&x);
    while(x!=stoper)
    {
        while(x!=0)
        {

            cyfra = x % 10;
            sumacyfr  = sumacyfr+cyfra;
            x = x/ 10;
            if(x==0){
            if(sumacyfr%2==0)
            {
                suma = suma + x;
                liczba++;
            }}


        }
        printf("Podaj nastepna liczbe\n");
        scanf("%d",&x);
    }


    if(liczba==0)
        printf("Nie ma sredniej");
    else
    {
        double srednia = (suma/liczba);
        printf("%lf", srednia);
    }
    return 0;
}

Nie wiem czy to, umiescilem w dobrym miejscu i w ogole czy to powinno tak wyglądać:

if(x==0){
            if(sumacyfr%2==0)
            {
                suma = suma + x;
                liczba++;
            }
1

myślałem, że masz obliczyć srdnią z sumy tych wszystkich cyfr, a poprzedni zapis nie miał sensu, bo do 0 dodajesz 0, bo jak wejdzie w ten warunek to x jest zawsze równe 0. Stąd też przyda się dodatkowa zmienna, która bedzie zawierała liczbę wprowadzoną przez usera i jej nie modyfikujesz, działasz tak jak działałeś tylko wtedy:

suma = suma + wprowadzonaLiczba
0

Tak właśnie myślałem, teraz dałem coś takiego:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int stoper,x;
    int sumacyfr = 0;
    int cyfra=0;
    int suma= 0 ;
    int liczba=0;
    double srednia=0;
    int wprowadzonaLiczba;
    printf("Podaj stoper\n");
    scanf("%d",&stoper);
    printf("Podaj liczbe\n");
    scanf("%d",&x);
    while(x!=stoper)
    {
        x = wprowadzonaLiczba;
        while(x!=0)
        {

            cyfra = x % 10;
            sumacyfr  = sumacyfr+cyfra;
            x = x/ 10;
            if(x==0) {}
            if(sumacyfr%2==0)
            {
                suma = suma + wprowadzonaLiczba;
                liczba++;
            }
        }


        printf("Podaj nastepna liczbe\n");
        scanf("%d",&x);
    }


    if(liczba==0)
        printf("Nie ma sredniej");
    else
    {
        double srednia = (suma/liczba);
        printf("%lf", srednia);
    }
    return 0;
}



Wynik jakiś kosmiczny wychodzi.

1

No nie ma się co dziwić, bo niby wczytujesz liczbę do x, ale za chwilę do x wpisujesz 65535 przez taki o to zapis

int wprowadzonaLiczba; //jeżeli nie przypiszesz wartości to będzie miała wartość 65535

x = wprowadzonaLiczba;

Lepiej zrobić tak:

 scanf("%d",&wprowadzonaLiczba);

a potem:

x = wprowadzonaLiczba;

i to dwa razy, bo dwa razy odczytujesz wprowadzoną liczbę. Najpierw masz "podaj liczbę", a potem "podaj następną liczbę". I jak coś to ten zapis od razu po scanf.

0

Okej czaje, kod aktualnie wyglada tak. Dalej są rozbieżności. Na zdjeciu jak widać wprowadziłem liczby: 24+55+55 = 134
134/3 = 44.66
A program pokazuje 39.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int stoper,x;
    int sumacyfr = 0;
    int cyfra=0;
    int suma= 0 ;
    int liczba=0;
    double srednia=0;
    int wprowadzonaLiczba =0;
    printf("Podaj stoper\n");
    scanf("%d",&stoper);
    printf("Podaj liczbe\n");
    scanf("%d",&x);
    wprowadzonaLiczba = x;
    while(x!=stoper)
    {

        while(x!=0)
        {

            cyfra = x % 10;
            sumacyfr  = sumacyfr+cyfra;
            x = x/ 10;
            if(x==0) {}
            if(sumacyfr%2==0)
            {
                suma = suma + wprowadzonaLiczba;
                liczba++;
            }
        }


        printf("Podaj nastepna liczbe\n");
        scanf("%d",&x);
        wprowadzonaLiczba = x;
    }


    if(liczba==0)
        printf("Nie ma sredniej");
    else
    {
        double srednia = (suma/liczba);
        printf("%lf", srednia);
    }
    return 0;
}

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