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

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

Восстановить пароль Регистрация
 
b_d
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 105
03.02.2014, 23:24     Написать генератор фамилий #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
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     Написать генератор фамилий
Посмотрите здесь:

Написать программу, выполняющую вывод на дисплей фамилий и номеров групп для всех студентов, имеющих оценки 4 и 5 C++
C++ сортировка фамилий
C++ Написать генератор псевдослучайных чисел, равномерно распределенных на интервале [ 0., 0.5]
C++ Написать генератор случайных чисел.
Написать программу, сортирующую список фамилий студентов в группе. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mf909
96 / 12 / 3
Регистрация: 10.01.2014
Сообщений: 29
04.02.2014, 00:10     Написать генератор фамилий #2
При первой же итерации цикла, когда i=0, выражения bukvs[i-1] будут вызывать выход за границу массива.
b_d
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 105
04.02.2014, 08:07  [ТС]     Написать генератор фамилий #3
точняк. исправлю
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 246
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
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
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
0 / 0 / 0
Регистрация: 27.01.2014
Сообщений: 105
04.02.2014, 18:18  [ТС]     Написать генератор фамилий #7
круто, но всё равно попробую, может и слоги использую
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 18:26     Написать генератор фамилий
Еще ссылки по теме:

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

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

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

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