Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
#1

Текстовый рандом, не могу выбрать лучший способ - C++

25.08.2013, 20:46. Просмотров 916. Ответов 12
Метки нет (Все метки)

Добрый день, уважаемые программисты.

Вот возник какой вопрос. Мне нужен текстовый рандом, консольный для начала.
По скольку с подключением БД у меня большая беда, я решила обойти этот момент и попробовать что-то другое.

например, можно было бы сразу сделать массивчик с текстом, и при выпадении рандомного числа -- вызываем ячейку. но возникла проблема с большим объёмом текста, т.е., массив получается длинной, длинной полоской. Хотелось бы сделать это лучше.

какие могут быть варианты?

Файл? Хорошо, а как хранить тогда там? построчно? Тогда делать вектор или массив динамический? У динамического потом придётся ещё отслеживать длину, ладно, это вроде бы легко.

Есть ещё варианты?


желательно, чем проще, тем лучше. Спасибо!

Добавлено через 1 минуту
****

А, и вот ещё вопрос.

Если бы текстовый рандом был их нескольких составляющих, и он бы использовал БД, то какая нужна БД? Например, у меня есть 10 имён, 10 фамилий и 10 отчеств. Нужно 3 таблицы в БД или 1 таблицу и 3 колонки в ней? Потому что суть задачи в том, что должно быть не 10 ФИО, а 1000 ФИО.

Добавлено через 6 часов 4 минуты
???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2013, 20:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Текстовый рандом, не могу выбрать лучший способ (C++):

Дать выбрать пользователю способ ввода данных в массив - C++
Дать выбрать пользователю способ ввода данных в массив (ручной или случайный автоматический) и создать массив согласно выбранному условию ...

Какой способ хранения матрицы выбрать, если требуется делать много перестановок элементов? - C++
Здравствуйте! У меня было задание, написать такую программу, которой надо сделать циклический сдвиг в двумерном динамическом массиве по...

не могу выбрать способ изменения файла - Assembler
помогите выбрать как изменить файл: надо дописать в начало строки ее номер, но как - не знаю. Либо читать весь файл и потом править, либо...

Лучший способ перебора - PHP
Не знал как назвать тему. В общем проблема в следующем. Есть 20-25 массивов по 10-30 элементами. Приведу пример с меньшим количеством...

Лучший способ доступа в инет - Сети
Подскажите пожалста, какой способ доступа в инет лучше(скорость/деньги). Что нужно купить для этого?

.NET 4.x Лучший способ сохранения настроек - C#
Какой? :) Есть: - настройки окна и видимости контролов - настройки пользователя по таблицам (колонки, видимость, имена хедэров) -...

12
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
25.08.2013, 20:59 #2
Цитата Сообщение от Nullik Посмотреть сообщение
Тогда делать вектор или массив динамический?
в c++ уже готовый вектор есть std::vector<>

Не по теме:

а если честно, то вообще непонятно что надо сделать

0
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
25.08.2013, 21:03 #3
Цитата Сообщение от Nullik Посмотреть сообщение
А, и вот ещё вопрос.
Если бы текстовый рандом был их нескольких составляющих, и он бы использовал БД, то какая нужна БД? Например, у меня есть 10 имён, 10 фамилий и 10 отчеств. Нужно 3 таблицы в БД или 1 таблицу и 3 колонки в ней? Потому что суть задачи в том, что должно быть не 10 ФИО, а 1000 ФИО.
1 база, с 1-ной таблицей, и с разными полями.
1
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
25.08.2013, 21:33  [ТС] #4
Цитата Сообщение от BigLow Посмотреть сообщение
в c++ уже готовый вектор есть std::vector<>

Не по теме:

а если честно, то вообще непонятно что надо сделать

да я знаю что такое вектор и массив, просто если делать массив, то прописывая его элементы получается длинная строка.

например, мне надо сделать массив из элементов:

а сейчас будет птичка 1
а сейчас будет птичка 2
.... с 3 по 999 ....
а сейчас будет птичка 1000

