0 / 0 / 1
Регистрация: 11.02.2018
Сообщений: 133
1

Какова роль указателей в сложных структурах данных?

10.03.2019, 06:44. Показов 1627. Ответов 1

Почему часто удобно обращаться к данным через указатель? Что в этом коде обозначает p ?


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
#include <iostream>
#include <conio.h>
#include <cstring> //для ф-ции strcmp
#define N 8
 
 
using namespace std;
 
/*структура базы данных*/
struct dataBase
{
  char name[33];
  unsigned short int sumContribution;
  char date[9];
  char advocate[23];
};
 
 
/*прототипы*/
bool ReadBase(struct dataBase *p, int* indArr, int* indArr2);
int output(dataBase *db, int* indArr);
int bubbleSortName(dataBase *db, int* indArr);
int bubbleSortSum(dataBase *db, int* indArr);
 
 
/* чтение базы из файла */
bool ReadBase(dataBase *p, int* indArr, int* indArr2) //указатель на переменную с типом структуры, указатель на индексные массивы
{
  FILE *base = fopen("base3.dat", "rb");
  if (base == NULL) { cout << "ошибка!" << endl; return 1; }
  for (int i = 0, advSize = 22, nameSize = 32, dateSize = 8; i<N; i++)
  {
    fread(p[i].name, sizeof(char), nameSize, base);  //(где 1 - количество ячеек пам¤ти, 32 - количество символов в ячейках)
    fread(&(p[i].sumContribution), sizeof(unsigned short int), 1, base);
    fread(p[i].date, sizeof(char), dateSize, base);
    fread(p[i].advocate, sizeof(char), advSize, base);
    p[i].name[nameSize] = 0;
    p[i].advocate[advSize] = 0;
    p[i].date[dateSize] = 0;
    indArr[i] = i; //создание индексного массива
    indArr2[i] = i; //создание индексного массива2
  }
  fclose(base);
  return 0;
}
 
/* вывод на экран */ 
int output(dataBase *db, int* indArr)
{
 
  for (int i = 0; i<N; i++)
  {
    int pos = indArr[i];
    cout << db[pos].name << "\t" << db[pos].sumContribution << "\t" << db[pos].date << "\t" << db[pos].advocate << endl;
 
  }
 
  cout << "_______________________________________________________________________________" << "\n" << endl;
 
  return 0;
}
 
 
/* сортировка методом пузырька по фамилии вкладчика (name) */
int bubbleSortName(dataBase *db, int* indArr)
{
  int temp;
  for (int i = 0; i<N - 1; i++)
  {
    for (int j = 0; j<N - 1 - i; j++)
      if (strcmp(db[indArr[j]].name, db[indArr[j + 1]].name)>0) //сравниваем элементы массива, через индексный массив
      {
        // меняем элементы местами. Элементы массива db фактически не перемещаются, но мы меняем их порядок в индексном массиве.
        temp = indArr[j];
        indArr[j] = indArr[j + 1];
        indArr[j + 1] = temp;
      }
 
  }
 
  return 0;
}
 
 
/* сортировка методом пузырька по сумме вклада (sumContribution) */
int bubbleSortSum(dataBase *db, int* indArr)
{
  int temp2;
  for (int i = 0; i<N-1; i++)
  {
    for (int j = 0; j<N-1; j++)
      if (db[indArr[j]].sumContribution > db[indArr[j + 1]].sumContribution) //сравниваем элементы массива, через индексный массив 
     
      {
        // меняем элементы местами. Элементы массива db фактически не перемещаются, но мы меняем их порядок в индексном массиве
        temp2 = indArr[j];
        indArr[j] = indArr[j + 1];
        indArr[j + 1] = temp2;
      }
 
  }
  
  return 0; 
}
 
 
int main()
{       
  dataBase* db = new dataBase[N]; //создание динамического массива db
  int* indArr = new int[N]; //индексный массив динамический indArr
  int* indArr2 = new int[N]; //индексный массив динамический indArr2
 
  /* вызов функции чтения из файла */
  ReadBase(db, indArr, indArr2); 
  /* вывод на экран */
  output(db, indArr);  
 
  
  /* вызов функции сортировки пузырьком по имени */
  bubbleSortName(db, indArr);   
  /* вывод на экран */
  output(db, indArr);  
 
  
  /* вызов функции сортировки пузырьком по сумме вклада */
  bubbleSortSum(db, indArr2); 
  /* вывод на экран */
  output(db, indArr2);
  
 
 
  delete [] db;
  getch();
  return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.03.2019, 06:44
Ответы с готовыми решениями:

Какова роль * в функции glob()?
$filelist = glob(&quot;*.txt&quot;);// выведет все файлы в директории, которые оканчиваются на txt $filelist...

Какова роль таймера в микроконтроллерах?
Какова роль таймера в микроконтроллерах, как он генерирует прерывания и что нужно вкладывать в...

Какова роль функции main
Здравствуйте. Подскажите пожалуйста зачем в программе нужна функция main (какую роль она...

Какова роль этого класса
AvailabilityNotifier

1
"C with Classes"
1581 / 1360 / 511
Регистрация: 16.08.2014
Сообщений: 5,647
Записей в блоге: 1
10.03.2019, 07:27 2
Лучший ответ Сообщение было отмечено Muriam как решение

Решение

Цитата Сообщение от Muriam Посмотреть сообщение
Почему часто удобно обращаться к данным через указатель? Что в этом коде обозначает p ?
что бы не копировать всю структуру в функцию а передать только указатель на ее начало(грубо говоря)

Добавлено через 1 минуту
и еще если указатель не константный объект можно изменить в функции, если без указателя передать по значению, все изменения сделанные в функции никак не отразятся на исходном объекте
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.03.2019, 07:27
Помогаю со студенческими работами здесь

Какова роль константы P в данном выражении?
Что означает команда: const p:double=pi/180; На примере команды:...

Какова роль new int в приведенном коде
Делаю лабораторную. Вот хочу разобраться. Это часть кода, где мы вводим двумерный массив. а что...

Какова роль нейтрино в ядерных реакциях?
Какова роль нейтрино в ядерных реакциях?

Какова роль логической переменной в приведенном случае
Роль логической переменной в данном случае. Program Symbol; Var A: string; n, i: integer;...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru