Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
 Аватар для aka_Kiss
0 / 0 / 0
Регистрация: 23.10.2009
Сообщений: 29

Структуры.

06.11.2009, 22:41. Показов 1210. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задачка, очень запутанная, но тем она становится более интересной.
Но у меня трабл в решении. Прошу помощи))

Вот задание:
1. объявить тип данных для хранения информации о компьютерных комплектующих с параметрами: дата изготовления, цена, вид (видеоплата (макс. разрешающая способность, макс. частота, объем видеопамяти), звуковая плата (разрядность, частотный диапазон, амплитуда входного сигнала), сетевая плата (скорость обмена, вид интерфейса));
2. описать, с помощью объявленного типа, заданные переменные и присвоить им заданные значения;
3. объявить тип данных для хранения целых чисел в двоично-десятичном формате (BCD);
4. описать, с помощью объявленного типа, переменные с заданными именами и указатели на них;
5. описать указатель на заданный указатель;
6. написать функцию, выполняющую произведение над двоично-десятичными числами;
7. объявить указатель на функцию;
8. задать начальные значения переменных с использованием:
1) имени переменной,
2) указателя на нее,
3) указателя на указатель;
9. выполнить заданные действия:
1) с использованием вызова функций,
2) с использованием указателя на функцию.

Результаты выполнение п.п.1-2 и 8-9 вывести на экран в виде таблицы. Для структур вывести адреса и значения каждого поля. Для указателей выводить адрес и значение указателя, а также содержимое области памяти, на которую указывает указатель.

Вот, то, на что хватило моего ума:
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
//функция вывода таблицы результатов п.п. 1-2 и 8-9
void print_ob (float a, int b, char c) {
  printf("+---------------+---------------+---------------+----------------+\n");
  printf("|   peremenaya  |     razmer    |     adres     |    znachenie   |\n");
  printf("|---------------|---------------|---------------|----------------|\n");
  printf("|      cena     |       %d       |     %x      |      %f      |\n",sizeof(a),&a,a);
  printf("|       vid     |       %d       |     %x      |      %d      |\n",sizeof(b),&b,b);
  printf("|      data     |       %d       |     %x      |      %s      |\n",sizeof(c),&c,c);
  printf("+---------------+---------------+---------------+----------------+\n");
}
//функция умножения двоично-десятичных чисел
struct bcd multiplication (struct bcd x, struct bcd y, struct bcd z, struct bcd a) {
  pr=x*y*z*a;//не так, да??
  return pr;
}
 
//описываем типы компьютерных компмектующих
  struct video {
    int allowing_ability;
    int frequency;
    int volume;
  };
 
  struct audio {
    int bits;
    int frequency_range;
    int amplitude;
  };
 
  struct net {
    int speed_of_exchange;
    char interface[100];
  };
  
  enum kind {
    video=0;
    audio=1;
    net=2;
  };
  
  struct eguipment {
    kind ek;
    float cena;
    int vid;
    char data[10];
    union {
        struct video x;
        struct audio v;
        struct network w;
    };
  };
  
//описываем тип записи двоично-десятичных чисел
  struct bcd {
    unsigned int low : 4;
    unsigned int  hi : 4;
  };
но вот в главной программе вообще хавайся:
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
void main() {
  
    eguipment u, v, w;
    
  clrscr();
  
  //выбираем вид
  cout<<"VVIDITE VID COMPLEKTUUSCHEGO KOMP'UTERA \n\n\n";
  cout<<"0 - video card \n\n 
         1 - sound card \n\n
         2 - network card \n\n;
  scanf ("%d", &u.ek);
  
 //выбрали и начинаем вводить данные
  
  if (u.ek==video) {
  cout<<"vvedite cenu tovara\n";
  cin>>u.cena;
  cout<<"\nvvedite datu izgotovleniya\n";
  cin>>u.data;
  cout<<"\nvvedite vid tovara\n";
  cin>>u.vid;
  cout<<"\nvvedite maximalnoe razreahenie videokarti\n";
  cin>>u.x.allowing_ability;
  cout<<"\nvvedite maximalnuy 4astotu videokarti\n";
  cin>>u.x.frequency;
  cout<<"\nvvedite objem videokarti\n";
  cin>>u.x.volume;
  print_ob (cena, vid, data);
  printf("|allowing_ability|       %d       |     %x      |      %d      |\n",sizeof(u.x.allowing_ability),&u.x.allowing_ability,u.x.allowing_ability);
  printf("|   frequency    |       %d       |     %x      |      %d      |\n",sizeof(u.x.frequency),&u.x.frequency,u.x.frequency);
  printf("|    volume      |       %d       |     %x      |      %d      |\n",sizeof(u.x.volume),&u.x.volume,u.x.volume);
  printf("+----------------+----------------+-------------+--------------+\n"); 
  
  if(a.ek==audio) {
  cout<<"vvedite cenu tovara\n";
  cin>>u.cena;
  cout<<"\nvvedite datu izgotovleniya\n";
  cin>>u.data;
  cout<<"\nvvedite vid tovara\n";
  cin>>u.vid;
  cout<<"\nvvedite razryadnost\n";
  cin>>u.z->bits;
  cout<<"\nvvedite 4astotniy diapazon\n"; 
  cin>>u.z->frequency_range;
  cout<<"\nvvedite amplitudu\n";
  cin>>u.z->amplitude;
  print_ob (cena, vid, data);
  printf("|     bits      |       %d       |     %x      |      %d      |\n",sizeof(u.z->bits),&u.z->bits,u.z->bits);
  printf("|frequency_range|       %d       |     %x      |      %d      |\n",sizeof(u.z->frequency_range),&u.z->frequency_range,u.z->frequency_range);
  printf("|   amplitude   |       %d       |     %x      |      %d      |\n",sizeof(u.z->amplitude),&u.z->amplitude,u.z->amplitude);
  printf("+----------------+----------------+-------------+--------------+\n"); 
  
  
  //задаем начальные значения 
  
  //с использованием имени переменной
  struct bcd x = { 0x01, 0x02, 0x03, 0x04 };
  struct bcd y = { 0x02, 0x05, 0x01, 0x02 }; 
  struct bcd z = { 0x01, 0x01, 0x02, 0x03 };
  struct bcd a = { 0x04, 0x01, 0x05, 0x01 };
  
  //а как можно задать значение с использованием указателя
  b=&x;
  c=&y;
  d=&z;
  //и указателя на указатель??
  e=&b;
  f=&c; 
  
  pr=multiplication(x,y,z,a);
  print(b,c,d);
  
  //Как для указателей выводить адрес и значение указателя, 
  //а также содержимое области памяти, на которую указывает указатель
  
}

Помогите переделать этот черновик в отлично работающую программку.


переменные и начальные значения:
u-видеоплата
v-звуковая плата
w-сетевая плата

переменные: x, y, z, a

указатели: b, c, d

указатели на указатели: e, f
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.11.2009, 22:41
Ответы с готовыми решениями:

Помещение структуры в вектор, удаление структуры, изменение элементов структуры
Здравствуйте. Помогите разобраться с тем, как: 1 - находить элементы в векторе зная уникальный элемент структуры. 2 - удалять...

Динамические структуры данных. Программа ввода в структуры и вывода информации из неё.
Автоматизированная информационная система на железнодорожном вокзале содержит сведения об отправлении поездов дальнего следования. Для...

Функция внутри структуры использует указатель, как поле этой структуры
Коротко, есть класс A, описан в файле A_class.h ну и реализованы функции в A_class.cpp, есть файл GlobalItems.h, где хранятся глобальные...

12
 Аватар для aka_Kiss
0 / 0 / 0
Регистрация: 23.10.2009
Сообщений: 29
07.11.2009, 01:24  [ТС]
Зачем и что умножать не пойму. Да и куда приткнуть 4 переменных и 3 указателя да еще и 2 указателя на указатель??
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
07.11.2009, 07:51
C
1
2
3
4
struct bcd {
    unsigned int low : 4;
    unsigned int  hi : 4;
};
там для цикла, если делать умножение, то лучше
C
1
2
3
4
struct bcd {
    unsigned char r[10];
    int quant;
};
а число задавать наоборот r[0] - последняя цифра, quant - количество цифр в числе

C
1
    struct bcd x = { { 0x4, 0x3, 0x2, 0x1 }, 4 };
число 1234
0
 Аватар для aka_Kiss
0 / 0 / 0
Регистрация: 23.10.2009
Сообщений: 29
09.11.2009, 01:03  [ТС]
сделала рабочим код:
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
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<iostream.h>
 
  struct video {
    int allowing_ability;
    int frequency;
    int volume;
  };
 
  struct audio {
    int bits;
    int frequency_range;
    int amplitude;
  };
 
  struct net {
    int speed_of_exchange;
    char interface[100];
  };
 
  enum kind {
    video=0,
    audio=1,
    net=2
  };
 
  struct eguipment {
    kind ek;
    float cena;
    int vid;
    char data[10];
    union {
    struct video x;
    struct audio z;
    struct net y;
    };
  };
 
void print_ob (float cena, int vid, char data[]) {
  printf("+----------------+----------------+---------------+----------------+\n");
  printf("|   peremenaya   |     razmer     |     adres     |    znachenie   |\n");
  printf("|----------------|----------------|---------------|----------------|\n");
  printf("|      cena      |       %d        |     %x      |      %.2f      |\n",sizeof(cena),&cena,cena);
  printf("|       vid      |       %d        |     %x      |      %d         |\n",sizeof(vid),&vid,vid);
  printf("|      data      |       %d        |     %x      |      %s         |\n",sizeof(data),&data,data);
  printf("+----------------+----------------+---------------+----------------+\n");
}
 
  void main() {
 
    eguipment u, v, w;
 
  clrscr();
 
  cout<<endl<<"VVIDITE VID COMPLEKTUUSCHEGO KOMP'UTERA"<<endl<<endl;
  cout<<"0 - video card" <<endl<<endl<<
    "1 - sound card" <<endl<<endl<<
    "2 - network card" <<endl<<endl;
  scanf ("%d", &u.ek);
 
  if (u.ek==video) {
  cout<<endl<<endl<<"DANNIE VIDEOCARTI"<<endl<<endl;
  cout<<"vvedite cenu tovara\n";
  cin>>u.cena;
  cout<<"\nvvedite datu izgotovleniya\n";
  cin>>u.data;
  cout<<"\nvvedite vid tovara\n";
  cin>>u.vid;
  cout<<"\nvvedite maximalnoe razreahenie videokarti\n";
  cin>>u.x.allowing_ability;
  cout<<"\nvvedite maximalnuy 4astotu videokarti\n";
  cin>>u.x.frequency;
  cout<<"\nvvedite objem videokarti\n";
  cin>>u.x.volume;
  print_ob (u.cena,u. vid,u. data);
  printf("|allowing_ability|       %d        |     %x      |      %d         |\n",sizeof(u.x.allowing_ability),&u.x.allowing_ability,u.x.allowing_ability);
  printf("|   frequency    |       %d        |     %x      |      %d         |\n",sizeof(u.x.frequency),&u.x.frequency,u.x.frequency);
  printf("|    volume      |       %d        |     %x      |      %d         |\n",sizeof(u.x.volume),&u.x.volume,u.x.volume);
  printf("+----------------+----------------+---------------+----------------+\n");
  }
 
  if(u.ek==audio) {
  cout<<endl<<endl<<"DANNIE AUDIO CARTI"<<endl<<endl;
  cout<<"vvedite cenu tovara\n";
  cin>>u.cena;
  cout<<"\nvvedite datu izgotovleniya\n";
  cin>>u.data;
  cout<<"\nvvedite vid tovara\n";
  cin>>u.vid;
  cout<<"\nvvedite razryadnost\n";
  cin>>u.z.bits;
  cout<<"\nvvedite 4astotniy diapazon\n";
  cin>>u.z.frequency_range;
  cout<<"\nvvedite amplitudu\n";
  cin>>u.z.amplitude;
  print_ob (u.cena,u.vid, u.data);
  printf("|     bits       |       %d        |     %x      |      %d         |\n",sizeof(u.z.bits),&u.z.bits,u.z.bits);
  printf("|frequency_range |       %d        |     %x      |      %d         |\n",sizeof(u.z.frequency_range),&u.z.frequency_range,u.z.frequency_range);
  printf("|   amplitude    |       %d        |     %x      |      %d         |\n",sizeof(u.z.amplitude),&u.z.amplitude,u.z.amplitude);
  printf("+----------------+----------------+---------------+----------------+\n");
  }
 
  if(u.ek==net) {
  cout<<endl<<endl<<"DANNIE NETWORK CARTI"<<endl<<endl;
  cout<<"vvedite cenu tovara\n";
  cin>>u.cena;
  cout<<"\nvvedite datu izgotovleniya\n";
  cin>>u.data;
  cout<<"\nvvedite vid tovara\n";
  cin>>u.vid;
  cout<<"\nvvedite skorost' obmena\n";
  cin>>u.y.speed_of_exchange;
  cout<<"\nvvedite vid interfeisa\n";
  cin>>u.y.interface;
  print_ob (u.cena,u.vid, u.data);
  printf("|speed of exchange|      %d        |     %x      |      %d         |\n",sizeof(u.y.speed_of_exchange),&u.y.speed_of_exchange,u.y.speed_of_exchange);
  printf("|   interface    |       %d      |     %x      |      %s         |\n",sizeof(u.y.interface),&u.y.interface,u.y.interface);
  printf("+----------------+----------------+---------------+----------------+\n");
  }
   getch();
}
но я не пойму куда лепить столько переменных, указателей и указателей на указатели !!

Добавлено через 1 минуту
только что там можно хранить в двоично-десятичном формате?? тем более перемножать?? хм..

Добавлено через 6 минут
accept,
вот программка складывает числа:
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
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
 
struct BCD
{unsigned int low:4;
 unsigned int hi:4;} se,sd,Rez;
 
BCD sum(BCD a,BCD b)
{BCD t;
t.low=0; t.hi=a.hi+b.hi;
 if (t.hi>9) { t.low+=1; t.hi-=10; }
 t.low+=a.low+b.low;
 return t;
 }
void main()
{clrscr();
unsigned int q;
 cout<<"Vvedite 1-e dvusnachnoe chislo:\n\n";
 printf("desjatki:\n");scanf("%d",&q);
 se.low=q;
 printf("edinici:\n");scanf("%d",&q);
 se.hi=q;
 printf("\n\n4islo: %d%d",se.low,se.hi);
 printf("\n\nVVedite 2-e dvusnachnoe chislo:\n\n");
 printf("desjatki:\n");scanf("%d",&q);
 sd.low=q;
 printf("edinici:\n");scanf("%d",&q);
 sd.hi=q;
 printf("\n\n4islo: %d%d",sd.low,sd.hi);
 Rez=sum(se,sd);
printf("\n\n\n Summa=%d%d",Rez.low,Rez.hi);
        getch();}
а как тогда будет
по-твоему??
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
09.11.2009, 02:48
Применение указателей, структур и объединений

вот эта программка, которая складывает числа, она работает с двузначными, а я предлагаю сколько угодно значные, для начала десятизначные
там нужно сделать что-то вроде умножения в столбик
0
 Аватар для aka_Kiss
0 / 0 / 0
Регистрация: 23.10.2009
Сообщений: 29
09.11.2009, 03:04  [ТС]
оу, там непонятно...
0
 Аватар для aka_Kiss
0 / 0 / 0
Регистрация: 23.10.2009
Сообщений: 29
10.11.2009, 23:58  [ТС]
но очень хочется понять и доделать прогу...
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
11.11.2009, 02:21
там функция не сделана

C
1
2
3
4
struct bcd multiplication (struct bcd x, struct bcd y, struct bcd z, struct bcd a) {
  pr=x*y*z*a;//не так, да??
  return pr;
}
для перемножения четырёх чисел нужно использовать функцию перемножения двух чисел
0
 Аватар для aka_Kiss
0 / 0 / 0
Регистрация: 23.10.2009
Сообщений: 29
11.11.2009, 13:20  [ТС]
угу, но как??
0
 Аватар для aka_Kiss
0 / 0 / 0
Регистрация: 23.10.2009
Сообщений: 29
13.11.2009, 17:53  [ТС]
а в задании не написано, что ф-ция должна перемножать именно два числа
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
14.11.2009, 02:04
если будет функция переменожения двух чисел, то на её основе можно сделать функцию перемножения любого количества

Добавлено через 2 минуты
её можно сохранить и использовать в других программах
1
 Аватар для aka_Kiss
0 / 0 / 0
Регистрация: 23.10.2009
Сообщений: 29
14.11.2009, 23:35  [ТС]
я запуталась


Добавлено через 2 минуты
куда приткнуть столько переменных и указателей ??
0
 Аватар для aka_Kiss
0 / 0 / 0
Регистрация: 23.10.2009
Сообщений: 29
16.11.2009, 20:31  [ТС]
Огромное спасибо всем за помощь !!
Программку допечатала))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.11.2009, 20:31
Помогаю со студенческими работами здесь

Структуры, массивы структур (как можно присваивать(инициализировать) значения полям структуры)
Есть у меня вот такая структура, например struct Subject { int cost; int Volume; }; Потом создаю экземпляр, Subject G; ...

Вывод структуры, строка как элемент структуры
Описать структуру с именем TRAIN, содержащую следующие поля: □ название пункта назначения; □ номер поезда; □ время...

Исследование структуры FILE или: что вообще можно выудить из этой структуры, указатель на которую мы получаем при открытии файла?
Ничего нельзя. Итак, новичкам напомню, что после выполнения кода FILE* f= fopen (&quot;file.txt&quot;, &quot;w&quot;); в переменной f...

Структуры. Работа с файлами, содержащими структуры
2) Дана совокупность сведений, каждое из которых состоит из следующих рекви-зитов: фамилия и инициалы автора – 25 знаков; название книги –...

Оператор if и структуры. Возвращение структуры из функции
Здравствуйте, имеется такая вот функция. void InputStructEmployee (int StructSize) { StructEmployee UsrStruct; string...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru