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

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

Войти
Регистрация
Восстановить пароль
 
b_d
4 / 2 / 0
Регистрация: 27.01.2014
Сообщений: 114
#1

Написать генератор фамилий - C++

03.02.2014, 23:24. Просмотров 594. Ответов 7
Метки нет (Все метки)

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

генератор
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
57
58
59
60
61
62
63
#include <iostream>
 
using namespace std;
 
string s;
int q,n;
 
int main()
 
{
    setlocale(0,"");
    srand(time(0));
    
    n=n=3+rand()%21;
    string *bukvs=new string[n];
    for(int i=0;i<n;i++)
    {
    q=rand()%33;
    if (q==1)bukvs[i]="а";
    if ((q==2)&&(bukvs[i-1]!="ъ"))bukvs[i]="б";
    if ((q==3)&&(bukvs[i-1]!="ъ"))bukvs[i]="в";
    if ((q==4)&&(bukvs[i-1]!="ъ"))bukvs[i]="г";
    if ((q==5)&&(bukvs[i-1]!="ъ"))bukvs[i]="д";
    if (q==6)bukvs[i]="е";
    if (q==7)bukvs[i]="ё";
    if ((q==8)&&(bukvs[i-1]!="ъ"))bukvs[i]="ж";
    if ((q==9)&&(bukvs[i-1]!="ъ"))bukvs[i]="з";
    if (q==10)bukvs[i]="и";
    if ((q==11)&&(i==n))bukvs[i]="й";
    if ((q==12)&&(bukvs[i-1]!="ъ"))bukvs[i]="к";
    if ((q==13)&&(bukvs[i-1]!="ъ"))bukvs[i]="л";
    if ((q==14)&&(bukvs[i-1]!="ъ"))bukvs[i]="м";
    if ((q==15)&&(bukvs[i-1]!="ъ"))bukvs[i]="н";
    if (q==16)bukvs[i]="о";
    if ((q==17)&&(bukvs[i-1]!="ъ"))bukvs[i]="п";
    if ((q==18)&&(bukvs[i-1]!="ъ"))bukvs[i]="р";
    if ((q==19)&&(bukvs[i-1]!="ъ"))bukvs[i]="с";
    if ((q==20)&&(bukvs[i-1]!="ъ"))bukvs[i]="т";
    if (q==21)bukvs[i]="у";
    if ((q==22)&&(bukvs[i-1]!="ъ"))bukvs[i]="ф";
    if ((q==23)&&(bukvs[i-1]!="ъ"))bukvs[i]="х";
    if ((q==24)&&(bukvs[i-1]!="ъ"))bukvs[i]="ц";
    if ((q==25)&&(bukvs[i-1]!="ъ"))bukvs[i]="ч";
    if ((q==26)&&(bukvs[i-1]!="ъ"))bukvs[i]="ш";
    if ((q==27)&&(bukvs[i-1]!="ъ"))bukvs[i]="щ";
    if ((q==28)&&((bukvs[i-1]=="б")||(bukvs[i-1]=="в")||(bukvs[i-1]=="г")||(bukvs[i-1]=="д")||(bukvs[i-1]=="ж")||(bukvs[i-1]=="з")||(bukvs[i-1]=="к")||(bukvs[i-1]=="л")||(bukvs[i-1]=="м")||(bukvs[i-1]=="н")||(bukvs[i-1]=="п")||(bukvs[i-1]=="р")||(bukvs[i-1]=="с")||(bukvs[i-1]=="т")||(bukvs[i-1]=="ф")||(bukvs[i-1]=="х")||(bukvs[i-1]=="ц")||(bukvs[i-1]=="ч")||(bukvs[i-1]=="ш")||(bukvs[i-1]=="щ")))bukvs[i]="ъ";
    if (q==29)bukvs[i]="ы";
    if (q==30)bukvs[i]="ь";
    if (q==31)bukvs[i]="э";
    if (q==32)bukvs[i]="ю";
    if (q==33)bukvs[i]="я";
    }
    
    for(int i=0;i<n;i++)
    {
    s=s+bukvs[i];
    }
    
    cout<<s<<endl;
    
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2014, 23:24     Написать генератор фамилий
Посмотрите здесь:

Генератор имён, фамилий и отчеств - C++
Нужна помощь в написании программы на c++ Программа должна из файла брать данные( к примеру есть текстовик с 10000 именами) и по...

Написать программу, сортирующую список фамилий студентов в группе. - C++
1)Дано слово из четного числа букв. Поменять местами первую букву со второй, третью – с четвертой и т.д. 2)Написать программу,...

