ss



  • Hi Leute schaut mal bitte mein code an und beurteilt ihn wir haben erst vor ein paar stunden
    In der Berufsschule new und delet behandelt

    Jetzt wollte ich wissen ob das die beste möglichkeit ist ein array zur laufzeit zu vergrößern???
    😕 😕 😕 😕

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    //--------------------------------------------------------------    
        int n,a;
        int *p=new int[n+a];   
    //--------------------------------------------------------------    
        cout<<"Wie viele Elemente soll ihr Array haben?:";
        cin>>n;
    //--------------------------------------------------------------    
        for(int i=0;i<n;i++)
        {
            cout<<"\ngib das "<<i+1<<" ein :";
            cin>>p[i];
        }
    //--------------------------------------------------------------
        cout<<"Wie viel elemte wollen sie hinzufuegen?:";
        cin>>a;
    //--------------------------------------------------------------
         for(int i=n;i<(n+a);i++)
        {
            cout<<"\ngib das "<<i+1<<" ein :";
            cin>>p[i];
        }
    //---------------------------------------------------------------
         for(int i=0;i<(n+a);i++)
            cout<<"\nergebnis:"<<p[i];
    //---------------------------------------------------------------     
         delete [] p;
    //---------------------------------------------------------------     
         system("PAUSE>nul");
    //---------------------------------------------------------------     
    }
    


  • Sorry das mit der überschrift sollte nicht so sein!!!



  • Du solltest deine Variablen erst mit Werten belegen, bevor du sie verwenden kannst (das betrifft jetzt vor allem den new[] Aufruf).
    Und wenn du das Array nachträglich vergrößern willst, mußt du die bisher vorhandenen Objekte kopieren:

    cin<<n;
    p=new int[n];
    //einlesen der ersten n Elemente
    
    cin<<a;
    {
      int*q=new int[n+a];
      for(int i=0;i<n;++i) q[i]=p[i];
      delete[]p;
      p=q;
    }
    //einlesen der nächsten a Elemente
    

    Eventuell könntest du statt rohen Pointern auch STL-Container verwenden, die kümmern sich selber um ihre Größe.



  • EliteProgger schrieb:

    Hi Leute schaut mal bitte mein code an ..

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    //--------------------------------------------------------------    
        int n,a;
        int *p=new int[n+a];
    

    n und a sind nicht initialisiert! Woher soll denn Dein PC wissen, wieviel Speicher er anlegen soll?

    EliteProgger schrieb:

    //--------------------------------------------------------------    
        cout<<"Wie viele Elemente soll ihr Array haben?:";
        cin>>n;
    //--------------------------------------------------------------
    

    ok aber jetzt noch schnell das 'a':

    EliteProgger schrieb:

    //--------------------------------------------------------------
        cout<<"Wie viel elemte wollen sie hinzufuegen?:";
        cin>>a;
    //--------------------------------------------------------------
    

    und dann erst new, denn sonst ist der Inhalt von n+a undefiniert

    int *p=new int[n+a];
    

    und dann

    EliteProgger schrieb:

    for(int i=0;i<n;i++)
        {
            cout<<"\ngib das "<<i+1<<" ein :";
            cin>>p[i];
        }
        for(int i=n;i<(n+a);i++)
        {
            cout<<"\ngib das "<<i+1<<" ein :";
            cin>>p[i];
        }
    //---------------------------------------------------------------
         for(int i=0;i<(n+a);i++)
            cout<<"\nergebnis:"<<p[i];
    //---------------------------------------------------------------     
         delete [] p;
    //---------------------------------------------------------------     
         system("PAUSE>nul");
    //---------------------------------------------------------------     
    }
    

    wenn man Array, nachdem es bereits angelegt wurde, vergrößern möchte, so muss man ein neues größeres anlegen und den den ersten Teil (hier 'n' Zahlen) umkopieren.

    Gruß
    Werner



  • Ähm. Du intialisierst a und b nicht. Desweiteren wird da auch nix vergrößert. Du solltest den User fragen wieviel Elemente er insgesamt eingeben will, dafür Speicher allokieren und dann die Schleife einfach laufen lassen. Wüsste grad nicht das C++ ein resize oder so kennt, womit man Speicher vergrößern könnte. Du müsstest also eine neue Variable anlegen, fragen wieviel elemente der User eingeben will, dann a+b bei der allokation zusammenaddieren (wie du es am Anfang gemacht hast, dann die alten Elemente dort reinkopieren und den Speicher vom alten Array freigeben. Dann kannst du alle Elemente am Stück ausgeben und zu guter letzt nochmal mit delete[] freigeben.

    int a,b;
    // Eingabe, wieviel Elemente eingegeben werden sollen
    int *p=new int[a];
    // Eingabe der Elemente
    // Erneutes fragen, wieviel Elemente eingegeben werden sollen
    int *new_p=new int[a+b];
    // Alle Elemente von p nach new_p kopieren
    delete[] p;
    // Eingabe der weiteren Elemente, beginnend bei i=a bis i<a+b
    // Ausgabe der elemente von i=0 bis i<a+b
    delete[] new_p;
    


  • danke leute für eure schnell hilfe!!!

    an CStoll hab leider noch nie was von STL-Container gehört sorry aber kommt bestimmt noch



  • EliteProgger schrieb:

    an CStoll hab leider noch nie was von STL-Container gehört sorry aber kommt bestimmt noch

    Kommt noch - und erleichtert gegenüber den new/delete-Konstruktionen die Arbeit erheblich 😉

    vector<int> data;
    
    cin>>n;
    data.resize(n);
    //...
    cin>>a;
    data.resize(data.size()+a);
    //...
    


  • kannst du wenigstens die überschrift ändern, SS-Elite-Progger.



  • Leon++ schrieb:

    kannst du wenigstens die überschrift ändern, SS-Elite-Progger.

    Und wie soll er das deiner Meinung nach machen? 😕



  • den ersten post zu diesem thema, also

    Hi Leute schaut mal bitte[...]

    editieren und das thema ändern.



  • ach ja bitte gib dem thema nen ordentliches,unpolitisches thema ´,also nicht SA,HJ,HH,AH,etc.



  • LOL!



  • Leon++ schrieb:

    den ersten post zu diesem thema, also

    Hi Leute schaut mal bitte[...]

    editieren und das thema ändern.

    Versuch du mal als Gast-User einen Beitrag zu editieren 😉



  • oh! stimmt!


Anmelden zum Antworten