Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
3 / 3 / 0
Регистрация: 07.12.2017
Сообщений: 584

Выдать на экран людей с одинаковыми отчествами

30.09.2018, 13:31. Показов 1832. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста!
Структура есть, а вот это не пойму как выводить
выдать на экран людей с одинаковыми отчествами (Александрович и Александровна - одно и тоже)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.09.2018, 13:31
Ответы с готовыми решениями:

Посчитать людей с одинаковыми именами
Имеется список: в нулевом индексе подсписков - имена в первом индексе - возраст lst=,,,,,] необходимо посчитать...

Найти в справочнике людей с одинаковыми фамилиями
написать программу , которая в заданном месте ищет всех людей с одинаковыми фамилиями

Определить количество людей с одинаковыми фамилиями, проживающих на одной улице
Здравствуйте помогите сформировать запрос, по которому --определить количество людей с одинаковыми фамилиями проживающими на одной...

20
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
30.09.2018, 13:37
a_lar, ну так, давай свой код. Будем посмотреть...
По поводу отчеств, как вариант: сравнивать строки не полностью, а до длины строки минус 2 (без -ич да -на)
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
30.09.2018, 13:38
a_lar, берешь отчества, отбрасываешь у них суффиксы, сравниваешь. Какие суффиксы присущи мужским, а какие женским отчествам, можно найти в интернете.
0
3 / 3 / 0
Регистрация: 07.12.2017
Сообщений: 584
30.09.2018, 13:44  [ТС]
liv, liv,
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
#include <vcl.h>
#include <stdlib.h>
#include <conio.h>
#include<iostream.h>
#include <stdio.h>
struct  sotrydniki {
char famil[60];
    char name[60];
    char otchestvo[60];
    int tlf;
    
   string pol;
};
int main() {
    int structSize;
 
    cout << "sotryd na firme?" << endl;
    cin >> structSize;
 
     sotrydniki *t = new  sotrydniki[structSize];
     {
         for (int i = 0; i<structSize; i++) {
        cout << "vvod inform o cheloveke \t" << endl;
         cout << "familia: "; cin >> (t + i)->famil;
 cout << "name: "; cin >> (t + i)->name;
  cout << "otchestvo: "; cin >> (t + i)->otchestvo;
        cout << "pol: "; cin >> (t + i)->pol;
        cout << "teleph :"; cin >> (t + i)->tlf;
        cout << endl;
    }
getch();
return(0);
 
 }
 
 
 
//---------------------------------------------------------------------------
а дальше вот совсем ни в какую

Добавлено через 1 минуту
nonedark2008, не могу вообще найти может поможете?
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
30.09.2018, 13:52
a_lar, чего искать-то? Например, Википедия говорит:
В современном русском языке отчество образуется двумя способами:

Отчества, образованные от мужских имён второго склонения, образуются добавлением к основе суффиксов -ович/-овна, -евич/-евна: Роман — Романович, Николай — Николаевич; при этом имена, оканчивающиеся на -ий могут менять его на -ь-: Виталий — Витальевич; но: Дмитрий — Дмитриевич.
Отчества мужчин, образованные от мужских имён первого склонения, образуются добавлением к основе суффикса -ич или -ович: Кузьма — Кузьмич , Лука — Лукич, Никита — Никитич (вариант — Никитович), Иона — Ионович.
Отчества женщин, образованные от мужских имён первого склонения, образуются добавлением к основе суффикса -ична, если окончание было безударным, и -инична, если ударение падало на окончание: Ники́та — Никитична (вариант — Никитовна), но Лука́ — Лукинична.
Однако Иона — Ионовна.
Проработайте, закодируйте и вся любовь...
0
3 / 3 / 0
Регистрация: 07.12.2017
Сообщений: 584
30.09.2018, 13:53  [ТС]
liv, понятно "очень" информативно
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
30.09.2018, 13:56
Было сказано:
Цитата Сообщение от a_lar Посмотреть сообщение
не могу вообще найти
Что не так?
0
3 / 3 / 0
Регистрация: 07.12.2017
Сообщений: 584
30.09.2018, 13:57  [ТС]
liv, я не понимаю как сделать эту программу с суффиксами
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
30.09.2018, 14:25
a_lar, ну так нечего возмущаться! А надо говорить конкретно, в чем проблема!
Алгоритм такой:
Выпишите из приведенной цитаты все суффиксы мужских и женских отчеств. Создайте из них два массива.
Поиск делаем в два вложенных цикла:
внешний - от первой структуры до предпоследней, внутренний - от следующей из внешнего цикла до последней.
Во внешнем и во внутреннем цикле для каждого отчества делаем следующее:
определяем суффикс (пробегая по обоим массивам). Для этого отталкиваемся от длин строк отчества и очередного суффикса. (Сравниваем "хвост" отчества, начиная с индекса, равного длине отчества минус длина очередного суффикса, и этот самый суффикс)
Если не нашли суффикс, значит будем сравнивать отчество полностью.
Осталось сравнить отчества без учета длины суффиксов.

Понятно изложил? Пробуйте! Пишите сюда, подправим, если что...
0
3 / 3 / 0
Регистрация: 07.12.2017
Сообщений: 584
30.09.2018, 14:33  [ТС]
liv, совсем ничего вообще не понятно..............
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
30.09.2018, 14:38
a_lar, для начала выпишите два списка суффиксов мужских и женских отчеств
0
3 / 3 / 0
Регистрация: 07.12.2017
Сообщений: 584
30.09.2018, 14:44  [ТС]
liv,
C++
1
2
3
4
5
6
7
8
 int ovich;
 int ovna;
 int evich;
 int evichna;
    cin>>ovich;
    cin>>ovna;
    cin>>evich;
    cin>>evichna;
оно?
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
30.09.2018, 14:48
a_lar, нет
Надо создать массив строк суффиксов, одна из них, например, "ович"
Не надо ничего вводить... Берем из Вики. В программе будут два готовых массива строк.
0
3 / 3 / 0
Регистрация: 07.12.2017
Сообщений: 584
30.09.2018, 14:50  [ТС]
liv, может лучше с кодом поможете? я словами не понимаю.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
30.09.2018, 14:53
a_lar, не сегодня... Может завтра. Пока пробуйте самостоятельно.
0
3 / 3 / 0
Регистрация: 07.12.2017
Сообщений: 584
30.09.2018, 14:56  [ТС]
liv, мне сдавать нужно завтра. -_-
если элементарно просишь помощи, а тут так отказывают нагло. ну что ж.
примеров найти я не могу.
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
30.09.2018, 15:13
a_lar, в условии не сказано, нужно ли учитывать другие отчества, помимо оканчивающихся на -ич/-на, но для начала можно учесть только их. Как - написано в сообщении #2.

Если вопрос заключается в том как сравнить две строки, не учитывая двух последних символов, то это можно сделать функцией strncmp.
C++
1
2
3
4
size_t len = strlen(s1);
if (strncmp(s1, s2, len-2) == 0) {
    // отчества совпадают
}
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
30.09.2018, 15:59
Цитата Сообщение от a_lar Посмотреть сообщение
если элементарно просишь помощи, а тут так отказывают нагло. ну что ж.
примеров найти я не могу
Я тебе набросал пример, дело за малым - разобрать. Не даю никаких гарантий, что оно верно выполняется, или вовсе соберется на твоей машине.
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
83
84
85
86
87
88
89
90
91
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <conio.h>
#include <Windows.h>
 
using namespace  std;
 
struct  sotrydniki {
    string famil;
    string name;
    string otchestvo;
    int tlf;
    string pol;
 
    friend ostream & operator << (ostream &out, const sotrydniki &s)
    {
        return cout << s.famil << " " << s.name << " " << s.otchestvo;
    }
};
 
// Проверка окончания строки
bool endsWith(const string &fullString, const string &ending) {
    if (fullString.length() >= ending.length())
        return 0 == fullString.compare(fullString.length() - ending.length(), ending.length(), ending);
    return false;
}
 
// Удаление суффикса из отчества
string removePatronomicSuffix(const string &patronymic)
{
    // Список суффиксов
    static const string patronymicSuffixes[] = { "ович", "евич", "ич", "овна", "евна", "инична", "ична" };
 
    // Поиск суффикса в отчестве
    const auto suffixIt = find_if(begin(patronymicSuffixes), end(patronymicSuffixes)
        , [&](const string &s) { return endsWith(patronymic, s); }
    );
    // Возрат отчества без найденного суффикса
    if (suffixIt != end(patronymicSuffixes))
        return patronymic.substr(0, patronymic.length() - suffixIt->length());
    return patronymic;
}
 
int main() {
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int structSize;
 
    cout << "sotryd na firme?" << endl;
    cin >> structSize;
 
    sotrydniki *t = new  sotrydniki[structSize];
    for (int i = 0; i < structSize; i++) {
        cout << "vvod inform o cheloveke \t" << endl;
        cout << "familia: "; cin >> (t + i)->famil;
        cout << "name: "; cin >> (t + i)->name;
        cout << "otchestvo: "; cin >> (t + i)->otchestvo;
        cout << "pol: "; cin >> (t + i)->pol;
        cout << "teleph :"; cin >> (t + i)->tlf;
        cout << endl;
    }
 
    // Функтор для сравнения сотрудников по отчеству
    auto compPatronymicFn = [](const sotrydniki &a, const sotrydniki &b)
    {
        return removePatronomicSuffix(a.otchestvo) < removePatronomicSuffix(b.otchestvo);
    };
 
    // сортировка по отчеству
    sort(t, t + structSize, compPatronymicFn);
 
    // Вывод отсортированных сотрудников с разделением групп с разными отчествами
    auto prevIt = t, curIt = t + 1, endIt = t + structSize;
    cout << *prevIt << endl;
    while (curIt != endIt)
    {
        if (compPatronymicFn(*prevIt, *curIt))
            cout << endl;
        cout << *curIt << endl;
 
        prevIt = curIt;
        ++curIt;
    }
 
    _getch();
}
 
    //---------------------------------------------------------------------------
Чтобы работало с русскими буквами, необходимо прочитать эту тему. Лично у меня работает "из коробки" под Win10 VS2017.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
30.09.2018, 20:00
Цитата Сообщение от a_lar Посмотреть сообщение
тут так отказывают нагло
я бы сказал, тут нагло требуют готовое решение...
Да будет Вам известно, тут НИКТО не обязан Вам помогать... Тем более, делать за Вас...
У меня уж точно пропало всякое желание... Адью...
0
3 / 3 / 0
Регистрация: 07.12.2017
Сообщений: 584
01.10.2018, 00:52  [ТС]
nonedark2008, в каком компиляторе написано? visual?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.10.2018, 00:52
Помогаю со студенческими работами здесь

Структуры, найти людей с одинаковыми именами и вывести данные о них в алфавитном порядке
C++ Создать файл и записать в него исходные данные в виде структуры. Даны сведения о 5 Людей. Структура имеет вид: фамилия, имя,...

Напишите программу, которая заполняет с клавиатуры массив 3x5 фамилиями, именами и отчествами
Помогите пожалуйста! Заранее спасибо) Напишите программу, которая заполняет с клавиатуры массив 3x5 фамилиями, именами и отчествами...

Определите есть ли в массиве А элементы с одинаковыми значениями. Выведите их на экран
Определите есть ли в массиве А элементы с одинаковыми значениями. Выведите их на экран. Добавлено через 13 минут ПОМОГИТЕ...

Сравнение двух файлов с одинаковыми именами и вывод на экран отличий
требуется найти файл в каталоге, если он найден, то сравнить его с файлом с таким же именем и вывести отличия. cls @echo off if...

Выдать на экран длинное сообщение
Нужно по нажитии на кнопку выдать на экран что то типа мини Help-a. А именно текст, состоящий из 20 строк. Меня вполне бы устроила...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru