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

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

Войти
Регистрация
Восстановить пароль
 
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,292
Завершенные тесты: 3
#1

Программа расчета выгодности шантажистов - C++

08.01.2015, 12:03. Просмотров 228. Ответов 2
Метки нет (Все метки)

Пишу программу, которая рассчитывает выгодность двух шантажистов. Смысл вот в чем. Вам дается кучка людей и предлагается выбрать среди них двух шантажистов. Каждый может обмануть определенное количество людей, в том числе и своего конкурента. Собственно, это и должна определить программа - кто выгодней, путем сравнения людей.
Программа относительно проста, но я столкнулся с какой-то неуловимой ошибкой. Ругается на срабатывание точки останова (программа запускается и работает до момента, когда вы вводите номера шантажистов) в файле free.c в строчке 50, которая про retval = HeapFree(_crtheap, 0, pBlock);.
Целую ночь убил на поиск ошибки, изменял программу и так и сяк, везде были непонятные ошибки на различные файлы. Думаю, связано с памятью.

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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#include <cstdlib>
#include <iostream>
#include <ctime>
#include <cmath>
 
class Man
{
    int numberOfMan;                            //номер шантажиста среди людей
    int howManyPeople;                          //сколько человек данный чел может шантажировать
    int *numbersOfMailed;                       //массив с номерами этих людей
    static int allPeople;                       //количество всех людей
public:
    Man( int number )
        : howManyPeople(number)
    {
        if(!allPeople)
        {
            std::cout << "Enter, how many people there are:\n";
            std::cin >> allPeople;
        }
        std::cout << "Enter the number of the blackmailer: ";
        std::cin >> numberOfMan;
        numbersOfMailed = new int(howManyPeople);
    }
    ~Man()
    {
        delete [] numbersOfMailed;
    }
    void initTheArray()
    {
        if(!howManyPeople)
        {
            std::cerr << "Number of blackmailed people is not stated!\n";
            return;
        }
        for(int i = 0; i < howManyPeople; ++i)
            numbersOfMailed[i] = 0 + rand() % allPeople;
    }
 
    int getQuanOfMailed()
    {
        return howManyPeople;
    }
 
    void getNumbersOfMailed()
    {
        for(int i = 0; i < howManyPeople; ++i)
        {
            std::cout << numbersOfMailed[i] << " ";
        }
        std::cout << "\n";
    }
 
    int getAllPeople() const
    {
        return allPeople;
    }
 
    int whoCanMore( Man& second )                           
    {                                                               
        bool firstToSec = false, secToFirst = false;
        for(int i = 0; i < this->howManyPeople; ++i)
        {
            if(this->numbersOfMailed[i] == second.numberOfMan)
                firstToSec = true;
        }
        for(int i = 0; i < second.howManyPeople; ++i)
        {
            if(second.numbersOfMailed[i] = this->numberOfMan)
                secToFirst = true;
        }
 
        if(this->howManyPeople > second.howManyPeople && firstToSec)            //рассчитывает, кто выгодней. Вернет 1, если первый, 2 - второй,
            return 6;                                                           //ноль - оба могут шантажировать одинаковое кол-во людей
        else if(this->howManyPeople > second.howManyPeople)                     //3 - если первый может шантажировать второго
            return 1;                                                           //4 - если наоборот
        else if(this->howManyPeople < second.howManyPeople && secToFirst)       //5 - если оба
            return 7;                                                           //6 - если первый может больше обмануть, но второй 
        else if(this->howManyPeople < second.howManyPeople)                     //может обмануть первого
            return 2;                                                           //7 - если наоборот
        else
        {
            if(firstToSec && secToFirst)
                return 5;
            else if(firstToSec)
                return 3;
            else if(secToFirst)
                return 4;
            else 
                return 0;
        }
    }
 
    int difference( Man& second )                                       //если у шантажистов не одинак. кол-во "подчиненных людей,
    {                                                                   //высчитает разницу между ними, в против. случае возвр. 0
        if(this->howManyPeople != second.howManyPeople)
            return abs( this->howManyPeople - second.howManyPeople);
        else
            return 0;
    }
};
 
int Man::allPeople;
 
int main()
{
    srand(time(0));
    int menOfFirst, menOfSecond;
    std::cout << "Enter the quantity of men who can be blackmailed by the first and the second man:\n";
    std::cin >> menOfFirst >> menOfSecond;
 
    Man first(menOfFirst), second(menOfSecond);
    first.initTheArray (); second.initTheArray ();
    int allPeople = first.getAllPeople();
    int *people = new int(allPeople);
    for(int i = 0; i < allPeople; ++i)
    {
        people[i] = i + 1;
    }
 
    switch(first.whoCanMore(second))
    {
    case 1:
        {
        std::cout << "The first blackmailer can blackmail more people. Hire him.\n"
            << "The difference between them is\n";
        break;
        }
    case 2:
        std::cout << "The second blackmailer can blackmail more people. Hire him.\n"
            << "The difference between them is " << first.difference(second) << "\n";
        break;
    case 3:
        std::cout << "They can blackmail the same quantity of people, but the first can blackmail the second.\n"
            << "It would be better if you hire him.\n";
        break;
    case 4:
        std::cout << "They can blackmail the same quantity of people, but the second can blackmail the first.\n"
            << "It would be better if you hire him.\n";
        break;
    case 5:
        std::cout << "Don't hire both: they can blackmail the same quantity of people, but also\n"
            << "blackmail each other. Find the new blackmailer.\n";
        break;
    case 6:
        std::cout << "The first blackmailer can delude more people, but the second can blackmail him, so be careful with choice.\n"
            << "The difference between them is\n";
        first.getNumbersOfMailed();
        second.getNumbersOfMailed ();
        break;
    case 7:
        std::cout << "The second blackmailer can delude more people, but the first can blackmail him, so be careful with choice.\n"
            << "The difference between them is " << first.difference (second);
        break;
    case 0:
        std::cout << "Both blackmailers can delude the same quantity of people, hire whoever you want.\n";
        break;
    default:
        std::cout << "Cannot figure out!\n";
        break;
    }
    delete [] people;
    system("pause");
    return 0;
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.01.2015, 12:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа расчета выгодности шантажистов (C++):

Программа расчета интеграла - C++
Программа расчет определенного интеграла по формулам Чебышева для случая семи узлов. Вообще не могу понять,ни в одном учебники не нашел...

Программа расчета выражения - C++
Создать программу расчета математического выражения:

Программа расчета по формуле - C++
#include &lt;iostream&gt; using namespace std; int main() { int a, y; cin &gt;&gt; a; y ==...

Программа для расчета логарифма - C++
Написать программу , которая считает логарифм , первое число основание , второе степень.

Программа расчета по двум формулам - C++
Здравствуйте. Помогите пожалуйста найти ошибку. Нужно, чтобы ответы были одинаковыми #include &lt;iostream&gt; #include &lt;cmath&gt; ...

программа для расчета формул - C++
z=cosx*sinx z2=sin3x+sin2x+sinx

2
Renji
1963 / 1361 / 307
Регистрация: 05.06.2014
Сообщений: 3,893
08.01.2015, 12:08 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
new int(howManyPeople) new int[howManyPeople]
1
tnk500
113 / 117 / 25
Регистрация: 25.08.2012
Сообщений: 1,292
Завершенные тесты: 3
08.01.2015, 12:20  [ТС] #3
Renji, боже мой, как стыдно...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.01.2015, 12:20
Привет! Вот еще темы с ответами:

Программа расчета метрик кода - C++
Всем привет ищу исходник программы для расчета метрик кода хотя бы 3 метрики чтоб считало. Всем кто отзовется огромное спс.

Программа для расчета радиостанций - C++
День добрый. Помогите написать программу для учета 3х радиостанций и человека стоящего в центре. На С. На рисунке 1,2 и 3 радиостанции, 4...

программа расчета и отображения накладной - C++
кто умеет такое решитьУпражнение 2.1. Напишите программу вычисления периметра и площади прямо-угольника. Длины сторон прямоугольника...

Программа для расчета энергии - C++
Народ помогите разобраться в чем дело. Вроде программа написана правильно, но работает не корректно. Компилил в dev c++. Привожу текст...


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

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

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