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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
iamnewbee
0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 3
#1

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

05.06.2016, 20:13. Просмотров 92. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.06.2016, 20:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Просьба прокомментировать код(функция поиска в массиве структур) (C++):

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

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

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

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

В массиве найти и напечатать номера (индексы) локальных максимумов (Прокомментировать код) - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main () { int n, i; cin &gt;&gt; n; int *a =...

Функция поиска минимума в двумерном массиве - C++
Сама функция из юнита double minimum(double **arr, int n) { double min = arr; for (int i = 0; i &lt; n; i++) { for (int j = 0; j &lt;...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.06.2016, 20:13
Привет! Вот еще темы с ответами:

Функция поиска наибольшего значение в одномерном массиве - C++
Написал только функцию вывода массива: void PrintArray(){ srand (time (0)); const int n = 10; int a; for (int i = 0; i &lt; n;...

Функция поиска в массиве, количества элементов подходящих условию - C++
Подскажите пожалуйста, почему при компиляции прекращается работа программы, в чем ошибка? #include &lt;iostream&gt; #include &lt;cmath&gt; ...

Рекурсивная функция для поиска наименьшего значения в массиве - C++
рекурсивная функция (min) для поиска наим знач в массиве. Произвольно выходит из рекурсии по непонятной логике #include &lt;iostream&gt; ...

Рекурсивная функция для последовательного поиска в массиве из n целых чисел - C++
Разработать программу, использующую рекурсивную функцию для выполнения задачи. Последовательный поиск в массиве из n целых чисел ...


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

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

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