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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Недопонял... Помогите пожалуйста... Со строками... http://www.cyberforum.ru/cpp-beginners/thread375533.html
Доброго всем времени суток. Что объявляет следующая строка? char *s; Создаётся указатель на начало строки, например как на простой вектор, или же создаётся строка? Или и то и другое? Если создаётся указатель, он содержит в себе мусор, то есть может указывать на что-угодно -> изменяя строку, мы можем изменить любые данные. Я так думаю потому-что это происходит с указателями на, скажем, int....
C++ корректен ли код void f (struct x *this);? (объявление функции) ...На солидном ресурсе встретил большой код, но я его конечно упростил до минимума. struct x { int y; }; //Вот на эту строчку ругается компилятор, говорит, что //ожидается троеточие или запятая перед this void f (struct x *this); http://www.cyberforum.ru/cpp-beginners/thread375511.html
Произвести замену всех отрицательных чисел на нули C++
ПОмогите пожалуйста решить задачу в си Дан двухмерный массив размерностью 3х3.ПРоизвести замену всех отрицательных чисел на нули. Произвести вывод данного массива в виде матриц
Пространство имен std C++
Какой стиль лучше ? using std::cout; using std::endl; or using namespace std;
C++ Помогите с Использование оператора цикла http://www.cyberforum.ru/cpp-beginners/thread375492.html
Использование оператора цикла с параметром (for) для организации циклических вычислительных процессов Найти вектор Z = {z1,z2,...z10} , равный сумме двух векторов X = {x1,x2,..x10} и Y ={y1,y2,...,y10} по формуле Zi = Xi + Yi; i = 1,2,...10; Элементы вектора X заданы, организовать их ввод с клавиатуры. Значения компонент вектора Y вычисляются по формуле: Yi = 0.7 *...
C++ Задача на строки.ПОмогите решить Помогите пожалуйста решить задачу Дана строка.Вывести данную строку задом наперед подробнее

Показать сообщение отдельно
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
31.10.2011, 16:34     дать комментарии по одной из функций очень важно
по контрольной не могу понять как выполняется функция сортировки, глаза разбегаются смысл не улавливаю можите на против каждой строчки написать комментарий выполнения в этой функции?
вот само задание
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++;
    }
}
 Комментарий модератора 
Дублирование тем нарушает правила форума. по контрольной работе нужны комментарии
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 23:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru