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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Нотка
0 / 0 / 0
Регистрация: 14.10.2010
Сообщений: 18
#1

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

04.11.2010, 20:19. Просмотров 1184. Ответов 5
Метки нет (Все метки)

Здравствуйте. У меня такое задание:
Используя датчик случайных чисел, заполнить элементы массива неповторяющимися числами.
Вот мой код.
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: неизвестный размер
Как их исправить?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2010, 20:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос rand + ошибки объявления массива (C++):

Ошибки объявления - C++
Stack.h #pragma once class Stack { public: void push (StackPtr *,int); int pop(StackPtr*); int isEmpty(StackPtr);

Исправить ошибки при работе с функцией rand - C++
Он просто выводит максимальное число вместо того чтобы выводить рандомное или я что то не так делаю? Ознакомьтесь с правилами форума. ...

Объявления массива. - C++
Как увеличить количество переменных в массиве?

Инициализация массива после объявления - C++
Привет народ, нужна ваша помощь. Допустим у меня есть класс с закрытым полем-массивом: //someClass.h class someClass{ int arr;...

Объяснить строку объявления массива - C++
Ньюанс int* array = new int; на С/C++ Пришлость мне недавно C# код в почти голый C(C++) переписывать. Как-то прощелкал и след....

Функция объявления двумерного массива - C++
Данный код - объявляет двумерный массив arr. Как из этого куска кода сделать функцию? Передаваемые параметры как мне кажется n и m, а...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
04.11.2010, 20:25 #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  [ТС] #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
1557 / 1035 / 77
Регистрация: 17.04.2009
Сообщений: 2,981
04.11.2010, 20:44 #4
Цитата Сообщение от Нотка Посмотреть сообщение
Компилируется, но несмотря на srand((unsigned)time(NULL)); выводятся повторяющиеся числа.
А функция ранд вместе с сранд и не гарантируют, что числа не будут повторяться. Они выдает случайные числа, а то что бы не повторялись, уже вы должны отслеживать.
easybudda
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,598
04.11.2010, 20:46 #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
ниначмуроФ
834 / 518 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
04.11.2010, 21:02 #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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2010, 21:02
Привет! Вот еще темы с ответами:

Массивы: функция rand() и размер массива. Совместимости - C++
Здравствуйте уважаемые программисты! Всех с праздником!) В общем переписываю одну и ту же программу который раз, ну чуть модифицирую, и...

Нужно сгенерировать элементы массива случайным образом с помощью функции rand - C++
Нужно сгенерировать элементы случайным образом с помощью функции rand. Определить индексы максимального элемента матрицы. Вычислить...

заполнение массива через rand и вывод на экран через указатели - C++
Учитель задал заполнить массивы и случайными числами и вывезти на экран через указатели, через функцию rand выводит как вы понимаете одни...

объявления - C++
в чем отличие такого определения float var = 1.f; от такого float var = 1.0f;


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.11.2010, 21:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru