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

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

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

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

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

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

Как вы подходите к решению новых для вас задач - C++
Вопрос имеет с одной стороны косвенное, а с другой прямое отношение к программированию и языку С++. Задаю данный вопрос в данном разделе...

Простенькая для вас задача посмотрите если не трудно - C++
Дано натуральное число n (n<10000). Определить сколько цифр в числе, найти первую цифру числа, найти предпоследнюю цифру числа. P.s...

пожалуйста решите. для вас эт ерунда(чем быстре тем лучше) - C++
Надо решить так то наброки есть но не получается некоторые детали а времени нет разобраться. Составить блок-схему алгоритма,...

Бывает ли у вас такое - C++
Вообщем У меня происходят полтергейсты на компиляторе g++ Бывает так, чтобы прога упорно не работает правильно, чтобы я не...

Курсовая работа!прошу ответить вас) - C++
вобщем вот я взяла курсовую работу по теме "Система тестирования" это по дисциплине "Высокоуровневые методы информатики и...

вопросы от новичка помогите прошк вас!)) - C++
)Значение литерала 7.0Е-3 2)Логическая ошибка (ошибка реализации алгоритма) Выберите по крайней мере один ответ: пропуск ; ...

А сколько у вас ушло времени на изучение C++ ??? - C++
Я понимаю, это зависит от человека....но все же:)

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
denver
1610 / 279 / 3
Регистрация: 19.09.2009
Сообщений: 701
05.11.2009, 18:58     Программисты для вас #2
Цитата Сообщение от sergeu90 Посмотреть сообщение
я ее уже 2 недели думаю как делать
хоть наработки за две недели какие нибудь сделал?
Rififi
2338 / 1053 / 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
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
05.11.2009, 19:07     Программисты для вас #5
Цитата Сообщение от sergeu90 Посмотреть сообщение
я ее уже 2 недели думаю как делать и не получается даже придумать ничего
Хм... "2 недели" неделю назад было. Три уже...
Да и програмка до боли знакомая...
Rififi
2338 / 1053 / 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
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
06.11.2009, 06:55     Программисты для вас #12
это начало, просто ввод
Вложения
Тип файла: zip t.zip (677 байт, 22 просмотров)
accept
4820 / 3240 / 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
4820 / 3240 / 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
4820 / 3240 / 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
4820 / 3240 / 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++
Помогите плиз Описать структуру с именем STUDENT, содержащую следующие поля: -фамилия и инициалы -номер группы -успеваемость...

орогие программисты - C++
Очень нужна ваша помощь. Нужно написать программу, которая выводит содержимое файла на экран и определяет символ, с которого начинается...

Вывести на экран озера заинтересовавшие Вас диапазоном глубин - C++
Учитель географии создал базу данных , с указанием некоторых крупнейших природных пресных озер мира с такими сведениями: название озера ,...

3 элементарные заезженные программы, не займут у вас много времени) - C++
Будте любезны, напишите с коментами эти задачи, ато в понедельник экзамен( Знаю что они не особо сложные,но времени абсолютно не...

Распечатать анкетные данные студентов-отличников из интересующей вас группы - C++
Распечатать анкетные данные студентов-отличников из интересующей вас группы. Как написать это распечатать?(В коде как это выглядит?)


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

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

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