Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
-5 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
1

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

19.05.2014, 21:42. Показов 1798. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте форумчане, у меня к вам несколько нескромная просьба, помогите мне пожалуйста, оформив эти задачи программно:

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

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

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

Добавлено через 2 часа 4 минуты
Это сообщение "несёт" ту же цель, что и описанное выше.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2014, 21:42
Ответы с готовыми решениями:

Женские и мужские тематики
Натолкнули на мысль - давайте обсудим кликабельность в женских и мужских тематиках. Женщины...

В списке имен выделить женские(мужские)
Как создать массив который будет делить людей по полу и подсчитывать их процент ?

Разбить массив имен на женские и мужские
Помогите решить задачу. Пользователь вводит в программу массив имен, программа разбивает на массив...

Вывести самые распространенные женские и мужские имена
Помогите решить задачу пожалуйста! Написать программу, которая формирует файл записей данной...

16
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
19.05.2014, 21:46 2
Naginata, ну хоть опишите, какие дни считаются благоприятными, сколько мастеров вообще там существует, что это за наглядный вид? Консольный вывод или форма с таблицами? Когда будет свободное время, постараюсь написать (если буду знать вот эти подробности)
1
-5 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
19.05.2014, 22:28  [ТС] 3
Вообще, всё это, я думаю должен задать пользователь, но для примера, благоприятные дни предположим, это выходные, мужских мастеров у нас будет 5, а женских 8, а заголовки, это значит, что в консольном окне должны быть не просто буквы и цифры подряд, а и что они значат, к примеру: "В этот день свободно наибольшее количество мастеров и мужских и женских".
0
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
19.05.2014, 22:32 4
Naginata, как это в этот день свободно? Мастер либо весь день занят, либо весь день свободен?
0
-5 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
19.05.2014, 22:37  [ТС] 5
Да, в условии задачи не требуется рассматривание вероятности частичной занятости, иначе эту программу едва-ли не продавать можно было. Преподаватели у меня к счастью не звери.
0
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
19.05.2014, 22:41 6
Naginata, ну ок, завтра попробую вам написать
1
-5 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
19.05.2014, 22:43  [ТС] 7
Спасибо!
0
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
20.05.2014, 10:30 8
Лучший ответ Сообщение было отмечено Naginata как решение

Решение

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;
}
1
-5 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
20.05.2014, 18:36  [ТС] 9
Простите, но как понять вот это поле вывода: "Операция прошла хреново"?
0
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
20.05.2014, 18:50 10
Naginata, если указан несуществующий номер мастера (как пример, там всего 3 мастера, а пользователь пытается записаться к мастеру под номером 6)
1
-5 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
20.05.2014, 19:00  [ТС] 11
Я протестировал... Не знаю, может для вас это обычное дело, но я бы, если и сумел такое сделать, то только за неделю, если бы в день часов 12 сидел, не меньше, это просто прекрасная работа, вы даже сымитировали интерфейс, конечно почитав код, (отдельное спасибо за такие подробные комментарии), можно понять, что это не фантастика, но это определённо отличная работа, это даже больше, чем мне бы хотелось, просто таки колоссальное вам спасибо, (даже если для вас это было небольшое развлечение).
0
Хедин
20.05.2014, 19:04
  #12

Не по теме:

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

0
7 / 7 / 5
Регистрация: 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 минут
Хедин, Помоги пожалуйста.
0
76 / 71 / 55
Регистрация: 17.05.2014
Сообщений: 301
21.05.2014, 21:04 14
SANYAMILITARY, после двоеточия идет список инициализации, то есть ты инициализируешь поля класса в нужном порядке. Я буду отвечать быстрее, если при ответе нажимать на мой ник) О двух первых вопросах я знать не знал, потому что оповещения не приходили
0
7 / 7 / 5
Регистрация: 07.05.2014
Сообщений: 56
24.05.2014, 21:53 15
Хедин, поясни пожалуйста этот фрагмент, инициализации типа bool. И смысл его в программе поподробней
C++
1
tmp->st[(man ? 0 : _man)+man_index] = true;
0
76 / 71 / 55
Регистрация: 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, равное количеству мужчин-мастеров.
это тернарный оператор <условие> ? <действие, если условие истинно> : <действие, если условие ложно>
0
7 / 7 / 5
Регистрация: 07.05.2014
Сообщений: 56
25.05.2014, 13:15 17
Хедин, спасибо все понял.
0
25.05.2014, 13:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.05.2014, 13:15
Помогаю со студенческими работами здесь

Записать в файл женские имена и отдельно мужские
Составить список женских имен и отдельно имен мужских.Каждому имени присвоит лексему(целое число)....

Вывести самые распространенные мужские и женские имена
Имеется массив записей о студентах, каждая из которых включает поля: фамилия, имя, отчество, пол,...

Найти и вывести самые распространенные женские те мужские имена
О каждом студенте факультета доступна следующая информация: фамилия, имя, отчество, пол, возраст,...

Вывести на экран возможные мужские и женские имена в зависимости от введенного пола
Дан пол человека:м-мужчина,ж-женщина.Вывести на экран возможные мужские и женские имена в...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru