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

funkcja do liczenia średniej pensji

Ostatnio zmodyfikowano 2016-03-22 19:26
Autor Wiadomość
jaśkoo
Temat założony przez niniejszego użytkownika
funkcja do liczenia średniej pensji
» 2016-03-17 18:45:21
Stwórz w Notatniku plik "dochody.dat" jak poniżej
   K 28000
   M 26000
   M 42000
   K 53000
   K 46000
   M 49000
zawierający dane o płci i dochodach osób. Program ma obliczyć średnie dochody kobiet i mężczyzn.

Program działa w mainie, ale wysypuje się, gdy instrukcje są w oddzielnej funkcji-
error: return-statement with a value, in function returning 'void' [-fpermissive]

C/C++
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

fstream plik;

void srednia( fstream plik )
{
    int sumaK = 0; // suma zarobkow kobiet
    int k = 0; //liczba kobiet
    int sumaM = 0; //suma zarobkow mezczyzn
    int m = 0; // liczba mezczyzn
   
    char plec;
    string pensja;
   
    plik.open( "dochody.dat", ios::in );
    if(( plik.good() ) == false )
    {
        cout << "Pliku nie odnaleziono!";
        exit( 0 );
    }
    else
    while( !plik.eof() )
    {
        plik >> plec;
        if(( plec == 'K' ) ||( plec == 'k' ) )
        {
            plik >> pensja;
            sumaK += atoi( pensja.c_str() );
            k++;
        }
       
        else if(( plec == 'M' ) ||( plec == 'm' ) )
        {
            plik >> pensja;
            sumaM += atoi( pensja.c_str() );
            m++;
        }
    }
    cout << "Srednia pensja kobiet wynosi: " << sumaK / k << endl;
    cout << "Srednia pensja mezczyzn wynosi:  " << sumaM / m;
   
    plik.close();
}

int main()
{
    void srednia();
    return 0;
}

Jestem początkujący, więc proszę prostym językiem. :)
P-146136
DejaVu
» 2016-03-17 18:48:20
Wykonujesz
return 0
 w funkcji, która zwraca void.
P-146137
jaśkoo
Temat założony przez niniejszego użytkownika
» 2016-03-17 18:53:25
A możesz napisać jak to powinno wyglądać? Bo jak usuwam return, to program się kompiluje, ale nic nie robi.
P-146138
carlosmay
» 2016-03-17 19:16:01
Tego returna tam nie powinno być i argumenty przez referencje, lub typ zwracany przez funkcję powinien być taki jak zwracany wynik.

void srednia();
Tak się funkcji nie wywołuje. Bez void.
P-146139
jaśkoo
Temat założony przez niniejszego użytkownika
» 2016-03-17 19:26:53
Teraz jest tak i działa, ale niech ktoś mi powie czy funkcja void srednia nie powinna miec podanego parametru fstream plik żeby działać poprawnie?
C/C++
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

fstream plik;

void srednia()
{
    int sumaK = 0; // suma zarobkow kobiet
    int k = 0; //liczba kobiet
    int sumaM = 0; //suma zarobkow mezczyzn
    int m = 0; // liczba mezczyzn
   
    char plec;
    string pensja;
   
    plik.open( "dochody.dat", ios::in );
    if(( plik.good() ) == false )
    {
        cout << "Pliku nie odnaleziono!";
        exit( 0 );
    }
    else
    while( !plik.eof() )
    {
        plik >> plec;
        if(( plec == 'K' ) ||( plec == 'k' ) )
        {
            plik >> pensja;
            sumaK += atoi( pensja.c_str() );
            k++;
        }
       
        else if(( plec == 'M' ) ||( plec == 'm' ) )
        {
            plik >> pensja;
            sumaM += atoi( pensja.c_str() );
            m++;
           
        }
    }
    cout << "Srednia pensja kobiet wynosi: " << sumaK / k << endl;
    cout << "Srednia pensja mezczyzn wynosi:  " << sumaM / m;
   
    plik.close();
}

int main()
{
    srednia();
    return 0;
}
P-146141
carlosmay
» 2016-03-17 19:34:26
Obiekt 'plik' jest zadeklarowany globalnie (choć nie wiem po co) więc jest dostępny w funkcji.
C/C++
plik >> pensja;
sumaM += atoi( pensja.c_str() );
m++;
Czemu 'pensja' jest strigiem, a nie intem?

czy funkcja void srednia nie powinna miec podanego parametru fstream plik żeby działać poprawnie?
Co nie działa?
P-146142
jaśkoo
Temat założony przez niniejszego użytkownika
» 2016-03-17 19:42:16
Działa, ale zastanawiałem się czy tam nie powinien byc podany parametr fstream plik. Pensja jest stringiem, bo wydawało mi się, że wszystko odczytywane z pliku automatycznie nim jest i konieczna jest dalsza konwersja, w tym przypadku na int, mylę się?
P-146144
carlosmay
» 2016-03-17 19:47:01
Operator
>>
 sam konwertuje na taki typ jakiego jest zmienna, do które wczytuje (jeśli taka konwersja jest możliwa).
Jeżeli w pliku są liczby, to można je wczytać do zmiennej typu int,
jak z klawiatury. Tutaj też wprowadzasz znaki, a operator robi swoje.
P-146146
« 1 » 2
  Strona 1 z 2 Następna strona