Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Maintain
0 / 0 / 0
Регистрация: 24.04.2016
Сообщений: 3
#1

Комментарии к коду - C++

07.05.2016, 12:41. Просмотров 279. Ответов 5
Метки нет (Все метки)

Пожалуйста, помогите понять как работает код - поставить комментарии к строкам.
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include <iostream>
#include <fstream>
#include <string>
 
struct Phone {
    int number;
    std::string name;
    std::string address;
};
 
struct PhoneBook {
    Phone *phone;
    int count;
};
 
 
PhoneBook* load();
void menu();
void print(PhoneBook *phone_book);
void find(PhoneBook *phone_book);
void add();
 
int main() {
    setlocale(LC_ALL, "RUS");
    menu();
    return 0;
}
 
void print(PhoneBook *phone_book) {
    std::cout << "\nPhone Book: " << std::endl;
    for(int j = 0; j < phone_book->count; ++j)
        std::cout << phone_book->phone[j].number << ' ' << phone_book->phone[j].name << ' ' << phone_book->phone[j].address << std::endl;
    std::cout << std::endl;
}
 
void menu() {
    PhoneBook *phone_book =  load();
    int ans;
    do {
        std::cout << "Please Enter: " << std::endl;
        std::cout << "1 - Find" << std::endl;
        std::cout << "2 - Print" << std::endl;
        std::cout << "3 - Add" << std::endl;
        std::cout << "4 - exit" << std::endl;
        
        std::cin >> ans;
        switch(ans) {
        case 1:
            find(phone_book);
            break;
        case 2:
            print(phone_book);
            break;
        case 3:
            add();
            phone_book = load();
            break;
        case 4:
            break;
        default:
            std::cout << "Invalid command" << std::endl;
        }
    } while(ans != 4);
    delete[] phone_book->phone;
    delete phone_book;
}
 
void find(PhoneBook *phone_book) {
    bool found = false;
    int ans, _number;
    std::string _name, _street;
    std::cout << "Find by: " << std::endl;
    std::cout << "1 - Name" << std::endl;
    std::cout << "2 - Number" << std::endl;
    std::cout << "3 - Street" << std::endl;
    std::cin >> ans;
    switch(ans) {
    case 1:
        std::cout << "Please enter Name: ";
        std::cin >> _name;
        for(int i = 0; i < phone_book->count; ++i) {
            if(_name == phone_book->phone[i].name) {
                std::cout << "Found!" << std::endl;
                std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                found = true;
            }
        }
        break;
    case 2:
        std::cout << "Please enter Number: ";
        std::cin >> _number;
        for(int i = 0; i < phone_book->count; ++i) {
            if(_number == phone_book->phone[i].number) {
                std::cout << "Found!" << std::endl;
                std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                found = true;
            }
        }
        break;
        case 3:
            std::cout << "Please enter Number: ";
            std::cin >> _street;
            for(int i = 0; i < phone_book->count; ++i) {
                if(_street == phone_book->phone[i].address) {
                    std::cout << "Found!" << std::endl;
                    std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                    found = true;
                }
            }
        break;
    default:
        std::cout << "Invalid command" << std::endl;
    }
    
    if(!found)
        std::cout << "Sorry, not found" << std::endl;
    
    std::cout << std::endl;
    std::cin.clear();
}
 
void add() {
    int number;
    std::string name, address;
    std::cout << "Please enter Number: ";
    std::cin >> number;
    std::cout << "Name: ";
    std::cin >> name;
    std::cout << "Address: ";
    std::cin >> address;
    std::ofstream out("tel.txt", std::ios::app);
    out << '\n' << number << ' ' << name << ' ' << address;
    out.close();
}
 
PhoneBook* load() {
    std::ifstream in("tel.txt");
    PhoneBook *phone_book = new PhoneBook;
    phone_book->phone = new Phone[100];
    phone_book->count = 0;
    
    if(!in.good())
        std::cout << "File can't be found" << std::endl;
        
    while(!in.eof()) {
        in >> phone_book->phone[phone_book->count].number;
        in >> phone_book->phone[phone_book->count].name;
        in >> phone_book->phone[phone_book->count].address;
        phone_book->count++;
    }
    in.close(); 
    return phone_book;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2016, 12:41
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Комментарии к коду (C++):

Комментарии к коду
Доброго времени суток. Есть код программы. Необходимо к самым основным строчка...

Комментарии к коду
Имеются ряд вопросов по коду. 1.Что нужно переделать ,для того чтобы добавить...

Написать комментарии к коду
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;string.h&quot; using...

Написать комментарии к коду
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include...

Нужны комментарии к коду
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; //ЗАДАЧА...

Написать комментарии к коду
// Сортировка Шелла // #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using...

5
STArSka
146 / 27 / 13
Регистрация: 21.09.2015
Сообщений: 59
07.05.2016, 13:47 #2
Лучший ответ Сообщение было отмечено Maintain как решение

Решение

Вот, я постарался, прости за орфографические ошибки, если что

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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
#include <iostream>
#include <fstream>
#include <string>
//Подключение библиотек
 
struct Phone {
    int number;
    std::string name;
    std::string address;
};
//Структура записей в телефонной книге(Phone) с полями :
// номер
// имя
// адрес
 
struct PhoneBook {
    Phone *phone;
    int count;
};
//Структура телефонная книга(PhoneBook) с полями :
// телефоны(тип - указатель)
// количество записей в книге
 
//Дальше идут предварительное оглашение функций, которые будет использовать программа
PhoneBook* load();
//Загрузка книги
void menu();
//Меню программы
void print(PhoneBook *phone_book);
//Вывод результата в аргументах - указатель на телефонную книгу
void find(PhoneBook *phone_book);
//Поиск в книге в аргументах - указатель на телефонную книгу
void add();
//Добавление записи в книгу
 
int main() {
    setlocale(LC_ALL, "RUS");
    // Подключаем русский язык
    menu();
    //вызываем меню
    return 0;
    //конец программы
}
//Дальше идет реализация функции вывода
void print(PhoneBook *phone_book) {
    std::cout << "\nPhone Book: " << std::endl;
    //Выводим натпись - телефонная книга
    for (int j = 0; j < phone_book->count; ++j)//Цикл от нуля к количеству абонентов
        std::cout << phone_book->phone[j].number << ' ' << phone_book->phone[j].name << ' ' << phone_book->phone[j].address << std::endl;
    //Циклический вывод НОМЕРА абонента, его ИМЕНИ и АДРЕСА все через пробел
    std::cout << std::endl;
}
//Дальше идет реализация меню программы
void menu() {
    PhoneBook *phone_book = load();
    //Загружаем нашу книгу
    //В данном примере функция возвращает указатели на все записи в книге
    //потому записываем результат в переменную
    int ans;
    //Переменная, содержащая ответ полдьзователя в виде цифры
    
    //Дальше идет реализация меню в виде цикла
    do {
        std::cout << "Please Enter: " << std::endl; //Пожалуйста выберите
        std::cout << "1 - Find" << std::endl; //1 - найти абонента
        std::cout << "2 - Print" << std::endl;//2 - вывести абонентов
        std::cout << "3 - Add" << std::endl;//3 - добавить запись
        std::cout << "4 - exit" << std::endl;//4 - выход
 
        std::cin >> ans;
        //Получение ответа
        
        //Дальше идет обработка полученого ответа
        switch (ans) { 
        case 1: // если 1, то
            find(phone_book); // найти
            break;//выход
 
        case 2: // если 2, то
            print(phone_book);//вывести
            break;//выход
 
        case 3: // если 3, то
            add();//добавить
            phone_book = load();
            //Обновить список абонентов 
            //(делается новая загрузка абонентов,
            //чтобы программа могла работать с новым абонентом)
            break;//выход
 
        case 4:// если 4, то 
            break;//просто выход
        default:// если чтото еще , то
            std::cout << "Invalid command" << std::endl;//неправильная команда 
        }
    } while (ans != 4);//пока не выход меню будет нам надоедать
    
    //Поскольку работа завершена память последовательно очишается
    delete[] phone_book->phone;//Сначала телефоны , поскольку они - указатели
    delete phone_book;//а потом и вся телефонная книга удаляется из памяти программы 
}
 
//Дальше идет реализация функции поиска абонента
void find(PhoneBook *phone_book) {
    bool found = false;
    //Переменная, в которой содержиться результат поиска
    //Найден - true и не найден - false
    //Начальное значение - не найден
    int ans, _number;
    //ans - переменная содержащая ответ пользователя
    //_number - телефон, по которому пользователь хочет найти абанента в книге
    std::string _name, _street;
    //_name - имя, по которому пользователь хочет найти абанента в книге
    //_street - адрес, по которому пользователь хочет найти абанента в книге
 
    std::cout << "Find by: " << std::endl;//поиск по :
    std::cout << "1 - Name" << std::endl;//1 - имени
    std::cout << "2 - Number" << std::endl;//2 - телефону
    std::cout << "3 - Street" << std::endl;//3 - адресу
    std::cin >> ans;//получение ответа
    
    //Дальше идет обработка полученого ответа
    switch (ans) {
    case 1:// если 1, то
        std::cout << "Please enter Name: ";//Пожалуйста введите имя
        std::cin >> _name;//получаем имя
        for (int i = 0; i < phone_book->count; ++i) {//проходимся цыклом по всей книге
            if (_name == phone_book->phone[i].name) {//если нашли абонента с таким же именем
                std::cout << "Found!" << std::endl;//Говорим пользователю - "Алярм - нашли"
                std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                //выводим всю информациюб а именно :
                //НОМЕРА абонента, его ИМЕНИ и АДРЕСА все через пробел
                found = true;
                //ставим переменную результата поиска в "положение нашли"
            }
        }
        break;//выход
 
    case 2://если 2, то
        std::cout << "Please enter Number: "; //Пожалуйста , введите номер
        std::cin >> _number;//получаем номер
 
        //Дальше аналогичный поиск , только проверяется номер
        for (int i = 0; i < phone_book->count; ++i) {
            if (_number == phone_book->phone[i].number) {//ищем всех полдьзователей с таким же номером
                std::cout << "Found!" << std::endl;
                std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                found = true;// нашли
            }
        }
        break;// выход
 
    case 3:// если 3, то
        std::cout << "Please enter Number: "; // тут ошибка вместо Number ставьте Street
        //введите улицу(номер, блин)
        std::cin >> _street;// получаем адрес
        for (int i = 0; i < phone_book->count; ++i) { // аналогичный поиск , только по адресу
            if (_street == phone_book->phone[i].address) {//ищем всех полдьзователей с таким же адресом
                std::cout << "Found!" << std::endl;
                std::cout << phone_book->phone[i].number << ' ' << phone_book->phone[i].name << ' ' << phone_book->phone[i].address << std::endl;
                found = true;// нашли
            }
        }
        break;// выход
    default:
        std::cout << "Invalid command" << std::endl;// если что то еще , то 
                                                    //неправильная команда и опять вывод меню
    }
 
    if (!found) // если не нашли 
    //запись (!found) аналогична "found == false", то есть "не нашли" 
        std::cout << "Sorry, not found" << std::endl;// извините такой записи нет в книге
 
    std::cout << std::endl;
    std::cin.clear();
    //это очищение потока ввода 
    //если хотите почитаете поподробней в интернете
}
 
//Дальше идет реализация функции добавления абонента
void add() {
    int number;//номер абонента, которого мы хотим добавить
    std::string name, address;// аналогично его(нового абонента) имя и адрес
    std::cout << "Please enter Number: ";//Пожалуйста, введите номер
    std::cin >> number;//получаем номер
    std::cout << "Name: ";//Пожалуйста , введите имя
    std::cin >> name;//получаем имя
    std::cout << "Address: ";//Пожалуйста, введите адрес
    std::cin >> address;//получаем адрес
 
    //дальше идет открытие файла нашей книги
    //подключаем поток вывода в out 
    //(это как cin в програме), только out - в файле
    //опять же , поподробней в интернете
    std::ofstream out("tel.txt", std::ios::app);
    //подключаем поток вывода в out 
    //(это как cin в програме, только out - в файле)
    //опять же , поподробней в интернете
 
    out << '\n' << number << ' ' << name << ' ' << address;
    //записываем В ФАЙЛ номер, имя, адрес
    out.close();
    //закрываем файл
}
 
//Дальше идет реализация функции загрузки телефонной книги
PhoneBook* load() {
    std::ifstream in("tel.txt");//подключаем поток ввода в in
    PhoneBook *phone_book = new PhoneBook;//инициализируем переменную  телефонная книга
    phone_book->phone = new Phone[100];//пусть в ней(переменной) МОЖЕТ БЫТЬ 100 записей 
    phone_book->count = 0;//количество записей ставим в ноль
 
    if (!in.good())//если подключение прошло не удачно, то
        std::cout << "File can't be found" << std::endl;//выводим пользователю фразу "файл не найден"
 
    while (!in.eof()) {//пока не конец файла(нашей книги)
        //Дальше идет считывание информации про пользователя
        //количество пользователей - индекс нового
        //phone_book->count - индекс и количество одновременно
        in >> phone_book->phone[phone_book->count].number;
        in >> phone_book->phone[phone_book->count].name;
        in >> phone_book->phone[phone_book->count].address;
        phone_book->count++;//увеличиваем количество пользователей
    }
    in.close();//закрываем файл
    return phone_book;//возвращаем телефонную книгу, как результат
}
Если что не понятно, то спрашивай - отвечу, я новичок, так что комментирование чужого кода для меня в новость )
1
Maintain
0 / 0 / 0
Регистрация: 24.04.2016
Сообщений: 3
07.05.2016, 17:55  [ТС] #3
Огромное спасибо! Не подскажешь зачем указатели используются
Цитата Сообщение от Maintain Посмотреть сообщение
Phone *phone;
здесь строка 17 и
Цитата Сообщение от Maintain Посмотреть сообщение
PhoneBook* load();
строка 12. Это для работы с динамической памятью? И можно ли без них обойтись?
0
STArSka
146 / 27 / 13
Регистрация: 21.09.2015
Сообщений: 59
07.05.2016, 19:05 #4
Цитата Сообщение от Maintain Посмотреть сообщение
Огромное спасибо! Не подскажешь зачем указатели используются
Phone *phone;
Именно для работы с динамической памятью ,вот здесь :
Цитата Сообщение от STArSka Посмотреть сообщение
PhoneBook *phone_book = new PhoneBook;//инициализируем переменную *телефонная книга
* * phone_book->phone = new Phone[100];//пусть в ней(переменной) МОЖЕТ БЫТЬ 100 записей
Цитата Сообщение от Maintain Посмотреть сообщение
PhoneBook* load();
строка 12. Это для работы с динамической памятью? И можно ли без них обойтись?
Это тип результата функции, а именно указатель на книгу, так очень удобно работать с неопределенным количеством данных, в нашем случае - абонентами, также удобно возвращать результат.

