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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.92
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
#1

Программисты для вас - C++

05.11.2009, 18:51. Просмотров 3212. Ответов 38

Данные о продукции, выпускаемой машиностроительным предприятием, оформлены в виде массива объединений. написать программу ,которая вводит данные в память машины в диалоге, выводит данные виде таблицы и выполняет указанное задание
Без использования указателей на объедение
Вот такие поля там
№ Наименование Масса Номер по каталогу Цена Дата выпуска
Задание
Отсортировать данные о единицах выпускаемой продукции дате выпуска в порядке не убыванияю.
Программисты пожалуйста помогите я не могу сделать
Дата выпуска имеет такой формат 12.06.1990
Лабораторная работа по обьеденением я ее уже 2 недели думаю как делать и не получается даже придумать ничего как по дате сортировать помогите пожалуйста заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2009, 18:51     Программисты для вас
Посмотрите здесь:

C++ Уважаемые программисты по C++
C++ 3 элементарные заезженные программы, не займут у вас много времени)
C++ Курсовая работа!прошу ответить вас)
C++ пожалуйста решите. для вас эт ерунда(чем быстре тем лучше)
А сколько у вас ушло времени на изучение C++ ??? C++
C++ вопросы от новичка помогите прошк вас!))
C++ Простенькая для вас задача посмотрите если не трудно
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
denver
1610 / 279 / 3
Регистрация: 19.09.2009
Сообщений: 701
05.11.2009, 18:58     Программисты для вас #2
Цитата Сообщение от sergeu90 Посмотреть сообщение
я ее уже 2 недели думаю как делать
хоть наработки за две недели какие нибудь сделал?
Rififi
2336 / 1051 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
05.11.2009, 19:02     Программисты для вас #3
sergeu90,
в объединении все данных размечаются с одного и того же адреса. это означает что если ты изменишь одно поле, то также поменяются все остальные.

по-моему тот, кто давал тебе задание, не совсем представляет себе, что такое объединение.
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
05.11.2009, 19:06  [ТС]     Программисты для вас #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
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;
}
Добавлено через 57 секунд
тут используются файлы а мы их не проходили еще помогите сделать хотябы через структуру только полегче код без всяких заворотов и проверок пожалуйста
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
05.11.2009, 19:07     Программисты для вас #5
Цитата Сообщение от sergeu90 Посмотреть сообщение
я ее уже 2 недели думаю как делать и не получается даже придумать ничего
Хм... "2 недели" неделю назад было. Три уже...
Да и програмка до боли знакомая...
Rififi
2336 / 1051 / 44
Регистрация: 03.05.2009
Сообщений: 2,656
05.11.2009, 19:08     Программисты для вас #6
sergeu90,

...
struct Date_t;
struct Product_t;

...

А. Ну так всё гораздо проще. Это ты не знаешь что есть структура, а что - объединение... За две недели можно были бы и подучиться ((:
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
05.11.2009, 19:26  [ТС]     Программисты для вас #7
мне не зачет не поставили сказал сделать а я не знаю дал время

Добавлено через 3 минуты
поможете написать простую програмку для техникума не использовать файлы,иначе завал и зачета не будет время дали маленькое

Добавлено через 12 минут
ну помогите пожалуйста мне не к кому обратится больше,заранее спасибо всем кто попытается помочь мне
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
05.11.2009, 19:31     Программисты для вас #8
Цитата Сообщение от sergeu90 Посмотреть сообщение
не использовать файлы
Где ты там файлы-то увидел?
fgets(buf, STR_LEN, stdin);
Тут разве что... Так stdin - стандартный файл ввода. Ну нравится мне так ввод читать, к тому же '\n' из потока удаляет. Если сама функция fgets так сильно смущает, можешь ввод каким-нибудь scanf читать, но опять же будет заморок с символами новой строки...
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
05.11.2009, 19:33  [ТС]     Программисты для вас #9
Мне не поверят что я писал мне надо что бы просто ввести записи в поля и просортировать их без всяких проверок простую програмку пожалуйста если такое можно,я бы просто ему показал и все что бы он ввел и программка просто сортировку сделала,плиззззззззззззз
easybudda
Эксперт С++
9412 / 5435 / 917
Регистрация: 25.07.2009
Сообщений: 10,428
05.11.2009, 19:45     Программисты для вас #10
Там проверок-то... Разве что дату совсем невменяемую делать не даёт (31 февраля вполне прокатит ), да переспрашивает перед тем, как в массив вставлять... Бо'льшая часть как-раз про сортировку. А как проще сделать сортировку структур по полю, которое само по себе - тоже структура, у меня никаких идей, если честно... qsort - самый простой способ. В противном случае ещё и алгоритм сортировки пришлось бы писать, а так только функцию сравнения... Мой тебе совет - перепиши вывод транслитом, поудаляй отступы, чтоб страшней смотрелось, и вперёд! Если на глазах у препода скомпилируешь, да ещё и заработает - процентов 60, что прокатит...
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
05.11.2009, 19:48  [ТС]     Программисты для вас #11
я там не могу понять саму функцию сортировки оставить ладно можно но fgets точно не прокатит и там слишком много другого если можешь перепиши ту задачу без лишних проверок и скинь плиззз только сортировку и ввод оставь,если сможешь а то я не понимаю плизззззз,если не ты,тут мне никто не хочет помогать
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.11.2009, 06:55     Программисты для вас #12
это начало, просто ввод
Вложения
Тип файла: zip t.zip (677 байт, 22 просмотров)
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.11.2009, 07:30     Программисты для вас #13
забыл там одну вещь
Вложения
Тип файла: zip t.zip (695 байт, 26 просмотров)
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
06.11.2009, 15:40  [ТС]     Программисты для вас #14
а сортировку.как делать тут не понять,мне напиши если сможешь?
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2009, 07:41     Программисты для вас #15
дальше выводит введённые машины (добавил метки, которые можно использовать для определения машины)
Вложения
Тип файла: zip t.zip (901 байт, 21 просмотров)
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
07.11.2009, 09:48  [ТС]     Программисты для вас #16
так там сортировки нету самой самое главное,напиши сортировку
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2009, 09:56     Программисты для вас #17
сортирует по номеру, для трёх объединений
Вложения
Тип файла: zip t.zip (1.1 Кб, 20 просмотров)
sergeu90
27 / 28 / 3
Регистрация: 17.10.2009
Сообщений: 739
07.11.2009, 10:06  [ТС]     Программисты для вас #18
у меня же сортировка по дате выпуска

Добавлено через 8 минут
напиши мне код что бы я мог через обьявление ее здать как лабу что бы ввел записи и они отсортировались,плизззззз
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
07.11.2009, 10:24     Программисты для вас #19
по дате
Вложения
Тип файла: zip t.zip (1.3 Кб, 20 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2009, 04:26     Программисты для вас
Еще ссылки по теме:

Бывает ли у вас такое C++
C++ . Введите месяц и день своего рождения. Выясните, какой ближайший год будет для вас счастливым. Год называется счастливым, если остаток от деления сум
C++ орогие программисты
C++ Вывести на экран озера заинтересовавшие Вас диапазоном глубин
Как вы подходите к решению новых для вас задач C++

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

Или воспользуйтесь поиском по форуму:
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.11.2009, 04:26     Программисты для вас #20
она там неправильно сортирует
Вложения
Тип файла: zip t.zip (1.2 Кб, 26 просмотров)
Yandex
Объявления
08.11.2009, 04:26     Программисты для вас
Ответ Создать тему
Опции темы

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