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

Задача на линейные списки - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить сумму заштрихованных элементов http://www.cyberforum.ru/cpp-beginners/thread992652.html
Всем привет! Помогите пожалуйста, очень надо. Прям срочно! /Вычислить сумму заштрихованных элементов матрицы показанных на рисунке/
C++ заголовочные файлы напишите пожалуйста,что делают заголов.файлы <io.h> и <direct.h> Добавлено через 8 минут и расшифруйте условие: if(_access((dest_fold+"\\").c_str(),00)==-1) Добавлено через 2 часа 49 минут и еще что делает char mask={"*.*"}? Добавлено через 38 секунд http://www.cyberforum.ru/cpp-beginners/thread992639.html
C++ Вкладчик желает накопить за t лет сумму S
Вкладчик желает накопить за t лет сумму S, делая ежегодные равные вклады в банк, который выплачивает проценты по годовой ставке r % (сложных). Сколько он должен вкладывать каждый раз?
Фермер приобрел трактор C++
Фермер приобрел трактор, который стоит S тенге в кредит под r % годовых (сложных). Через 1 год 6 месяцев он уплатил сумму в размере S/2, а еще через 6 месяцев полностью погасил долг. Какую сумму он при этом выплатил?
C++ Вкладчик положил в банк, выплачивающий r % в год http://www.cyberforum.ru/cpp-beginners/thread992618.html
Вкладчик положил в банк, выплачивающий r % в год, вклад в сумме P. Какая сумма будет на счету вкладчика через t лет, если банк начисляет: а) простые проценты б) сложные проценты в) сложные проценты ежемесячно?
C++ Портфель ценных бумаг включает N1 облигаций Портфель ценных бумаг включает N1 облигаций, номинальная цена которых C1 тенге. и N2 облигаций, номинальная цена которых C2 тенге. Облигации первого вида приносят владельцу P1 (%) дохода в год, второго - P2 (%) дохода в год. Вычислите, насколько процентов увеличится годовой доход владельца портфеля ценных бумаг, если он приобретет еще K облигаций первого вида. подробнее

Показать сообщение отдельно
danila_r
0 / 0 / 0
Регистрация: 30.10.2013
Сообщений: 13
31.10.2013, 15:44     Задача на линейные списки
Задание : в файловой системе каталог файлов организован как линейный список.
Для каждого файла в каталоге содержатся следующие сведения :
1) имя файла;
2) дата создания;
3) количество обращений к файлу.
Составить программу , которая обеспечивает:
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
#include <stdafx.h>
#include <iostream> //подключение текстового файла для работы со стандартными объектами и операциями с потоками ввода/вывода
using namespace std; //выбор пространства имен std
 
 
struct data// структура, описывающая дату
{
int day;// день
int mon;// месяц
int year;// год
};
 
 
struct file// структура, описывающая файл
{
char name[20];// имя
data date;// дата
int kol;// количество обращений
void in()// функция ввода даты
{
    cin>>date.day;// ввод дня
    cin>>date.mon;// ввод месяца
    cin>>date.year;// ввод года
}
void out()// функция вывода даты
{
    cout<<date.day<<" ";// вывод дня
    cout<<date.mon<<" ";// вывод месяца
    cout<<date.year<<" ";// вывод года
}
};
 
 
file *a;// массив файлов
int n;// кол-во файлов
int operator <(file a,file b)// оператор "меньше" для дат
{
if((a.date.year<b.date.year)
|| ((a.date.year==b.date.year)&&(a.date.mon<b.date.mon))  // где || - логическое "или", а && - логич. "и"; происходит сравнение строки файла А со строкой файла В
||((a.date.year==b.date.year)&&(a.date.mon==b.date.mon)||(a.date.day<b.date.day))) return 1;
else return 0;
}
 
int operator >(file a,file b) // оператор 'больше' для кол-ва обращений
{
if(a.kol>b.kol) return 1; else return 0;
}
 
void del(int k) // функция удаления файла с датой создания, которая меньше заданной
{
file *b=new file[n-1];
int r=0;
for(int i=0;i<(n-1);i++)
{
if(i<k)r=0;else r=1;
b[i]=a[i+r];
}
a=b;
--n;
}
 
int main(){ // главная функция в программе
wcout.imbue(locale(".866"));// установка локализации для русского языка
wcout<<L"Введите кол-во файлов: "; //обеспеченик диалога с пользователем на русском языке
cin>>n; // ввод данных
a=new file[n]; // создание нового файла с каталогом 
for(int i=0;i<n;i++){
wcout<<L"Введите имя файла № "<<i+1<<L": "; //обеспеченик диалога с пользователем на русском языке
cin>>a[i].name; 
wcout<<L"Введите дату создания файла № "<<i+1<<L" (дд мм гггг): "; //обеспеченик диалога с пользователем на русском языке
a[i].in(); //вызов функции ввода даты
wcout<<L"Введите кол-во обращений к файлу № "<<i+1<<" : "; //обеспеченик диалога с пользователем на русском языке
cin>>a[i].kol;
cout<<endl;
}
wcout<<L"Вывод каталога файлов\n"; //обеспеченик диалога с пользователем на русском языке
for(int i=0;i<n;i++){
cout<<i+1<<endl<<"\t"<<a[i].name<<endl<<"\t";
a[i].out(); // вызов функции вывода даты
cout<<endl<<"\t"<<a[i].kol<<endl;
}
wcout<<L"Удаление файлов, дата создания которых меньше заданной :\n\t введите дату: "; //обеспеченик диалога с пользователем на русском языке
file temp; //создание временных файлов, которые впоследствии будут удалены, т.к. их дата меньше заданной
temp.in();
for(int i=0;i<n;i++)
{
if(a[i]<temp)del(i);
}
wcout<<L"Оставшиеся файлы\n"; //обеспеченик диалога с пользователем на русском языке
for(int i=0;i<n;i++){
cout<<i+1<<endl<<"\t"<<a[i].name<<endl<<"\t";
a[i].out(); // вызов функции вывода даты
cout<<endl<<"\t"<<a[i].kol<<endl;
}
wcout<<L"Файл с наибольшим количеством обращений\n"; //обеспеченик диалога с пользователем на русском языке
file max=a[0];
for(int i=1;i<n;i++)if(a[i]>max)max=a[i];
cout<<"\t"<<max.name<<endl<<"\t";
max.out(); 
cout<<endl<<"\t"<<max.kol<<endl;
system("pause"); // задержка экрана консоли
}
Программа делает всё кроме удаления файлов, дата создания которых меньше заданной. То есть, например:
вбиваю даты для каждого из 3-х файлов:
01 01 2001
02 02 2002
03 03 2003
Заданная дата (удаление файлов, дата создания которых меньше заданной): 02 03 2002
Но программа все равно выводит два файла:
02 02 2002 - что не верно
03 03 2003 - верно.
Помогите пожалуйства подправить код программы, не могу сообразить где именно ошибка.

Добавлено через 23 часа 46 минут
Помогите исправить программу пожалуйста!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 05:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru