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

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

Восстановить пароль Регистрация
 
iamnewbee
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 3
05.06.2016, 20:13     Просьба прокомментировать код(функция поиска в массиве структур) #1
Ребят, друг помог - скинул код, но возможности прокомментировать его у него уже нет, может вы поможете
задание:дан файл 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2016, 20:13     Просьба прокомментировать код(функция поиска в массиве структур)
Посмотрите здесь:

C++ В массиве найти и напечатать номера (индексы) локальных максимумов (Прокомментировать код)
Программа поиска сотрудников с указанным именем в массиве структур C++
C++ Программа поиска в массиве структур, содержащих объединения
Функция поиска наибольшего значение в одномерном массиве C++
C++ Рекурсивная функция для поиска наименьшего значения в массиве
C++ Реализовать функцию поиска по заданному полю в массиве структур (файловый ввод/вывод)
C++ Функция для обмена элементов в массиве структур
Функция поиска минимума в двумерном массиве C++

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

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

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