Avatar billede d_dogg Nybegynder
24. oktober 2007 - 13:58 Der er 5 kommentarer

Opgave om dynamisk array C++

Hver eneste linie i koden skal kommenteres:
sender cpp filen:

#include <iostream>
#include <string>
#include "Array.h"

using namespace std;

   
    Dynaarray::Dynaarray(int s)
    {

    // Memory allocation for Dynamic Array in the heap.
    anArray = new double[s];
    for(int i =0; i <s;i++)
    {
        anArray[i]=NULL;
    }
    counter = 0;
    num = s;
    }

    // array element added to the end of the container
    void Dynaarray::push_back(itemType item)
    {
        // The temp has type int and has been declared -1.
        int temp=-1;

        if (counter >= num)
        {

             
  /* An array name is a pointer to the array’s first element
    * The size of a dynamically allocated array can be increased
    */


    double *original = anArray;
    // Save old
    double oldSize = num;
    num *= 2;

    anArray = new double[num];
    for(int i =0; i <num;i++)
    {
        anArray[i]=NULL;
    }

    for ( int j = 0; j < oldSize; ++j )
    anArray[j] = original[j];
                   
    // Release memory of Dynamic Array
    delete [ ] original;

        }
       
        for (int i =0; i<num;i++)
        {
            if (anArray[i] !=NULL)
            {
                temp = i;
            }
           
        }
        anArray[temp+1]= item;

        // increments the sizeof int
        counter++;
    }

    itemType Dynaarray::pop_back(){

        if (counter != 0)
        {

        int temp=0;
        double temp2;
        for (int i =0; i<num;i++)
        {
            if (anArray[i] !=NULL)
            {
                temp = i;
            }
           
        }
        temp2 = anArray[temp];
        anArray[temp]=NULL;
        counter--;
        return temp2;
        }
        else
            return NULL;
    }

    void Dynaarray::insert(itemType item, int pos)
    {
        if (pos < num)
        {
        if (counter >= num || pos == num-1)
        {
                    double *original = anArray;
                    double oldSize = num;
                    num *= 2;
                    anArray = new double[num];
                    for(int i =0; i <num;i++)
                    {
                        anArray[i]=NULL;
                    }
                    for ( int j = 0; j < oldSize; ++j )
                    anArray[j] = original[j];
                    delete [ ] original;       
        }
       
        for (int i = num;i>pos;i--)
        {
            anArray[i]= anArray[i-1];
        }
       
        anArray[pos]=item;
        counter++;   
       
        }

    }
   
    /*
    *    Check whether the array is empty or not.
    */


    itemType Dynaarray::erase(int pos) 
    {
       
        if(pos <= num)
        {
            int temp=-1;
            int temp2;
            for (int i =0; i<num;i++)
            {
                if (anArray[i] !=NULL)
                {
                    temp = i;
                }
           
            }
       
            anArray[pos]=NULL;
            for (int i =pos+1;i<=temp;i++)
            {
            anArray[i-1]= anArray[i];
            }

        anArray[temp]= NULL;

        counter--;
       
        return 1;
        }
        else
            return 0;
    }

    void Dynaarray::clear(){
        for (int i =0; i<counter;i++)
        {
        anArray[i]= NULL; 
        }
        counter = 0;
    }

    int Dynaarray::size() const{ 

        return num;
    }

    bool Dynaarray::empty() const{
        if (counter == 0)
        {
            return true;
        }
        else
            return false;
    }

    itemType & Dynaarray::at(int pos) const{
    if (pos < num)
    {
        if (anArray[pos] != NULL)
        return anArray[pos];
    }
    }

    int main()
    {
        char c;
        Dynaarray *ar = new Dynaarray();
       
        cout<<" Total size "<<ar->size()<<endl;
        ar->push_back(40);
        ar->push_back(20);
        cout<<"This  is test 1"<<endl;
        cout<<"position 0 "<<ar->at(0)<<endl;
        cout<<"position 1 "<<ar->at(1)<<endl;
        cout<<"This  is test 2"<<endl;
        cout<<" Total size "<<ar->size()<<endl;
        ar->pop_back();
        cout<<"This  is test 3"<<endl;
        cout<<"position 0 "<<ar->at(0)<<endl;
        cout<<"position 1 "<<ar->at(1)<<endl;

        ar->insert(60,1);
        ar->insert(70.5,1);
        ar->insert(75,1);
        cout<<"This  is test 4"<<endl;
        cout<<" position 0 "<<ar->at(0)<<endl;
        cout<<" position 1 "<<ar->at(1)<<endl;
        cout<<"position  2 "<<ar->at(2)<<endl;
        cout<<"position  3 "<<ar->at(3)<<endl;
        ar->erase(2);
        cout<<"This  is test 5"<<endl;
        cout<<"position 0 "<<ar->at(0)<<endl;
        cout<<"position 1 "<<ar->at(1)<<endl;
        cout<<"position 2 "<<ar->at(2)<<endl;
        cout<<"position 3 "<<ar->at(3)<<endl;

        cin>>c;
        return 0;
    }

    ostream &operator<<( ostream &Out, const Dynaarray &rhs ) {
      Out << "";
      return Out;
    }
Avatar billede bertelbrander Novice
24. oktober 2007 - 19:42 #1
Har du et spørgsmål?
Er der nogen grund til at du ikke har stillet "spørgsmålet" i C++ kategorien?
Avatar billede d_dogg Nybegynder
24. oktober 2007 - 20:32 #2
du skal kommenterer koden.
Avatar billede bertelbrander Novice
25. oktober 2007 - 20:44 #3
Jeg har puttet nogle kommentarer i den første del, der er for mange ting fejl, så jeg synes du skal rette dem først:

#include <iostream>
#include <string>
#include "Array.h"

using namespace std;


Dynaarray::Dynaarray(int s)
{

  // Memory allocation for Dynamic Array in the heap.
  anArray = new double[s];  // Create an array of s number of double
  for(int i =0; i <s;i++)  // for each element
  {
      anArray[i]=NULL;      // Error, NULL is a pointer, anArray[i] is a double
  }
  counter = 0;              // set counter to 0
  num = s;                  // and set num to s
  }

  // array element added to the end of the container
  void Dynaarray::push_back(itemType item)
  {
      // The temp has type int and has been declared -1.
      int temp=-1;        // Create a variable temp, set it to -1, it might be used at some point

      if (counter >= num) // If we have to make room for more
      {


  /* An array name is a pointer to the array’s first element
  * The size of a dynamically allocated array can be increased
  */


  double *original = anArray;        // Point to the old array
  // Save old
  double oldSize = num;              // Save the old num
  num *= 2;                          // double the capacity, if it was 0 strange things might happen

  anArray = new double[num];        // create a new array
  for(int i =0; i <num;i++)          // for each in the new array
  {
      anArray[i]=NULL;              // Error, NULL is a pointer, anArray[i] is a double
  }

  for ( int j = 0; j < oldSize; ++j ) // copy the old values to the new
  anArray[j] = original[j];          // this will overwrite som of the values from above, but we have enough time

  // Release memory of Dynamic Array
  delete [ ] original;                // delete the old array

      }

      for (int i =0; i<num;i++)      // Now find the first element that is 0
      {
          if (anArray[i] !=NULL)
          {
              temp = i;              // Now the mysterious temp come to use
          }

      }
      anArray[temp+1]= item;        // put in the value in the spot after the first 0 entry
                                    // strange things will happen if someone want to store a 0 in our array
                                    // also notice that anArray[temp+1] is of type double, item is of type itemType
                                   
      // increments the sizeof int
      counter++;                   
  }

  itemType Dynaarray::pop_back(){
      // this function returns the FIRST value in the array that is not 0

      if (counter != 0) // If we does have something in our array
      {

      int temp=0;
      double temp2;
      for (int i =0; i<num;i++)  // Find the FIRST non 0 value
      {
          if (anArray[i] !=NULL)
          {
              temp = i;
          }

      }
      temp2 = anArray[temp]; // Save the first non 0 value
      anArray[temp]=NULL;    // set that entry to 0
      counter--;            // decrease the size
      return temp2;          // return the first non 0 value, temp2 is a double, we should return a itemType
      }
      else
          return NULL;      // NULL is a pointer not a itemType
  }
Avatar billede d_dogg Nybegynder
12. november 2007 - 17:48 #4
perfekt..
Avatar billede d_dogg Nybegynder
12. november 2007 - 17:49 #5
bertelbrander
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester