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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Перегрузка операторов, если класс содержит массив http://www.cyberforum.ru/cpp-beginners/thread1180971.html
Добрый день, требовалось написать прогу, которая выводит количество повторений элементов в массиве, причем сделать это требовалось с помощью объектов, т.е. должно быть два объекта поставщика, один из них для ввода с клавы, а другой чтения с файла. и есть Объект чей метод подсчета получает информацию от данных объектов поставщиков. Собственно, большинство я сделал, и прога работает, но...
C++ Выравнивание текста пробелами по ширине. Очень нужно написать решение на C++. Кто-нибудь может помочь? Я пытался 2 дня - ничего не получается :( Задача Вашей программе дается абзац текста. Этот текст состоит из ряда слов, отделенных друг от друга пробелами и/или символами новой строки (символы табуляции не применяются). Слово может содержать знаки пунктуации. Текст завершается специальным словом "$$$", которое будет единственным... http://www.cyberforum.ru/cpp-beginners/thread1180950.html
Вычислить сумму ряда C++
4. 4.3. Написать программу, позволяющую вычислить с помощью цикла: 2+4+6+…+2n, где n задается с клавиатуры.
C++ Написать программу, проверяющую, поместится ли круг в квадрат или наоборот.
3. Заданы круг площади S и квадрат площади Р. Написать программу, проверяющую, поместится ли круг в квадрат или поместится ли квадрат в круг, или они не поместятся друг в друга.
C++ Написать программу, которая по номеру квартиры определяет номер подъезда и этажа, на котором находится квартир http://www.cyberforum.ru/cpp-beginners/thread1180944.html
2. В N-этажном доме M подъездов. На каждой лестничной площадке К квартир. Нумерация квартир в доме сквозная, начиная с 1. Написать программу, которая по номеру квартиры определяет номер подъезда и этажа, на котором находится квартира.
C++ Переполнение буфера Не могу найти, где у меня ошибка, выдает переполнение буфера, подскажите пожалуйста. Здесь реализуется связный список #include <iostream> #include <conio.h> #include <ctime> #include <stdio.h> #include <iomanip> using namespace std; подробнее

Показать сообщение отдельно
Хедин
 Аватар для Хедин
73 / 68 / 36
Регистрация: 17.05.2014
Сообщений: 301
20.05.2014, 10:30     Определить периоды, когда в парикмахерской свободные женские и мужские мастера
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;
}
 
Текущее время: 04:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru