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

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

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

Структуры. - C++

06.11.2009, 22:41. Просмотров 853. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.11.2009, 22:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Структуры. (C++):

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

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

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

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

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

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

12
aka_Kiss
0 / 0 / 0
Регистрация: 23.10.2009
Сообщений: 29
07.11.2009, 01:24  [ТС] #2
Зачем и что умножать не пойму. Да и куда приткнуть 4 переменных и 3 указателя да еще и 2 указателя на указатель??
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2009, 07:51 #3
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  [ТС] #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
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
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.11.2009, 02:48 #5
применение указателей, структур и объединений

вот эта программка, которая складывает числа, она работает с двузначными, а я предлагаю сколько угодно значные, для начала десятизначные
там нужно сделать что-то вроде умножения в столбик
0
aka_Kiss
0 / 0 / 0
Регистрация: 23.10.2009
Сообщений: 29
09.11.2009, 03:04  [ТС] #6
оу, там непонятно...
0
aka_Kiss
0 / 0 / 0
Регистрация: 23.10.2009
Сообщений: 29
10.11.2009, 23:58  [ТС] #7
но очень хочется понять и доделать прогу...
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.11.2009, 02:21 #8
там функция не сделана

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  [ТС] #9
угу, но как??
0
aka_Kiss
0 / 0 / 0
Регистрация: 23.10.2009
Сообщений: 29
13.11.2009, 17:53  [ТС] #10
а в задании не написано, что ф-ция должна перемножать именно два числа
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
14.11.2009, 02:04 #11
если будет функция переменожения двух чисел, то на её основе можно сделать функцию перемножения любого количества

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


Добавлено через 2 минуты
куда приткнуть столько переменных и указателей ??
0
aka_Kiss
0 / 0 / 0
Регистрация: 23.10.2009
Сообщений: 29
16.11.2009, 20:31  [ТС] #13
Огромное спасибо всем за помощь !!
Программку допечатала))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2009, 20:31
Привет! Вот еще темы с ответами:

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

Структуры. Вызов данных структуры по указателю. с++ - C++
Условие задачи: Помогите, пожалуйста, с как реализовать печать вообще не представляю.

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

Понятие структуры данных. Элементарные структуры данных. Простые структуры данных - C++
Понятие структуры данных. Элементарные структуры данных. Простые структуры данных: методы реализации, особенности в различных языках...


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

Или воспользуйтесь поиском по форуму:
13
Yandex
Объявления
16.11.2009, 20:31
Ответ Создать тему
Опции темы

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