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

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

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

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

03.02.2014, 23:24. Просмотров 602. Ответов 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++
Нужна помощь в написании программы на c++ Программа должна из файла брать данные( к примеру есть текстовик с 10000 именами) и по...

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
55 / 48 / 1
Регистрация: 31.10.2013
Сообщений: 161
04.02.2014, 10:38 #5
А зачем столько проверок не проще ли сделать массив с алфавитом и просто обращаться по индексу?!
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,668
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
круто, но всё равно попробую, может и слоги использую
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
04.02.2014, 18:26 #8
b_d, правильное решение, ибо в большинстве случаев получится не фамилия, а набор букв
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 18:26
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.02.2014, 18:26
Ответ Создать тему
Опции темы

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