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

Определить, сколько продавцов получили заработную плату в каждом заданном диапазоне - C++

Восстановить пароль Регистрация
 
Strax77
 Аватар для Strax77
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 9
20.01.2016, 13:48     Определить, сколько продавцов получили заработную плату в каждом заданном диапазоне #1
Как исправить код, чтобы он решал поставленную задачу?

В книжке попалась вот такая задача:

Используйте одномерный массив для решения следующий задачи. Компания платит продавцам на комиссионной основе. Продавцы получают 200 долларов в неделю плюс 9% от валовой продажи за эту неделю. Например, продавец, валовая продажа которого за неделю составила 5000 долларов, получает 200 долларов плюс 9% от 5000 долларов, или всего 650 долларов. Напишите программу (используя массив счетчиков), которая определяет, сколько продавцов получили заработную плату в каждом из следующих диапазонов (примем допущение, что зарплата каждого продавца округляется до целого значения):

1.200-299
2.300-399
3.400-499
4.500-599
5.600-699
6.700-799
7.800-899
8.900-999
9. 1000 и более.

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
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"RUS");
 
    int sellers[9] = {0}; // массив счетчиков... сколько итого бабла получит продавец... sellers[0] - 200-299, sellers[1] - 300-399 и т.д.
    int numberOfSales (0); // сколько продавец наторговал за неделю!
 
    while (cin >> numberOfSales) {
 
        numberOfSales = numberOfSales* 0.09 + 200;
        
        if (numberOfSales > 1000) // все результаты, когда продавец получит больше штуки засунуть в последний элемент массива
            ++sellers[8];
 
        ++sellers[numberOfSales / 100 - 2];
    }
    
    int lessValue (200), largerValue (299); // "от" и "до" для вывода результатов
    for (auto i = begin(sellers); i != end(sellers); ++i) {
        
        if (i == end(sellers)-1)
            cout << '$' << lessValue 
                 << " и более: "
                 << *i << '\n';
        else
        cout << '$' << lessValue 
             << "-$" << largerValue
             << ": " << *i << '\n';
 
        lessValue  +=100; largerValue += 100;
    }
 
    system("PAUSE");
    return 0;
}
Собственно, такая проблема - когда вводишь большое число (причем каждый раз по разному - может заругаться и на 300 тысяч, и на миллионе), компилятор пишет, что нарушил права чтения по адресу такому-то.... Хотя, вроде бы, в условии поставил, что все что больше тысячи - сувать в последний элемент массива
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2016, 13:48     Определить, сколько продавцов получили заработную плату в каждом заданном диапазоне
Посмотрите здесь:

Определить, какую заработную плату получит на фирме работник за выполненную работу, если ему начислено S, а налог составляет 20%. C++
C++ сосчитать сколько и каких цифр встретилось в заданном диапазоне C++
C++ Определить сколько различных символов в каждом слове введенного с клавиатуры текста
Составить программу которая рассчитывала бы заработную плату с учётом стажевых C++
Известны данные о зарплате каждого работника бригалы, в бригаде 25 человек. Определить суммарную заработную плату бригады и количество работников C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,224
20.01.2016, 13:52     Определить, сколько продавцов получили заработную плату в каждом заданном диапазоне #2
Дам подсказку, неуверен что код ++sellers[numberOfSales / 100 - 2]; делает - зачем писать, что у других возникают вопросы, что он делает:
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
 
using namespace std;
 
int main()
{
    int a = 433;
    cout << ( a / 100 ) << endl;
    return 0;
}
Strax77
 Аватар для Strax77
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 9
20.01.2016, 14:04  [ТС]     Определить, сколько продавцов получили заработную плату в каждом заданном диапазоне #3
rikimaru2013,
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
++sellers[numberOfSales / 100 - 2];
Я не додумался как это еще можно реализовать..
К примеру продавец получит 350. Что соответствует
C++
1
sellers[1]
т.е. 300-399. 300/100 == sellers[3].
и -2 чтобы инкрементировать значение нужного элемента массива, т.е. не sellers[3] а sellers[1].
560 / 100 == sellers[5]. Надо sellers[3], поэтому -2.
За границы не должен выйти, потому что продавец в любом случае получит 200 баксов. 200/100 == sellers[2] - 2, в итоге sellers[0]
Надеюсь понятно стало

Подсказку не понял, к сожалению. Что-то не так с округлением, надо думать?
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,224
20.01.2016, 14:09     Определить, сколько продавцов получили заработную плату в каждом заданном диапазоне #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Тоесть если ввести миллион, то будет +sellers[902 - 2]; ?
Strax77
 Аватар для Strax77
0 / 0 / 0
Регистрация: 02.12.2015
Сообщений: 9
20.01.2016, 14:13  [ТС]     Определить, сколько продавцов получили заработную плату в каждом заданном диапазоне #5
rikimaru2013, я вроде поставил в условии, что при значениях больше тысячи (если продавец бог торговли) инкрементировать последний счетчик.
C++
1
2
if (numberOfSales > 1000)
            ++sellers[8];

ептыть... я else забыл поставить... во дубина...
извиняюсь, вон в чем дело было
Yandex
Объявления
20.01.2016, 14:13     Определить, сколько продавцов получили заработную плату в каждом заданном диапазоне
Ответ Создать тему
Опции темы

Текущее время: 23:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru