Like Tree3Danke
  • 1 Beitrag von sheel
  • 2 Beitrag von deepthroat
ERLEDIGT
JA
ANTWORTEN
5
ZUGRIFFE
589
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
  1. #1
    Termos ist offline Mitglied Silber
    Registriert seit
    May 2012
    Beiträge
    55
    Im folgenden Programm habe ich versucht ein dynamisches Array zu erstellen ...

    Der aufruf der Klasse mit dem . Operator ist kein Problem, doch was muss ich ändern um es als Zeiger benutzen zu können ergo einen aufruf via
    Code :
    1
    
    d->set(0,ax,0,ay);


    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    
    #include "stdafx.h"
    #include <iostream>
    #include <cstring>
     
    using namespace std;
     
     
    class zweidim
    {
        private: 
            double **d; 
            size_t ax, ay; 
        public: 
            zweidim(int Zeilen=1, int Spalten=1) 
            { 
                ax = Zeilen; 
                ay = Spalten; 
               
                if(ax>0&&ay>0)
                {
                    d = new double*[ax];
                    for(size_t co=0; co<ax; co++)
                    {
                            d[co] = new double[ay];
                    }
     
                    for(size_t i=0;i<ax;i++)
                    {
                        for(size_t n=0;n<ay;n++)
                        {
                            d[i][n]=0.0;                    
                        }
                    }
                }
                else
                {
                        cout<<"Falsche Eingabe "<<ax<<","<<ay<<"\n";
                        d = NULL;
                }
            } 
     
           double *& operator[] (size_t ax)  
            { 
                return d[ax]; 
            } 
     
     
     
     
     
           /* ~zweidim() 
            { 
                int i;
                for (i = 0; i < ax; i++)
                        delete [] d[i];
                delete [] d;
            }*/
     
            ~zweidim() {
                if(d != NULL) {
                        for(size_t i=0; i < ax; i++)
                            if(d[i] != NULL) {
                                delete d[i];
                                d[i] = NULL;
                                    }
                            delete [] d;
                    d = NULL;
                            }
            }
     
            double summe(size_t ax0=0, size_t ax1=0,size_t ay0=0,size_t ay1=0)
            {
                double summe=0;
                size_t temp;
                //Testumgebung für alle Funktionen -> könnten auch als Funktion definiert werden ... 
                //test ob ax/y0 > ax/y1 
                if(ax0>ax1)
                {
                    temp=ax0;
                    ax0=ax1;
                    ax1=temp;
                }
     
                if(ay0>ay1)
                {
                    temp=ay0;
                    ay0=ay1;
                    ay1=temp;
                }
                //test ende
     
                //Testen ob ay1|ax1 > this->ax/ay 
                if(ax1>=this->ax)
                {
                    ax1=(this->ax)-1;   //Klammern dienen nur der optik
                }
                if(ay1>=this->ay)
                {
                    ay1=(this->ay)-1;
                }
                //Testumgebung ende
     
                            
                for(size_t i=ax0;i<=ax1;i++)
                    {
                        for(size_t n=ay0;n<=ay1;n++)
                        {
                            summe=summe+d[i][n];
                        }
                    }
                
                return summe;
            }
     
                    
            
     
            
            //Rückgabe von ax
            size_t get_ax()
            {
                return this->ax;                //Rückgabe der Member variable
            }
            //Rückgabe von ay
            size_t get_ay()                 
            {
                return this->ay;                //Rückgabe der Member variable
            }
            //Wert an Position x,y setzen
            void set(size_t ax=0, size_t ay=0, double wert=0.0)
            {
                if(d!=NULL && ax<this->ax && ay<this->ay)           //Prüfuen ob d existent / vergleich ob ax < als Member ax (ay) 
                {
                    d[ax][ay]=wert;
                }
                else
                {
                    cout<<"Wert konnte nicht gesetzte werden, objekt nicht existent oder Position oberhalb des Arrays\n";
                }
     
            }
     
            //Wert holen // Anzeigen
            double get(size_t ax=0, size_t ay=0)
            {
                if(ax>this->ax || ay>this->ay)
                {
                    cout<<"Unzulässige Werte x y \n";
                    return 0;
                }else
                {
                    
                return  d[ax][ay];
                }
            }
     
            //Anzeigen Aller Elemente 
            void show(size_t ax0=0, size_t ax1=0, size_t ay0=0, size_t ay1=0)
            {
                //Testumgebung für alle Funktionen -> könnten auch als Funktion definiert werden ... 
                //test ob ax/y0 > ax/y1 
                int temp;
                if(ax0>ax1)
                {
                    temp=ax0;
                    ax0=ax1;
                    ax1=temp;
                }
     
                if(ay0>ay1)
                {
                    temp=ay0;
                    ay0=ay1;
                    ay1=temp;
                }
                //test ende
     
                //Testen ob ay1|ax1 > this->ax/ay 
                if(ax1>=this->ax)
                {
                    ax1=(this->ax)-1;   //Klammern dienen nur der optik
                }
                if(ay1>=this->ay)
                {
                    ay1=(this->ay)-1;
                }
                //Testumgebung ende
                
                //Ausgabe Schleife
                for(size_t i=ax0;i<=ax1;i++)
                    {
                        for(size_t n=ay0;n<=ay1;n++)
                        {
                            cout<<d[i][n]<<"\t";
                        }
                        cout<<"\n";
                    }
            }//Ende Show
     
            void ein(size_t ax0=0, size_t ax1=0, size_t ay0=0, size_t ay1=0)
            {
                int wert=0;
                
                //Testumgebung für alle Funktionen -> könnten auch als Funktion definiert werden ... 
                //test ob ax/y0 > ax/y1 
                int temp;
                if(ax0>ax1)
                {
                    temp=ax0;
                    ax0=ax1;
                    ax1=temp;
                }
     
                if(ay0>ay1)
                {
                    temp=ay0;
                    ay0=ay1;
                    ay1=temp;
                }
                //test ende
     
                //Testen ob ay1|ax1 > this->ax/ay 
                if(ax1>=this->ax)
                {
                    ax1=(this->ax)-1;   //Klammern dienen nur der optik
                }
                if(ay1>=this->ay)
                {
                    ay1=(this->ay)-1;
                }
                //Testumgebung ende
     
     
                    for(size_t i = ax0;i <=ax1;i++)                 //-1 da die werte von ax0 mit 1 kommen [Index0 beachten]
                        {
                            for(size_t n = ay0;n<=ay1;n++)          //-1 da die werte von ax0 mit 1 kommen [Index0 beachten]
                            {
                                cout<<"Eingabe ["<<i<<"],["<<n<<"] = ";
     
                                do {
                                    cin>>wert;
                                    if(cin.eof()) break;
                                    if(cin.fail() || (cin.peek() != '\n')){
                                        cout<<"Falsch, erneut eingeben: ";
                                        cin.clear(); cin.ignore(INT_MAX,'\n');
                                        continue;
                                    }
                                        break;
                                } while(true);
                                d[i][n]=wert;
                                cout<<"\n";
                            }
                            cout<<"\n";
                        }
            }
    };
     
     
    int main()
    {
        int ax,ay;
        cout<<"Zeilen Anzahl: ";
        cin>>ax;
        cout<<"Spalten Anzahl: ";
        cin>>ay;
        zweidim d(ax,ay);
        d.set(ax-1,ay-1,100);
        cout<<"Element ["<<ax<<"]["<<ay<<"] = "<<d.get(ax-1,ay-1)<<"\n";
        d.show(0,ax,0,100);
        d.ein(0,ax,0,ay);
        d.show(0,ax,0,ay);
        cout<<"gesamtsumme = "<<d.summe(1,ax,1,ay)<<"\n";
     
     
        system("PAUSE");
        return 0;
    }
     

  2. #2
    deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.731
    Zitat Zitat von Termos Beitrag anzeigen
    Im folgenden Programm habe ich versucht ein dynamisches Array zu erstellen ...

    Der aufruf der Klasse mit dem . Operator ist kein Problem, doch was muss ich ändern um es als Zeiger benutzen zu können ergo einen aufruf via
    Code :
    1
    
    d->set(0,ax,0,ay);
    Um es als Zeiger benutzen zu können muss es ein Zeiger sein.

    Was ist denn der Sinn deiner Frage?

    Code cpp:
    1
    2
    3
    
    zweidim* pd = &d;
     
    pd->set(...);
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    Avatar von sheel
    sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    6.727
    Hi

    Code cpp:
    1
    
    zweidim d(ax,ay);
    änderst du zu
    Code cpp:
    1
    
    zweidim *d = new zweidim(ax,ay);

    Und am Schluss (vor return) kommt noch ein
    Code cpp:
    1
    
    delete d;
    rein.

    Dass du die . in-> ändern musst (oder (*d). ) weißt du ja.

    Gruß

    Ergänzung: deepthroats Variante verwendet eine zweite Variable als Pointer auf die Normale.
    new/delete entfallen deswegen, weil die eigentliche Variable ja die Normale ist
    und das dort schon vom Compiler übernommen wird.
    Der Pointer ist dabei nur eine Art Alias.
    Geändert von sheel (02.05.12 um 14:04 Uhr) Grund: Danke, deepthroat; ausgebessert
    Termos bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  4. #4
    Termos ist offline Mitglied Silber
    Registriert seit
    May 2012
    Beiträge
    55
    Super vielen dank

    Code :
    1
    
    zweidim *d = new zweidim(ax,ay);
    Geändert von Termos (02.05.12 um 14:06 Uhr)
     

  5. #5
    deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.731
    Zitat Zitat von sheel Beitrag anzeigen
    Code cpp:
    1
    
    zweidim *d = new d(ax,ay);
    Sollte
    Code cpp:
    1
    
    zweidim *d = new zweidim(ax, ay);
    heißen.

    Gruß
    sheel und Termos bedanken sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  6. #6
    Termos ist offline Mitglied Silber
    Registriert seit
    May 2012
    Beiträge
    55
    Jo habe es gemerkt, vielen dank Wieder mal den tag gerettet******!
     

Ähnliche Themen

  1. Methode aus main() aufrufen
    Von Themanofrofl im Forum Java Grundlagen
    Antworten: 16
    Letzter Beitrag: 09.05.11, 09:40
  2. Antworten: 6
    Letzter Beitrag: 28.01.08, 20:23
  3. JFrame- Methoden aus Main aufrufen
    Von Andre_Java im Forum Java
    Antworten: 3
    Letzter Beitrag: 18.12.07, 14:08
  4. Jar-File in einem Main-Programm aufrufen
    Von hottie im Forum Java
    Antworten: 1
    Letzter Beitrag: 01.03.05, 22:57
  5. main window aus popup aufrufen
    Von muehl im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 14.09.04, 11:29