Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
#1

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

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

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

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

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

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

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

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

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

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

Записать в файл женские имена и отдельно мужские - C#
Составить список женских имен и отдельно имен мужских.Каждому имени присвоит лексему(целое число). Составить программму языке си шарп,...

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

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

16
Хедин
74 / 69 / 36
Регистрация: 17.05.2014
Сообщений: 301
19.05.2014, 21:46 #2
Naginata, ну хоть опишите, какие дни считаются благоприятными, сколько мастеров вообще там существует, что это за наглядный вид? Консольный вывод или форма с таблицами? Когда будет свободное время, постараюсь написать (если буду знать вот эти подробности)
1
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
19.05.2014, 22:28  [ТС] #3
Вообще, всё это, я думаю должен задать пользователь, но для примера, благоприятные дни предположим, это выходные, мужских мастеров у нас будет 5, а женских 8, а заголовки, это значит, что в консольном окне должны быть не просто буквы и цифры подряд, а и что они значат, к примеру: "В этот день свободно наибольшее количество мастеров и мужских и женских".
0
Хедин
74 / 69 / 36
Регистрация: 17.05.2014
Сообщений: 301
19.05.2014, 22:32 #4
Naginata, как это в этот день свободно? Мастер либо весь день занят, либо весь день свободен?
0
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
19.05.2014, 22:37  [ТС] #5
Да, в условии задачи не требуется рассматривание вероятности частичной занятости, иначе эту программу едва-ли не продавать можно было. Преподаватели у меня к счастью не звери.
0
Хедин
74 / 69 / 36
Регистрация: 17.05.2014
Сообщений: 301
19.05.2014, 22:41 #6
Naginata, ну ок, завтра попробую вам написать
1
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
19.05.2014, 22:43  [ТС] #7
Спасибо!
0
Хедин
74 / 69 / 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;
}
1
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
20.05.2014, 18:36  [ТС] #9
Простите, но как понять вот это поле вывода: "Операция прошла хреново"?
0
Хедин
74 / 69 / 36
Регистрация: 17.05.2014
Сообщений: 301
20.05.2014, 18:50 #10
Naginata, если указан несуществующий номер мастера (как пример, там всего 3 мастера, а пользователь пытается записаться к мастеру под номером 6)
1
Naginata
-65 / 0 / 0
Регистрация: 02.01.2014
Сообщений: 60
20.05.2014, 19:00  [ТС] #11
Я протестировал... Не знаю, может для вас это обычное дело, но я бы, если и сумел такое сделать, то только за неделю, если бы в день часов 12 сидел, не меньше, это просто прекрасная работа, вы даже сымитировали интерфейс, конечно почитав код, (отдельное спасибо за такие подробные комментарии), можно понять, что это не фантастика, но это определённо отличная работа, это даже больше, чем мне бы хотелось, просто таки колоссальное вам спасибо, (даже если для вас это было небольшое развлечение).
0
Хедин
20.05.2014, 19:04
  #12

Не по теме:

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

0
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 минут
Хедин, Помоги пожалуйста.
0
Хедин
74 / 69 / 36
Регистрация: 17.05.2014
Сообщений: 301
21.05.2014, 21:04 #14
SANYAMILITARY, после двоеточия идет список инициализации, то есть ты инициализируешь поля класса в нужном порядке. Я буду отвечать быстрее, если при ответе нажимать на мой ник) О двух первых вопросах я знать не знал, потому что оповещения не приходили
0
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;
0
24.05.2014, 21:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.05.2014, 21:53
Привет! Вот еще темы с ответами:

Файлы. Организовать вывод на экран в 2 столбца с 20 и 50 позиции женские и мужские имена - Turbo Pascal
даны 2 текстовых файла.девушки.txt и юноши.txt в которых написаны имена,по 20 имен в каждом (каждое имя в отдельной строке).Организовать...

Определить, пересекаются ли периоды дат в разных строках? - Oracle
Добрый вечер. Может кто-то подскажет. Есть таблица с данными, в которой есть номер товара, два поля &quot;Дата начала&quot;, &quot;Дата Конец&quot;, так же...

Определить время обслуживания посетителя парикмахерской - PascalABC.NET
Время обслуживания. Для каждого посетителя парикмахерской (с одним мастером) известны следующие величины: t — момент его прихода и ω —...

Определить качество подготовки игроков в разные периоды турнира - Free Pascal
После проведения спортивных соревнований, например, по футболу, и организаторы, и участники, и зрители особенно интересуются различной...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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