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

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

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

Показать сообщение отдельно
ps10n1ck
 Аватар для 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).
 
Текущее время: 04:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru