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

Генерация массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
31.10.2012, 14:55     Генерация массива #1
Что то не создает массив.
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
// lab1.cpp: определяет точку входа для консольного приложения.и еще вопрос правильно ли я прописал чтобы рандомно создавались только 5тизначные числы
//
 
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    const int n= 47;
    const int t=71;
    int mas1[2][n];
    int mas2[2][t];
    srand(static_cast<unsigned>(time(NULL)));
    for(int i=0; i<1; ++i)
        for(int j=0; j<n; ++j)
            mas1[i][j] = rand()%90001+10000;
    for(int i=0; i<1; ++i)
        for(int j=0; j<n; ++j)
            printf("Исходный массив %i", mas1[i][j]);
 
 
    return 0;
и плюс еще ругается когда прописываешь в выводе массива вместе printf cout. Пишет что идентификатор cout не определен
C++
1
2
3
for(int i=0; i<1; ++i)
        for(int j=0; j<n; ++j)
            cout<<mas1[i][j];
Добавлено через 5 минут
и еще вопрос правильно ли я прописал то что бы создавались только 5ти значные числы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2012, 14:55     Генерация массива
Посмотрите здесь:

Генерация чисел C++
Генерация чисел C++
Генерация ПСП C++
Генерация звука C++
Генерация массива всех перестановок из n элементов. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
31.10.2012, 15:22     Генерация массива #2
ругается на cout, потому что не указано пространство имен.пишите std::cout

Можно вопрос - что это за строка такая длинная - srand(static_cast<unsigned>(time(NULL)));
В чем различия со строкой srand(time(0));?
получение 5-значных псевдослучайных чисел правильно написали.
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
31.10.2012, 15:31  [ТС]     Генерация массива #3
вот что я нашел по этому
2) иногда в вызове srand пишут srand(static_cast<unsigned>(time(NU LL))); для чего нужен static_cast<unsigned>?

Вообще оно ни на что не влияет. Преобразование типов выполняются автоматически. Просто функция srand объявлена как

void srand(unsigned int n);
Просто до того как было без этого у меня выходило предупреждение как вставил это предупреждение пропало

Добавлено через 3 минуты
проблема с cout пропала. как сделать так чтобы после запуска не закрывалось окно?

Добавлено через 1 минуту
сам решил поставив в конце getch();
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
31.10.2012, 15:36     Генерация массива #4
чтобы прога не зкрывалась добавьте в самый конец программы перед return 0 одну из следующих строк:
system("pause"); - хороший вариант
getch(); - тоже неплохой вариант
std::cin.get() - изза некоторых особенностей эту функцию нужно иногда вызывать 2 раза
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
31.10.2012, 16:12  [ТС]     Генерация массива #5
спасибо! еще одна проблема, надо проверить чтобы сгенерированные элементы массива был униникальными. и если возникало повторение чтобы функция рандом вызывалось еще раз и снова проверялось условие. и так пока все элементы не будут уникальными

Добавлено через 28 минут
Вот что то получилось правильно ли?
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
32
33
34
35
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    const int n= 47;
    const int t=71;
    int mas1[2][n];
    int mas2[2][t];
    int c=0;
    srand(static_cast<unsigned>(time(NULL)));
    mas1[0][0] = rand()%90001+10000;
    for(int i=0; i<1; ++i)
        for(int j=1; j<n; ++j)
        {
            mas1[i][j] = rand()%90001+10000;
            for(int k=0; k<i; ++k)
                for(int m=0; m<j; ++m)
                    if(mas1[i][j]==mas1[i-k][j-m])
                    {
                        mas1[i][j] = rand()%90001+10000;
                        c++;
                    }
        }
        if (c>0) std::cout << "try again\n";
        std::cout<<"Ishodnii massiv"<<'\n';
    for(int i=0; i<1; ++i)
        for(int j=0; j<n; ++j)
            std::cout<<i<<","<<j<<"   "<<mas1[i][j]<<'\n';
    _getch();
    return 0;
}
bootleanC
 Аватар для bootleanC
6 / 6 / 1
Регистрация: 28.04.2009
Сообщений: 106
01.11.2012, 17:31  [ТС]     Генерация массива #6
В общем сделал задание. Если кому надо то вот полный текст задания
18. Сгенерировать 47 пятизначных неповторяющихся чисел (элементов).
Вывести их на экран.
Построить хеш-таблицу, используя:
хеш-функцию – сумма двух первых и двух последних цифр элемента,
метод устранения коллизий – открытая адресация с линейным опробыванием.
и сам код программы
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    const int n= 47;
    const int t=71;
    int mas1[n];
    int mas2[t];
    int c;
    for(int i=0;i<t;++i)
        mas2[i]=0;
    srand(static_cast<unsigned>(time(NULL)));
    mas1[0] = rand()%90001+10000;
    for(int i=1; i<n; ++i)
        {
            mas1[i] = rand()%90001+10000;
            for(int j=1; j<=i; ++j)
                topr:if(mas1[i]==mas1[i-j])
                {
                    mas1[i] = rand()%90001+10000;
                    goto topr;
                }
        }
        std::cout<<"Ishodnii massiv"<<'\n';
    for(int i=0; i<n; ++i)
            std::cout<<i<<"   "<<mas1[i]<<'\n';
    int j;
    int k=0;
    for(int i=0; i<n;++i)
    {
        c=0;
        j= ((mas1[i]/1000)+(mas1[i]%100))%t;
        int j0=j;
        top:if(mas2[j]==0)
            {mas2[j]=mas1[i];}
        else
        {
            c++;
            k++;
            j=(j0+c)%t;
            goto top;
            }
    }
    std::cout<<"Hesh tablica"<<'\n';
    for(int i=0; i<t; ++i)
        std::cout<<i<<"   "<<mas2[i]<<'\n';
    std::cout<<"Kol-vo kolizii: "<<k<<'\n';
    double m=(n+k)*1.0/n*1.0;
    std::cout<<"Otnoshenie kolizii: "<<m<<'\n';
    _getch();
    return 0;
}
Yandex
Объявления
01.11.2012, 17:31     Генерация массива
Ответ Создать тему
Опции темы

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