Brak reakcji na wywołanie funkcji float

0
#include <iostream>


using namespace std;
int x;
struct Dane_Os
{
    string imie;
    string nazwisko;
    long int pesel;
};
struct Pracownicy
{
    double wysWynagrodzenia;
    double srednieWyn;
    Dane_Os dane;
};

void wpisz(Pracownicy Firma[], int n, int x);
void drukuj(Pracownicy Firma[], int n, int x);
float srednia(Pracownicy Firma[], int n, int x);
int main()
{

    int n;
    cout << "Podaj liczbe pracownikow: ";
    cin >> n;
    Pracownicy Firma[n];
    wpisz(Firma, n, x);
    drukuj(Firma, n, x);

    return 0;
}
void wpisz(Pracownicy Firma[], int n, int x)
{

    for (int i = 0; i < n; i++)
    {

        cout << "Podaj imie: ";
        cin >> Firma[i].dane.imie;
        cout << "Podaj nazwisko: ";
        cin >> Firma[i].dane.nazwisko;
        cout << "Podaj pesel: ";
        cin >> Firma[i].dane.pesel;
        do
        {
            cout << "Podaj liczbe przepr miesiecy: " << endl;
            cin >> x;


        } while (!(x >= 0 && x <= 12));

        for (int i = 0; i < x; i++)
        {
            cout << "Podaj: " << i + 1 << " pensje" << endl;
            cin >> Firma[i].wysWynagrodzenia;
        }
    }
}
void drukuj(Pracownicy Firma[], int n, int x)
{
    for (int i = 0; i < n; i++)
    {

        cout << "Imie: " << Firma[i].dane.imie << ",nazwisko: " << Firma[i].dane.nazwisko
             << ",PESEL: " << Firma[i].dane.pesel << endl;
        cout << "Srednia wartosc wynagrodzenia to: " << srednia(Firma, n, x) << endl;
    }
}
float srednia(Pracownicy Firma[], int n, int x)
{
    double sredniaWart;
    for (int i = 0; i < n; i++)
    {
        sredniaWart += Firma[i].wysWynagrodzenia;
    }
    return sredniaWart / x;
}

Chciałbym, aby program po wypisaniu wszystkich x pensji podawał sredni zarobek( dla kazdego pracownika osobno). Co mam zmienic? Czemu nie dziala?

0

"nie działa" to bardzo mało deskryptywny opis. Podejrzewam, że "coś jest nie tak". Polecam lekturę Dlaczego nikt nie odpowiada w moim wątku?

Swoją drogą nigdzie nie ustalasz wartości sredniaWart w funkcji srednia. Może to o to chodzi?

0

Nie dziala to znaczy nie robi tego o co mi chodzi, napisałem to.

0

Wartosc x ustala sie w void wpisz, a int x jest zadeklarowane globalnie.
Przejrzales w ogole ten kod?

1

Jak napisał @kq - x jest tam niepotrzebne, bo z tego co widziałem to ilosc przepracowanych miesiecy, co raczej nie ma wplywu na srednie wynagrodzenie.

float srednia(Pracownicy Firma[], int n) // <- wywaliłem x
{
    double sredniaWart = 0;
    for (int i = 0; i < n; i++)
    {
        sredniaWart += Firma[i].wysWynagrodzenia;
    }
    return sredniaWart / n; // zmieniłem x na n
}

Dodatkowo popraw nazewnictwo, bo jeszcze w pętli sredniaWart to nie jest srednie wynagrodzenie i ta zmienna nigdy nie osiąga tej wartości.

0

Nie dziala to znaczy nie robi tego o co mi chodzi, napisałem to.
Ach, jasne. No ale ja już napisałem, że coś jest nie tak.

@ up: przepraszam, miałem na myśli sredniaWart

PS: nie ma czegoś takiego jak funkcja void. void jest typem, nie funkcją.

0
#include <iostream>


using namespace std;
int x;
struct Dane_Os{
	string imie;
	string nazwisko;
	long int pesel;
	
};
struct Pracownicy{
	double wysWynagrodzenia;
	double srednieWyn;
	Dane_Os dane;
	
};

void wpisz(Pracownicy Firma[], int n, int x);
void drukuj(Pracownicy Firma[], int n, int x);
float srednia(Pracownicy Firma[], int n);
int main(){

	int n;
	cout<<"Podaj liczbe pracownikow: ";
	cin>>n;
	Pracownicy Firma[n];
	wpisz(Firma,n,x);
	drukuj(Firma,n,x);
	
	return 0;
}
void wpisz(Pracownicy Firma[], int n, int x){
	
	for(int i=0;i<n;i++){

	cout<<"Podaj imie: ";
	cin>>Firma[i].dane.imie;
	cout<<"Podaj nazwisko: ";
	cin>>Firma[i].dane.nazwisko;
	cout<<"Podaj pesel: ";
	cin>>Firma[i].dane.pesel;
	do{
		cout<<"Podaj liczbe przepr miesiecy: "<<endl;
		cin>>x;
		
		
	}while(!(x>=0 && x<=12 ));
	
		for(int i=0; i<x; i++){
		cout<<"Podaj: "<<i+1<<" pensje"<<endl;
		cin>>Firma[i].wysWynagrodzenia;
		
	}
	
	
}
	
}
void drukuj(Pracownicy Firma[], int n, int x){
	for(int i=0; i<n; i++){
	
	cout<<"Imie: "<<Firma[i].dane.imie<<",nazwisko: "<<Firma[i].dane.nazwisko<<",PESEL: "<<Firma[i].dane.pesel<<endl;
	cout<<"Srednia wartosc wynagrodzenia to: "<<srednia(Firma, n)<<endl;
}
	
	

	
}
float srednia(Pracownicy Firma[], int n){
	double srednieWyn=0;

	for(int i=0;i<n;i++){
	srednieWyn += Firma[i].wysWynagrodzenia;
	
}
	return srednieWyn/n;
	
	
} 

Teraz kod wyglada tak, ale np przy podaniu 1 pracownika pokazuje jako srednia tylko pierwsza pensje, np podam pierwsza 1300 druga 1200 to pokaze tylko 1300...

0

Jeszcze raz napisze dla pewnosci, bo zdziwilo mnie to usuniecie x.
Program ma przy KAZDYM pracowniku pisac srednia JEGO ZAROBKOW.
Czyli wszystkie pensje / ilosc miesiecy przepracowanych.

1

No dobrze, tylko w takim razie brakuje Ci danych i to sporo. Bo jest jedno globalne x na ilość przeprawcowanych miesięcy, a wypadałoby stworzyć strukturę, która ma dane jaką pensję zarabiał pracownik przez ile miesięcy.

W skrócie - nie przechowujesz nigdzie historii zarobków.

0

to nie jest juz wysWynagrodzenia?

1
  • Nie dziala!
  • co nie dziala?
  • Nie dziala to znaczy nie robi tego co ja chce

:D Swietny opis. U mechanika tez tak mowisz "Auto sie popsulo" "a co sie popsulo?" "popsulo sie to co potrzebuje zeby chodzilo"
tylko, ze mechanik za taki opis po prostu wezmie wiecej kasy, my chcemy pomoc, wiec pozwol sobie pomoc

zobacz sobie jak dziala debugger w Twoim ide i debugguj.

0
 #include <iostream>
 
 
using namespace std;

struct Dane_Os{
    string imie;
    string nazwisko;
    long int pesel;
 
};
struct HajsMiesieczny {
	double kasa;
};
struct Czas {
	int time;
	
};
struct Pracownicy
{
    double wysWynagrodzenia;
    double srednieWyn;
    Dane_Os dane;
	HajsMiesieczny pieniadze;
	Czas czasowo;
};

