Форум программистов, компьютерный форум CyberForum.ru

rand + ошибки объявления массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Нотка
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 18
04.11.2010, 20:19     rand + ошибки объявления массива #1
Здравствуйте. У меня такое задание:
Используя датчик случайных чисел, заполнить элементы массива неповторяющимися числами.
Вот мой код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
srand((unsigned)time(NULL));
int i;
const int n;
cout<<"Vvedite n"<<'\n';
cin>>n;
int mas[n];
for (i=0;i<n;i++)
{
mas[i]=rand()%n;
cout<<"mas["<<i<<"]="<<mas[i]<<'\n';
}
return 0;
}
И вот мои ошибки, выводимые компилятором.
Код
1>e:\студенчество\информатика\4 лаба\5\5\5.cpp(12) : error C2057: требуется константное выражение
1>e:\студенчество\информатика\4 лаба\5\5\5.cpp(12) : error C2466: невозможно выделить память для массива постоянного нулевого размера
1>e:\студенчество\информатика\4 лаба\5\5\5.cpp(12) : error C2133: mas: неизвестный размер
Как их исправить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
04.11.2010, 20:25     rand + ошибки объявления массива #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
srand((unsigned)time(NULL));
int i;
int n, *mas;
cout<<"Vvedite n"<<'\n';
cin>>n;
mas = new int[n];
for (i=0;i<n;i++)
{
mas[i]=rand()%n;
cout<<"mas["<<i<<"]="<<mas[i]<<'\n';
}
delete[] mas;
return 0;
}
Надо юзать динамику.
Нотка
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 18
04.11.2010, 20:38  [ТС]     rand + ошибки объявления массива #3
asics, увы
C#
1
2
3
4
5
6
7
Лабораторная работа №4 (2 часа)
" Одномерные статические массивы"
 
Цель : получение навыков по созданию и работе с одномерными статическими массивами.  
 
1. Требуемая теоретическая подготовка
Определение и способы инициализации одномерного статического массива. Обработка элементов массива.

Немного поменяла код (убрала возможность вводить n)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
srand((unsigned)time(NULL));
int i;
const int n=20;
int mas[n];
for (i=0;i<n;i++)
{
mas[i]=rand()%n;
cout<<"mas["<<i<<"]="<<mas[i]<<'\n';
}
return 0;
}
Компилируется, но несмотря на srand((unsigned)time(NULL)); выводятся повторяющиеся числа.
Миниатюры
rand + ошибки объявления массива  
KuKu
 Аватар для KuKu
1538 / 1016 / 69
Регистрация: 17.04.2009
Сообщений: 2,946
04.11.2010, 20:44     rand + ошибки объявления массива #4
Цитата Сообщение от Нотка Посмотреть сообщение
Компилируется, но несмотря на srand((unsigned)time(NULL)); выводятся повторяющиеся числа.
А функция ранд вместе с сранд и не гарантируют, что числа не будут повторяться. Они выдает случайные числа, а то что бы не повторялись, уже вы должны отслеживать.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
04.11.2010, 20:46     rand + ошибки объявления массива #5
Нотка, ну само собой так числа будут повторяться (вернее могут). Вот Вам с неповторяющимися:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <cstdlib>
#include <ctime>
 
int main(){
    int * arr, size;
    std::cout << "Number of elements: ";
    std::cin >> size;
    arr = new int [ size ];
 
    srand(time(NULL));
 
    for ( int i = 0; i < size; ++i )
        arr[i] = rand() % size + size * i;
 
    std::cout << size << " unique random numbers:" << std::endl;
    for ( int i = 0; i < size; ++i )
        std::cout << arr[i] << ' ';
    std::cout << std::endl;
 
    delete [] arr;
    system("pause");
 
    return 0;
}
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
04.11.2010, 21:02     rand + ошибки объявления массива #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <algorithm>
 
int main(){
        int * arr, size;
        std::cout << "Number of elements: ";
        std::cin >> size;
        arr = new int [ size ];
 
        srand(time(NULL));
 
        for ( int i = 0; i < size; ++i )
                arr[i] = i;
 
        for ( int i = 0; i < size; ++i )
            std::cout<<arr[i]<<" ";
 
        std::random_shuffle(arr,arr+size);
 
        std::cout << size << "Unique random numbers:" << std::endl;
        for ( int i = 0; i < size; ++i )
                std::cout << arr[i] << ' ';
        std::cout << std::endl;
 
        delete [] arr;
        system("pause");
 
        return 0;
}
Yandex
Объявления
04.11.2010, 21:02     rand + ошибки объявления массива
Ответ Создать тему
Опции темы

Текущее время: 00:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru