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

Dzielnie kodu na moduły - wskaźnik i średnia

Ostatnio zmodyfikowano 2015-12-12 21:04
Autor Wiadomość
Skipper11
Temat założony przez niniejszego użytkownika
Dzielnie kodu na moduły - wskaźnik i średnia
» 2015-12-12 18:02:41
Witam, walczę obecnie z takim zdaniem i niestety nie umiem znaleźć błędu:
"Dopisz do pliku osoba.cpp i wykorzystaj funkcję, która pobierze wskaźnik na tablicę z elementami osoba i zwróci średnią wagę wszystkich osób."
Jest to na podstawie poprzedniego, które mi działa "Podziel program z zadania 3 na oddzielne pliki:
- Stwórz plik Osoba.cpp zawierający funkcje wczytującą i wyświetlającą z wcześniejszych zadań.
- Stwórz plik nagłówkowy Osoba.h zawierający deklaracje struktury oraz deklarację funkcji z pliku *.cpp.
- Następnie dołącz plik nagłówkowy do pliku z główną funkcją programu."
Poniżej załączam kody:
main cpp
C/C++
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string>
#include "Osoba.h"

using namespace std;

int main()
{
    Osoba tab[ 5 ];
    for( int i = 0; i < 5; i++ )
    {
        wczytaj( & tab[ i ] );
    }
    cout << endl;
    cout << "Dane wypisane na ekranie: " << endl;
    for( int i = 0; i < 5; i++ )
    {
        wypisz( & tab[ i ] );
        cout << endl;
    }
    srednia_waga( & tab[ 5 ] );
   
    cout << "Srednia waga to: " << srednia_waga << endl;
   
    system( "pause" );
    return 0;
}
Osoba.cpp
C/C++
#include "Osoba.h"

using namespace std;

void wypisz( Osoba * os )
{
    cout << "Nazwisko: " << os->nazwisko << endl;
    cout << "Imie: " << os->imie << endl;
    cout << "Wiek: " << os->wiek << endl;
    cout << "Waga: " << os->waga << endl;
    cout << "Wzrost: " << os->wzrost << endl;
}

void wczytaj( Osoba * os )
{
    cout << "Podaj nazwisko: "; cin >> os->nazwisko;
    cout << "Podaj imie: "; cin >> os->imie;
    cout << "Podaj wiek: "; cin >> os->wiek;
    cout << "Podaj wage: "; cin >> os->waga;
    cout << "Podaj wzrost: "; cin >> os->wzrost;
}

int srednia_waga( Osoba * tab[] )
{
    int srednia_waga = 0;
    for( int i = 0; i < 5; i++ )
    {
        srednia_waga +=( * tab[ i ]->waga );
    }
    return srednia_waga = srednia_waga / 5;
}
Osoba.h
C/C++
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string>

using namespace std;

struct Osoba
{
    string nazwisko;
    string imie;
    int wiek;
    int waga;
    int wzrost;
};

void wypisz( Osoba * os );
void wczytaj( Osoba * os );
int srednia_waga( Osoba * tab );
Wyliczajac to w mainie za pomocą:
C/C++
int srednia_waga = 0;
for( int i = 0; i < 5; i++ )
{
    srednia_waga +=( tab[ i ].waga );
}
srednia_waga = srednia_waga / 5;
cout << "Srednia waga to: " << srednia_waga << endl;
Wszystko działało mi okej. Jednak gdy daję to w osobą funkcje się psuje. Proszę o jakieś wskazówki. Z góry dziękuję ;)
P-141825
Kaikso
» 2015-12-12 18:39:14
C/C++
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <string>
#include "Osoba.h"

using namespace std;

int main()
{
    Osoba tab[ 5 ];
    for( int i = 0; i < 5; i++ )
    {
        wczytaj( & tab[ i ] );
    }
    cout << endl;
    cout << "Dane wypisane na ekranie: " << endl;
    for( int i = 0; i < 5; i++ )
    {
        wypisz( & tab[ i ] );
        cout << endl;
    }
   
    cout << "Srednia waga to: " << srednia_waga( tab ) << endl;
   
    system( "pause" );
    return 0;
}

C/C++
int srednia_waga( Osoba * tab )
{
    int wynik = 0;
    for( int i = 0; i < 5; i++ )
    {
        wynik +=( tab[ i ]->waga );
    }
    return wynik / 5;
}
P-141831
Skipper11
Temat założony przez niniejszego użytkownika
» 2015-12-12 18:54:51
Kompiluje Ci się to?
Bo mi wyskakują błędy, a mianowicie:
 type 'Osoba' does not have an overloaded member 'operator ->'
no i '->Osoba::waga' : left operand has 'struct' type, use '.'
Oraz expression must have pointer type
P-141834
Kaikso
» 2015-12-12 19:04:25
Napisałem to na szybko bez przetestowania i zapomniałem zmienić operator.
Poprawiony kod:
C/C++
int srednia_waga( Osoba * tab )
{
    int wynik = 0;
    for( int i = 0; i < 5; i++ )
    {
        wynik +=( tab[ i ].waga );
    }
    return wynik / 5;
}
P-141835
Skipper11
Temat założony przez niniejszego użytkownika
» 2015-12-12 19:12:30
Aa. A właściwie czemu tam w mainie nie podaje się wskaźnika do adresu tablicy i dalej w Osoba.cpp mimo, że to jest struktura to nie używa się wskaźnika do struktur? <ściana>
P-141837
Kaikso
» 2015-12-12 20:05:31
Tablica to jest tak naprawdę wskaźnik.
tab[ i ]
 jest równoznaczne z
*( tab + i )
P-141844
Skipper11
Temat założony przez niniejszego użytkownika
» 2015-12-12 21:04:18
Aa, w ten sposób.
Dzięki za pomoc ;)
P-141849
« 1 »
  Strona 1 z 1