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

Определить периоды, когда в парикмахерской свободные женские и мужские мастера - C++

Восстановить пароль Регистрация
 
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
19.05.2014, 21:42     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #1
Здравствуйте форумчане, у меня к вам несколько нескромная просьба, помогите мне пожалуйста, оформив эти задачи программно:

и эту: "В парикмахерской обслуживания клиентов проводят по предварительной записи. Определить периоды, когда свободные женские и мужские мастера (отдельно). Определить дни, наиболее благоприятные для проведения презентации новой косметики. Исходные данные и результаты представить в наглядном виде, с заголовками.".

Поверите ли вы мне или нет, но я бы и сам разобрался с этим, но я потрачу на это слишком много времени, а у меня очень скоро сессия и другими предметами мне тоже стоит заняться, потому пожалуйста, кому не лень и есть время, окажите услугу. P.S. Я понимаю, что уже много прошу, но можно ещё и комментарии, хотя-бы к каждому блоку программы, сами знаете, каково это, разбираться в чужом коде, особенно, если программа не самая простая.

Добавлено через 3 часа 39 минут
Данное сообщение было добавлено дабы тема вернула себе статус "активна" и была замечена пользователями.

Добавлено через 2 часа 4 минуты
Это сообщение "несёт" ту же цель, что и описанное выше.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2014, 21:42     Определить периоды, когда в парикмахерской свободные женские и мужские мастера
Посмотрите здесь:

Свободные массивы строк C++
Перестало выводить, когда задание списков перевел в конструкторы, когда были просто функции выводило нормально. C++
Определить когда массив меняет знак. C++
периоды C++
C++ Определить наименьшее время, когда часовая и минутная стрелки будут перпендикулярны друг другу
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
19.05.2014, 21:46     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #2
Naginata, ну хоть опишите, какие дни считаются благоприятными, сколько мастеров вообще там существует, что это за наглядный вид? Консольный вывод или форма с таблицами? Когда будет свободное время, постараюсь написать (если буду знать вот эти подробности)
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
19.05.2014, 22:28  [ТС]     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #3
Вообще, всё это, я думаю должен задать пользователь, но для примера, благоприятные дни предположим, это выходные, мужских мастеров у нас будет 5, а женских 8, а заголовки, это значит, что в консольном окне должны быть не просто буквы и цифры подряд, а и что они значат, к примеру: "В этот день свободно наибольшее количество мастеров и мужских и женских".
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
19.05.2014, 22:32     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #4
Naginata, как это в этот день свободно? Мастер либо весь день занят, либо весь день свободен?
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
19.05.2014, 22:37  [ТС]     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #5
Да, в условии задачи не требуется рассматривание вероятности частичной занятости, иначе эту программу едва-ли не продавать можно было. Преподаватели у меня к счастью не звери.
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
19.05.2014, 22:41     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #6
Naginata, ну ок, завтра попробую вам написать
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
19.05.2014, 22:43  [ТС]     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #7
Спасибо!
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
20.05.2014, 10:30     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Naginata, набросал вот такую программу
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
134
135
136
137
138
139
140
141
142
#include <iostream>
#include <iomanip>
 
using namespace std;
 
struct day // Структура для представления дня работы
{
    day(int n, int m) : number(n), st(new bool[m]), next(NULL) { for (int i = 0; i < m; i++) st[i] = false; } // Конструктор
    ~day() { delete []st; } // Деструктор
    int number; // Номер дня (у нас нет календаря, поэтому дни нумеруются числами)
    bool *st; // Массив флажков занятости мастеров
    day *next; // Указатель на следующий день
};
 
class salon
{
public:
    salon(int m, int w); // В конструкторе передаем количество мастеров обеих полов
    ~salon();
    bool add_quest(int day_index, bool man, int man_index); // Добавить новую "бронь" для мастера
    void show(); // Вывести таблицу графика работы
private:
    day *find_day(int n); // Поиск определенного дня
    void del(day *tmp); // Удаление списка дней
    int _man; // Количество мужчин-мастеров
    int _woman; // Количество женщин-мастеров
    day *begin, *end; // Указатели на список дней
};
 
salon::salon(int m, int w) : _man(m), _woman(w), begin(NULL), end(NULL)
{
}
 
salon::~salon()
{
    del(begin); // Запускаем удаление списка дней
}
 
bool salon::add_quest(int day_index, bool man, int man_index)
{
    if (man_index < 0 || (man && man_index >= _man) || (!man && man_index >= _woman)) return false; // Если указан плохой индекс
    day *current;
    if ((current = find_day(day_index)) != NULL) // Ищем в списке нужный день
    {
        current->st[(man ? 0 : _man)+man_index] = true; // Устанавливаем занятость мастера
        return true;
    }
    else // Если не найден нужный день
    {
        day *tmp = new day(day_index, _man+_woman); // Создаем новый день с нужным индексом
        if (!begin) begin = end = tmp; // Создаем новый список
        else
        {
            end->next = tmp; // Дописываем в конец списка
            end = tmp;
        }
        tmp->st[(man ? 0 : _man)+man_index] = true; // Устанавливаем флажок занятости мастера
        return true;
    }
}
 
void salon::show()
{
    if (!begin) return; // Если списка дней не существует, то выходим
    cout << setw(6) << "  День|   Занятость" << endl; // Заголовок таблицы
    day *tmp = begin;
    int max_count = 0, max_day = 0;
    while (tmp->next) // Проходим по списку
    {
        int count_man = 0, count_woman = 0;
        for (int i = 0; i < _man; i++) if (tmp->st[i]) count_man++; // Считаем занятость мастеров разного пола
        for (int i = 0; i < _woman; i++) if (tmp->st[i+_man]) count_woman++;
        if (max_count < count_man+count_woman) { max_day = tmp->number; max_count = count_man+count_woman; } // Ищем день с максимальной занятостью
        cout << setw(6) << tmp->number << "|  мужские: " << count_man << "/" << _man << ", женские: " << count_woman << "/" << _woman << endl; // Выводим на экран день
        tmp = tmp->next; // Переходим к следующему элементу списка
    }
    int count_man = 0, count_woman = 0;
    for (int i = 0; i < _man; i++) if (tmp->st[i]) count_man++;
    for (int i = 0; i < _woman; i++) if (tmp->st[i+_man]) count_woman++;
    if (max_count < count_man+count_woman) { max_day = tmp->number; max_count = count_man+count_woman; }
    cout << setw(6) << tmp->number << "|  мужские: " << count_man << "/" << _man << ", женские: " << count_woman << "/" << _woman << endl;
    cout << "----------------" << endl << "Максимальный день:" << max_day << " (" << max_count << "/" << (_man+_woman) << ")" << endl; // Выводим день с максимальной занятостью
}
 
day *salon::find_day(int n)
{
    if (!begin) return NULL; // Если список пуст, возвращаем NULL
    day *tmp = begin;
    while (tmp->next) // Ищем день с нужным номером
    {
        if (tmp->number == n) return tmp;
        tmp = tmp->next;
    }
    if (tmp->number == n) return tmp;
    else return NULL;
}
 
void salon::del(day *tmp)
{
    if (tmp->next) del(tmp->next); // Вызываем удаление следующего элемента
    delete tmp; // Удаляем сам элемент
}
 
int main()
{
    int man, woman;
    cout << "Введите количество мужчин-мастеров:"; cin >> man;
    cout << "Введите количество женщин-мастеров:"; cin >> woman;
    salon *tmp = new salon(man, woman); // Выделяем память под салон, передаем кол-во мастеров
    int t;
    do // Цикл, имитирующий интерфейс
    {
        system("cls");
        cout << "Выберите действие:" << endl;
        cout << "1 - Добавить новую работу для мастера" << endl;
        cout << "2 - Вывести таблицу занятости" << endl;
        cout << "0 - Выйти" << endl;
        cout << ":"; cin >> t;
        switch (t)
        {
        case 1: // Добавление нового элемента
        {
            int d, m, s;
            cout << endl << "Введите день:"; cin >> d;
            cout << "Пол мастера (1 - муж, 2 - жен):"; cin >> s;
            cout << "Номер мастера (1 - " << (s == 1 ? man : woman) << "):"; cin >> m;
            if (!tmp->add_quest(d, (s == 1 ? true : false), m-1))
            {
                cout << "Операция прошла хреново" << endl;
                system("pause");
            }
        } break;
        case 2: // Вывод таблицы элементов
            tmp->show();
            system("pause");
        }
    }
    while (t == 1 || t == 2);
    delete tmp; // Удаление tmp
    system("pause");
    return 0;
}
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
20.05.2014, 18:36  [ТС]     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #9
Простите, но как понять вот это поле вывода: "Операция прошла хреново"?
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
20.05.2014, 18:50     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #10
Naginata, если указан несуществующий номер мастера (как пример, там всего 3 мастера, а пользователь пытается записаться к мастеру под номером 6)
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
20.05.2014, 19:00  [ТС]     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #11
Я протестировал... Не знаю, может для вас это обычное дело, но я бы, если и сумел такое сделать, то только за неделю, если бы в день часов 12 сидел, не меньше, это просто прекрасная работа, вы даже сымитировали интерфейс, конечно почитав код, (отдельное спасибо за такие подробные комментарии), можно понять, что это не фантастика, но это определённо отличная работа, это даже больше, чем мне бы хотелось, просто таки колоссальное вам спасибо, (даже если для вас это было небольшое развлечение).
Хедин
20.05.2014, 19:04
  #12

Не по теме:

Naginata, рад был помочь. Само собой, очень интересно решать заковыристые задания

SANYAMILITARY
7 / 7 / 3
Регистрация: 07.05.2014
Сообщений: 56
21.05.2014, 20:39     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #13
Да работа прикольная. Сам обучаюсь с++ код мне понравился, если есть примеры решенных интересных задач скинь пожалуйста, а то я в основном по коду учусь.

Добавлено через 18 минут
Объясни пожалуйста эту строчку
C++
1
day(int n, int m) : number(n), st(new bool[m]), next(NULL) { for (int i = 0; i < m; i++) st[i] = false; }
Меня интересует именно двоеточие, что оно дает?
Спасибо за внимание.

Добавлено через 11 минут
И объясни пожалуйста зачем писать
C++
1
2
3
4
5
6
7
8
salon::salon(int m, int w) : _man(m), _woman(w), begin(NULL), end(NULL)
{
}
 
salon::~salon()
{
    del(begin); // Запускаем удаление списка дней
}
И если не лень объясни зачем ты ставишь двоеточие.

Добавлено через 20 часов 29 минут
Хедин, Помоги пожалуйста.
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
21.05.2014, 21:04     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #14
SANYAMILITARY, после двоеточия идет список инициализации, то есть ты инициализируешь поля класса в нужном порядке. Я буду отвечать быстрее, если при ответе нажимать на мой ник) О двух первых вопросах я знать не знал, потому что оповещения не приходили
SANYAMILITARY
7 / 7 / 3
Регистрация: 07.05.2014
Сообщений: 56
24.05.2014, 21:53     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #15
Хедин, поясни пожалуйста этот фрагмент, инициализации типа bool. И смысл его в программе поподробней
C++
1
tmp->st[(man ? 0 : _man)+man_index] = true;
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
24.05.2014, 22:12     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #16
SANYAMILITARY, в структуре day есть массив st типа bool, каждая ячейка которого хранит значение занятости определенного мастера (true - мастер в этот день занят, false - мастер в этот день бездельничает). Но у нас существуют 2 вида мастеров, мужчины и женщины. Все они запихиваются в один массив, вначале мастера-мужчины по порядку, затем мастера-женщины.
В функции у нас есть порядковый номер мастера man_index и bool man, означающий пол мастера. Следовательно, что бы получить доступ к ячейке массива для мастеров женщин, мы должны к man_index добавить смещение, равное числу ячеек для мастеров мужчин.
Поэтому (man ? 0 : _man) означает: если man == true, то мы не смещаем индекс, в противном случае мы прибавляем к man_index значение _man, равное количеству мужчин-мастеров.
это тернарный оператор <условие> ? <действие, если условие истинно> : <действие, если условие ложно>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2014, 13:15     Определить периоды, когда в парикмахерской свободные женские и мужские мастера
Еще ссылки по теме:

Определить год, когда прибыль была максимальна C++
Определить, когда круг и квадрат касаются (пересекаются) C++
C++ Поменять в данной строке свободные места на запятую с++

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

Или воспользуйтесь поиском по форуму:
SANYAMILITARY
7 / 7 / 3
Регистрация: 07.05.2014
Сообщений: 56
25.05.2014, 13:15     Определить периоды, когда в парикмахерской свободные женские и мужские мастера #17
Хедин, спасибо все понял.
Yandex
Объявления
25.05.2014, 13:15     Определить периоды, когда в парикмахерской свободные женские и мужские мастера
Ответ Создать тему
Опции темы

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