0 / 0 / 1
Регистрация: 12.10.2011
Сообщений: 37
1

Не Ищет фамилию

24.10.2012, 22:40. Показов 825. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер. Нашел код, но он не ищет фамилию, всегда выдает фимилия не найдена, помоги плиз. Код полностью работает, кроме поиска фамилии.
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
114
115
116
117
118
119
120
121
122
123
124
#include "iostream"
#include "time.h"
#include "conio.h"
 
using namespace std;
 
struct ZNAK
{
    char family[15];
    char name[15];
    char znak[11];
    int date[3];
};
 
bool chars(char* char1, char* char2, char* char3, char* char4)
{
    int count = 0;
    int sovpad = 0;
    while (char1[count] != '\0')
    {
        if (char1[count] == char2[count])        
            ++sovpad;        
        ++count;
    }
        while (char3[count] != '\0')
    {
        if (char3[count] == char4[count])        
            ++sovpad;        
        ++count;
    }
 
    if (count == sovpad)
        return true;
 
    return false;
}
 
void Search(ZNAK *pZNAK, char* family, char* name, int n)
{
    bool ok = false;
    for (int i = 0; i < n; ++i)
    {        
        if (chars(pZNAK[i].family, family, pZNAK[i].name, name))
        {
            cout << "Family: " << pZNAK[i].family << endl;
            cout << "name: " << pZNAK[i].name << endl;
            cout << "ZNAK: " << pZNAK[i].znak << endl;
            cout << "Date: " << pZNAK[i].date[0] << ":" << pZNAK[i].date[1]    << ":" << pZNAK[i].date[2] << endl;
            ok = true;
        }
    }
    if (!ok)
        cout << "Family ne naydena!!!!" << endl;    
}
void Sort(ZNAK *pZNAK, int n)
{
    // A - 65
    // z - 122
    ZNAK f;
    for (int i = 0; i < n - 1; ++i)
    {
        for (int j = i; j < n; ++j)
        {
            bool h = true;
            int q = 0;    
            while (h == true && q < 16)
            {
                if (pZNAK[j].family[q] < pZNAK[i].family[q])
                {
                    h=false;
                    f = pZNAK[i];
                    pZNAK[i] = pZNAK[j];
                    pZNAK[j] = f;                
                }
                else if (pZNAK[j].family[q] > pZNAK[i].family[q])
                    h = false;            
                    
                ++q;
            }
        }
    }
}
 
int main()
{
    int n;
    ZNAK pZNAK[10];
    cout << "Vvedite N (n <= 10): ";
    cin >> n;
    if (n > 10)
    {
        cout << "Error: N" << endl;    
        return 0;
    }
    for (int i = 0; i < n; ++i)
    {                
        cout << "Number " << i << endl;
        cout << "Vvedite Family -> ";
        cin >> pZNAK[i].family;
        cout << "Vvedite name -> ";
        cin >> pZNAK[i].name;
        cout << "Vvedite Znak -> ";
        cin >> pZNAK[i].znak;
        cout << "Vvedite date[format: den', mesyac, god] -> ";
        cin >> pZNAK[i].date[0] >> pZNAK[i].date[1] >> pZNAK[i].date[2];
    }
    char family[15];
    char name[15]; 
    cout << "Vvedite family dly poiska: ";
    cin >> family;
    cout << "<<<<<SEARCH RESULT>>>>>" << endl;
    Search(&pZNAK[0], &family[0], &name[0], n);
    Sort(&pZNAK[0], n);
    cout << "<<<<<SORT RESULT>>>>>" << endl;
    for ( i = 0; i < n; ++i)
    {
         cout << "Family: " << pZNAK[i].family << endl;
         cout << "ZNAK: " << pZNAK[i].znak << endl;
         cout << "Date: " << pZNAK[i].date[0] << ":" << pZNAK[i].date[1]    << ":" << pZNAK[i].date[2] << endl;    
         cout << "________________________________________________" << endl;
    }    
    getch();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2012, 22:40
Ответы с готовыми решениями:

Вывести фамилию и марку автомобиля , которые ищет пользователь
Доброго времени суток , только начинаю изучать C++ , поэтому извините за несуразный код ...

Строка S содержит фамилию, имя, отчество. Необходимо преобразовать ее в строку, содержащую фамилию и инициалы
Строка S содержит фамилию, имя, отчество. Необходимо преобразовать ее в строку, содержащую фамилию...

Ввести с клавиатуры в одну строку фамилию, имя и отчество, разделив их пробелом. Вывести фамилию и инициалы
Пример: Введите фамилию, имя и отчество: Иванов Петр Семёнович П.С. Иванов Нашёл такую же...

Записать в память фамилию студента, вывести эту фамилию в обратном порядке
Записать в память фамилию студента. Написать программу, выводящую на экран эту фамилию в обратном...

17
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,167
24.10.2012, 23:57 2
Цитата Сообщение от ra4ok Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int count = 0;
 int sovpad = 0;
 while (char1[count] != '\0')
 {
 if (char1[count] == char2[count]) 
 ++sovpad; 
 ++count;
 }
 while (char3[count] != '\0')
 {
 if (char3[count] == char4[count]) 
 ++sovpad; 
 ++count;
 }
Помедитируйте над этим куском кода, и ответьте себе, что будет находится в char3[count] и char4[count] в момент начала цикла и во время его исполнения.
1
0 / 0 / 1
Регистрация: 12.10.2011
Сообщений: 37
25.10.2012, 01:24  [ТС] 3
Цитата Сообщение от kazak Посмотреть сообщение
Помедитируйте над этим куском кода, и ответьте себе, что будет находится в char3[count] и char4[count] в момент начала цикла и во время его исполнения.
Моя медитация мне ничем не поможет, я уже 8 лаб сделал... Голова трещит, а еще физику делать...
если можете выручите плиз

Добавлено через 1 час 3 минуты
Цитата Сообщение от kazak Посмотреть сообщение
Помедитируйте над этим куском кода, и ответьте себе, что будет находится в char3[count] и char4[count] в момент начала цикла и во время его исполнения.
В начале char3[count] Начнет считывать символы 1 за другим пока не дойдет до конца, при исполнение цикла он будет сравниваться с с char4[count], если совпадет то ок нет?

Добавлено через 1 минуту
Но если я не ошибаюсь char3[count] и char4[count] ни с чем в программе не связано?!?!
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,167
25.10.2012, 06:47 4
Цитата Сообщение от ra4ok Посмотреть сообщение
Но если я не ошибаюсь char3[count] и char4[count] ни с чем в программе не связано?!?!
Они используют для индексации отдельных букв строки count, нетрудно догадаться, что значение count должно меняться от 0 до значения равного длине строки записанной в массив. Но у Вас в программе на момент начала второго цикла в count будет содержаться длина первого массива с фамилией, и соовтетственно сравнение 3 и 4 массивов начнется не спервого элемента.
1
0 / 0 / 1
Регистрация: 12.10.2011
Сообщений: 37
25.10.2012, 18:54  [ТС] 5
Цитата Сообщение от kazak Посмотреть сообщение
Они используют для индексации отдельных букв строки count, нетрудно догадаться, что значение count должно меняться от 0 до значения равного длине строки записанной в массив. Но у Вас в программе на момент начала второго цикла в count будет содержаться длина первого массива с фамилией, и соовтетственно сравнение 3 и 4 массивов начнется не спервого элемента.
Я попробовал вместо char3[count] и char4[count] написать, что либо другое в и конце цикла дописать условие, он это не помогло

Добавлено через 8 часов 11 минут
Может кто помочь?
0
7 / 7 / 0
Регистрация: 16.05.2012
Сообщений: 31
25.10.2012, 19:52 6
попробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool chars(char* char1, char* char2, char* char3, char* char4)
{
    int count = 0;
    int sovpad = 0;
    while (char1[count] != '\0')
    {
        if (char1[count] == char2[sovpad])        
            ++sovpad;        
        ++count;
    }
      
        if (char3[count] == char4[count])        
           
    if (count == sovpad)
        return true
        else  return false;
}
Добавлено через 11 минут
сори за предыдущий

попробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
bool chars(char* char1, char* char2, char* char3, char* char4)
{
    for(int count=0;count<strlen(char1);count++)            
        if (char1[count] != char2[count]) return false;     //проверяет фамилию.
    
    for(int count=0;count<strlen(char1);count++)    
    if (char3[count] != char4[count]) return false;   //проверяет имя.
 
 
   return true;
}
1
0 / 0 / 1
Регистрация: 12.10.2011
Сообщений: 37
25.10.2012, 20:03  [ТС] 7
Цитата Сообщение от byi_ja Посмотреть сообщение
попробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bool chars(char* char1, char* char2, char* char3, char* char4)
{
    int count = 0;
    int sovpad = 0;
    while (char1[count] != '\0')
    {
        if (char1[count] == char2[sovpad])        
            ++sovpad;        
        ++count;
    }
      
        if (char3[count] == char4[count])        
           
    if (count == sovpad)
        return true
        else  return false;
}
Добавлено через 11 минут
сори за предыдущий

попробуй так
C++
1
2
3
4
5
6
7
8
9
10
11
bool chars(char* char1, char* char2, char* char3, char* char4)
{
    for(int count=0;count<strlen(char1);count++)            
        if (char1[count] != char2[count]) return false;     //проверяет фамилию.
    
    for(int count=0;count<strlen(char1);count++)    
    if (char3[count] != char4[count]) return false;   //проверяет имя.
 
 
   return true;
}
не помогло, попробовал поиск по имени тож не сработало.
0
7 / 7 / 0
Регистрация: 16.05.2012
Сообщений: 31
25.10.2012, 20:26 8
Debug-ом проверь заходит ли программа в эту процедуру
Цитата Сообщение от ra4ok Посмотреть сообщение
bool chars(char* char1, char* char2, char* char3, char* char4)
{
* * for(int count=0;count<strlen(char1);count++)* * * * * *
* * * * if (char1[count] != char2[count]) return false; * * //проверяет фамилию.
for(int count=0;count<strlen(char1);count++)* *
* * if (char3[count] != char4[count]) return false; * //проверяет имя.
return true;
}
1
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,167
25.10.2012, 20:29 9
Цитата Сообщение от ra4ok Посмотреть сообщение
C++
1
2
3
4
5
6
char family[15];
 char name[15]; 
 cout << "Vvedite family dly poiska: ";
 cin >> family;
 cout << "<<<<<SEARCH RESULT>>>>>" << endl;
 Search(&pZNAK[0], &family[0], &name[0], n);
А массив name кто заполнять будет?
1
7 / 7 / 0
Регистрация: 16.05.2012
Сообщений: 31
25.10.2012, 20:32 10
так вот он заполняется
C++
1
2
3
4
5
6
7
8
9
10
11
12
 for (int i = 0; i < n; ++i)
    {                
        cout << "Number " << i << endl;
        cout << "Vvedite Family -> ";
        cin >> pZNAK[i].family;
        cout << "Vvedite name -> ";
        cin >> pZNAK[i].name;
        cout << "Vvedite Znak -> ";
        cin >> pZNAK[i].znak;
        cout << "Vvedite date[format: den', mesyac, god] -> ";
        cin >> pZNAK[i].date[0] >> pZNAK[i].date[1] >> pZNAK[i].date[2];
    }
1
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,167
25.10.2012, 20:38 11
Цитата Сообщение от byi_ja Посмотреть сообщение
так вот он заполняется
Вы таки разберите код в цитате, которую я привел.
1
7 / 7 / 0
Регистрация: 16.05.2012
Сообщений: 31
25.10.2012, 20:40 12
sorry vtuk prosto kliynyl na MASIv i podymal...
0
0 / 0 / 1
Регистрация: 12.10.2011
Сообщений: 37
25.10.2012, 21:24  [ТС] 13
Дак что мне нужно изменить?
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,167
25.10.2012, 21:27 14
Либо в функции поиска удалить сравнение имен вообще, либо после ввода фамилии, предложить ввести имя, очевидно же

Добавлено через 37 секунд
Цитата Сообщение от kazak Посмотреть сообщение
либо после ввода фамилии, предложить ввести имя
Это тут
Цитата Сообщение от ra4ok Посмотреть сообщение
char family[15];
char name[15];
cout << "Vvedite family dly poiska: ";
cin >> family;
1
0 / 0 / 1
Регистрация: 12.10.2011
Сообщений: 37
25.10.2012, 21:48  [ТС] 15
Цитата Сообщение от kazak Посмотреть сообщение
Либо в функции поиска удалить сравнение имен вообще, либо после ввода фамилии, предложить ввести имя, очевидно же

Добавлено через 37 секунд

Это тут
я не могу сделать ввод сразу после объявления.
Вот условие, структуру я должен оформить в виде функции... Потому ввод не возможен там.
Миниатюры
Не Ищет фамилию  
0
7 / 7 / 0
Регистрация: 16.05.2012
Сообщений: 31
25.10.2012, 21:58 16
тогда проверку имени ненадо
станет так
C++
1
2
3
4
5
6
bool chars(char* char1, char* char2)
{
    for(int count=0;count<strlen(char1);count++)            
        if (char1[count] != char2[count]) return false;     //проверяет фамилию.
    return true;
}
1
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
26.10.2012, 01:09 17
Попробуйте использовать функцию strstr(char* string1, char *string2)

C++
1
2
3
4
if ( strstr(mv->Name, SearchKey) ) 
{
   ...
}
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,167
26.10.2012, 07:02 18
Цитата Сообщение от we2seek Посмотреть сообщение
Попробуйте использовать функцию strstr
Эта функция ищет подсктроку в строке, допустим "Иванов" является подстрокой в "Ивановский", но в контексте задачи это две разные фамилии. Если уж использовать стандартные функции, тогда уже strcmp.
0
26.10.2012, 07:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.10.2012, 07:02
Помогаю со студенческими работами здесь

Запросить фамилию, имя и отчество пользователя, и вывести его фамилию и инициалы
Вот задание:Написать программу, которая запрашивает фамилию, имя и отчество, а выводит фамилию и...

В одной строке ввести фамилию, имя, отчество. Вывести на экран фамилию и инициалы
В одной строке ввести фамилию, имя, отчество. Вывести на экран фамилию и инициалы. Пояснения: ...

Строка S содержит фамилию, имя, отчество. Необходимо преобразовать ее в строку, содержащую фамилию и инициалы
Строка S содержит фамилию, имя, отчество. Необходимо преобразовать ее в строку, содержащую фамилию...

Запросить с клавиатуры фамилию студента и отобразить список студентов, имеющих указанную фамилию, и их оценки
Доброго времени суток! Программа должна запросить с клавиатуры фамилию студента (без инициалов) и...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru