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

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

Войти
Регистрация
Восстановить пароль
 
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
#1

Обьединение в С. - C++

31.10.2009, 19:10. Просмотров 674. Ответов 8
Метки нет (Все метки)

Данные о продукции, выпускаемой машиностроительным предприятием, оформлены в виде массива объединений. написать программу ,которая вводит данные в память машины в диалоге, выводит данные виде таблицы и выполняет указанное задание
Без использования указателей на объедение
Вот такие поля там
№ Наименование Масса Номер по каталогу Цена Дата выпуска
Задание
Отсортировать данные о единицах выпускаемой продукции дате выпуска в порядке не убыванияю.
Программисты пожалуйста помогите я не могу сделать
Дата выпуска имеет такой формат 12.06.1990
Лабораторная работа по обьеденением я ее уже 2 недели думаю как делать и не получается даже придумать ничего как по дате сортировать помогите пожалуйста заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Эксперт С++
9454 / 5467 / 926
Регистрация: 25.07.2009
Сообщений: 10,493
01.11.2009, 01:30     Обьединение в С. #2
Вот
так
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
124
125
126
127
128
129
130
131
132
133
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define STR_LEN 255
#define MAX_PRODUCTS 100
 
typedef struct {
    int day;
    int month;
    int year;
} Date_t;
 
typedef struct {
    int cat_id; /* номер по каталогу */
    char name[STR_LEN]; /* наименование */
    double weight; /* масса */
    double price; /* цена */
    Date_t date; /* дата выпуска */
} Product_t;
 
/* сравнение дат выпуска по возрастанию */
int cmpByDateAsc ( const void *first, const void *second ) {
    Date_t a = (*(Product_t *)first).date;
    Date_t b = (*(Product_t *)second).date;
    if ( a.year == b.year ) {
        if ( a.month == b.month ){
            return (a.day - b.day);
        }
        else {
            return (a.month - b.month);
        }
    }
    else {
        return (a.year - b.year);
    }
}
 
/* сравнение дат выпуска по убыванию */
int cmpByDateDesc ( const void *first, const void *second ) {
    return cmpByDateAsc(second, first);
}
 
/* вывод содержимого структуры Product_t */
void prnProduct(Product_t p){
    printf("Catalog id:\t\t%d\n", p.cat_id);
    printf("Name:\t\t\t%s\n", p.name);
    printf("Weight:\t\t\t%.3f\n", p.weight);
    printf("Price:\t\t\t%.2f\n", p.price);
    printf("Manufactured date:\t%02d.%02d.%4d\n", p.date.day, p.date.month, p.date.year);
}
 
/* ввод значений структуры Product_t с незатейливой проверкой данных */
Product_t getProduct(void){
    Product_t p;
    char *correct = "yes";
    char buf[STR_LEN];
    int good_date = 0;
    do {
        printf("Catalog id: ");
        fgets(buf, STR_LEN, stdin);
        p.cat_id = atoi(buf);
        printf("Name: ");
        fgets(buf, STR_LEN, stdin); /* на случай, если название из двух+ слов */
        buf[strlen(buf) - 1] = '\0'; /* удалить \n */
        strcpy(p.name, buf);
        printf("Weight: ");
        fgets(buf, STR_LEN, stdin);
        p.weight = atof(buf);
        printf("Price: ");
        fgets(buf, STR_LEN, stdin);
        p.price = atof(buf);
        do {
            printf("Date (dd.mm.yyyy): ");
            fgets(buf, STR_LEN, stdin);
            if ( sscanf(buf, "%d.%d.%d", &p.date.day, &p.date.month, &p.date.year) == 3 )
                good_date = ( p.date.day >= 1 && p.date.day <= 31 && p.date.month >= 1 &&
                            p.date.month <= 12 && p.date.year >= 1970 && p.date.year <= 2029 );
            else
                good_date = 0;
        } while ( !good_date );
        printf("\nConfirm values:\n");
        prnProduct(p);
        printf("It is correct? (yes/no): ");
        fgets(buf, STR_LEN, stdin);
        buf[strlen(buf) - 1] = 0;
    } while ( strcmp(buf, correct) );
    return p;
}
        
int main ( void ) {
    Product_t products[MAX_PRODUCTS];
    int i, count;
    char buf[STR_LEN];
    
    count = 0;
    while ( count < MAX_PRODUCTS ) {
        printf("\nProducts left: %d\nEnter a new one:\n", MAX_PRODUCTS - count);
        products[count] = getProduct();
        count++;
        printf("Continue? (yes/no): ");
        fgets(buf, STR_LEN, stdin);
        if ( strcmp(buf, "yes\n") != 0 )
            break;
    }
    
    if ( !count ){
        printf("No products entered!\n");
        exit(1);
    }
    
    printf("Unsorted:\n");
    printf(" #\tCat_id\tWeight\tPrice\tName\tManufactured date\n");
    for ( i = 0; i < count; i++ )
        printf("%3d\t%6d\t%6.3f\t%3.2f\t%s\t%02d.%02d.%4d\n", i, products[i].cat_id, products[i].weight, 
            products[i].price, products[i].name, products[i].date.day, products[i].date.month, products[i].date.year);
    
    qsort(products, count, sizeof(Product_t), cmpByDateAsc);
    printf("By date ascendant:\n");
    printf(" #\tCat_id\tWeight\tPrice\tName\tManufactured date\n");
    for ( i = 0; i < count; i++ )
        printf("%3d\t%6d\t%6.3f\t%3.2f\t%s\t%02d.%02d.%4d\n", i, products[i].cat_id, products[i].weight, 
            products[i].price, products[i].name, products[i].date.day, products[i].date.month, products[i].date.year);
    
    qsort(products, count, sizeof(Product_t), cmpByDateDesc);
    printf("By date descendant:\n");
    printf(" #\tCat_id\tWeight\tPrice\tName\tManufactured date\n");
    for ( i = 0; i < count; i++ )
        printf("%3d\t%6d\t%6.3f\t%3.2f\t%s\t%02d.%02d.%4d\n", i, products[i].cat_id, products[i].weight, 
            products[i].price, products[i].name, products[i].date.day, products[i].date.month, products[i].date.year);
    
    return 0;
}
как-то... К русскому языку сами приучайте
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
01.11.2009, 02:16  [ТС]     Обьединение в С. #3
мне не через структурку надо а чеез об'едененіе надо
easybudda
Эксперт С++
9454 / 5467 / 926
Регистрация: 25.07.2009
Сообщений: 10,493
01.11.2009, 13:13     Обьединение в С. #4
Цитата Сообщение от sergeu90 Посмотреть сообщение
мне не через структурку надо а чеез об'едененіе надо
Объединение (union) - это структура, в которой все её элементы используют один и тот же участок памяти. Для данного случая неприменимо.
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
01.11.2009, 13:40  [ТС]     Обьединение в С. #5
ну ведь у меня лаба такая надо не через структуру а через объеденение учитель просто скажет что это не через объеденение
easybudda
Эксперт С++
9454 / 5467 / 926
Регистрация: 25.07.2009
Сообщений: 10,493
01.11.2009, 15:03     Обьединение в С. #6
Цитата Сообщение от sergeu90 Посмотреть сообщение
ну ведь у меня лаба такая надо не через структуру а через объеденение учитель просто скажет что это не через объеденение
Я думаю - это ошибка в терминологии. Вот Вам пример
объединения
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main(){
    int i;
    union {
        int ival;
        char cval[4];
    } un;
    
    un.ival = 0x4b435546;
    for ( i = 0; i < 4; i++ )
        putchar(un.cval[i]);
    putchar('\n');
    
    return 0;
}
... В любом случае, за неимением других вариантов покажите этот - вдруг прокатит? В конце-концов програмка-то работает...

Не по теме:

В одном довольно известном московском издательстве зав. производством и худ. редактор градиентную заливку "растяжкой" называют. За 10+ лет, что я их знаю, так и не удалось объяснить, где растяжки бывают

sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
01.11.2009, 15:37  [ТС]     Обьединение в С. #7
не у нас препод сам работате на заводе начальник по отведелу АСУ он в этом смысле жесток нужно написать используя обьеденения помоги плиззз

Добавлено через 25 минут
помогите написать задачу используя объеденения пожалуйста не прибегая к указателям,заранее спасибо всем кто попытается спасти меня
accept
4819 / 3239 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
02.11.2009, 10:42     Обьединение в С. #8
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    union item {
    
        struct {
            int a, b, c;
        } kind1;
 
        struct {
            float a, b, c;
        } kind2;
             
        struct {
            char a;
            double b;
            int c, d;
        } kind3;
    
    } u[10];
Добавлено через 5 минут
№ Наименование Масса Номер по каталогу Цена Дата выпуска
это, по ходу, описать отдельно и как подструктуру вставить в каждую структуру
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2009, 11:04     Обьединение в С.
Еще ссылки по теме:

SQL Server Обьединение 2 запросов
Обьединение таблиц C++ Builder БД
C++ Обьединение двух строк LPCTSTR
Обьединение в с++ C++
MS Access Обьединение таблиц

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт CАвтор FAQ
17404 / 5642 / 353
Регистрация: 30.03.2009
Сообщений: 15,434
Записей в блоге: 26
02.11.2009, 11:04     Обьединение в С. #9
Чистый union сам по себе бесполезен. Всегда нужна какая-то дополнительная информация, чтобы знать, к какому из элементов union'а надо обращаться
Yandex
Объявления
02.11.2009, 11:04     Обьединение в С.
Ответ Создать тему
Опции темы

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