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

Задание с использованием Объединения - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задать рандомное число http://www.cyberforum.ru/cpp-beginners/thread710282.html
Собственно когда каждый раз жму ctrl-f5, то выводит одно и тоже числоа. Как сделать так, чтобы каждый раз было разные? #include <stdio.h> #include <stdlib.h> #include <time.h> int main () {...
C++ Как мне найти позиции,с которых начинаются идти пакеты информации,и создать из этих позиций новый массив? Всех приветствую!!!Может мне кто нибудь подсказать,у кого время есть...Я с битами запутался-у меня последовательность бит с HDLC-флагами(01111110)идут они друг за другом,иногда прерываясь пакетами... http://www.cyberforum.ru/cpp-beginners/thread710278.html
Класс Список (list) и перегрузки, связанные с ним C++
Здравтсвуйте, я студент 2 курса и Пишу с вопросами по поводу некорректной работы моей программы... Текст моего задания (Лабороторная №2, Вариант 5): Списки и функциональное...
C++ Табулирование функции на отрезке
Доброго времени суток! Прошу о помощи с первой лабораторной работой по информатике, так как сроки поджимают, а сам, мягко говоря, плохо смыслю что нужно сделать, и времени на данном этапе жизни...
C++ Вставка символа в строку http://www.cyberforum.ru/cpp-beginners/thread710272.html
Как вставлять символ в определенное место строки? Задача примерно такая: идет строка из групп нулей и едениц,разделить эти группы пробелом.Вот как я представляю. b=str; for (i=1;i<=l;i++) {...
C++ Разработать класс String, который в дальнейшем будет использоваться для работы со строками. Всем доброго времени суток! Помогите пожалуйста т.к я не очень понимаю задание, что от меня требуется, распишите по пунктам, что мне делать. Вот задание: Разработать класс String, который в... подробнее

Показать сообщение отдельно
ps10n1ck
54 / 48 / 2
Регистрация: 10.11.2010
Сообщений: 132
27.11.2012, 16:07
т.к. ваши данные и для трапеции и для треугольника имеют одинаковый размер, то можно избежать указателей:
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
#include <iostream>
 
using std::cout;
using std::cin;
using std::endl;
 
typedef unsigned int uint;
#define M_PI       3.14159265358979323846
 
union SQUARE {
  struct TRIANGLE {
    uint nSideA;
    uint nSideB;
    uint nAngle;
    float fSquare;
  } Triangle;
 
  struct TRAPEZIUM {
    uint nBaseA;
    uint nBaseB;
    uint nHeight;
    float fSquare;
  } Trapezium;
} Square;
 
int main(){
  setlocale(LC_ALL, "rus");
  uint nMenu = 0;
  
  cout << "Вас приветствует программа для расчета площади фигур." << endl;
  cout << "Выберите фигуру для расчета площади: " << endl;
  cout << "1. Треугольник" << endl;
  cout << "2. Трапеция" << endl;
  cout << "0. Выйти" << endl;
  cout << "Ваш выбор: ";
  while(cin >> nMenu && nMenu != 0){
    switch(nMenu){
      case 1:
        cout << endl << "Вы выбрали [Треугольник]" << endl;
        cout << "Введите данные для расчета площади:" << endl;
        cout << "Сторона А: ";
        cin >> Square.Triangle.nSideA;
        cout << "Сторона B: ";
        cin >> Square.Triangle.nSideB;
        cout << "Угол между сторонами: ";
        cin >> Square.Triangle.nAngle;
        Square.Triangle.fSquare = 0.5f * Square.Triangle.nSideA * Square.Triangle.nSideB * sin(float(Square.Triangle.nAngle * M_PI / 180.0f)); 
        cout << "Площадь треугольника равна: " << Square.Triangle.fSquare << endl << endl;
        break;
 
      case 2:
        cout << endl << "Вы выбрали [Трапеция]" << endl;
        cout << "Введите данные для расчета площади:" << endl;
        cout << "Основание А: ";
        cin >> Square.Trapezium.nBaseA;
        cout << "Основание B: ";
        cin >> Square.Trapezium.nBaseB;
        cout << "Высота: ";
        cin >> Square.Trapezium.nHeight;
        Square.Trapezium.fSquare = 0.5f * (Square.Trapezium.nBaseA + Square.Trapezium.nBaseB) * Square.Trapezium.nHeight; 
        cout << "Площадь трапеции равна: " << Square.Trapezium.fSquare << endl << endl;
        break;
 
      default:
        break;
    }
    cout << "Выберите фигуру для расчета площади: " << endl;
    cout << "1. Треугольник" << endl;
    cout << "2. Трапеция" << endl;
    cout << "0. Выйти" << endl;
    cout << "Ваш выбор: ";
  }
 
return 0;
}
в этом случае структура SQUARE - будет занимать 16 байт (на 32битной арх.) но у вас есть возможность получить данные (стороны, угол или высоту) о последней фигуре.
можно уменьшить до 12 байт - (на 32битной арх.)
для этого необходимо немного изменить саму структуру:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
union SQUARE {
  struct TRIANGLE {
    uint nSideA;
    uint nSideB;
    uint nAngle;
  } Triangle;
 
  struct TRAPEZIUM {
    uint nBaseA;
    uint nBaseB;
    uint nHeight;
  } Trapezium;
 
    float fSquare;
} Square;
 
площадь можно тогда вычислять так:
Square.fSquare = ....
но в данном случае, как только вы посчитаете площадь, данные первого поля структуры TRIANGLE или TRAPEZIUM будут затерты.
union использует память под хранение одного поля - в вашем случае память выделится под самую большую переменную - структуру TRIANGLE или TRAPEZIUM - разницы нет.
А потом когда, вы посчитаете площадь, в выделенную память будет занесено значение fSquare (4байта), а остальные 8 байт будут содержать остатки от данных структуры (значения 2х последних полей структуры TRIANGLE или TRAPEZIUM).
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru