Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
3 / 3 / 1
Регистрация: 02.12.2016
Сообщений: 142

Задача с кортежами и словарями

03.04.2018, 11:11. Показов 4933. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет,
Не могу сообразить как реализовать программу. Задача "Трекер задач":
Есть программисты, у которых есть программы, которые находятся в 4 стадиях разработки(допустим у него есть 3 задачи на этапе new):
  1. new 3
  2. in_progress 0
  3. testing 0
  4. done 0

если он продвигается вперед на 2, то у него станет
  1. new 1
  2. in_progress 2
  3. testing 0
  4. done 0

ВОТ! Нужно вернуть сколько было обновленных задач, а сколько старых в отдельных словарях. Т.е. было обновлено 2 задачи in_progress, не обновлена 1 задача в new.
Мой код. Функция PerformPersonTasks. Main написан был в условии программы на сайте, я не могу его менять, это как пример.
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
#include <iostream>
#include <map>
#include <string>
#include <tuple>
 
using namespace std;
 
enum class TaskStatus {
    NEW,          // новая
    IN_PROGRESS,  // в разработке
    TESTING,      // на тестировании
    DONE          // завершена
};
 
// Объявляем тип-синоним для map<TaskStatus, int>,
// позволяющего хранить количество задач каждого статуса
using TasksInfo = map<TaskStatus, int>;
map <string, TasksInfo> Dev;
 
class TeamTasks {
public:
    // Получить статистику по статусам задач конкретного разработчика
    const TasksInfo& GetPersonTasksInfo(const string& person) const { 
        return Dev[person];
    };
 
    // Добавить новую задачу (в статусе NEW) для конкретного разработчитка
    void AddNewTask(const string& person) {
        Dev[person][TaskStatus::NEW]++;
    }
    // Обновить статусы по данному количеству задач конкретного разработчика,
    // подробности см. ниже
    tuple<TasksInfo, TasksInfo> PerformPersonTasks(
        const string& person, int task_count) {
        int max = task_count;
        for (int i = 0; i < max; max--) {
            Dev[person][TaskStatus::NEW]--;
            Dev[person][TaskStatus::IN_PROGRESS]++;
        }
        for (int i = 0; i < max; max--) {
            Dev[person][TaskStatus::IN_PROGRESS]--;
            Dev[person][TaskStatus::TESTING]++;
        }
        for (int i = 0; i < max; max--) {
            Dev[person][TaskStatus::TESTING]--;
            Dev[person][TaskStatus::DONE]++;
        }
                                                                                 // КАК ВЕРНУТЬ И ЧТО
    }
};
void PrintTasksInfo(TasksInfo tasks_info) {
    cout << tasks_info[TaskStatus::NEW] << " new tasks" <<
        ", " << tasks_info[TaskStatus::IN_PROGRESS] << " tasks in progress" <<
        ", " << tasks_info[TaskStatus::TESTING] << " tasks are being tested" <<
        ", " << tasks_info[TaskStatus::DONE] << " tasks are done" << endl;
}
 
 
int main() {
    TeamTasks tasks;
    tasks.AddNewTask("Ilia");
 
    for (int i = 0; i < 3; ++i) {
        tasks.AddNewTask("Ivan");
    }
 
    cout << "Ilia's tasks: ";
    PrintTasksInfo(tasks.GetPersonTasksInfo("Ilia"));
    cout << "Ivan's tasks: ";
    PrintTasksInfo(tasks.GetPersonTasksInfo("Ivan"));
 
 
    TasksInfo updated_tasks, untouched_tasks;
 
    tie(updated_tasks, untouched_tasks) =
        tasks.PerformPersonTasks("Ivan", 2);
    cout << "Updated Ivan's tasks: ";
    PrintTasksInfo(updated_tasks);
    cout << "Untouched Ivan's tasks: ";
    PrintTasksInfo(untouched_tasks);
 
    tie(updated_tasks, untouched_tasks) =
        tasks.PerformPersonTasks("Ivan", 2);
    cout << "Updated Ivan's tasks: ";
    PrintTasksInfo(updated_tasks);
    cout << "Untouched Ivan's tasks: ";
    PrintTasksInfo(untouched_tasks);
 
    return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.04.2018, 11:11
Ответы с готовыми решениями:

Как работать с большими словарями
Здравствуйте! Подскажите пожайлуста как работать с большими словарями: в файле храниться словарь с большим количеством слов,...

Задача со словарями
Пусть gradebook — это словарь, ключами которого являются имена студентов, а значениями — их оценки. Например, gradebook = {'Alice': 5,...

Задача со словарями
Напишите функцию get_course_info(course_name), которая на вход принимает название курса (строка) и делает следующее: Заходит на сайт...

2
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
03.04.2018, 14:21
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
tuple<TasksInfo, TasksInfo> PerformPersonTasks(const string& person, int task_count) {
    TasksInfo updated_tasks, untouched_tasks(Dev[person]);
    int max = task_count;
    for (int i = 0; i < max; max--) {
        Dev[person][TaskStatus::NEW]--;
        Dev[person][TaskStatus::IN_PROGRESS]++;
    }
    for (int i = 0; i < max; max--) {
        Dev[person][TaskStatus::IN_PROGRESS]--;
        Dev[person][TaskStatus::TESTING]++;
    }
    for (int i = 0; i < max; max--) {
        Dev[person][TaskStatus::TESTING]--;
        Dev[person][TaskStatus::DONE]++;
    }
    return std::make_tuple(updated_tasks, untouched_tasks);
}
И в циклах как-то менять updated_tasks, untouched_tasks
0
3 / 3 / 1
Регистрация: 02.12.2016
Сообщений: 142
03.04.2018, 20:00  [ТС]
Я так же решил, Нашел способ как можно находить обновленные элементы, но как старые ума не приложу.
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
        int max = task_count;
        int countIN = 0, countTes = 0, countDon = 0;
        int oldNew = 0, oldIn = Dev[person][TaskStatus::IN_PROGRESS], 
            oldTes = Dev[person][TaskStatus::TESTING], 
            oldDon = Dev[person][TaskStatus::DONE];
        cout << "Current values : " << Dev[person][TaskStatus::NEW] << " " << Dev[person][TaskStatus::IN_PROGRESS] << " " <<
            Dev[person][TaskStatus::TESTING] << " " << Dev[person][TaskStatus::DONE] << endl;
        for (int i = 0; i < max && Dev[person][TaskStatus::NEW] != 0; max--) {
            Dev[person][TaskStatus::NEW]--;
            Dev[person][TaskStatus::IN_PROGRESS]++;
            countIN++;
            oldNew = Dev[person][TaskStatus::NEW];
        }
        for (int i = 0; i < max && Dev[person][TaskStatus::IN_PROGRESS] != 0; max--) {
            Dev[person][TaskStatus::IN_PROGRESS]--;
            Dev[person][TaskStatus::TESTING]++;
            countIN--;
            countTes++;
        }
        for (int i = 0; i < max && Dev[person][TaskStatus::TESTING] != 0; max--) {
            Dev[person][TaskStatus::TESTING]--;
            Dev[person][TaskStatus::DONE]++;
            countTes--;
            countDon++;
        }
        cout << "Current values : " << Dev[person][TaskStatus::NEW] << " " << Dev[person][TaskStatus::IN_PROGRESS] << " " <<
            Dev[person][TaskStatus::TESTING] << " " << Dev[person][TaskStatus::DONE] << endl;
        cout << 0  << " "<<  countIN << " " << countTes << " " << countDon << endl;
        cout << "OLD : " << endl;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.04.2018, 20:00
Помогаю со студенческими работами здесь

Операция с кортежами
Здравствуйте! Составляю математическое описание задачи. Читал некоторый материал и теперь хочу проконсультироваться - правильно ли я его...

Проблема с кортежами
Здравствуйте. Пишу либу (в отдельном dll), инициализирую кортеж, в методе: public static (int num, int sum) GetInfo() { var tuple...

Работа с кортежами и классами
Сорри, я задам наверное тупой вопрос, но очень нужна помощь. Вот у меня есть кортеж из данных MySQL, каждый срез которого состоит из: ...

Как работать с кортежами в C# 7?
может вы подскажете как работать с кортежами в visual 2017, добавила тип System.ValueTuple и ничего не работает

Подскажите разобраться с кортежами
Здравствуйте. Подскажите как работать с кортежами, а точнее как их &quot;Связать&quot;. у меня задание &quot;создайте два кортежа: один из чисел...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru