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

Что к чему? (объяснить каждую строчку из данной программы) - C++

Восстановить пароль Регистрация
 
Alex163
0 / 0 / 0
Регистрация: 26.02.2013
Сообщений: 52
10.04.2013, 08:31     Что к чему? (объяснить каждую строчку из данной программы) #1
Помогите, пожалуйста объяснить каждую строчку из данной программы, ибо я полное дно:
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
#include <stdafx.h>
#include <iostream>
#include <list>
#include <algorithm>
#include <clocale>
#include <locale>
using namespace std;
 
 
struct Print{
    template <typename T>
    void operator() (T &elem)
    {
        cout << elem << ' ';
    }
};
 
template <typename T>
void addToFront(list<T> &_coll, const T value)      
{
    _coll.push_front(value);
}
 
template <typename T>
void dellist(list<T> &_coll)
{
    _coll.pop_front();
}
 
template <typename T>
void showlist(list<T> &_coll)
{
    if(!_coll.empty())
    {
        for_each(_coll.begin(), _coll.end(), Print());
    }
    else
        wcout << L"The list is cleared\n";
}
 template <typename T>
void dubllist(list<T> &_coll, const T value)
{
    list<T>::iterator pos;
    for(pos = _coll.begin(); pos != _coll.end(); ++pos)
    {
        if(*pos == value){
            if(pos == _coll.begin())
                _coll.push_front(value);
            else if(pos != (--_coll.end())){
                _coll.insert(pos, value);
            }
            else if(pos == (--_coll.end())){
                _coll.push_back(value);
                ++pos;
            }
        }
    }
}
 
template <typename T>
void menu(list<T> &);
void instructions();
 
int main(int argc, char *argv[])
{
    std::locale::global(std::locale("Russian"));
    printf("Написать программу для работы с двунаправленным нециклическим списком: \n добавление/удаление элементов в голову, просмотр списка,\n реализовать дублирование списка с заданным значением \n");
    
    
    wcout.imbue(locale(".866"));
 
    list<int> coll;
 
    menu(coll);
 
    if(coll.empty())
        coll.clear();
 
    cout << "\n\n";
    return 0;
}
 
void instructions()
 
{
    wcout << L"Select menu item: " <<
        L"\n1 - To add an element in the beginning" <<
        L"\n2 - To remove an element from the beginning" <<
        L"\n3 - duplication" <<
        L"\n4 - Exit.\n";
}
 
template <typename T>
void menu(list<T> &coll)
{
    int punkt_menu, value;
 
    instructions();
 
 
    do{
        wcout << L"\n What do you want to make? \n ";
            cin >> punkt_menu;
 
            switch(punkt_menu)
            {
                case 1:
                    wcout << L"\n Enter numbers which you want to add in the list: ";
                        cin >> value;
 
                    addToFront(coll, value);
                    showlist(coll);
                    break;
                case 2:
                    dellist(coll);
                    showlist(coll);
                    break;
                    
                case 3:
                    wcout << L"Write numbers: ";
                        cin >> value;
 
                    dubllist(coll, value);
                    showlist(coll);
                    break;
            }
 
    }while(punkt_menu != 4);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.04.2013, 08:31     Что к чему? (объяснить каждую строчку из данной программы)
Посмотрите здесь:

Пропишите, пожалуйста каждую строчку, а то я объясняю преподавателю, а он говорит что не правильно( C++
Просят объяснить каждую строчку программы написанная в Borland C++ C++
C++ Прокомментируйте мне каждую строчку программы. Массивы
C++ Прокомментируйте мне каждую строчку программы. Структура, сортировка, массив, вывод
C++ прокомментируйте каждую строчку программы, у самой не получается (максимальный массив)
Опишите каждую строчку в программе,что она означает C++
C++ Объяснить строчку программы
C++ Нужно разобраться с кодом (Объяснить что к чему)!

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
10.04.2013, 11:09     Что к чему? (объяснить каждую строчку из данной программы) #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
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
/*Следующие 6 строк делают другие файлы как бы частями этого*/
#include <stdafx.h>
#include <iostream>
#include <list>
#include <algorithm>
#include <clocale>
#include <locale>
using namespace std; // Эта строка неявно подставляет std:: ко всем идентификаторам в пространстве имён std, например, если дальше будет cout, то неявно подставится std:: и получится std::cout
/*пустые строки значения не имеют*/ 
struct Print{// эта строка начинает декларацию типа структуры. struct означает, что следующие слово будет идентификатором этого типа, Print - имя нового типа, а символ { начинает блок, в котором будут расположены члены структуры
    template <typename T> // template начинает шаблон, <typename означает, что следующий идентификатор будет локальным в пределах шаблона именем существующего (возможно, объявленного после шаблона, но не в самом шаблоне) типа. То есть на место T может быть подставлен любой тип символ > просто парный к <
    void operator() (T &elem) // void означает специальный тип без данных, на плюсах значения этого типа возвращают процедуры, так как на этом язык они формально функции, после типа пойдёт новый идентификатор функции, или переменной, если после идентификатора стоят круглые скобки, то это функция. operator - общий идентификатор функций, которые будут неявно заменять операторы языка, далее ставится обозначение самого заменяемого оператора. Если оператор совпадает с типом (в донном случае T), то это ЕМНИП оператор приведения к указанному типу. То есть создаётся функция приведения структуры print к типу T, а T - любой тип. 
    {// начало тело функции
        cout << elem << ' ';//cout - поток вывода, при применении к потоку << - составной иероглиф "вывести в поток", иначе эти же символы - составной иероглиф "сдвинуть биты левого операнда влево на величину правого операнда, а если он отрицателен, то взять модуль и двигать вправо пробел между апострофами - просто символ пробела, означающий сам себя Строка выведет elem и потом пробел в cout
    }// конец тела функции
};// конец блока с членами структуры
 
template <typename T>
void addToFront(list<T> &_coll, const T value)  Функции зовут addToFront, первый её параметр имеет тип ссылки на тип, созданный шаблоном list при подстановке T вместо идентификиктора, который в нём указан после <typename, а зовут этот параметр _coll, второй параметр зовут value и тип его T. T - любой тип, но один и тот же в обоих случаях, но не обязательно тот же, как в операторе приведения структуры print.
{
    _coll.push_front(value); // вызывается с параметром value функция-член push_front объекта _coll
}
 
template <typename T>
void dellist(list<T> &_coll)
{
    _coll.pop_front();// вызывается без параметров функция-член pop_front объекта _coll
}
 
template <typename T>
void showlist(list<T> &_coll)
{
    if(!_coll.empty()) // вызывается без параметров функция-член empty объекта _coll, потом результат становится операндом оператора ! (не), который лож превращает в истину, а истину в лож
    {// начало блока, выполняемого, если истина
        for_each(_coll.begin(), _coll.end(), Print());// А чёрт его знает, что это такое
    }// конец блока, выполняемого, если истина
    else
        wcout << L"The list is cleared\n"; // эта строка выполняется, если лож. wcout - поток вывода, принимающий многобайтные символы
}
 template <typename T>
void dubllist(list<T> &_coll, const T value)
{
    list<T>::iterator pos;// декларация иттератора pos для типа list<T>, тип этого иттератора - тип-член iterator типа list<T>
    for(pos = _coll.begin(); pos != _coll.end(); ++pos)// цикл со счётчиком, а в данном случае с иттератором. for - оператор цикла, в скобках 3 позиции, разделённые точкой с запятой. В первой оператор, выполняемый один раз на старте цикла, во второй условие его продолжения, а в третьей оператор, выполяемый после каждого прохода по циклу pos = _coll.begin() присваивает pos значение члена-функции begin объекта _coll, вызванной без параметра и вернувшей начальное значение иттератора pos != _coll.end() - pos не равно значению члена-функции end объекта _coll, вызываемой без параметра и вовзращающей значение иттератора, говорящее о том, что весь объект перебран и надо выйти из цикла, ++, применяемый к иттератору означает переход к следующему значению
    {// начало тела цикла
        if(*pos == value){ // *pos означает доступ к данному, идентифицируемому значением pos., данная строка значит: "если pos указывает на объект, равный value символ {начинает блок, выполняемый, если истина
            if(pos == _coll.begin())
                _coll.push_front(value);
            else if(pos != (--_coll.end())){// --, применяемый к иттератору, означает переход к предыдущему
                _coll.insert(pos, value); вызывает функцию-член insert объекта _coll с параметрами pos и value
            }
            else if(pos == (--_coll.end())){
                _coll.push_back(value);
                ++pos;
            }
        }
    }
}
 
template <typename T>
void menu(list<T> &); предекларация функции menu, параметр один и пока безымянный, тип его list<T>
void instructions();предекларация функции instructions без параметров
 
int main(int argc, char *argv[])// заголовок функции, в начале тела которой находится точка входа программы
{
    std::locale::global(std::locale("Russian"));// вызывается функция-член global пространства имён locale, являющегося членом std, можно было std:: опустить, параметр - значение функции-члена locale пространства имён std, можно было std, а её параметр - нуль-терминальная строка "Russian"
    printf("Написать программу для работы с двунаправленным нециклическим списком: \n добавление/удаление элементов в голову, просмотр списка,\n реализовать дублирование списка с заданным значением \n");// Здесь вызывается функция printf, чёрт её знает, что и как она делает
    
    
    wcout.imbue(locale(".866"));
 
    list<int> coll;
 
    menu(coll);
 
    if(coll.empty())
        coll.clear();
 
    cout << "\n\n";
    return 0;
}
 
void instructions()
 
{
    wcout << L"Select menu item: " <<
        L"\n1 - To add an element in the beginning" <<
        L"\n2 - To remove an element from the beginning" <<
        L"\n3 - duplication" <<
        L"\n4 - Exit.\n";
}
 
template <typename T>
void menu(list<T> &coll)
{
    int punkt_menu, value;
 
    instructions();
 
 
    do{
        wcout << L"\n What do you want to make? \n ";
            cin >> punkt_menu;
 
            switch(punkt_menu)
            {
                case 1:
                    wcout << L"\n Enter numbers which you want to add in the list: ";
                        cin >> value;
 
                    addToFront(coll, value);
                    showlist(coll);
                    break;
                case 2:
                    dellist(coll);
                    showlist(coll);
                    break;
                    
                case 3:
                    wcout << L"Write numbers: ";
                        cin >> value;
 
                    dubllist(coll, value);
                    showlist(coll);
                    break;
            }
 
    }while(punkt_menu != 4);
}
Yandex
Объявления
10.04.2013, 11:09     Что к чему? (объяснить каждую строчку из данной программы)
Ответ Создать тему
Опции темы

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