Объединения
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Подскажите пожалуйста как с помощью объедения массивов создать таблицу (пример: ФИО, дата рождения) и как в нее записать данные и вывести
можно пример кода (хотябы простенький)
можно пример кода (хотябы простенький)
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Чтобы создать таблицу не нужно объединять массивы. Таблица это массив структур. Или список структур.
Код: Выделить всё
struct Record {
char firstname[64];
char midname[64];
char lastname[64];
time_t birth;
};
Record theTable[256];
2B OR NOT(2B) = FF
задачу нужно решить с помощью объединений (вот в этом вся и загвоздка 

-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Это невозможно. Объединения нужны для того чтобы сделать структуру данных вида вида "поле1 ИЛИ поле 2 ИЛИ поле3 ... ИЛИ полеN", где ситуация когда ты записал полеX, а прочитал полеY считается ошибкой если X<>Y. Тебе нужна структура данных вида "поле1 И поле 2 И поле3 ... И полеN".
2B OR NOT(2B) = FF
В принципе ничего особо сложного в этом нет. Если для каждого поля таблицы создать свой массив данных нужного типа, то при добавлении каждой новой записи мы просто будем размещать поля записи в соответствующие им массивы. Вот примерно так это будет выглядеть...
Код: Выделить всё
typedef struct FULL_NAME_STRUCT
{
char Text[80];
} FULL_NAME;
typedef struct BIRTHDAY_STRUCT
{
unsigned char Day;
unsigned char Month;
unsigned short Year;
} BIRTHDAY;
typedef unsigned short data_size;
template <data_size Size>
class BirthdayTable
{
public:
BirthdayTable() : count(0)
{
names = new FULL_NAME[Size];
dates = new BIRTHDAY[Size];
}
~BirthdayTable()
{
delete[] names;
delete[] dates;
}
bool AddRecord(FULL_NAME& name, const BIRTHDAY& date)
{
if (count < Size)
{
names[count] = name;
dates[count] = date;
count++;
} else
{
return false;
}
return true;
}
data_size GetCount()
{
return count;
}
private:
data_size count;
FULL_NAME* names;
BIRTHDAY* dates;
};
int main(int argc, char* argv[])
{
BirthdayTable<1024> table;
FULL_NAME myname = {"Сидоров Пётр Иванович"};
BIRTHDAY birth = {22, 11, 1977};
table.AddRecord(myname, birth);
return 0;
}
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Только при чём тут были объединения - не понятно 

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Как я понимаю, речь шла не о типе данных union из языка С/С++, а об альтернативном способе структуризации данных. Т.е. вместо массива одной структуры для каждой записи у нас получается совокупность массивов для каждого поля таблицы.
наверное я не правильно объяснил вот условие задачи
Данные о продукции, выпускаемой машиностроительным предприятием, оформлены в виде массива объединений. Написать программу, которая вводит данные в память машины в диалоге, выводит данные в виде таблицы и выполняет указанное задание. Вывод данных осуществлять на экран дисплея.
Предусмотреть два варианта решения задачи:
1 без использования указателя на объединение;
2 с использованием указателя на объединение.
таблица такого типа
------------------------------------------------------------------------------------------
№|НАИМЕНОВАНИЕ|МАССА|НОМЕР ПО КАТАЛОГУ|ЦЕНА|ДАТА ВЫПУСКА|
------------------------------------------------------------------------------------------
Данные о продукции, выпускаемой машиностроительным предприятием, оформлены в виде массива объединений. Написать программу, которая вводит данные в память машины в диалоге, выводит данные в виде таблицы и выполняет указанное задание. Вывод данных осуществлять на экран дисплея.
Предусмотреть два варианта решения задачи:
1 без использования указателя на объединение;
2 с использованием указателя на объединение.
таблица такого типа
------------------------------------------------------------------------------------------
№|НАИМЕНОВАНИЕ|МАССА|НОМЕР ПО КАТАЛОГУ|ЦЕНА|ДАТА ВЫПУСКА|
------------------------------------------------------------------------------------------
-
- Сообщения: 1228
- Зарегистрирован: 26 фев 2004, 13:24
- Откуда: Pietari, Venäjä
- Контактная информация:
Вероятно, автор задания неправильно перевел с английского слово structure. Тебе нужна structure. Объединение (union) тебе не нужно. Оно используется для совсем других вещей, даже близко не похожих.
2B OR NOT(2B) = FF
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Да, скорее всего так и есть. Подразумевалось использования struct.Absurd писал(а):Вероятно, автор задания неправильно перевел с английского слово structure. Тебе нужна structure. Объединение (union) тебе не нужно. Оно используется для совсем других вещей, даже близко не похожих.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.