Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
iamnewbee
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 3
#1

Просьба прокомментировать код(функция поиска в массиве структур)

05.06.2016, 20:13. Просмотров 111. Ответов 0
Метки нет (Все метки)

Ребят, друг помог - скинул код, но возможности прокомментировать его у него уже нет, может вы поможете
задание:дан файл f, компонентами которого являются целые числа. Каждая дата - это число, месяц и год. Найти: а) год с наименьшим номером. б) все весенние даты. в) самую позднюю дату
Я отметил строки, которые прошу прокомментировать. Очень надеюсь на вашу помощь
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
int Power(int, int);
int strToInt(char*);
char **dataInput(int&);
void dateTransform(char**, int**, int);
void dateOutput(int**, int);
void dateFullOutput(int**, int);
void dateSwap(int*, int*);
int datecmp(int**, int, int);
void dateSort(int**, int);
void dateDelete(int**, int);
 
void main() {
    setlocale(LC_ALL, "Russian");
 
    int n = 1;
    char **date = dataInput(n);
    int **mass = new int *[n];
    for (int i(0); i < n; i++) mass[i] = new int[3];
    dateTransform(date, mass, n);
 
    cout << "Компоненты файла: " << endl;
    dateFullOutput(mass, n);
    cout << endl;
 
    int yearIndex = 0, min = mass[0][2];
    for (int i(1); i < n; i++) if (min > mass[i][2]) min = mass[yearIndex = i][2];
    cout << "Год с наименьшим номером: " << mass[yearIndex][2] << endl << endl;
 
    cout << "Все весенние даты: " << endl;
    for (int i(0); i < n; i++) if (mass[i][1] >= 3 && mass[i][1] <= 5) dateOutput(mass, i);
    cout << endl;
 
    dateSort(mass, n);
    cout << "Самая поздняя дата: ";
    dateOutput(mass, n - 1);
 
    delete[] date;
    dateDelete(mass, n);
    system("pause");
}
 
int Power(int base, int pow) {
    int res = 1;
    for (int i(0); i < pow; i++) res *= base;
    return res;
}
 
int strToInt(char *str) {
    int n = strlen(str), res = 0;
    for (int i = 0; i < n; i++) res += (char(str[i]) - 48) * int(Power(10, n - i - 1)); //!
    return res;
}
 
char **dataInput(int &n) {
    char c, *file = "d.txt";
    bool flag = false;                                                              //!
    ifstream fin(file);                                                             //!
 
    if (!fin.is_open()) {                                                           //!
        cout << "К сожaлению файл "" << file << "" не был найден!!" << endl;
        system("pause");
        exit(0);
    }
 
    while (!fin.eof()) {                                                            //!
        fin.get(c);                                                                 //!
        if (fin.eof()) break;                                                       //!
        if (c == ' ' || c == '\n' || c == '\t') flag = true;                        //!
        if (flag && c != ' ' && c != '\n' && c != '\t') { n++; flag = false; }      //!
    }
 
    if (!(n - 1)) {
        cout << "Файл пуст!" << endl;
        system("pause");
        exit(0);
    }
    char **date = new char*[n];
 
    fin.clear();
    fin.seekg(0, ios::beg);
    for (int i(0); i < n; i++) fin >> (date[i] = new char[8]);
    fin.close();
 
    return date;
}
 
void dateTransform(char **date, int **mass, int n) {
    for (int i(0); i < n; i++) {
        for (int j(0); j < 3; j++) {
            char *temp = new char[5];
            if (j == 0) { for (int k(0); k < 2; k++) temp[k] = date[i][k]; temp[2] = '\0'; }        //!
            if (j == 1) { for (int k(2); k < 4; k++) temp[k - 2] = date[i][k]; temp[2] = '\0'; }    //!
            if (j == 2) { for (int k(4); k < 8; k++) temp[k - 4] = date[i][k]; temp[4] = '\0'; }    //!
            mass[i][j] = strToInt(temp);
            delete[] temp;
        }
    }
}
 
void dateOutput(int **mass, int i) {
    for (int j(0); j < 3; j++) cout << (mass[i][j] < 10 ? "0" : "") << mass[i][j] << (j == 2 ? ";" : "."); //!
    cout << endl;
}
 
void dateFullOutput(int **mass, int n) {
    for (int i(0); i < n; i++) {
        for (int j(0); j < 3; j++)
            cout << (mass[i][j] < 10 ? "0" : "") << mass[i][j] << (j == 2 ? ";" : ".");             //!
        cout << endl;
    }
}
 
void dateSwap(int *arr1, int *arr2) {
    int *temp = new int[3];
    for (int i(0); i < 3; i++) {
        temp[i] = arr1[i];
        arr1[i] = arr2[i];
        arr2[i] = temp[i];
    }
    delete[] temp;
}
 
int datecmp(int **arr1, int i, int index) {
    return (arr1[i][index] > arr1[i + 1][index]) ? 1 : (arr1[i][index] == arr1[i + 1][index]) ? datecmp(arr1, i, index - 1) : 0;//!
}
 
void dateSort(int **mass, int n) {
    for (int i = n - 1; i > 0; i--)
        for (int j = 0; j < i; j++)
            if (datecmp(mass, j, 2)) dateSwap(mass[j], mass[j + 1]);    //!
}
 
void dateDelete(int **mass, int n) {
    for (int i = 0; i < n; i++) delete[] mass[i];
    delete[] mass;
}

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2016, 20:13
Ответы с готовыми решениями:

Программа поиска в массиве структур, содержащих объединения
Доброе время суток. Для начала опишу ситуацию. Есть программа поиска...

Рекурсивная функция (задана система условий). Просьба проверить мой код
Задачу прикрепляю скрином. Сам код: #include &lt;iostream&gt; using namespace...

Программа поиска сотрудников с указанным именем в массиве структур
#include &lt;iostream&gt; struct info { char fio ; } ; int main() { setlocale...

Реализовать функцию поиска по заданному полю в массиве структур (файловый ввод/вывод)
Имеется информация о клиентах телефонной компании и предоставляемых им услугах....

В массиве найти и напечатать номера (индексы) локальных максимумов (Прокомментировать код)
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2016, 20:13

Функция для обмена элементов в массиве структур
Пытаясь написать функцию сортировки массива из структур столкнулся с проблемой....

Функция поиска минимума в двумерном массиве
Сама функция из юнита double minimum(double **arr, int n) { double min =...

Функция поиска наибольшего значение в одномерном массиве
Написал только функцию вывода массива: void PrintArray(){ srand (time (0));...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru