Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Zmiana typu wyniku

Ostatnio zmodyfikowano 2018-05-23 22:45
Autor Wiadomość
PRC
Temat założony przez niniejszego użytkownika
Zmiana typu wyniku
» 2018-05-22 07:51:17
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):

C/C++
#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.
P-171223
michal11
» 2018-05-22 10:08:22
Musisz użyć float albo double bo te typu służą do operacji na liczbach niecałkowitych. Jeżeli coś ci po zmianie nie działa to rozwiąż tamten problem.
P-171225
PRC
Temat założony przez niniejszego użytkownika
» 2018-05-22 10:48:36
Teraz wygląda tak:

C/C++
#include <stdio.h>
#include <math.h>

int main()
{
    int n, i, j; //a=0, b=0;
    printf( "podaj liczbe uzytkownikow \n" );
    double tab2[ 4 ];
    scanf( "%d", & n );
    double 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 ] + tab[ i ][ j ];
        }
        tab2[ j ] = tab2[ j ] / n;
        i = 0;
        printf( "w miesiacu numer %d srednie zuzycie energii wynosi %d \n", j + 1, tab2[ j ] );
    }
    //for(i=0; i!=4; i++)
    // {
    // a=a+tab[i][1];
    // }
    //b=a/n;
    // printf ("pierwszy to %d", b);
    getch();
    return 0;
    system( "PAUSE" );
}

i zwraca jakieś kosmiczne liczby, kompletnie nie wiem czemu :\
P-171227
darko202
» 2018-05-22 12:17:05
chcesz używać tablic tworzonych dynamicznie (zmienna wielkość), ale nie deklarujesz ich poprawnie.

przy deklarcji :
double tab[ n ][ 4 ]; 
powinieneś dostać co najmniej ostrzeżenie.

nie wiem co się dzieje, ale prawdopodobnie piszesz i czytasz poza zakresem tablicy.
stąd opisywane dziwne wyniki


https://www.p-programowanie.pl​/cpp/tablice-dynamiczne/
http://cpp0x.pl/kursy/Kurs-C++​/Dynamiczne-zarzadzanie-pamieci​a-new-i-delete​/307

P-171229
PRC
Temat założony przez niniejszego użytkownika
» 2018-05-23 22:45:48
Dzięki :) już mi się udało naprawić, to może też coś nie tak z moim komputerem, bo kiedy na nim odpaliłem poprawiony program to dalej nie dizałał, a na zajęciach już tak. Przepraszam za problem i jestem wdzięczny za pomoc :)
P-171245
« 1 »
  Strona 1 z 1