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

дать комментарии по одной из функций очень важно - C++

Восстановить пароль Регистрация
 
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
31.10.2011, 16:34     дать комментарии по одной из функций очень важно #1
по контрольной не могу понять как выполняется функция сортировки, глаза разбегаются смысл не улавливаю можите на против каждой строчки написать комментарий выполнения в этой функции?
вот само задание
1.Создать текстовый файл с исходными данными в соответствии с заданной структурой
2.Разработать меню, в котором предусмотреть следующие пункты:
1) ввод данных в динамический линейный список:
• из текстового файла;
• из типизированного файла;
• с экрана.
2) обработку списка:
• сортировку по заданному полю;
• поиск по заданному полю с сохранением результатов в виде таблицы в текстовом файле;
• определяется вариантом в задании.
3) корректировку списка
• вставка нового элемента;
• удаление указанного элемента;
• замена полей указанного элемента.
4) выход.
В файловой системе каталог файлов организован в виде линейного списка.
Для каждого файла в каталоге содержатся следующие сведения:
• Имя файла
• Дата создания
• Количество обращений к файлу.
Написать программу, которая обеспечивает:
• Начальное формирование каталога файлов
• Вывод каталога файлов
• Выборку файла с наибольшим количеством обращений
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
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
# include <iostream>              // класс для работы с вводом-выводом
# include <windows.h>             // для функции    CharToOem();
# include <fstream>           // класс для работы с файлом
 
using namespace std;
    char bufRus[256];
    char* Rus(const char* text)
    {
        CharToOem(text, bufRus);
    return bufRus;
    }
 
struct lfile{
    char name[15];
    char data[10];
    int upd;
};
struct sp{
    lfile elfile;   // поле данных
    sp *next;   // указатель
};
 
sp*print_list(sp *list);//прототип функции вывод на экран
 
sp* fromtipf();
sp* ft_enter();
sp* fb_enter();
sp* fs_enter();
sp* sort(sp *list);
void search(sp *list);
void fsearch(sp *list);
sp* ddf(sp *list);
sp* pind(sp *list);
sp* del(sp *list,sp *adr);
sp * vst(sp *list,sp *adr);
void zmn(sp *list);
 
void main()
{
   int v;
   sp *k;
   do{
      cout<<Rus("  0: формирование списка из текстового файла")<<endl;
      cout<<Rus("  1: формирование списка из типизированного файла")<<endl;
      cout<<Rus("  2: формирование списка с экрана")<<endl;
      cout<<Rus("  3: сортировка")<<endl;
      cout<<Rus("  4: поиск по заданному полю с сохранением результатов в файле")<<endl;
      cout<<Rus("  5: выборка файла с наибольшим количеством обращений")<<endl;
      cout<<Rus("  6: замена записи")<<endl;
      cout<<Rus("  7: удаление записи после указанного адреса")<<endl;
      cout<<Rus("  8: вставка записи после указанного адреса")<<endl;
      cout<<Rus("  9: выход")<<endl;
      cout<<Rus("вариант ")<<endl;
      cin>>v;
      switch(v){
        case 0: k = ft_enter(); break;/*вызов функции ввод тектового файла в переменную к, чтоб по ней потом можно было делать сортировку, поиск и тд*/
        case 1: k = fb_enter(); break; // вызов функции ввод с типизированного файла
        case 2: k = fs_enter(); break;// вызов функции ввод с экрана
        case 3: k = sort(k); print_list(k); break;// вызов 2 функций сортировки по переменной к, и вывод списка на экран
        case 4: search(k);break;//вызов функции поиск по переменной к и сохранение в файл одной строки
        case 5: fsearch(k); break;//вызов функции поиск файла с наибольшим количеством обращений к нему
        case 6: zmn(k); print_list(k); break;//вызов функции замена строки по указаному номеру
        case 7: k = del(k,pind(k)); print_list(k); break;// вызов функции удаление строки после указанного номера
        case 8: k = vst(k,pind(k)); print_list(k); break;//вызов функции вставка строки после указанного номера
        case 9: print_list(k);break;//вызов функции вывод списка на экран
        case 10:return; break;
 
        }
    } while(true);//цикл будет повтрятся
}
 
//ввод списка из текстового файла
sp* ft_enter(){
    char name[10];// символьный тип которое будет именем файла и его типом не больше 10знаков
    cout<<Rus("введи имя входн тип.файла")<<endl;
    cin>>name;// ввод имени и типа
    sp* list = new sp;    //создаем указатель на голову списка
    sp *ptr;  //указатель на элемент списка
    bool on=true; //флажок, который определяет, читаем ли мы первый элемент списка или последующие
    ifstream inf(name);//считывание файла по имени name в inf
    while (!inf.eof()){ // цикл пока не будет достигнут конец файла
        if(on){     //если до этого список был пуст, то
            ptr=list;  //записываем в него первый элемент
            on=false;
        }else{  //если список не пуст, то записываем в него текущий элемент (настраиваем указатель на след. элемент)
            ptr->next=new sp; //выделяем память под следующий элемент списка
            ptr=ptr->next;//ptr теперь указывает на тот элемент который был выделен строкой выше
        }
        inf>> ptr->elfile.name;   //читаем конкретные данные в текущий элемент списка
        inf>> ptr->elfile.data;
        inf>> ptr->elfile.upd;
        inf.ignore();
    }
    ptr->next=NULL; //для последнего элемента списка указатель на следующий элемент не определен/пуст (установлен в NULL)
    inf.close();//закрытие файла
    return list;  //  возвращаем полученный список
}
 
//ввод списка из типизированного файла
sp* fb_enter(){
    sp* list =new sp; //создаем указатель на голову списка
    sp *ptr,*q;//два указателя на sp.
    int ok=1;//Переменная ok со значением 1.
    char name[15];// символьный тип которое будет именем файла и его типом не больше 15знаков
    cout<<Rus("введи имя входн тип.файла")<<endl;
    cin>>name;// ввод имени и типа
    ifstream intf(name, ios::binary); //режим бинарного открытия файла
    ptr=list; //теперь ptr указывает туда же куда и list
    while (!intf.eof()){  // // цикл пока не будет достигнут конец файла
        intf.read(reinterpret_cast<char *>(&ptr->elfile),sizeof(lfile)); /*читаем из бинарного файла байты кол-вом размер структуры lfile в переменную. reinterpret_cast<T> - небезопасное преобразование. В данном случае т.к. read принимает указатель на char* преобразовываем указатель на lfile в указатель на char и читаем в него. */
            if(ptr->elfile.upd != NULL){  // если не ноль
                q=ptr;//q теперь указывает туда же куда и ptr.
                ptr->next=new sp;//ptr теперь указывает на тот элемент который был выделен строкой выше
                ptr=ptr->next;// ptr теперь указывает на тот элемент который был выделен строкой выше
            }
    }
    ptr->next=NULL;//обнуляем следующий элемент за q.
    intf.close();//закрытие файла
    return list; //  возвращаем полученный список
}
 
 
//ввод списка с экрана
sp* fs_enter(){
    sp* list =new sp; //выделяем память под список
    sp *ptr; //указатель на элемент списка
    char name; // символьный тип которое будет именем файла и его типом
    cout<< Rus("Введиде имя, дату создания, кольчество обращений к файлу")<<endl;
    ptr=list; //теперь ptr указывает на список
    while (true){
        cin>>ptr->elfile.name;
        cin>>ptr->elfile.data;
        cin>>ptr->elfile.upd;
        cout<<Rus("ещё (y/n)")<<endl;
        cin>>name;
        if(name=='n') break;
        ptr->next=new sp; //выделяем память под строку
        ptr=ptr->next;//указываем на эту строку
    }
    return list;
}
 
//вывод списка на экран
sp* print_list(sp *list){
    sp *prt = list;
    int i=0;
    do {
        cout<<++i<<"  ";// первый файл
        cout<<prt->elfile.name<<"      ";
        cout<<prt->elfile.data<<"      ";
        cout<<prt->elfile.upd<<endl;
        prt=prt->next;//следующий
        if(prt == NULL) break;
    } while (true);
}
 
