Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
20.09.11, 16:12
|
#1
|
Anfänger
Registriert seit: Mar 2010
Beiträge: 12
Bedankt: 6
|
C++ Array an Klasse übergeben
Hallo Leute,
ein wenig Erfahrung in Sachen programmieren hab ich schon. Allerdings bin ich seit stunden zu gange, das Array aus dem Main unten zu der Klasse zu übergeben, damit die Methoden damit arbeiten können. Hab schon viel rumgegoogelt, ausprobiert und bekomm es einfach nicht hin.
Wenn ich das Programm anwerfe kommt da nur Murks raus. Ich weiß nicht ob das Kopieren des Arrays funktioniert und die Methoden nichts abbekommen oder ob es schon am kopieren scheitert.
Wäre nett wenn da jemand nen Blick drüber werfen könnte.
P.S.: Ich hab auch schon versucht das Array einfach direkt in den Konstruktor zu schreiben, hat aber auch nichts gebracht. Irgendwie bekomm ich das mit den Klassen einfach nicht auf die Kette.
Zitat:
#include <iostream>
#include <cstdlib>
#include <windows.h>
using namespace std;
//------------------------------------------------------------------------------
class Liga {
public:
Liga () {}
Liga (char name [20], int pt[19][10])
{ memcpy(tab, pt, sizeof(int)*10*19);}
/* Liga (int pt[19][10]){
for (int i=0; i<10; i++){
for (int j=0; j<19; j++){
tab[j][i]=pt[j][i];
};
};
};*/
void copy(int *pt);
void platz_ausgabe();
void p_durchschnitt ();
void p_minimum ();
void anz_punkte ();
private:
int tab[19][10];
static const int platz=5;
static const int jahr=2008;
static const int platz_d=1;
static const int platz_m=16;
static const int punkte_min=70;
};
//------------------------------------------------------------------------------
void Liga:: platz_ausgabe(){
cout << "Punkte fuer Platz " << platz << " im Jahr " << jahr << " :\t" << Liga::tab[platz][jahr-2000] << endl; };
//------------------------------------------------------------------------------
void Liga:: p_durchschnitt (){
float p_durchs=0.0;
for (int i=0; i<10; i++){
p_durchs=p_durchs+Liga::tab[platz_d][i];}
cout << "Durchschnittliche Punkte fuer Platz " << platz_d << ":\t" << p_durchs/10 << endl; };
//------------------------------------------------------------------------------
void Liga:: p_minimum (){
int p_mini;
for (int i=2; i<19; i++) {
if (Liga::tab[platz_m][i]<Liga::tab[platz_m][i-1]){
p_mini=i;};
};
cout << "Minimale Punkte fuer Platz " << platz_m << ":\t" << Liga::tab[platz_m][p_mini] << endl; };
//------------------------------------------------------------------------------
void Liga::anz_punkte (){
int anz=0;
for (int i=0; i<10; i++){
for (int j=1; j<19; j++){
if (Liga::tab[j][i] <=punkte_min){
anz++;};
};
};
cout << "Anzahl der Teams mit ueber " << punkte_min << " Punkte:\t" << anz << endl;
// Testausgabe der Tabelle mit tab. Da kommen leider nur wirre Zahlen raus
for (int i=0; i<19; i++){
for (int j=1; j<10; j++){
cout << " " << Liga::tab[i][j];
};
cout << endl;
};
};
|
Zitat:
//------------------------------------------------------------------------------
int main(void) {
Liga Bliga;
Bliga.platz_ausgabe();
Bliga.p_durchschnitt();
Bliga.p_minimum();
Bliga.anz_punkte();
// Jahr 2000 01 02 03 04 05 06 07 08 09
int pt [19][10]= {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // Dummy
{63, 70, 75, 74, 77, 75, 70, 76, 69, 70}, // Platz 01
{62, 69, 59, 68, 63, 70, 68, 66, 67, 65}, // Platz 02
{58, 68, 58, 65, 59, 68, 66, 64, 64, 61}, // Platz 03
{57, 61, 56, 64, 58, 61, 60, 54, 63, 59}, // Platz 04
{56, 61, 54, 56, 58, 52, 51, 54, 61, 57}, // Platz 05
{55, 56, 52, 55, 57, 48, 48, 52, 59, 55}, // Platz 06
{53, 56, 49, 50, 55, 46, 45, 51, 55, 52}, // Platz 07
{50, 50, 46, 49, 51, 44, 45, 49, 50, 50}, // Platz 08
{47, 50, 45, 44, 48, 43, 44, 46, 49, 47}, // Platz 09
{46, 46, 45, 42, 45, 42, 44, 44, 45, 46}, // Platz 10
{44, 40, 43, 39, 43, 38, 44, 43, 40, 42}, // Platz 11
{43, 39, 42, 39, 42, 38, 42, 41, 39, 39}, // Platz 12
{41, 35, 41, 38, 40, 37, 41, 40, 33, 38}, // Platz 13
{39, 34, 40, 37, 38, 36, 40, 36, 32, 35}, // Platz 14
{38, 34, 40, 36, 36, 34, 37, 34, 31, 33}, // Platz 15
{35, 30, 36, 32, 35, 33, 34, 31, 30, 31}, // Platz 16
{35, 29, 30, 32, 30, 30, 34, 30, 29, 28}, // Platz 17
{27, 22, 30, 23, 18, 27, 26, 29, 28, 24}};// Platz 18
// Testausgabe der Tabelle mit pt
for (int i=0; i<19; i++){
for (int j=1; j<10; j++){
cout << " " << pt[i][j];
};
cout << endl;
};
system("pause");
};
//------------------------------------------------------------------------------
|
|
|
|
21.09.11, 08:49
|
#2
|
Erfahrenes Mitglied
Registriert seit: Mar 2010
Beiträge: 676
Bedankt: 655
|
Sinnvoller und objektorientierter wäre auch die Verwendung von std:vector statt arrays.
|
|
|
21.09.11, 11:26
|
#3
|
Ist öfter hier
Registriert seit: Dec 2009
Beiträge: 245
Bedankt: 80
|
Besser lesbar wäre dein Code in den
Code:
Code-Tags, die
nämlich die Formatierung
beibehalten! ;)
mfg, Mint.
__________________
Zitat:
Zitat von John Lennon
Musik gehört allen. Nur die Plattenfirmen denken, dass man sie besitzen kann.
|
|
|
|
21.09.11, 20:41
|
#4
|
bla
Registriert seit: Mar 2010
Beiträge: 312
Bedankt: 302
|
Code:
class Bla
{
public:
void setPt(int pt[19][10])
{
memcpy(m_pt, pt, sizeof(int)*10*19);
}
protected:
int m_pt[19][10];
};
int main()
{
int pt [19][10] = { 1, 2, 3 };
Bla bla;
bla.setPt(pt);
}
Dein Versuch ins Saubere übertragen, funktioniert sicher.
|
|
|
25.09.11, 14:57
|
#5
|
Anfänger
Registriert seit: Aug 2008
Beiträge: 11
Bedankt: 1
|
Ich bin zwar kein C++ programmierer aber ich bin mir relativ sicher, dass [][] in C++ bei meinen versuchen nicht funktioniert hat. Nach massenhaft "Nimm nen Vector" Antworten kam dann sowas:
Code:
int** pt = new int*[19];
for (int i = 0; i < 19; i++) {
pt[i] = new int[10];
}
Dann solltest du einen 19x10 Array haben. Da ein Array nur ein Pointer ist sollte int** _pt als Methodenparameter funktionieren.
Aber wie schon gesagt. Ich bin kein C++ Dev und ich hasse C++ wie die Pest und würde nie auf den Gedanken kommen es zu benutzen.
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 Uhr.
().
|