Zmiana typu wyniku na liczbę zmiennoprzecinkową

0

Cześć,
Program ma za zadanie:w tablicy posiadającej m wierszy i n kolumn przechowywać dane o energii elektrycznej pobranej w ciągu jednego roku (rok ma mieć 4 miesiace), wiersze- odbiorcy, kolumny- miesiące, należy: obliczyć średnią energię pobraną w ciągu jednego miesiąca.
Mój program wygląda tak (musi wykorzystywać tablice):

#include <stdio.h>
#include <math.h>

int main()
{
    int n = 53, i, j, a = 0, b = 0;
    
    printf( "podaj liczbe uzytkownikow \n" );
    
    int tab2[ 4 ];
    scanf( "%d", & n );
    int tab[ n ][ 4 ];
    for( i = 0; i != n; i++ )
    {
        for( j = 0; j != 4; j++ )
        {
            printf( "energia uzywtkownika %d w miesiacu %d \n", i + 1, j + 1 );
            scanf( "%d", & tab[ i ][ j ] );
        }
    }
    for( j = 0; j != 4; j++ )
    {
        for( i = 0; i != n; i++ )
        {
            tab2[ j ] = tab2[ j - 1 ] + tab[ i ][ j ];
        }
        tab2[ j ] = tab2[ j ] / n;
        printf( "w miesiacu numer %d srednie zuzycie energii wynosi %d \n", j + 1, tab2[ j ] );
    }
    
    getch();
    return 0;
    system( "PAUSE" );
}

Wszystko działa, tylko problemem jest to że wynik ma być zmiennoprzecinkowy, a tutaj zawsze zwraca liczby bez przecinka np.: (1+2)/2=1, a ma być (1+2)=1,5, wiem że to głupie i proste, ale nie wiem jak to zrobić, bo kiedy wymieniam tablice i jej parametry na float to nie działa (opcjonalnie się wyłącza), a nie udało mi znaleźć żadnych sensowych wskazówek.

0

Wszystkie zmienne jakie masz i wszystkie typy jakie deklarujesz są typem int:

int tab2[ 4 ];               // tablica int'ow
scanf( "%d", & n );     // wczytujesz int mowiac, że: %d
int tab[ n ][ 4 ];           // tablica int'ow
for( i = 0; i != n; i++ )
{
    for( j = 0; j != 4; j++ )
    {
        // wyświetlasz i wczytujesz int deklarując, że %d
        printf( "energia uzywtkownika %d w miesiacu %d \n", i + 1, j + 1 );
        scanf( "%d", & tab[ i ][ j ] );
    }
}
...

Jeśli chcesz liczbę zmiennoprzecinkową użyj typu float.

0

Jestes pewien, ze dziala wszystko a problem jest tylko w wyswietlaniu wyniku?
W tym miejscu wykraczasz poza zakres tablicy i masz UB. Odwolujesz sie do elementu tab2[0-1].

for( j = 0; j != 4; j++ )
{
    for( i = 0; i != n; i++ )
    {
        tab2[ j ] = tab2[ j - 1 ] + tab[ i ][ j ];  //UB
    }
    tab2[ j ] = tab2[ j ] / n + 0.0;
    printf( "w miesiacu numer %d srednie zuzycie energii wynosi %f \n", j + 1, tab2[ j ] );
}

Przeanalizuj jeszcze raz caly kod, nazwij tablice nazwa ktora cos mowi (persons, months) lub cos podobnego, popraw literowki a bedzie latwiej sie w tym odnalezc.

0

Teraz jest tak:

#include <stdio.h>
#include <math.h>

int main()
{
	int n, i, j; 
	printf ("podaj liczbe uzytkownikow \n");
	double suma[4];
	scanf ("%d", &n);
			double  energia[n][4];
	for(i=0; i!=n; i++)
	{
		for(j=0; j!=4; j++)
		{
			printf ("energia uzywtkownika %d w miesiacu %d \n", i+1, j+1);
			scanf ("%d", &energia[i][j]);
		}
	}
	for(j=0; j!=4; j++)
	{
		for(i=0; i!=n; i++)
		{
			suma[j]=suma[j]+energia[i][j];
		}
		suma[j]=suma[j]/n;
		i=0;
		printf("w miesiacu numer %d srednie zuzycie energii wynosi %d \n", j+1, suma[j]);
	}
	getch();
	return 0;
	system("PAUSE");
}
```cpp

Tylko że faktycznie zwraca dziwne liczby, wcześniej pamiętam że dawał inne wyniki, ale od tamtego czasu znowu w nim coś majstrowałem, energia to tablica z energią użytkownik w miesiącu, a suma to tablica z sumą Energi w miesiącach.
0

Tak jak pisałem wcześniej: Jeśli chcesz wrzucić do programu liczbę typu int, to dajesz znacznik: %d.
Jeśli chcesz dać typ zmiennoprzecinkowy (wrzucić lub wyświetlić) to dajesz znacznik: %f.

edit: Dodatkowo - staraj się używać typu float, a nie double.

0

Teraz jest tak:

#include <stdio.h>
#include <math.h>

int main()
{
	int n, i, j; 
	printf ("podaj liczbe uzytkownikow \n");
	float suma[4];
	scanf ("%d", &n);
			float energia[n][4];
	for(i=0; i!=n; i++)
	{
		for(j=0; j!=4; j++)
		{
			printf ("energia uzywtkownika %d w miesiacu %d \n", i+1, j+1);
			scanf ("%d", &energia[i][j]);
		}
	}
	for(j=0; j!=4; j++)
	{
		for(i=0; i!=n; i++)
		{
			suma[j]=suma[j-1]+energia[i][j];
		}
		suma[j]=suma[j]/n;
		printf("w miesiacu numer %d srednie zuzycie energii wynosi %f \n", j+1, suma[j]);
	}
	getch();
	return 0;

}

i w wartościach zwraca same 0.0000000.

1

Nie czytasz tego co piszemy.
1. Zmień %d na %f - używasz typu float, a nie int. Pisałem Ci to w dwóch postach już...

2. Wprowadź zmiany, o których mówił Ci kolega @qblacksheep - masz UB w kodzie.

3. Dlaczego wciąż korzystasz ze złych znaczników kodu, skoro widzisz, że nie działają? Zastosuj się do rad kolegi @Patryk27.

0

Wybaczcie, dziękuję za pomoc, nie wiem za bardzo wiem co to UB, usunąłem to -1, zmieniłem %d na %f, ale dalej zwraca dziwne liczby, na szczęście już nie 0.

Poprawiłem, na moim komputerze z jakiegoś powodu nie działa, ale na zajęciach odpalił, dzięki wielkie panowie za pomoc :)

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