//сортировка списка
sp* sort(sp *list){
    sp *pt=list, *ptr, *pred=list, *q;
    int ok,ok1;
    do{
        ok=0, ok1=1; ptr=list;
        while (ptr->next){
            if(ptr->elfile.upd > ptr->next->elfile.upd){
                if(ok1) { // первый элемент
                    ok1=0;
                    q=pt;
                    pt=pt->next;
                    q->next=pt->next;
                    pt->next=q;
                    ptr=pt;
                    ok=1;
                }
                else {
                    q=pred->next;
                    pred->next=pred->next->next;
                    q->next=pred->next->next;
                    pred->next->next=q;
                    ptr=pt->next;
                    ok=1;
                }
            }
                pred=ptr;
                ptr=ptr->next;
        }
    } while(ok);
    return pt;
}
 
//поиск
void search(sp *list){
    sp *prt = list;
    char f[15],r[15];
    cout<<Rus("введите текст")<<endl;
    cin>>f;
    cout<<Rus("введите выходной файл")<<endl;
    cin>>r;
    ofstream inf(r);
    while (true){
        if(strstr(prt->elfile.name,f)){ // сравнивает имя файла введенное с теми что в списке, если совпадает то выводит о нем всю информацию в другой файл
          inf<<prt->elfile.name<<"  ";
          inf<<prt->elfile.data<<"  ";
          inf<<prt->elfile.upd<<endl;
        }
        prt=prt->next;//переход на другую строку
        if(prt == NULL) break;
    }
}
 
//Файл с наиольшим кольчеством обращений
void fsearch(sp *list){
     sp *prt = list;
     int p=-1;
     sp *r;
     while (true){
        if(prt->elfile.upd > p){//если первое обращение больше другого
            p = prt->elfile.upd; // присвоить его значение в р
            r = prt; //запомнить максимум
        }
        prt=prt->next;
        if(prt == NULL) break;
     }
     cout<<Rus("Файл с наиольшим кольчеством обращений")<<endl;
     cout<<r->elfile.name<<" ";
     cout<<r->elfile.data<<" ";
     cout<<r->elfile.upd<<endl;
}
 
//получить адрес
sp* pind(sp *list){
    sp *prt = list;
    int i=1,j=0;
    cout<<Rus("Введите номер")<<endl;
    cin>>j; //номер строки
    while (true){
        if(i==j){
            return prt; //строка под этим номером
            break;
        }
        prt=prt->next;
        if(prt == NULL) break;
        i++;
    }
}
 
//удаление элемента с адресом adr
sp* del(sp *list,sp *adr){
    sp *pt=list, *q;
    if(adr==list){// если номер совпал то...
        pt=adr->next;//  перейти на другую строку
        q=adr;// запомнить ее
    }else{
        q = adr->next;
        adr->next = adr->next->next;
    }
    delete(q); //удаляет строку после указанного номера
    return pt;
}
 
//вставка нового элемента после элемента с адресом adr
sp * vst(sp *list,sp *adr){
    lfile rab;
    sp *pt=list,*q=new sp;
    cout<<"name=";
    cin>>rab.name;
    cout<<"data=";
    cin>>rab.data;
    cout<<"up=";
    cin>>rab.upd;
    q->elfile=rab;
    if(adr==list){
        pt=q;
        q->next=adr;
    }else{
        q->next= adr->next;
        adr->next=q;
    }
    return pt;
}
 
//заменить поле
void zmn(sp *list){
    sp *prt = list;
    int i=1,j=0;
    cout<<Rus("Введите номер")<<endl;
    cin>>j; // номер поля которое заминить
    while (true){
        if(i==j){// если номер есть тоесть равен то..
        cout << Rus (" Введите имя нового файла");
    cin>>prt->elfile.name;
    cout << Rus (" Введите дату создания файла");
    cin>>prt->elfile.data;
    cout << Rus (" Введите количество обращений к файлу");
    cin>>prt->elfile.upd;
            break;
        }
        prt=prt->next;
        if(prt == NULL) break;
        i++;
    }
}
 Комментарий модератора 
Дублирование тем нарушает правила форума. по контрольной работе нужны комментарии
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2011, 16:34     дать комментарии по одной из функций очень важно
Посмотрите здесь:

C++ Важно помогите написать прогу. Очень легкую Пожалуйста, сижу на экзамене
Несколько функций в одной программе C++
C++ контрольная очень важно
C++ помогите, очень важно...
очень интересная загадка по мотивам одной известной истории=) C++
Народ, делов не много, но очень важно! C++
C++ очень важно посмотрите формирование списка из текстового файла
Очень надо.написать комментарии.робота с файлами C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Закрытая тема Создать тему
Опции темы

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