Dzielnie kodu na moduły - wskaźnik i średnia
Ostatnio zmodyfikowano 2015-12-12 21:04
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 #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 #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 #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ą: 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ę ;) |
|
Kaikso |
» 2015-12-12 18:39:14 #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; }
int srednia_waga( Osoba * tab ) { int wynik = 0; for( int i = 0; i < 5; i++ ) { wynik +=( tab[ i ]->waga ); } return wynik / 5; }
|
|
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 |
|
Kaikso |
» 2015-12-12 19:04:25 Napisałem to na szybko bez przetestowania i zapomniałem zmienić operator. Poprawiony kod: int srednia_waga( Osoba * tab ) { int wynik = 0; for( int i = 0; i < 5; i++ ) { wynik +=( tab[ i ].waga ); } return wynik / 5; }
|
|
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> |
|
Kaikso |
» 2015-12-12 20:05:31 Tablica to jest tak naprawdę wskaźnik. tab[ i ] jest równoznaczne z *( tab + i ) |
|
Skipper11 Temat założony przez niniejszego użytkownika |
» 2015-12-12 21:04:18 Aa, w ten sposób. Dzięki za pomoc ;) |
|
« 1 » |