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

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

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

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

03.02.2014, 23:24. Просмотров 560. Ответов 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     Написать генератор фамилий
Посмотрите здесь:

Написать программу, выполняющую вывод на дисплей фамилий и номеров групп для всех студентов, имеющих оценки 4 и 5 C++
C++ сортировка фамилий
C++ Написать генератор псевдослучайных чисел, равномерно распределенных на интервале [ 0., 0.5]
C++ Написать генератор случайных чисел.
Написать программу, сортирующую список фамилий студентов в группе. C++
C++ Как написать генератор чисел без использования стандартных функций?
C++ Написать простейший генератор тоновых сигналов, использую функцию Beep
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
1088 / 498 / 102
Регистрация: 02.08.2011
Сообщений: 2,479
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++ Сортировка фамилий по алфавиту
Написать генератор случайных чисел, декрементирующий свои значения C++
C++ Написать функцию, которая из двух введённых пользователем фамилий определяет, какая длиннее
Генератор имён, фамилий и отчеств C++
Как написать генератор случайных чисел? C++

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

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

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