Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[C++(Dos)] Одномерный массив

23K
23 мая 2007 года
S!nner
10 / / 16.05.2007
Требуется создать целочисленный не упорядоченный одномерный массив не содержащий одинаковых элементов (значения элементов от 1 до n)
Как сделать?
2.0K
23 мая 2007 года
BroKeR
163 / / 04.05.2006
легко,
Код:
#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
   int *p;
   int n;
   cout<<"Please,enter n-> ";
   cin>>n;
   p=new int[n];
   srand(n);
   for (int i=0;i<n;++i)
      p=rand();
   delete[] p;
   return 0;
}

при заполнении массива проверяешь,нет ли такого элемента в массиве если есть,то присваиваешь новое и снова проверяешь.
7.8K
23 мая 2007 года
Hrew
185 / / 23.04.2007
Цитата: BroKeR

при заполнении массива проверяешь,нет ли такого элемента в массиве если есть,то присваиваешь новое и снова проверяешь.


Это ж сколько придется ждать от rand'a нужного значения, особенно если n немаленькое? Вначале-то проблем не будет, а вот для элементов n-2, n-1...

Можно создать дополнительный массив с допустимыми значениями (от 1 до n). Точнее не массив, а вектор. Тогда генерируем рандомное значение индекса элемента вектора, присваиваем значение этого элемента элементу массива и удаляем уже использованный элемент вектора.

23K
23 мая 2007 года
S!nner
10 / / 16.05.2007
Цитата: BroKeR

Код:
#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
   int *p;
   int n;
   cout<<"Please,enter n-> ";
   cin>>n;
   p=new int[n];
   srand(n);
   for (int i=0;i<n;++i)
      p=rand();
   delete[] p;
   return 0;
}


Попробовал этот код, на выходе массив получается из очень больших чисел, которые явно не принадлежат заданному промежутку

7.8K
23 мая 2007 года
Hrew
185 / / 23.04.2007
Цитата: S!nner
Попробовал этот код, на выходе массив получается из очень больших чисел, которые явно не принадлежат заданному промежутку



потому что нужно писать не p=rand(), а

 
Код:
p=rand()%n;


все же имхо лучше вариант с вектором

2.0K
23 мая 2007 года
BroKeR
163 / / 04.05.2006
да вариант с вектором действительно лучше.
320
24 мая 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: S!nner
Требуется создать целочисленный не упорядоченный одномерный массив не содержащий одинаковых элементов (значения элементов от 1 до n)
Как сделать?


Если я правильно понял условие( ? ),необходимо,чтоб массив содержал
все значения до выбранного предела(n).Т.е. если n = 10,то массив
должен содержать элементы от 1 до 10(1,2,3...,9,10) включительно.
Вводим с клавиатуры n и создаем 2 массива один заполняем
числами от 1 до n(в цикле),второй - случайными числами.Наш массив
не содержит одинаковых элементов,но он упорядочен.Надо разбросать
элементы.Т.е.вся задача сводится к разбросу элементов массива.
Используем сортировку и сортируем вспомагательный массив,а заодно и переставляем элементы нашего массива.

Код:
#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;
void BSort(int mass[],int arr[], int size);
int _tmain(int argc, _TCHAR* argv[])
{
    srand(time(0));
    cout<<"Input n > 1"<<endl;
    int n = 0;
    cin>>n;
    int *mass = new int[n+1];
    for(int i = 1;i <= n;++i)
        mass = rand() % 100;
    cout<<endl;
    int *arr = new int[n+1];
    for(int i = 1;i <= n;++i)
        arr = i;
    BSort(mass,arr,n+1);
    cout<<"\tArray"<<"\n\n";
    for(int i = 1;i <= n;++i)
        cout<<arr<<' ';
    cout<<endl;
    delete[] mass;
    delete[] arr;
    return 0;
}
void BSort(int mass[],int arr[], int size)
{
    bool flag = true;      
    int i, j;
    int temp,temp1;
    for (j = 1; ; j++)
    {  
               for(i = 0; i < size - j; i++)       
                  if (mass > mass[i + 1])
         {
        temp1 = mass;
        temp = arr;
        mass = mass[i + 1];
        arr = arr[i + 1];
        mass[i + 1] = temp1;
        arr[i + 1] = temp;
        flag = false;
         }
            if(flag)       
                          break;   
        flag = true;
          }
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог