Форум программистов, компьютерный форум 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 облигаций первого вида. подробнее

Показать сообщение отдельно
Vivo
23 / 23 / 2
Регистрация: 27.09.2009
Сообщений: 101
31.10.2013, 19:58     Задача на линейные списки
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
#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 j;
 
int operator <(file a,file b)// оператор "меньше" для дат
{
    if(a.date.year<=b.date.year)
    {
        if(a.date.mon<b.date.mon) return 1;
        if(a.date.mon==b.date.mon)
        {
            if(a.date.day<b.date.day) return 1;
        }
        return 0;
    }
    
    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;
    j = k-1;
    --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();
    
    //ВОТ ТУТ ЭТОТ ЦИКЛ
    j=0;
    while(j<n)
    {
        if(a[j]<temp)del(j);
        j++;
    }
 
    
    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"); // задержка экрана консоли
}
Вы перемудрили с функцией сравнения, не стал разбираться в чем. А с циклом получалось то, что когда вы удаляли например первый элемент, переносили все значения и уменьшали n, НО у вас в цикле for i увеличивалось и получалось так, что ваш алгоритм забывал про значение, которое перемещалось на место удаленного. Для спасибо есть кнопочка
 
Текущее время: 18:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru