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

Маленькая ошибка - C++

Восстановить пароль Регистрация
 
Jurlique
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 46
07.12.2013, 20:43     Маленькая ошибка #1
C++ (Qt)
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
#include<iostream>
#include <stdio.h>
#include <string.h>
 
using namespace std;
 
bool myfunc(char x [], char x1 []);
bool family(char *y, char *y1);
 
struct NOTE{
 
    char surname[50];
    char phone[50];
    int day[3];
 
};
 
int main()
{
    const int n = 8;
    int i = 0;
    NOTE m[n];
    for (i = 0; i < n; i++)
    {
 
        cin >> m[i].surname;
        cin >> m[i].phone;
        cin >> m[i].day[0];
        cin >> m[i].day[1];
        cin >> m[i].day[2];
 
    }
 
    for (i = 0; i < n - 1; i++){
 
        for (int j = i + 1; j < n; j++){
 
            if (family(m[i].phone, m[j].phone)){
 
                NOTE y = m[i];
                m[i] = m[j];
                m[j] = y;
 
            }}}
 
    for (i = 0; i < n; i++){
 
        cout << m[i].surname << ' ';
        cout << m[i].phone << ' ';
        cout << m[i].day[0] << ' ' << m[i].day[1] << ' ' << m[i].day[2] << endl;
 
    }
 
    char name[50];
    cin >> name;
    bool done = false;
 
    for (i = 0; i < n; i++){
    
        if (myfunc(m[i].surname, name)){
 
            cout << m[i].surname << ' ';
            cout << m[i].phone << ' ';
            cout << m[i].day[0] << m[i].day[1] << m[i].day[2] << ' ';
 
            done = true;
 
        }}
 
    return 0;
 
}
 
bool family(char *y, char *y1){
 
    int i = 0;
    while (y[i] != '/0' && y1[i] != '/0'){
 
        if ((int) y[i] > (int) y1[i]) return true;
        else if ((int) y[i] < (int) y1[i])return false;
        i++;
 
    }
 
    return false;
 
}
 
bool myfunc(char x [], char x1 []){
 
    if (strlen(x) == strlen(x1)){
 
        int i = 0;
        while (x[i] != '\0') {
 
            if (x[i] != x1[i]) return false;
            i++;
 
        }
 
        return true;
    }
 
    else return false;
 
}
Входные данные
Sidorova 5462091 11 05 1981
Bobrova 2987432 30 12 1992
Smirnov 9927936 25 11 1990
Petrov 7884153 13 04 1978
Borisova 1233728 21 06 1985
Moskvina 4564352 03 10 1988
Aleksandrov 3011765 07 05 1980
Ivanov 3744432 01 05 1977
Ivanov

У меня получается
Borisova 1233728 21 6 1985
Bobrova 2987432 30 12 1992
Aleksandrov 3011765 7 5 1980
Ivanov 3744432 1 5 1977
Moskvina 4564352 3 10 1988
Sidorova 5462091 11 5 1981
Petrov 7884153 13 4 1978
Smirnov 9927936 25 11 1990
Ivanov 3744432 151977

Верный результат
Borisova 1233728 21 6 1985
Bobrova 2987432 30 12 1992
Aleksandrov 3011765 7 5 1980
Ivanov 3744432 1 5 1977
Moskvina 4564352 3 10 1988
Sidorova 5462091 11 5 1981
Petrov 7884153 13 4 1978
Smirnov 9927936 25 11 1990
Ivanov 3744432 1.5.1977
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.12.2013, 20:56     Маленькая ошибка #2
Цитата Сообщение от Jurlique Посмотреть сообщение
Ivanov 3744432 1.5.1977
И откуда там точки должны взяться?

Добавлено через 2 минуты
Цитата Сообщение от Jurlique Посмотреть сообщение
Ivanov 3744432 01 05 1977
Ivanov
Почему два раза Ivanov?
Jurlique
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 46
07.12.2013, 21:02  [ТС]     Маленькая ошибка #3
Цитата Сообщение от alsav22 Посмотреть сообщение
И откуда там точки должны взяться?

Добавлено через 2 минуты

Почему два раза Ivanov?
Вариант 14
1. Описать структуру с именем NOTE, содержащую следующие поля:
• фамилия, имя;
• номер телефона;
• день рождения (массив из трех чисел).
2. Написать программу, выполняющую следующие действия:
• ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE; записи должны быть упорядочены по трем первым цифрам номера телефона;
• вывод на экран информации о человеке, чья фамилия введена с клавиатуры;
• если такого нет, выдать на дисплей соответствующее сообщение.

Сдаю в систему и там написано входные данные какие требуются и выходные.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.12.2013, 21:17     Маленькая ошибка #4
Цитата Сообщение от Jurlique Посмотреть сообщение
Сдаю в систему
Тогда вопросы адресуйте системе. У меня всё нормально выводится.
На вопрос не ответили:
Цитата Сообщение от alsav22 Посмотреть сообщение
Почему два раза Ivanov?
Миниатюры
Маленькая ошибка  
Jurlique
0 / 0 / 0
Регистрация: 13.11.2013
Сообщений: 46
07.12.2013, 21:26  [ТС]     Маленькая ошибка #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Тогда вопросы адресуйте системе. У меня всё нормально выводится.
На вопрос не ответили:
Потому что такие входные данные написаны
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
07.12.2013, 21:36     Маленькая ошибка #6
Дошло, почему два Ivanov. Второй Ivanov - это ввод для поиска данных по фамилии. Тогда понятно, что нужно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    ...
    char name[50];
    cin >> name;
    bool done = false;
 
    for (i = 0; i < n; i++){
    
        if (myfunc(m[i].surname, name)){
 
            cout << m[i].surname << ' ';
            cout << m[i].phone << ' ';
            cout << m[i].day[0] << '.' << m[i].day[1] << '.' << m[i].day[2] << ' '; // точки добавить
 
            done = true;
 
        }}
...
Миниатюры
Маленькая ошибка  
Yandex
Объявления
07.12.2013, 21:36     Маленькая ошибка
Ответ Создать тему
Опции темы

Текущее время: 07:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru