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

[C++]Struktury ( Programowanie Obiektowe)

Ostatnio zmodyfikowano 2014-03-14 00:52
Autor Wiadomość
BatuIron
Temat założony przez niniejszego użytkownika
[C++]Struktury ( Programowanie Obiektowe)
» 2014-03-12 18:23:03
Mam problem z zadaniem, które brzmi:
Zad.1

1.Utwórz strukturę o nazwie pracownicy w której będą przechowywane następijące dane:
- dane osobowe pracownika ( imię, nazwisko, pesel)
- wyskość wynagrodzenia pracownika w każdym miesiącu 2013r.;


2. Napisz funkcję wpisz, która wczytuje dane do struktury pracownicy, przy czym użytkownik wpisuje dane pracownika oraz wysokość wynagrodzenia.

3. W funkcji main utwórz tablicę struktur pracownicy o nazwie firma, w której zapisane będą informacje o wszystkich pracownikach tej firmy. Następnie wpisz do niej dane pracowników i wydrukuj ja na ekran (używając funkcji wpisz oraz drukuj).

4. Napisz funkcję średnia, która oblicza średnią miesięczną wynagrodzenia w tej firmie.

5. Napisz funkcję max która znajduje najlepiej zarabiającego pracownika tej firmy w roku 2013 i wydrukuj jego dane na ekran.

6. Napisz funkcję najstarszy, która znajduje najstarszego pracownika tej firmy i wydrukuj jego dane na ekran (Można przyjąć, że w firmie nie ma osób urodzonych tego samego dnia).

Mój aktualny kod:
C/C++
#include "iostream"
#include "conio.h"
#include "string"
#include "stdafx.h"
using namespace std;

int suma_zarobkow = 0;

struct pracownicy
{
    string imie;
    string nazwisko;
    int wynagrodzenie;
    int pesel;
};

void wpisz()
{
    pracownicy robotnicy[ 2 ];
    for( int i = 0; i < 2; i++ )
    {
        cout << "Podaj imie " << i + 1 << "-ego pracownika: ";
        cin >> robotnicy[ i ].imie;
        cout << "Podaj nazwisko " << i + 1 << "-ego pracownika: ";
        cin >> robotnicy[ i ].nazwisko;
        cout << "Podaj pesel " << i + 1 << "-ego pracownika: ";
        cin >> robotnicy[ i ].pesel;
        cout << "Podaj wynagrodzenie " << i + 1 << "-ego pracownika: ";
        cin >> robotnicy[ i ].wynagrodzenie;
    }
}

void wyswietl()
{
    pracownicy robotnicy[ 2 ];
    for( int i = 0; i < 2; i++ )
    {
        cout << robotnicy[ i ].imie << "    ";
        cout << robotnicy[ i ].nazwisko << "    ";
        cout << robotnicy[ i ].pesel << "    ";
        cout << robotnicy[ i ].wynagrodzenie << endl;
    }
}

double suma()
{
    pracownicy robotnicy[ 2 ];
    for( int i = 0; i < 2; i++ )
    {
        suma_zarobkow = suma_zarobkow + robotnicy[ i ].wynagrodzenie;
    }
    cout << "suma zarobkow" << suma_zarobkow;
    return suma_zarobkow;
}

double srednia( int suma_zarobkow )
{
    double srednia_zarobkow = suma_zarobkow / 2;
    cout << "srednia zarobkow" << srednia_zarobkow;
    return srednia_zarobkow;
}

int max( int ilosc_pracownikow )
{
    pracownicy robotnicy;
    int max = 0;
    for( int i = 0; i < ilosc_pracownikow; i++ )
    {
        if( robotnicy.wynagrodzenie[ i ] < robotnicy.wynagrodzenie[ i + 1 ] )
        {
            max = robotnicy.wynagrodzenie[ i + 1 ];
        }
    }
    cout << "najwyzszy zarobek" << max;
    return max;
}

int najstarszy()
{
    pracownicy robotnicy[ 2 ];
    int stary = 0;
    for( int i = 0; i < 2; i++ )
    {
        if( robotnicy[ i ].pesel < robotnicy[ i + 1 ].pesel )
        {
            stary = robotnicy[ i + 1 ].pesel;
        }
    }
    cout << "najstarszy pracownik" << stary;
    return stary;
}
int main()
{
    pracownicy robotnicy;
    wpisz();
    wyswietl();
    suma( robotnicy.wynagrodzenie );
    srednia( suma_zarobkow );
    max();
    najstarszy();
    system( "pause" );
    return 0;
}
P-106192
michal11
» 2014-03-12 18:33:56
Umieść kod w znaczniki [cpp"] kod ["/cpp] bez cudzysłowów
P-106194
MrPoxipol
» 2014-03-12 18:38:24
To jaki masz ten problem?
P-106195
BatuIron
Temat założony przez niniejszego użytkownika
» 2014-03-12 18:56:59
Program nie chce działać poprawnie, program powinien wypisywać dane pracownikow, srednia wynagrodzenia itd. ale zamiast tego wyświetla dziwne liczby typu "9e00+23123"
P-106199
michal11
» 2014-03-12 19:04:01
Nic dziwnego skoro za każdym razem deklarujesz nowych pracowników i nie wpisujesz dla nich żadnych danych.
P-106200
DaiGyakusatsu
» 2014-03-12 19:06:03
Wcale się nie dziwie że wyrzuca jakieś dziwne dane bo tablica "robotnicy" jest lokalna( mam na myśli funkcje chociażby wpisz i wyswietl ), więc tablica "robotnicy" w funkcji wpisz nie jest tą samą tablicą co w funkcji wyswietl itd.

//Edit
I jeśli wprowadzane dane miałby by być prawdziwe/realistyczne to pesel nie koniecznie Ci się zmieści w int, powinieneś użyć typu który pomieści większą liczbę.

C/C++
void wpisz()
{
    pracownicy robotnicy[ 2 ];
    for( int i = 0; i < 2; i++ )
    {
        cout << "Podaj imie " << i + 1 << "-ego pracownika: ";
        cin >> robotnicy[ i ].imie;
        cout << "Podaj nazwisko " << i + 1 << "-ego pracownika: ";
        cin >> robotnicy[ i ].nazwisko;
        cout << "Podaj pesel " << i + 1 << "-ego pracownika: ";
        cin >> robotnicy[ i ].pesel;
        cout << "Podaj wynagrodzenie " << i + 1 << "-ego pracownika: ";
        cin >> robotnicy[ i ].wynagrodzenie;
    }
}

void wyswietl()
{
    pracownicy robotnicy[ 2 ];
    for( int i = 0; i < 2; i++ )
    {
        cout << robotnicy[ i ].imie << "    ";
        cout << robotnicy[ i ].nazwisko << "    ";
        cout << robotnicy[ i ].pesel << "    ";
        cout << robotnicy[ i ].wynagrodzenie << endl;
    }
}

Są też inne błędy np.:
C/C++
double suma()
{
    pracownicy robotnicy[ 2 ];
    for( int i = 0; i < 2; i++ )
    {
        suma_zarobkow = suma_zarobkow + robotnicy[ i ].wynagrodzenie;
    }
    cout << "suma zarobkow" << suma_zarobkow;
    return suma_zarobkow;
}

//[...]

int main()
{
    pracownicy robotnicy;
    wpisz();
    wyswietl();
    suma( robotnicy.wynagrodzenie ); //<============ Co próbujesz tym osiągnąć ?
    srednia( suma_zarobkow );
    max();
    najstarszy();
    system( "pause" );
    return 0;
}
P-106202
leon_w
» 2014-03-12 19:23:05
Zaczołęś dobrze, a potem pogubiłeś się z tablicą struktur.
C/C++
for( int i = 0; i < ilosc_pracownikow; i++ )
{
    if( robotnicy.wynagrodzenie[ i ] < robotnicy.wynagrodzenie[ i + 1 ] )
    {
        max = robotnicy.wynagrodzenie[ i + 1 ];
    }
}

Nie posiadasz tablic w strukturze, a próbujesz się do nich odnosić. Miało być chyba :
robotnicy[ i ].wynagrodzenie
Popraw to i zobaczymy co dalej.

A tablice struktur możesz zadeklarować tak:
C/C++
struct pracownicy
{
    string imie;
    string nazwisko;
    int wynagrodzenie;
    int pesel;
} robotnicy[ 2 ];

Na pesel daj większa zmienną (np long long) bo prawdziwy pesel się nie mieści.
P-106204
BatuIron
Temat założony przez niniejszego użytkownika
» 2014-03-12 19:30:02
W takim razie jak mam zrobić żeby Tablica z funkcji Wpisz() została wczytana w int main() i mogła zawartość funkcji normalnie wypisać, i żeby Tablica z funcji Wpisz() była tą główna tablica dla wszystkich pozostałych fukcji?
P-106205
« 1 » 2
  Strona 1 z 2 Następna strona