void wpisz(Pracownicy Firma[], int n );
void drukuj(Pracownicy Firma[], int n);
float srednia(Pracownicy Firma[], int n);
int main(){
 
    int n;
    cout<<"Podaj liczbe pracownikow: ";
    cin>>n;
    Pracownicy Firma[n];
    wpisz(Firma,n);
    drukuj(Firma,n);
 
    return 0;
}
void wpisz(Pracownicy Firma[], int n){
 
    for(int i=0;i<n;i++){
 
    cout<<"Podaj imie: ";
    cin>>Firma[i].dane.imie;
    cout<<"Podaj nazwisko: ";
    cin>>Firma[i].dane.nazwisko;
    cout<<"Podaj pesel: ";
    cin>>Firma[i].dane.pesel;
    do{
        cout<<"Podaj liczbe przepr miesiecy: "<<endl;
        cin>>Firma[i].czasowo.time;
 
 
    }while(!(Firma[i].czasowo.time>=0 && Firma[i].czasowo.time<=12 ));
 
        for(int i=0; i<Firma[i].czasowo.time; i++){
        cout<<"Podaj: "<<i+1<<" pensje"<<endl;
        cin>>Firma[i].pieniadze.kasa;
 
    }
 
 
}
 
}
void drukuj(Pracownicy Firma[], int n){
    for(int i=0; i<n; i++){
 
    cout<<"Imie: "<<Firma[i].dane.imie<<",nazwisko: "<<Firma[i].dane.nazwisko<<",PESEL: "<<Firma[i].dane.pesel<<endl;
    cout<<"Srednia wartosc wynagrodzenia to: "<<srednia(Firma, n)<<endl;
}
 
 
 
 
}
float srednia(Pracownicy Firma[], int n){
    double srednieWyn=0;
 
for(int i=0;i<Firma[i].czasowo.time;i++){
srednieWyn += Firma[i].pieniadze.kasa;
return srednieWyn/Firma[i].czasowo.time;
}
    
 
 
}  

Teraz mam taki problem, ze pokazuje zawsze komunikat podaj1 a potem podaj2 pensje, czy jest gdzies blad w petli po funkcji do..while?

0

Panie, zrób Pan klasę pracownika z wektorem par <int,int> Ilość miesięcy:wynagrodzenie i będzie po problemie.

class Osoba 
{
public:
    std::string imie;
    std::string nazwisko;
    long int pesel;
}

class Pracownik : public Osoba
{
public:
    std::vector<std::pair<int, int> historiaWynagrodzenia;
}

Do tego dopisz sobie odpowiednie metody w klasie Pracownik i będzie po sprawie.

0

Nie mialem jeszcze klas...Nie wiedzialem, ze tak mozna. Ucze sie programowania dopiero od 2,5 tygodnia. Doczytam sobie o tym.

0

Uzywajac namespace std, wpisuje: " vector< pair <int, int> > historiaWynagrodzenia;".

Co to za komunikat: [Error] 'vector' does not name a type?

0
#include <vector>
#include <utility> // pair
0

Dzieki, jeszcze mam problem z takim zadaniem:

 #include <iostream>
#include <cstring>

using namespace std;
void printBook( struct Books book );
void compare( struct Books book );
struct Books {
	char  title[50];
	char  author[50];
	char  subject[100];
	int   book_id;
};
struct Books Book1;        // Declare Book1 of type Book
struct Books Book2;   // Declare Book2 of type Book
int main( ) {


	// book 1 specification
	strcpy( Book1.title, "Learn C++ Programming");
	strcpy( Book1.author, "Chand Miyan");
	strcpy( Book1.subject, "C++ Programming");
	Book1.book_id = 6495407;

	// book 2 specification
	strcpy( Book2.title, "Telecom Billing");
	strcpy( Book2.author, "Yakit Singha");
	strcpy( Book2.subject, "Telecom");
	Book2.book_id = 6495700;

	// Print Book1 info
	printBook( Book1 );

	// Print Book2 info
	printBook( Book2 );
	compare();

	return 0;
}

void printBook( struct Books book ) {
	cout << "Book title : " << book.title <<endl;
	cout << "Book author : " << book.author <<endl;
	cout << "Book subject : " << book.subject <<endl;
	cout << "Book id : " << book.book_id <<endl;
	cout<<endl;


}
void compare( struct Books book ) {

	if( strcmp( Book1.title, Book2.title ) == 0 )
		printf( "Badane tytuly sa rowne.\n" );
	else
		printf( "Badane tytuly nie sa rowne.\n" );


}

w linii 35, co wpisać w nawiasy przy compare?

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