Написать функцию, которая из двух введённых пользователем фамилий определяет, какая длиннее - C++
Доброй ночи. Очень прошу помочь написать программу. Требуется написать функцию, которая из двух введенных пользователем фамилий (введите...

Написать программу, выполняющую вывод на дисплей фамилий и номеров групп для всех студентов, имеющих оценки 4 и 5 - C++
Доброго времени суток! есть просьба... кому не трудно помогите!!!!!!! написать прогу.... Буду очень благодарен... Описать структуру с...

Написать генератор случайных чисел. - C++
Написать генератор случайных чисел. Нужен исходник с комментариями, чтобы разобраться. srand( time(NULL)); rand()%10; не знаю как...

Как написать генератор ключей? - C++
Программа должна генерировать случайные ключи. В формате: 0000-0000-0000-0000 (с цифрами и буквами) Подскажите, пожалуйста, как написать...

Как написать генератор ПСЧ - C++
Вот алгоритм создания ГПСЧ: Вход: генератором управляют два псевдослучайных входа. Один является 64-битным представлением текущих даты и...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mf909
96 / 12 / 3
Регистрация: 10.01.2014
Сообщений: 30
04.02.2014, 00:10     Написать генератор фамилий #2
При первой же итерации цикла, когда i=0, выражения bukvs[i-1] будут вызывать выход за границу массива.
b_d
4 / 2 / 0
Регистрация: 27.01.2014
Сообщений: 114
04.02.2014, 08:07  [ТС]     Написать генератор фамилий #3
точняк. исправлю
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
04.02.2014, 09:41     Написать генератор фамилий #4
b_d,
C++
1
2
q=rand()%33;
 if (q==33)bukvs[i]="я";
Условие не будет верно, при деление с остатком на 33, остаток никогда не будет равен 33... Исправьте
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
04.02.2014, 10:38     Написать генератор фамилий #5
А зачем столько проверок не проще ли сделать массив с алфавитом и просто обращаться по индексу?!
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,665
04.02.2014, 15:43     Написать генератор фамилий #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
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream>
#include <string>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
string generator_sloga() //возвращает только один случайный слог
{
  string slogi[]={
"НА",   "НУ",   "НО",   "НЫ",   "НИ",   "НЕ",   "НЯ",   "НЁ",   "НЮ",   "НЭ",   "НЬ",
"МА",   "МУ",   "МО",   "МЫ",   "МИ",   "МЕ",   "МЯ",   "МЁ",   "МЮ",   "МЭ",   "МЬ",
"ТА",   "ТУ",   "ТО",   "ТЫ"    "ТИ",   "ТЕ",   "ТЯ",   "ТЁ",   "ТЮ",   "ТЭ",   "ТЬ",
"КА",   "КУ",   "КО",   "КИ",   "КЕ",   "КЁ",   "КЭ",   "КЬ",   "ХА",   "ХУ",   "ХО",
"ХИ",   "ХЕ",   "ХЭ",   "ХЬ",   "БА",   "БУ",   "БО",   "БЫ",   "БИ",   "БЕ",   "БЯ",
"БЁ",   "БЮ",   "БЭ",   "БЬ",   "ВА",   "ВУ",   "ВО",   "ВЫ",   "ВИ",   "ВЕ",   "ВЯ",
"ВЁ",   "ВЮ",   "ВЭ",   "ВЬ",   "ГА",   "ГУ",   "ГО",   "ГИ",   "ГЕ",   "ГЁ",   "ГЭ",
"ГЬ",   "ДА",   "ДУ",   "ДО",   "ДЫ",   "ДИ",   "ДЕ",   "ДЯ",   "ДЁ",   "ДЮ",   "ДЭ",
"ДЬ",   "ЖА",   "ЖУ",   "ЖО",   "ЖИ",   "ЖЕ",   "ЖЁ",   "ЖЬ",   "ЗА",   "ЗУ",   "ЗО",
"ЗЫ",   "ЗИ",   "ЗЕ",   "ЗЯ",   "ЗЁ",   "ЗЮ",   "ЗЭ",   "ЗЬ",   "ЛА",   "ЛУ",   "ЛО",
"ЛЫ",   "ЛИ",   "ЛЕ",   "ЛЯ",   "ЛЁ",   "ЛЮ",   "ЛЭ",   "ЛЬ",   "ПА",   "ПУ",   "ПО",
"ПЫ",   "ПИ",   "ПЕ",   "ПЯ",   "ПЁ",   "ПЮ",   "ПЭ",   "ПЬ",   "РА",   "РУ",   "РО",
"РЫ",   "РИ",   "РЕ",   "РЯ",   "РЁ",   "РЮ",   "РЭ",   "РЬ",   "СА",   "СУ",   "СО",
"СЫ",   "СИ",   "СЕ",   "СЯ",   "СЁ",   "СЮ",   "СЭ",   "СЬ",   "ФА",   "ФУ",   "ФО",
"ФЫ",   "ФИ",   "ФЕ",   "ФЯ",   "ФЁ",   "ФЮ",   "ФЭ",   "ФЬ",   "ЦА",   "ЦУ",   "ЦО",
"ЦЫ",   "ЦИ",   "ЦЕ",   "ЧА",   "ЧУ",   "ЧО",   "ЧИ",   "ЧЕ",   "ЧЁ",   "ЧЬ",   "ША",
"ШУ",   "ШО",   "ШИ",   "ШЕ",   "ШЁ",   "ШЬ",   "ЩА",   "ЩУ",   "ЩО",   "ЩИ",   "ЩЕ",
"ЩЁ",   "ЩЬ",   "ЙА",   "ЙО",   "ЙИ",   "ЙЕ",   "ЙЮ",   "АМ",
"АН",   "УН",   "ОН",   "ЫН",   "ИН",   "ЕН",   "ЯН",   "НЁ",   "ЮН",   "ЭН",
"АМ",   "УМ",   "ОМ",   "ЫМ",   "ИМ",   "ЕМ",   "ЯМ",   "ЁМ",   "ЮМ",   "ЭМ",
"АТ",   "УТ",   "ОТ",   "ЫТ"    "ИТ",   "ЕТ",   "ЯТ",   "ЁТ",   "ЮТ",   "ЭТ",
"АК",   "УК",   "ОК",   "ИК",   "ЕК",   "ЁК",   "ЭК",   "АХ",   "УХ",   "ОХ",
"ИХ",   "ХЕ",   "ХЭ",   "ХЬ",   "БА",   "БУ",   "БО",   "БЫ",   "БИ",   "БЕ",   "ЯБ",
"ЁБ",   "ЮБ",   "ЭБ",   "ВА",   "УВ",   "ОВ",   "ЫВ",   "ИВ",   "ЕВ",   "ЯВ",
"ЁВ",   "ЮВ",   "ЭВ",   "ГА",   "УГ",   "ОГ",   "ИГ",   "ЕГ",   "ЁГ",   "ЭГ",
"АД",   "УД",   "ОД",   "ЫД",   "ИД",   "ЕД",   "ЯД",   "ЁД",   "ЮД",   "ЭД",
"АЖ",   "УЖ",   "ОЖ",   "ИЖ",   "ЕЖ",   "ЁЖ",   "АЗ",   "УЗ",   "ОЗ",
"ЫЗ",   "ИЗ",   "ЕЗ",   "ЯЗ",   "ЁЗ",   "ЮЗ",   "ЭЗ",   "АЛ",   "УЛ",   "ОЛ",
"ЫЛ",   "ИЛ",   "ЕЛ",   "ЯЛ",   "ЁЛ",   "ЮЛ",   "ЭЛ",   "АП",   "УП"    "ОП",
"ЫП",   "ИП",   "ЕП",   "ЯП",   "ЁП",   "ЮП",   "ЭП",   "АР",   "УР",   "ОР",
"ЫР",   "ИР",   "ЕР",   "ЯР",   "ЁР",   "ЮР",   "ЭР",   "АС",   "УС",   "ОС",
"ЫС",   "ИС",   "ЕС",   "ЯС",   "ЁС",   "ЮС",   "ЭС",   "АФ",   "УФ",   "ОФ",
"ЫФ",   "ИФ",   "ЕФ",   "ЯФ",   "ЁФ",   "ЮФ",   "ЭФ",   "АЦ",   "УЦ",   "ОЦ",
"ЦЫ",   "ЦИ",   "ЦЕ",   "ЧА",   "ЧУ",   "ЧО",   "ЧИ",   "ЧЕ",   "ЧЁ",   "ЧЬ",   "ША",
"УШ",   "ОШ",   "ИШ",   "ЕШ",   "ЁШ",   "АЩ",   "УЩ",   "ОЩ",   "ИЩ",   "ЕЩ",
"ЁЩ",   "АЙ",   "ОЙ",   "ИЙ",   "ЕЙ",   "ЮЙ",   "МА"
};
 
int len = sizeof(slogi)/sizeof(slogi[0]);
 
return slogi[rand()%len];
}
 
string sluchainiy_simbol() //возвращает случайно выбранный из заданного алфавита символ
{
    string bukwi="АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЫЭЮЯ";
    string s="";
    const int N=100;
    const int K=0; //Чем ближе к 100 - тем чаще длинее и тем трудновыговариваемее фамилии могут появиться
 
    int x = N-rand()%N+1;
    if (x<=K) s=bukwi[rand()%bukwi.size()-1];
 
    return s;
}
 
 
int main()
{
    setlocale(LC_ALL,"");
    srand(time(0));
 
 
    for (int j=0;j<25;j++){
    for (int i=0;i<rand()%5+1;i++){
    cout<<generator_sloga();
       for (int k=0;k<2;k++)  cout<<sluchainiy_simbol();
    }
    cout<<"\n";
    }
    return 0;
}

Не по теме:

случайный символ может появляться между слогами. Например чисто из слогов составилось бы какое-нибудь
"кукура"
но случайным символом можно разбавить это слово, например на "кукСурЧа" .

b_d
4 / 2 / 0
Регистрация: 27.01.2014
Сообщений: 114
04.02.2014, 18:18  [ТС]     Написать генератор фамилий #7
круто, но всё равно попробую, может и слоги использую
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 18:26     Написать генератор фамилий
Еще ссылки по теме:

Написать генератор акустического белого шума - C++
Здравствуйте! Хочу написать генератор акустического белого шума, но прежде хочу уточнить 1 вопрос. Предположем что генератор...

Как написать генератор случайных чисел? - C++
Помогите, пожалуйста, написать такой код! Добавлено через 8 минут Только нужно, чтобы можно было указать, в каких пределах числа...

Написать генератор случайных чисел, декрементирующий свои значения - C++
Доброго времени суток. Помогите написать код на С++, в котором: Генератор случайных чисел создаёт число от 0 до 100. Потом присваивает...

Написать генератор псевдослучайных чисел, равномерно распределенных на интервале [ 0., 0.5] - C++
Написать генератор псевдослучайных чисел, равномерно распределенных на интервале ( использовать rand()) Подсчитать частоты попадания в...

Написать простейший генератор тоновых сигналов, использую функцию Beep - C++
Нужно сделать простейший генератор тоновых сигналов, использую функцию Beep(). как сделать чтобы писк был непрерывен и можно было менять...


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

Или воспользуйтесь поиском по форуму:
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
04.02.2014, 18:26     Написать генератор фамилий #8
b_d, правильное решение, ибо в большинстве случаев получится не фамилия, а набор букв
Yandex
Объявления
04.02.2014, 18:26     Написать генератор фамилий
Ответ Создать тему
Опции темы

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