Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
 Аватар для Aecttann
6 / 6 / 5
Регистрация: 19.10.2013
Сообщений: 359

Добыча золота в варкрафт

10.04.2014, 00:57. Показов 3279. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Заданное количество юнитов добывают золото равными порциями из одной шахты, задерживаясь в пути на случайное время, до ее истощения.
Написать программу работы одного юнита.
Код работает неправильно: вместо того, чтобы шахта истощилась и работа программы завершилась - количество принесённого золота увеличивается и увеличивается до тех пор, пока система полностью не зависает.
Подскажите, пожалуйста, где ошибка.

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
#include <iostream>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
 
 
using namespace std;
 
int f(int z);
 
int spawn (int S)
{
    pid_t child_pid;
    child_pid = fork();
    if(child_pid!=0)
        return child_pid;
    }
 
 
int main()
{
    srand(time(0));
    setlocale(LC_ALL,"RUS");
 
    int unit, gold_per_unit, gold,time1=3,i, B;
    cout<<"введите начальное количество золота в руднике = ";
    cin>>gold;
    cout<<"введите количество золота, которое 1 юнит приносит за 1 ходку ";
    cin>>gold_per_unit;
    cout<<"введите количество юнитов ";
    cin>>unit;
    B=rand()%unit+2;
 
 
    while(gold>=0)
    {
        cout<<"Количество золота = "<<gold<<endl;
        cout<<"Юниты в пути..."<<endl;
 
        if(gold==0)
            break;
       else spawn(S);
 
 
        gold=gold+unit*gold_per_unit;
 
 
          cout<<"Юниты принесли "<<unit*gold_per_unit<<" золота!"<<endl;
    }
return 0;
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.04.2014, 00:57
Ответы с готовыми решениями:

Найдите максимальный вес золота, который можно унести в рюкзаке вместительностью S, если есть N золотых слитко
Найдите максимальный вес золота, который можно унести в рюкзаке вместительностью S, если есть N золотых слитков с заданными весами. ...

База данных с++ "Добыча угля" (Отчет по практике)
Доброго времени суток! Люди помогите создать базу данных по добыче угля,производственная практика уже заканчивается а программы нет(незнаю...

Варкрафт кикает с WINDOWS 7...
Захожу в батлу,всё хорошо по взрослому начинаю играть концентрируюсь и тут начинает подлагивать после чего проходит одна минута и меня...

1
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
10.04.2014, 02:10
Во первых
задерживаясь в пути на случайное время
эти задержки должны быть разбиты на интервалы или это одна задержка? Путь это туда и обратно, или это не важно?

Во вторых
Написать программу работы одного юнита.
это как? Подразумевается ли что могут быть запущенны другие программы для других юнитов?, но где тогда "находится шахта" (если спроецировать на реализацию это может быть как шаренный файл, пайп, так и сервер в конце концов)? Может подразумевалось написать программу для эмулирующую работу шахты и N юнитов.

Во третьих fork поможет лишь в том случае, если Вы сделаете общей "шахту" для всех порожденных процессов.
В четвертых, зачем Вы добавляете если Вам нужно вычитать?

Ну и в последних, если все таки подразумевалось смоделировать рабочий процесс для N юнитов в одном приложении, где не важно путь и будет ли остановка одна или разбита, а целью стоит лишь параллельность выполнения, то ниже приведен код, так как я это вижу, в стандарте c++11 (g++ my_file_name.cpp -std=c++11)
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
#include <ctime>
#include <mutex>
#include <thread>
#include <chrono>
#include <vector>
#include <string>
#include <sstream>
#include <iostream>
 
int total_gold = 0;
int units_count = 0;
static const int unit_gold = 10;
 
std::mutex unit_mutex, cout_mutex;
 
void print(const std::string& msg)
{
    //just avoid interlaced out
    std::unique_lock<std::mutex> locker(cout_mutex);
    std::cout << msg << std::endl;
}
 
void unit_routine(int unit_id)
{
    print("unit " + std::to_string(unit_id) + " start his task");
    for ( ;; )
    {
        {
            std::unique_lock<std::mutex> locker(unit_mutex);
            if (total_gold < unit_gold)
            {
                total_gold = 0;
            }
 
            if (total_gold == 0)
            {
                print("no more gold! unit " + std::to_string(unit_id) + " finished ");
                break;
            }
 
            total_gold -= unit_gold;
            print(std::string("current amount of gold: ")  + std::to_string(total_gold));
        }
        std::this_thread::sleep_for(std::chrono::milliseconds(rand() % 100));
    }
}
 
int main()
{
    srand(unsigned int(time(nullptr)));
 
    std::cout << "Enter total gold: ";
    std::cin >> total_gold;
    std::cout << std::endl;
 
    std::cout << "Enter units count: "; 
    std::cin >> units_count;
    std::cout << std::endl;
 
    std::vector<std::thread> thread_group;
    for (int i = 0; i < units_count; ++i)
    {
        thread_group.push_back(std::move(std::thread(unit_routine, i)));
    }
 
    for (auto it = thread_group.begin(); it != thread_group.end(); ++it)
    {
        it->join();
    }
 
    std::cin.get();
    std::cin.get();
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.04.2014, 02:10
Помогаю со студенческими работами здесь

Как установить Варкрафт на Windows 7 ???
Люди, помогите пожалуйста установть варку 3 на WINDOWS 7 ??? Проблема такая: запускаю варку вроде бы начинает запускаться и бац выдает...

Варкрафт 3, ДОТА: пишите, поиграем
Кто-то играет? Если да - пишите, поиграем...а то из знакомых мало кто с дотой дружит, а боты надоели)

Добыча из URL
У меня url такого вида http://saitotot.com/page.php/id1. Как мне добыть цифру 1 или которая там . Вот такое не выходит if...

Стянуть котировки золота и нефти
Function Цена_квартиры() Dim URL, ZEN, XMLHTTP As Object, XX: URL = &quot;http://www.rosrealt.ru/Rostov_na_Donu/cena&quot; Set XMLHTTP =...

Самый быстрый суперкомпьютер замедлился из-за золота
В ноябре прошлого года суперкомпьютер Titan в Национальной лаборатории Ок-Ридж (США) был назван самым быстрым в мире. Однако теперь...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru