Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2009, 20:42   #1
Ueshua
 
Регистрация: 19.12.2009
Сообщений: 9
По умолчанию Динамический массив

Задача.
Создать динамический массив, удалить из него нули и переместить отрицательные элементы в начало.

Код.
Код:
#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include<time.h>
double* massive(int n)
{
   double *mass;
   mass=new double[n];
   if (mass==NULL)
   {
     cout<<"No availiable memory";
     getch();
     return NULL;
   }
  return mass;
}
void input(double *mass,int n)
{
	for(int i=0;i<n;i++)
      do
        *(mass+i)=pow((-1),random(2))*random(10);
      while (*(mass+i)==0);
     *(mass+random(n))=0;
}
void print(double *mass,int n)
{
   for(int i=0;i<n;i++)
   {
   	cout.width(3);
      cout<<*(mass+i);
   }
   cout<<endl;
}
void sort(double *mass,int &n)
{
	for(int i=0;i<n;i++)
   {
   	if(*(mass+i)==0)
      {
      	n--;
         for (int j=i;j<n;j++)
         	*(mass+j)=*(mass+j+1);
      }
      if(*(mass+i)>0)
      {
         for (int j=i;j<n;j++)
         	if(*(mass+j)<0)
            {
            	*(mass+i)=*(mass+i)+*(mass+j);
               *(mass+j)=*(mass+i)-*(mass+j);
               *(mass+i)=*(mass+i)-*(mass+j);
            }
      }
   }
}
int main()
{
   randomize();
   double* mass; int n=10,i;
   mass=massive(n);
   input(mass,n);
   print(mass,n);
   sort(mass,n);
   print(mass,n);
   getch();
   delete []mass;
   cout<<"Now you see how powerful and cute are dynamic massives!";
	getch();
   return 0;
}
При запуске выявляются ошибки:
error C2065: 'random' : undeclared identifier
error C2065: 'randomize' : undeclared identifier

Подскажите, что не так, пожалуйста.
Ueshua вне форума Ответить с цитированием
Старый 19.12.2009, 20:46   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,604
По умолчанию

Если вы компилируете в студии или где-то еще (не в BC и не в билдере), то функция random заменяется на rand(), а функция randomize заменяется на srand(time(0));
К примеру строка
Код:
*(mass+random(n))=0;
после исправления будет иметь вид
Код:
*(mass+rand()%n)=0;
если написано
random(2), то исправленная строка будет rand()%2
И все остальное так же.
MaTBeu вне форума Ответить с цитированием
Старый 19.12.2009, 20:50   #3
A93
Пользователь
 
Регистрация: 22.09.2009
Сообщений: 18
По умолчанию Рекомендации

Для лучшей читабельности программы.В динамических массивах можете пользоваться той же записью которой пользуетесь при составление обычного массива. Пример:
Код:
int main()
{
int x =5;
int *array= new int [x];
array[0]=5;
cout << array[0];
return 0;
}
A93 вне форума Ответить с цитированием
Старый 19.12.2009, 22:12   #4
Ueshua
 
Регистрация: 19.12.2009
Сообщений: 9
По умолчанию

Компилирую в visual c++6. Исправил функции, однако теперь выводит новую ошибку в строке
Код:
      *(mass+i)=pow((-1),rand()%2)*rand()%10;
Ошибка такая: '%' : illegal, left operand has type 'double'

Посоветуйте еще раз, что делать, пожалуйста.
Исправленный код:
Код:
#include <iostream.h>
#include <math.h>
#include <conio.h>
#include <stdlib.h>
#include<time.h>
double* massive(int n)
{
   double *mass;
   mass=new double[n];
   if (mass==NULL)
   {
     cout<<"No availiable memory";
     getch();
     return NULL;
   }
  return mass;
}
void input(double *mass,int n)
{
	for(int i=0;i<n;i++)
      do
        *(mass+i)=pow((-1),rand()%2)*rand()%10;
      while (*(mass+i)==0);
     *(mass+rand()%n)=0;
}
void print(double *mass,int n)
{
   for(int i=0;i<n;i++)
   {
   	cout.width(3);
      cout<<*(mass+i);
   }
   cout<<endl;
}
void sort(double *mass,int &n)
{
	for(int i=0;i<n;i++)
   {
   	if(*(mass+i)==0)
      {
      	n--;
         for (int j=i;j<n;j++)
         	*(mass+j)=*(mass+j+1);
      }
      if(*(mass+i)>0)
      {
         for (int j=i;j<n;j++)
         	if(*(mass+j)<0)
            {
            	*(mass+i)=*(mass+i)+*(mass+j);
               *(mass+j)=*(mass+i)-*(mass+j);
               *(mass+i)=*(mass+i)-*(mass+j);
            }
      }
   }
}
int main()
{
   srand(time(0));
   double* mass; int n=10,i;
   mass=massive(n);
   input(mass,n);
   print(mass,n);
   sort(mass,n);
   print(mass,n);
   getch();
   delete []mass;
   cout<<"Now you see how powerful and cute are dynamic massives!";
	getch();
   return 0;
}
Ueshua вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический массив Kiragaz Общие вопросы C/C++ 8 29.09.2009 22:30
динамический массив Cpluser Общие вопросы C/C++ 1 20.09.2009 18:17
Динамический массив Lemo Помощь студентам 5 16.09.2009 06:26
динамический массив Dimon Паскаль, Turbo Pascal, PascalABC.NET 3 21.03.2008 18:08
Динамический массив Mickle Общие вопросы Delphi 8 19.06.2007 06:45