-- и мне это перечислять в массиве?

Можно ли это как-то сократить, именно записи в массиве -- да, например, чтением через файл, а ещё как-нибудь?

А можно ли записать в массиве по построчно, или только в одну строчку?

пытаюсь сделать текстовый рандом но не понимаю, как это можно сделать лучше в качестве кода.
0
Nekto
342 / 287 / 10
Регистрация: 23.03.2012
Сообщений: 838
25.08.2013, 21:38 #5
Цитата Сообщение от Nullik Посмотреть сообщение
да я знаю что такое вектор и массив, просто если делать массив, то прописывая его элементы получается длинная строка.

например, мне надо сделать массив из элементов:

а сейчас будет птичка 1
а сейчас будет птичка 2
.... с 3 по 999 ....
а сейчас будет птичка 1000

-- и мне это перечислять в массиве?

Можно ли это как-то сократить, именно записи в массиве -- да, например, чтением через файл, а ещё как-нибудь?

А можно ли записать в массиве по построчно, или только в одну строчку?

пытаюсь сделать текстовый рандом но не понимаю, как это можно сделать лучше в качестве кода.
Что рандомно будет браться? В указанном случае
C++
1
std::string result = "а сейчас будет птичка "+ std::to_string(rand()%1000+1);
0
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
26.08.2013, 08:43  [ТС] #6
Любая из строчек с птичкой.
0
SatanaXIII
Супер-модератор
Эксперт С++
5618 / 2653 / 246
Регистрация: 01.11.2011
Сообщений: 6,549
Завершенные тесты: 1
26.08.2013, 09:39 #7
Цитата Сообщение от Bend3r Посмотреть сообщение
1 база, с 1-ной таблицей, и с разными полями.
Зависит от цели: если, к примеру, у нас задача просто сохранить фио десяти человек, тогда пойдет и одна таблица. Но если это будет какой-то список различных имен, фамилий и отчеств, тогда три - ведь может же быть несколько человек с разными именами, но одинаковой фамилией, или отчеством. Неполный тезки.

Поясните пожалуйста вот этот вот термин:
Цитата Сообщение от Nullik Посмотреть сообщение
текстовый рандом
0
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
26.08.2013, 10:12  [ТС] #8
ну, в смысле, суть программы такая:

есть например массив с каким-то длинным текстом в каждой ячейке.
И мне нужно, чтобы эта ячейка рандомно выпадала. т.е., допустим у нас есть заготовка фразы: "В прошлом тебя звали " и варианты: Петя, Даша, Глаша, Дуб. Вот, чтобы это был рандом из 4 элементов к готовому шаблону.ъИ, естественно, рандом будет в числах (номера ячеек).

Но предположим такую ситуацию, что мне нужно хранить больше, чем 4 элемента. И длина этих элементов 200-250 символов в каждом. Как мне лучше всего хранить данные? Есть вариант проще\лучше, чтобы не использовать использовать БД и чтобы не писать в одну строчку в массиве?

Про БД.

Допустим, у меня есть 3 имени, 3 фамили и 3 отчества, например: Даша, Маша, Глаша. Синичкина, Лисичкина, Сестричкина. Петровна, Ивановна, Фёдоровна.

Сколько всего может быть различных комбинаций? -- 27.
Так вот, но хранить же надо всего 9, причём 3 элемента в 3 группах.

так как мне это хранить в БД? 1 таблица и 3 колонки или 3 таблицы с 1 колонкой?

И ещё -- связь между этими таблицами надо устанавливать в БД? или они будут как отдельные?
0
daslex
1283 / 527 / 109
Регистрация: 02.08.2011
Сообщений: 2,749
26.08.2013, 15:42 #9
Структура
Имя
Фамилия
Отчество

Массив структур
0
SatanaXIII
Супер-модератор
Эксперт С++
5618 / 2653 / 246
Регистрация: 01.11.2011
Сообщений: 6,549
Завершенные тесты: 1
26.08.2013, 16:05 #10
daslex,
Цитата Сообщение от Nullik Посмотреть сообщение
но хранить же надо всего 9, причём 3 элемента в 3 группах
Тогда уж три массива и все. Но ТС хочет рассмотреть еще какие-либо варианты.

Цитата Сообщение от Nullik Посмотреть сообщение
так как мне это хранить в БД? 1 таблица и 3 колонки или 3 таблицы с 1 колонкой?
Лучше три таблицы с одной колонкой. Связь - многие ко многим.

Цитата Сообщение от Nullik Посмотреть сообщение
И ещё -- связь между этими таблицами надо устанавливать в БД? или они будут как отдельные?
А каким образом вы планируете устанавливать связь? Какая субд? Не Microsoft Access ли?
1
san92der
14 / 14 / 3
Регистрация: 27.10.2012
Сообщений: 109
26.08.2013, 17:37 #11
Можно попробовать вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
 
using namespace std;
 
int main(int argc,char** argv) {
 
    string line;
    vector<string> lines;
    ifstream file("MyFile.txt");
   
    
    while (getline(file, line)) {
            lines.push_back(line);
    }
 
           file.close();
    cout<<lines[rand()%lines.size()];
 
    system ("pause");
}
Создаешь вектор строк, на каждую строку вектора - строка файла. Потом через рандом и размер вектора можешь взять случайную строку файла.. Как-то так)
1
Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 300
Завершенные тесты: 1
26.08.2013, 18:02  [ТС] #12
SatanaXIII

Но ТС хочет рассмотреть еще какие-либо варианты.
всё верно -- рассмотреть варианты "какими можно", а там уже сделать "каким возможно".
Сейчас склоняюсь в сторону: бацаю файлик txt, из него буду построчно считывать "элементы массива". Создаю динамические: массив и рандом_число. Т.е., если я вдруг что-то изменю в файле, в самой программе это не изменится.

В этом случае я 100% смогу сделать ехе. Я не знаю как файлы подключать в виндовс форм.
Как?
Не Microsoft Access ли?
ага


san92der , пока дошла до Вашего поста (он на др. странице), уже напсиала примерно такой же алгоритм в словах. Спасибо!)))

подскажите -- как файл подключить в форме? Где это подключение прописывать надо?
0
san92der
14 / 14 / 3
Регистрация: 27.10.2012
Сообщений: 109
26.08.2013, 18:12 #13
Обновленный комментариями код. Все, что нужно для работы с файлом тут уже есть:
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
#include <fstream>
#include <iostream>
#include <vector>
#include <string>
 
using namespace std;
 
int main(int argc,char** argv) {
 
    string line;
    vector<string> lines;
    ifstream file("MyFile.txt");//создается поток типа ifstream, т.е. файл можно только прочитать
                                      //и открываем файл
   
    
    while (getline(file, line)) { //функция getline() будет построчно считывать по одной строке из файла
            lines.push_back(line);//и каждую новую строку помешать в вектор
    }
 
    file.close();//закрытие файла
    cout<<lines[rand()%lines.size()];
 
    system ("pause");
}
Про файловые потоки можно почитать тут: http://programmersclub.ru/34/
1
26.08.2013, 18:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2013, 18:12
Привет! Вот еще темы с ответами:

Лучший способ нахождения 3-х наибольших элементов - Pascal
Допустим у нас есть одномерный массив. Как найти 3 наибольших элемента? Допустим есть массив: 8 3 5 7 5 6 7 То на экран нужно...

Лучший способ изучения Ruby и RoR - Ruby
Подскажите, с чем можно компоновать Руби и Рельсы для веб-дева? Стоит ли придумывать какие-то задачи для себя на Руби, совмещая это с BDD?...

Лучший способ проверки поля на число - JavaScript
Какой самый оптимальный способ? Использовать регулярные выражения не желательно,поскольку они сильно влияют на производительность. ...

Лучший способ организации поиска по сайту. - C# ASP.NET
Видел много способов организации поиска по ASP сайту. Кто-нибудь кто эту проблему уже решал может подсказать какой способ наилучший?...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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