Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
ra4ok
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 37
#1

Не Ищет фамилию - C++

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

Добрый вечер. Нашел код, но он не ищет фамилию, всегда выдает фимилия не найдена, помоги плиз. Код полностью работает, кроме поиска фамилии.
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2012, 22:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не Ищет фамилию (C++):

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

Сортировать фамилию и возраст - C++
Доброго времени суток, помогите решить задачу: На входе список пар, состоящих из фамилии и возраста. Каждая пара представлена на...

Вывести фамилию и инициалы - C++
Задача собственно следующая: Необходимо ввести фамилию, имя и отчество (любое). Нужно вывести на экран эти же фамилию, имя и отчество в...

Вывести фамилию 10 раз (FOR) - C++
Вывести на экран свою фамилию 10 раз (FOR) Пожалуйста посмотрите !!!!!! Спасибо)

Ищет элементы в структуре - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; const int M=5; struct ITEM { string key; ITEM *next; ...

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

17
kazak
3048 / 2369 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
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
ra4ok
0 / 0 / 0
Регистрация: 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
kazak
3048 / 2369 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
25.10.2012, 06:47 #4
Цитата Сообщение от ra4ok Посмотреть сообщение
Но если я не ошибаюсь char3[count] и char4[count] ни с чем в программе не связано?!?!
Они используют для индексации отдельных букв строки count, нетрудно догадаться, что значение count должно меняться от 0 до значения равного длине строки записанной в массив. Но у Вас в программе на момент начала второго цикла в count будет содержаться длина первого массива с фамилией, и соовтетственно сравнение 3 и 4 массивов начнется не спервого элемента.
1
ra4ok
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 37
25.10.2012, 18:54  [ТС] #5
Цитата Сообщение от kazak Посмотреть сообщение
Они используют для индексации отдельных букв строки count, нетрудно догадаться, что значение count должно меняться от 0 до значения равного длине строки записанной в массив. Но у Вас в программе на момент начала второго цикла в count будет содержаться длина первого массива с фамилией, и соовтетственно сравнение 3 и 4 массивов начнется не спервого элемента.
Я попробовал вместо char3[count] и char4[count] написать, что либо другое в и конце цикла дописать условие, он это не помогло

Добавлено через 8 часов 11 минут
Может кто помочь?
0
byi_ja
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
ra4ok
0 / 0 / 0
Регистрация: 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
byi_ja
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
kazak
3048 / 2369 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
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
byi_ja
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
kazak
3048 / 2369 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
25.10.2012, 20:38 #11
Цитата Сообщение от byi_ja Посмотреть сообщение
так вот он заполняется
Вы таки разберите код в цитате, которую я привел.
1
byi_ja
7 / 7 / 0
Регистрация: 16.05.2012
Сообщений: 31
25.10.2012, 20:40 #12
sorry vtuk prosto kliynyl na MASIv i podymal...
0
ra4ok
0 / 0 / 0
Регистрация: 12.10.2011
Сообщений: 37
25.10.2012, 21:24  [ТС] #13
Дак что мне нужно изменить?
0
kazak
3048 / 2369 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
25.10.2012, 21:27 #14
Либо в функции поиска удалить сравнение имен вообще, либо после ввода фамилии, предложить ввести имя, очевидно же

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

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

Это тут
я не могу сделать ввод сразу после объявления.
Вот условие, структуру я должен оформить в виде функции... Потому ввод не возможен там.
0
Миниатюры
Не Ищет фамилию  
25.10.2012, 21:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2012, 21:48
Привет! Вот еще темы с ответами:

*char (запрашивает ввести фамилию) - C++
Проблема такая, как с указателем на *char выделить память под неизветное количество вводимых символом? cout&lt;&lt;&quot;Введите фамилию&quot; name =...

f=fopen сохранить фамилию в txt - C++
Здравствуйте уважаемые. Я только начинаю осваивать с++. Как сохранить фамилию в текстовом файле. #include &lt;conio.h&gt; #include &lt;iostream.h&gt;...

отобразить свою фамилию 10 раз - C++
отобразить на екране свою фамилию 10 раз

Вывести на экран имя и фамилию 10 раз - C++
здравствуйте, дорогие программисты!помогите пожалуйста решить задачу...вот условие: Написать программу, которая выводит на экран ваше имя и...


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

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

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