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

Массивы: рассчитать зарплату работника - C++

Восстановить пароль Регистрация
 
inesta
0 / 0 / 0
Регистрация: 30.03.2010
Сообщений: 19
02.06.2010, 02:15     Массивы: рассчитать зарплату работника #1
Уважаемые ГУРУ, дошел до массивов. Суть задачи такова: использовать одномерный массив, вводить валовую прибыль работников за неделю, рассчитать зарплату работника за формулой 9% от валовой прибыли + 200 уе - ставка. Соответственно от величины валовой прибыли будет меняться диапазон зарплат. Посчитать сколько работников получили зарплату в каждом диапазоне. Пожалуйста замечания к коду. Спасибо огромное!

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.h>
#include<conio.h>
#include<iomanip.h>
 
main()
{
    const int arraySize = 10, frequency = 10;
    int pay[arraySize] = {200, 299, 399, 499, 599, 699, 799, 899, 999, 1000};
    int pay1[frequency] = {0};  //массив-счетчик
    int forWeek, sum;
 
    do{
    cout << "gross profit ( 1 worker ) -> ";
    cin >> forWeek;
 
    sum = forWeek * 0.09 + 200 + 1; //зарплата 1-го работника
 
    for(int i = 0; sum > pay[i]; i++)   //пока зарплата работника больше данного диапазона
        if(pay[i] >= sum || sum <= pay[i + 1])  //если нах. между определ. диапазонами(напр. 200-299)
            ++pay1[i+1];    //плюсуем к индексу 1 массива-счетчика(напр. диапазон 200-299; 299 нах в массиве под индексом 1)
        if(sum >= pay[9])   //если же зарплата больше чем 1000
            ++pay1[9];  //тогда плюс к 10 индексу массива счетчика
 
     }while(forWeek != -1);
 
    cout << endl <<"-------"<< setw(14) << "-----------" << endl
         << " range"<< setw(14) << "frequency" << endl
         << "-------"<< setw(14) << "-----------"<<endl;
         
    for(int j = 1; j < frequency; j++ )
        cout << j << ". " << setw(4) <<pay[j]
             << setw(9) << pay1[j] << endl;
 
 
 
getch();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2010, 02:15     Массивы: рассчитать зарплату работника
Посмотрите здесь:

Рассчитать зарплату для каждого рабочего C++
C++ зар. плата работника
C++ (С++) задача на функции. Подсчет годовой зарплаты работника
C++ Расчитать зарплату госслужащего исходя из количества отработанных часов и почасовой ставки работника
Двухмерные массивы. Рассчитать среднюю температуру в первом столбце и среднюю во втором столбце C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
02.06.2010, 02:36     Массивы: рассчитать зарплату работника #2
inesta, 1:
Цитата Сообщение от inesta Посмотреть сообщение
main()
На С++ правильно
C++
1
int main()
2.
Цитата Сообщение от inesta Посмотреть сообщение
const int arraySize = 10, frequency = 10;
Не понятно, зачем две константных переменных с одинаковым значением...
Но это всё цветочки, а вот ягодка:
Цитата Сообщение от inesta Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    do{
    cout << "gross profit ( 1 worker ) -> ";
    cin >> forWeek;
 
    sum = forWeek * 0.09 + 200 + 1;     //зарплата 1-го работника
 
    for(int i = 0; sum > pay[i]; i++)   //пока зарплата работника больше данного диапазона
        if(pay[i] >= sum || sum <= pay[i + 1])  //если нах. между определ. диапазонами(напр. 200-299)
            ++pay1[i+1];        //плюсуем к индексу 1 массива-счетчика(напр. диапазон 200-299; 299 нах в массиве под индексом 1)
        if(sum >= pay[9])       //если же зарплата больше чем 1000
            ++pay1[9];  //тогда плюс к 10 индексу массива счетчика
 
     }while(forWeek != -1);
Когда пользователь введёт -1, это значение вместе с остальными посчитается, а уж потом цикл прервётся.
Если не считать возможным случай, что какой-нибудь бедолага ноль денег заработает, я бы как-то так сделал:
C++
1
2
3
4
5
...
while ( cout << "gross profit ( 1 worker ) -> " && cin >> forWeek && forWeek > 0 ){
...
}
...
И ещё: денежные суммы как-то принято в переменных double хранить, и это не с проста:
Цитата Сообщение от inesta Посмотреть сообщение
sum = forWeek * 0.09 + 200 + 1;
sum имеет тип int. Какой там она после отбрасывания дробной части будет - разбираться лень, но точно кто-то пары тугриков не досчитается...
inesta
0 / 0 / 0
Регистрация: 30.03.2010
Сообщений: 19
02.06.2010, 02:39  [ТС]     Массивы: рассчитать зарплату работника #3
спасибо, но если он заработает 0 то у него будет голая ставка 200 уе) -1 не в счет - проверено. Если допустим ввести 12, 12, 12 и ввести метку -1 в итоге будет равно 3 работника заработали до 299 )
на счет дабл знаем, автор разрешил опустить. Нам главное целые показать
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
02.06.2010, 02:51     Массивы: рассчитать зарплату работника #4
Цитата Сообщение от inesta Посмотреть сообщение
если он заработает 0 то у него будет голая ставка 200 уе)
Вот с этим согласен, а
Цитата Сообщение от inesta Посмотреть сообщение
Если допустим ввести 12, 12, 12 и ввести метку -1 в итоге будет равно 3 работника заработали до 299 )
это потому, что значения меньше 200 просто не проверяются. А так присутствует ещё один персонаж с отрицательной зарплатой...
inesta
0 / 0 / 0
Регистрация: 30.03.2010
Сообщений: 19
02.06.2010, 02:54  [ТС]     Массивы: рассчитать зарплату работника #5
Цитата Сообщение от easybudda Посмотреть сообщение
Вот с этим согласен, а

это потому, что значения меньше 200 просто не проверяются. А так присутствует ещё один персонаж с отрицательной зарплатой...
неа, все нормально выводит, хоть 300 раз 300
Yandex
Объявления
02.06.2010, 02:54     Массивы: рассчитать зарплату работника
Ответ Создать тему
Опции темы

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