Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++]Динамический массив


Автор: insi 17.5.2008, 18:46
Сформировать одномерный динамический массив целых чисел. Из массива удалить все одинаковые элементы и изменить соответственно размер массива, используя временный динамический массив.

Автор: Albinos_x 17.5.2008, 23:22
вы не указали я зык на котором всё это необходимо сделать

Автор: insi 18.5.2008, 21:36
Язык C++

Автор: t_gran 20.5.2008, 05:32
Код

#include <iostream>
#include <stdlib.h>

using namespace std;

//-----------------------------------------------//
int MasRand (unsigned *inMas, unsigned inLenMas)
{

   while (inLenMas--)
      *inMas++= rand () % 9 + 10;
   *inMas= 0;
   return 0;
}
//-----------------------------------------------//
int MasPrint (unsigned *inMas)
{
   while (*inMas)
      cout << *inMas++ << " ";
   cout << endl;
   return 0;
}
//-----------------------------------------------//
unsigned MasSizeNew (unsigned *inMas)
{
   unsigned size= 0;
   while (*inMas)
   {
      unsigned *bufMas= inMas;
      bool used= false;
      while (*(++bufMas))
      {
         if (*bufMas == *inMas)
         {
            used= true;
            break;
         }
      }
      if (!used)
         size++;
      inMas++;
   }
   return size;
}
//-----------------------------------------------//
int MasFilt (unsigned **inMas)
{
   unsigned *newMas= new unsigned [MasSizeNew (*inMas) + 1];
   unsigned *headNewMas= newMas;
   unsigned *headInMas= *inMas;
   unsigned *bufMas;
   while (**inMas)
   {
      bufMas= *inMas;
      bool used= false;
      while (*(++bufMas))
      {
         if (*bufMas == **inMas)
         {
            used= true;
            break;
         }
      }
      if (!used)
         *newMas++= **inMas;
      (*inMas)++;
   }
   *newMas= 0;
   bufMas= *inMas;
   *inMas= headNewMas;
   delete headInMas;
   return 0;
}
//-----------------------------------------------//

int main (int argc, char **argv)
{
   unsigned int lenMas;
   cout << "input N: ";
   cin >> lenMas;
   unsigned *mas= new unsigned [lenMas + 1];
   MasRand (mas, lenMas);
   MasPrint (mas);
   MasFilt (&mas);
   MasPrint (mas);
   delete mas;
   cout << "Ok" << endl;
   return 0;
}


Автор: insi 21.5.2008, 19:36
Error    1    error C2601: 'MasRand' : local function definitions are illegal
Error    2    error C2601: 'MasPrint' : local function definitions are illegal
Error    3    error C2601: 'MasSizeNew' : local function definitions are illegal    
Error    4    error C2601: 'MasFilt' : local function definitions are illegal    
Error    6    error C3861: 'MasSizeNew': identifier not found     
Error    7    error C3861: 'MasRand': identifier not found     
Error    8    error C3861: 'MasPrint': identifier not found    
Error    9    error C3861: 'MasFilt': identifier not found    
Error    10    error C3861: 'MasPrint': identifier not found    

 smile 

Автор: t_gran 22.5.2008, 02:52
Какой компилятор? Попробуй тогда этот же код, только на чистом C:
Код

#include <stdio.h>
#include <stdlib.h>

//-----------------------------------------------//
int MasRand (unsigned *inMas, unsigned inLenMas)
{
   while (inLenMas--)
      *inMas++= rand () % 9 + 10;
   *inMas= 0;
   return 0;
}
//-----------------------------------------------//
int MasPrint (unsigned *inMas)
{
   while (*inMas)
      printf ("%d ", *inMas++);
   printf ("\n");
   return 0;
}
//-----------------------------------------------//
unsigned MasSizeNew (unsigned *inMas)
{
   unsigned size= 0;
   while (*inMas)
   {
      unsigned *bufMas= inMas;
      int used= 0;
      while (*(++bufMas))
      {
         if (*bufMas == *inMas)
         {
            used++;
            break;
         }
      }
      if (!used)
         size++;
      inMas++;
   }
   return size;
}
//-----------------------------------------------//
int MasFilt (unsigned **inMas)
{
   unsigned *newMas=  malloc (sizeof (unsigned) * MasSizeNew (*inMas) + 1);
   unsigned *headNewMas= newMas;
   unsigned *headInMas= *inMas;
   unsigned *bufMas;
   while (**inMas)
   {
      bufMas= *inMas;
      int used= 0;
      while (*(++bufMas))
      {
         if (*bufMas == **inMas)
         {
            used++;
            break;
         }
      }
      if (!used)
         *newMas++= **inMas;
      (*inMas)++;
   }
   *newMas= 0;
   bufMas= *inMas;
   *inMas= headNewMas;
   free (headInMas);
   return 0;
}
//-----------------------------------------------//

int main (int argc, char **argv)
{
   unsigned int lenMas;
   printf ("input N: ");
   scanf ("%d", &lenMas);
   unsigned *mas= malloc (sizeof (unsigned) * lenMas + 1);
   MasRand (mas, lenMas);
   MasPrint (mas);
   MasFilt (&mas);
   MasPrint (mas);
   free (mas);
   return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)