Обойтись можно, но придется значительно изменить код, и поверь не к лучшему )
1
Maintain
0 / 0 / 0
Регистрация: 24.04.2016
Сообщений: 3
07.05.2016, 19:12  [ТС] #5
STArSka, спасибо! Тогда нужно в коде еще освободить память с помощью оператора delete раз резервируем её с помощью оператора new?
0
STArSka
146 / 27 / 13
Регистрация: 21.09.2015
Сообщений: 59
07.05.2016, 19:18 #6
Да, верно это происходит вот здесь в функции menu() в конце :
Цитата Сообщение от STArSka Посмотреть сообщение
//Поскольку работа завершена память последовательно очищается
delete[] phone_book->phone;//Сначала телефоны , поскольку они - указатели
delete phone_book;//а потом и вся телефонная книга удаляется из памяти программы
1
07.05.2016, 19:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2016, 19:18
Привет! Вот еще темы с решениями:

Написать комментарии по коду
Это для переносимости вроде, порядок байт чтоб не влиял. Я конечно понимаю что...

Написать комментарии к коду
#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;sstream&gt; #include...

Необходимы комментарии к коду
Можна коментарии к коду #include &lt;windows.h&gt; #include &lt;iostream&gt; ...

Минимальные комментарии к коду
Доброго времени суток:) помогите разобраться с примером, пожалуйста....


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

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

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