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

Выяснить, содержится ли каждая из фамилий списка 2 в списке 1

23.08.2014, 17:13. Показов 2159. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Получил задание на летнюю практику вот, собственно содержание: "Заданы два перечня фамилий. Перечень 1 содержит n1 фамилию, перечень 2 - n2 фамилии. Выяснить, содержится ли каждая из фамилий списка 2 в списке 1. Если фамилия списка 2 присутствует в списке 1, то напечатать её позицию. Если же фамилии нет, то напечатать сообщение о том, что фамилия не найдена.Указание: Поиск фамилии в списке реализовать подпрограммой."
В целом идея мне понятна, что и как сделать. Не могли бы вы помочь с реализацией?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.08.2014, 17:13
Ответы с готовыми решениями:

В заданном списке фамилий найти первую самую короткую фамилию и число фамилий с такой же длиной
Список фамилий из x человек. Длина каждой не более y символов. Напечатать первую самую короткую фамилию и число фамилий с такой же длиной. ...

Строка: Получить список уникальных фамилий, каждая из которых есть в первом списке.
Помогите справиться с задачей. Имеется список повторяющихся фамилий: Симонян Н.Ю. Сасюков А.И. Сасюков А.И. Сасюков А.И. ...

Проверить содержится ли элементы списка A в списке B
Помогите плиз с задачей. Условие: Проверьте содержится ли элементы списка A в списке B в указанном списком A порядке

8
 Аватар для Pingvinoff
63 / 63 / 15
Регистрация: 20.08.2014
Сообщений: 593
23.08.2014, 17:33
C++
1
2
      std::list<std::string> list;
     std::list<std::string> list2;
делаем поиск по списку с помощью итераторов и радуемся жизни
0
 Аватар для NanoBreaker
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94
23.08.2014, 17:33
Глубоких знания данное задание не требует, сможешь без проблем и сам реализовать, я тебе напишу псевдокод, и как я бы в общем решил бы эту задачу.

Во первых для хранения данных, я бы взял 2 вектора(массива) типа string, и объявил бы их как глобальные переменные, дабы доступ к вектору у нас был прямо из функции(подпрограммы).

Второй вопрос, который стоит, так это как ты их будешь заполнять? Через входной файл будет красивее.

И в третьих сам псевдокод:

(основной блок программы)
ЦИКЛ С ПОМОЩЬЮ КОТОРОГО ПРОХОДИШЬ ВСЕ ЭЛЕМЕНТЫ ВТОРОГО ВЕКТОРА
КАЖДЫЙ ЭЛЕМЕНТ ОТПРАВЛЯЕШЬ В ФУНКЦИЮ В КОТОРОЙ МЫ БУДЕМ ОПРЕДЕЛЯТЬ СОДЕРЖИТСЯ ЛИ ЭТОТ ЭЛЕМЕНТ В ПЕРВОМ ВЕКТОРЕ.(псевдокод ниже)
ЕСЛИ ФУНКЦИЯ ВОЗВРАЩАЕТ TRUE ТО ВЫВЕСТИ ТЕКУЩИЙ ИНДЕКС ( то есть индекс элемента, который ты только что отправил в функцию)
ИНАЧЕ ВЫВЕСТИ ЧТО ФАМИЛИЯ НЕ НАЙДЕНА

(подпрограмма, в нашем случае функция, т.к. будем возвращать значение true/false)

bool function(string str)
{
ПРОХОДИМСЯ ПО ПЕРВОМУ ВЕКТОРУ, И ЕСЛИ КАКОЙ-ТО ИЗ ЭЛЕМЕНТОВ ЭКВИВАЛЕНТЕН ПАРАМЕТРУ, КОТОРЫЙ НАШЕ ФУНКЦИЯ ПРИНИМАЕТ ТО - return true
В КОНЦЕ return false, ЕСЛИ НЕ БУДЕТ НАЙДЕН ЭЛЕМЕНТ ТО ВЕРНЕТ FALSE
}

Как-то так, если что-то не ясно, пиши!

P.S. Смысла писать в тупую тебе код не вижу, все же, это твои знания и опыт, а не мои, в будущем за тебя никто работу делать не будет = )
0
 Аватар для Pingvinoff
63 / 63 / 15
Регистрация: 20.08.2014
Сообщений: 593
23.08.2014, 17:49
Цитата Сообщение от NanoBreaker Посмотреть сообщение
Во первых для хранения данных, я бы взял 2 вектора(массива) типа string, и объявил бы их как глобальные переменные, дабы доступ к вектору у нас был прямо из функции(подпрограммы).
А это то зачем? Не проще/правильнее подавать вход функции два вектора/списка? И зачем поиск выносить в отдельную функцию? Там же три строки кода.
0
 Аватар для NanoBreaker
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94
23.08.2014, 17:56
Цитата Сообщение от Pingvinoff Посмотреть сообщение
А это то зачем? Не проще/правильнее подавать вход функции два вектора/списка? И зачем поиск выносить в отдельную функцию? Там же три строки кода.
Какое задание, такое и решение, я бы не использовал функцию и вовсе но цитирую : "Поиск фамилии в списке реализовать подпрограммой".

К тому же, если автор не может реализовать данную программу лично, зачем выдавать всякие выкрутасы, для начала пусть научится решать проблемы такого рода самым элементарным путём. Я мог выстрелить лямдо-функцией и всё вообще в 2 строки впихнуть, но имеет ли это смысл?
0
 Аватар для Pingvinoff
63 / 63 / 15
Регистрация: 20.08.2014
Сообщений: 593
23.08.2014, 18:18
NanoBreaker, понял, спасибо.
Не по теме:
вот почему в России так мало нормальных программистов. Это из-за таких вот заданий. Скорее всего это из учебника наподобие Лаптева.
0
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 16
23.08.2014, 18:35  [ТС]
Пока что осмысляю, как напишу скину для критики. а то мало ли оптимизировать можно
0
 Аватар для NanoBreaker
23 / 23 / 10
Регистрация: 11.07.2013
Сообщений: 94
23.08.2014, 22:15
Как напишешь код, можешь взглянуть на то, как я его реализовал в 2-х вариантах.

Первый вариант, это его реализация соблюдая условие задачи:

Кликните здесь для просмотра всего текста

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
#include <fstream>
#include <string>
#include <vector>
#include <iterator>
#include <iostream>
#include <algorithm>
 
using namespace std;
 
//Процедура для счтитывания фамилий с файла.
void readFile(vector<string> &input_vector, string file_name)
{
    ifstream FILE_IN(file_name);
 
    while (!FILE_IN.eof())
    {
        string buff_string;
        getline(FILE_IN, buff_string);
        input_vector.push_back(buff_string);
    }
 
    FILE_IN.close();
}
 
//Процедура(подпрограмма) для нахождения фамилии из второго списка в первом.
void findFile(vector<string> &input_vector, string str)
{
    for (int j = 0; j < input_vector.size(); j++)
    {
        if (str == input_vector[j])
        {
            cout << "Фамилия \"" << str << "\" найдена в первом списке фамилий, её порядковый номер - " << j + 1 << endl;
            return;
        }
    }
    cout << "Фамилия \"" << str << "\" не найдена в первом списке фамилий" << endl;
}
 
//Основной блок
int main()
{
    //Иницилизируем русский язык, дабы можно было писать на нём в консоли
    setlocale(LC_ALL, "Russian");
 
    //Иницилизируем контейнеры типа string, в них мы будем хранить наши фамилии.
    vector<string>  Surname_First_Vector;
    vector<string> Surname_Second_Vector;
 
    //Считываем фамилии из 2-х файлов, названия которых я передаю в функцию
    readFile(Surname_First_Vector,  "familii_1.txt");
    readFile(Surname_Second_Vector, "familii_2.txt");
 
    //И дальше осуществляем наш поиск, как и сказано в условие задачи, через подпрограмму!
    for (int i = 0; i < Surname_Second_Vector.size(); i++)
    {
        findFile(Surname_First_Vector, Surname_Second_Vector[i]);
    }
 
    system("PAUSE");
    return EXIT_SUCCESS;
}


Второй вариант, это то, как бы я решил эту задачу:

Кликните здесь для просмотра всего текста

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
#include <fstream>
#include <string>
#include <vector>
#include <iterator>
#include <iostream>
#include <algorithm>
 
using namespace std;
 
void readFile(vector<string> &input_vector, string file_name)
{
    ifstream FILE_IN(file_name);
 
    while (!FILE_IN.eof())
    {
        string buff_string;
        getline(FILE_IN, buff_string);
        input_vector.push_back(buff_string);
    }
 
    FILE_IN.close();
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    vector<string>  Surname_First_Vector;
    vector<string> Surname_Second_Vector;
 
    readFile(Surname_First_Vector,  "familii_1.txt");
    readFile(Surname_Second_Vector, "familii_2.txt");
 
    for (auto element : Surname_Second_Vector)
    {
        vector<string>::iterator it = find(Surname_First_Vector.begin(), Surname_First_Vector.end(), element);
        if (it == Surname_First_Vector.end()){
            cout << "Фамилия \"" << element << "\" не найдена в первом списке фамилий." << endl;
        }else{
            cout << "Фамилия \"" << *it << "\" найдена в первом списке фамилий, её порядковый номер - " << distance(Surname_First_Vector.begin(), it) + 1 << endl;
        }
    }
 
    system("PAUSE");
    return EXIT_SUCCESS;
}


Заметь, я данные беру из файлов, "familii_1.txt" и "familii_2.txt", так что не забудь их создать и заполнить в корне проекта!
0
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 16
29.08.2014, 11:41  [ТС]
Примерно так

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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
// Практика
//Заданы два перечня фамилий. Перечень 1 содержит n1 фамилию, перечень 2 - n2 фамилии. 
//Выяснить, содержится ли каждая из фамилий списка 2 в списке 1. 
//Если фамилия списка 2 присутствует в списке 1, то напечатать её позицию. 
//Если же фамилии нет, то напечатать сообщение о том, что фамилия не найдена.
//Указание: Поиск фамилии в списке реализовать подпрограммой.
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <locale.h>
#include <cwchar>
using namespace std;
 
struct familiya
{   wchar_t mas[50];
    int nomer;
    familiya* next;//указатель для связи элементов.
};
    familiya*network=new familiya; //конечный элемент.
    familiya*work=new familiya;
    int chislo=1;
    int chislo_2=1;
 
familiya* select_spisok_1(familiya*vision,int &cifra)//адресация конечного элемента.
{   char spec2[50];
    CharToOem(L"Введите фамилию : ",spec2);
    cout<<spec2;
    familiya* future;//тек элемент.
    future=new familiya;
    wcin>>future->mas;
    future->nomer=cifra;
    cifra++;
    future->next=vision;
    vision=future;
    return vision;
}
void print_spisok_1(familiya*vision)
{   familiya* konec=new familiya;
    konec=vision;
    char spec3[50];
    CharToOem(L"Фамилии в списке: ",spec3);
    cout<<spec3<<"\n";
    for(;konec->nomer>=1;)
    {   wcout<<konec->mas<<"\n";
        konec=konec->next;
    }
}
void search()
{   familiya*konec=new familiya;
    familiya*konchick=new familiya;
    konec=work;
    for(;konec->nomer>=1;)
    {   konchick=network;
        int b=0;
        for(;konchick->nomer>=1;)
        {   if(wcslen(konec->mas)==wcslen(konchick->mas))
            {   int a;
                for(a=0;a<wcslen(konec->mas);a++)   
                {   if(konec->mas[a]!=konchick->mas[a])
                    {   a=-1;
                        break;
                    }
                }
                if(a!=-1)
                {   if(!b)
                    {   b=1;
                        wcout<<konchick->mas<<": ";
                    }
                    wcout<<konchick->nomer<<" ";
                }
            }
            konchick=konchick->next;    
        }
        if(b)
        {   wcout<<"\n";
        }
        konec=konec->next;
    }
}
int _tmain(int argc, _TCHAR* argv[])
{   wcout.imbue(locale("rus_rus.866"));
    wcin.imbue(locale("rus_rus.866"));
        for(;;)
        {   int a;
            char spec1[50];
            CharToOem(L"***МЕНЮ***",spec1);
            cout<<"\t"<<spec1<<"\n";
            CharToOem(L"1.Добавить фамилию в список 1 ",spec1);
            cout<<spec1<<"\n";
            CharToOem(L"2.Добавить фамилию в список 2 ",spec1);
            cout<<spec1<<"\n";
            CharToOem(L"3.Распечатка списка 1 ",spec1);
            cout<<spec1<<"\n";
            CharToOem(L"4.Распечатка списка 2 ",spec1);
            cout<<spec1<<"\n";
            CharToOem(L"5.Проверка на совпадение фамилии",spec1);
            cout<<spec1<<"\n";
            CharToOem(L"6.Выход ",spec1);
            cout<<spec1<<"\n";
            CharToOem(L"Введите пунк меню: ",spec1);
            cout<<spec1;
            cin>>a;
            switch(a)
            {   case 1:system("cls");network=select_spisok_1(network,chislo);break;
                case 2:system("cls");work=select_spisok_1(work,chislo_2);break;
                case 3:system("cls");print_spisok_1(network);break;
                case 4:system("cls");print_spisok_1(work);break;
                case 5:system("cls");search();break;
                case 6:return 0;
                
            }
        }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.08.2014, 11:41
Помогаю со студенческими работами здесь

Подсчёт фамилий в списке
В ТекстБокс1 есть список ФИО в котором их 9500: Задача такова: когда я нажимаю на Баттон1 в ТекстБокс2 выводится все ФИО...

Найти числа, в которых каждая цифра содержится 2 и более раз
Даны числа от 1111111 до 9999999 Нужно найти числа в которых каждая цифра содержится 2 и более раз. Определить количество этих чисел ...

Определить, сколько фамилий в списке заканчиваются на букву «н».
Определить, сколько фамилий в списке заканчиваются на букву «н».(фамилии должен вводить пользователь)

Содержится ли слово в списке
Всем привет. Помогите, пожалуйста, начинающей! Понимаю, что вопрос элементарный, но уже настолько запуталась, что не могу сообразить. ...

Определить, сколько фамилий в списке имеют окончание «ова»
Задан список из 8 фамилий. Определить, сколько фамилий в списке имеют окончание «ова» вот что написал,но не работает.помогите program...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru