web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
1

[ООП + while]Определение заработной платы для каждого

23.08.2011, 20:20. Показов 4010. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
После Введите количество сотрудников: программа завершается ((
Помогите пожалуйста
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
#include "stdafx.h"
#include <iostream>
#include "lang.h"
using namespace std;
 
class Work
{
private:
    int work_hours;
    int rate_hour;
    int salary;
public:
    Work(int work_hours,int rate_hour)
    {
        this->work_hours = work_hours;
        this->rate_hour = rate_hour;
        salary = 0;
    }
    int getSalary(int salary)
    {
        return this->work_hours * this ->rate_hour;
    }
};
int  main()
{
        lang();
        int work_hours;
        int rate_hour;
        int salary;
        Work one(work_hours,rate_hour);
 
        int count = 0;
        cout << "Введите количество сотрудников: " << endl;
        cin >> count;
        while (count <=0)
        {
            cout << "Введите число рабочих часов: " << endl;
            cin >> work_hours;
            cout << "Введите почасовую ставку работника: " << endl;
            cin >> rate_hour;
            one.getSalary(salary);
            count--;
        }
 
        system("PAUSE");
        return 0;
}
Миниатюры
[ООП + while]Определение заработной платы для каждого  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.08.2011, 20:20
Ответы с готовыми решениями:

Определить размер заработной платы каждого сотрудника фирмы
Информация о сотрудниках фирмы содержит: • Ф. И. О. сотрудника; • табельный номер; • количество...

Вывести размер заработной платы каждого сотрудника фирмы за вычетом подоходного налога
У меня есть задача(Информация о сотрудниках фирмы включает фио, табельный номер, количество...

Создать список отделов и вычислить общую сумму заработной платы сотрудников каждого отдела
помогите пожалуйста решить задачу! срочно нужно! в с++. 7. В файле задан список сотрудников с...

Програма для начисления заработной платы работникам
Помогите написать программу для начисления заработной платы работникам за один месяц.

20
Эксперт С++
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
23.08.2011, 20:27 2
Цитата Сообщение от TBIKC Посмотреть сообщение
После Введите количество сотрудников: программа завершается ((
Будьте внимательны. Вы скорее всего count вводите > 0; тогда как цикл while будет выполняется при count <= 0; поэтому программа сразу же завершает работу..

Добавлено через 2 минуты
К тому же переменные work_hours, rate_hour;
Цитата Сообщение от TBIKC Посмотреть сообщение
lang();
* * * * * * * * int work_hours;
* * * * * * * * int rate_hour;
* * * * * * * * int salary;
* * * * * * * * Work one(work_hours,rate_hour);
ничем не инициализируются.. Да и вообще реализация функции main странно выглядит..
0
636 / 219 / 64
Регистрация: 03.11.2009
Сообщений: 488
23.08.2011, 20:28 3
TBIKC, В цикле while нужно вот такое условие
C++
1
 while (count > 0)
0
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
23.08.2011, 20:30  [ТС] 4
изменил на while (count > 0)
Ошибки:
Ввожу 3 сотрудника, программа даёт добро на ввод 4х;
После ввода каждого сотрудника не выводиться зарплата
0
Заблокирован
23.08.2011, 20:30 5
Цитата Сообщение от nameless Посмотреть сообщение
Будьте внимательны. Вы скорее всего count вводите > 0; тогда как цикл while будет выполняется при count <= 0; поэтому программа сразу же завершает работу..

Добавлено через 2 минуты
К тому же переменные work_hours, rate_hour;
ничем не инициализируются.. Да и вообще реализация функции main странно выглядит..
А зачем инициализировать эти переменные?!
0
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
23.08.2011, 20:31  [ТС] 6
Как правильно сделать ?
И обьясните пожалуйста почему именно так
0
Заблокирован
23.08.2011, 20:35 7
Цитата Сообщение от TBIKC Посмотреть сообщение
Как правильно сделать ?
И обьясните пожалуйста почему именно так
Вам уже ответили, что нужно изменить условие цикла. То есть написать

C++
1
while ( count > 0 )
0
636 / 219 / 64
Регистрация: 03.11.2009
Сообщений: 488
23.08.2011, 20:36 8
TBIKC, хм, по моему условие count >0 правильное и программа выполняеться корректно. А почему так? Потому что цикл будет выполняться пока условие верное, то есть переменная count >0
0
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
23.08.2011, 20:38  [ТС] 9
Сделал, но почему то не работает метод
one.getSalary(salary);
Не выводит зарплату

Добавлено через 54 секунды
Я спрашивал почему так, и как правильно на высказывание:

Цитата Сообщение от nameless Посмотреть сообщение
К тому же переменные work_hours, rate_hour;
ничем не инициализируются.. Да и вообще реализация функции main странно выглядит..
0
Заблокирован
23.08.2011, 20:42 10
Цитата Сообщение от TBIKC Посмотреть сообщение
Сделал, но почему то не работает метод
one.getSalary(salary);
Не выводит зарплату

Добавлено через 54 секунды
Я спрашивал почему так, и как правильно на высказывание:
Я только сейчас заметил, что имелось в виду под отсутствием инициализации переменных work_hours и rate_hour.

Вы объявляете свой объект Work one(work_hours,rate_hour), а в качестве аргументов передаете ему неинициализированные переменные. Поэтому там может быть все, что угодно.

Кроме того, как я понимаю, вы в своем цикле должны присваивать членам класса вводимые значения и на их основе считать зарплату. А в вашем классе нет методов, которые бы задавали значения вашим сленам класса.
0
636 / 219 / 64
Регистрация: 03.11.2009
Сообщений: 488
23.08.2011, 20:42 11
TBIKC, почему же не выполняется то? выполняется, правда его реализация какая то странная, Вы передаёте туда переменную salary,но Вы её ничем не инициализируете, а работу метода Вы не видите, потому что возвращаемое значение никуда не записываете
1
Эксперт С++
342 / 306 / 36
Регистрация: 16.06.2009
Сообщений: 486
23.08.2011, 20:44 12
Цитата Сообщение от Сыроежка Посмотреть сообщение
Вы объявляете свой объект Work one(work_hours,rate_hour), а в качестве аргументов передаете ему неинициализированные переменные. Поэтому там может быть все, что угодно.
Именно это я и имел в виду..
1
636 / 219 / 64
Регистрация: 03.11.2009
Сообщений: 488
23.08.2011, 20:44 13
И да Сыроежка правильно заметил насчёт отсуствия методов
1
Заблокирован
23.08.2011, 20:47 14
Например, вы могли бы свой цикл изменить следующим образом

C++
1
2
3
4
5
6
7
8
9
10
               while (count > 0 )
                {
                        cout << "Введите число рабочих часов: " << endl;
                        cin >> work_hours;
                        cout << "Введите почасовую ставку работника: " << endl;
                        cin >> rate_hour;
                        Work one( work_hours, rate_hour );
                        one.getSalary(salary);
                        count--;
                }
Добавлено через 1 минуту
Цитата Сообщение от nameless Посмотреть сообщение
Именно это я и имел в виду..
Да, спасибо. Я сразу же не обратил внимание, так как все внимание было сосредоточено на выражении цикла.
1
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
23.08.2011, 20:48  [ТС] 15
Так я же вроде их инициализировал
C++
1
2
3
4
        int work_hours;
        int rate_hour;
        int salary;
        Work one(work_hours,rate_hour);
Сделал так
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
#include "stdafx.h"
#include <iostream>
#include "lang.h"
using namespace std;
 
class Work
{
private:
    int work_hours;
    int rate_hour;
    int salary;
public:
    Work(int work_hours,int rate_hour)
    {
        this->work_hours = work_hours;
        this->rate_hour = rate_hour;
        salary = 0;
    }
    int getSalary(int salary)
    {
        return this->work_hours * this ->rate_hour;
    }
    void add(int work_hours, int rate_hour)
    {
    work_hours+=work_hours;
    rate_hour+=rate_hour;
    }
};
int  main()
{
        lang();
        int work_hours;
        int rate_hour;
        int salary;
        Work one(work_hours,rate_hour);
 
        int count = 0;
        cout << "Введите количество сотрудников: " << endl;
        cin >> count;
        while (count > 0)
        {
            cout << "Введите число рабочих часов: " << endl;
            cin >> work_hours;
            cout << "Введите почасовую ставку работника: " << endl;
            cin >> rate_hour;
            one.add(work_hours,rate_hour);
            one.getSalary(salary);
            count--;
        }
 
        system("PAUSE");
        return 0;
}
Без результатно
0
636 / 219 / 64
Регистрация: 03.11.2009
Сообщений: 488
23.08.2011, 20:52 16
TBIKC, вот ещё пример
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
// prj.cpp: главный файл проекта.
 
#include "stdafx.h"
#include <iostream>
using namespace System;
using namespace std;
 
class Work
{
private:
        int work_hours;
        int rate_hour;
        int salary;
public:
        Work(int work_hours,int rate_hour)
        {
                this->work_hours = work_hours;
                this->rate_hour = rate_hour;
                salary = 0;
        }
        int getSalary()
        {
            salary=this->work_hours * this ->rate_hour;
                return salary;
        }
       void Set(int h,int rh)
        {
            work_hours=h;
            rate_hour=rh;
        }
      
};
 
 
int main(array<System::String ^> ^args)
{
   locale::global(locale("rus"));
                int work_hours=0;
                int rate_hour=0;
                int salary;
                Work one(work_hours,rate_hour);
 
                int count = 0;
                cout << "Введите количество сотрудников: " << endl;
                cin >> count;
                while (count > 0)
                {
                        cout << "Введите число рабочих часов: " << endl;
                        cin >> work_hours;
                        cout << "Введите почасовую ставку работника: " << endl;
                        cin >> rate_hour;
                        one.Set(work_hours,rate_hour);
                        int sl= one.getSalary();
                        cout<<"Зарплата="<<sl<<endl;
                        count--;
                }
 
                system("PAUSE");
                return 0;
}
Добавлено через 39 секунд
можно вот так вот вашу задачу решить
1
Заблокирован
23.08.2011, 20:52 17
Цитата Сообщение от TBIKC Посмотреть сообщение
Так я же вроде их инициализировал
C++
1
2
3
4
        int work_hours;
        int rate_hour;
        int salary;
        Work one(work_hours,rate_hour);
Сделал так
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
#include "stdafx.h"
#include <iostream>
#include "lang.h"
using namespace std;
 
class Work
{
private:
    int work_hours;
    int rate_hour;
    int salary;
public:
    Work(int work_hours,int rate_hour)
    {
        this->work_hours = work_hours;
        this->rate_hour = rate_hour;
        salary = 0;
    }
    int getSalary(int salary)
    {
        return this->work_hours * this ->rate_hour;
    }
    void add(int work_hours, int rate_hour)
    {
    work_hours+=work_hours;
    rate_hour+=rate_hour;
    }
};
int  main()
{
        lang();
        int work_hours;
        int rate_hour;
        int salary;
        Work one(work_hours,rate_hour);
 
        int count = 0;
        cout << "Введите количество сотрудников: " << endl;
        cin >> count;
        while (count > 0)
        {
            cout << "Введите число рабочих часов: " << endl;
            cin >> work_hours;
            cout << "Введите почасовую ставку работника: " << endl;
            cin >> rate_hour;
            one.add(work_hours,rate_hour);
            one.getSalary(salary);
            count--;
        }
 
        system("PAUSE");
        return 0;
}
Без результатно
Потому что у вас функция-член класса add неправильно написана! Должно быть

C++
1
2
3
4
5
    void add(int work_hours, int rate_hour)
    {
       this->work_hours+=work_hours;
       this->rate_hour+=rate_hour;
    }
1
web dev
107 / 93 / 9
Регистрация: 23.09.2010
Сообщений: 737
23.08.2011, 21:02  [ТС] 18
Спасибо заработало, а теперь объясните мне пожалуйста пару моментов

1. Что это мы делаем ? Инциализируем ? В классе ведь уже описаны эти переменные, оны должны быть таких же имён ?
C++
1
2
3
4
        int work_hours = 0;
        int rate_hour = 0;
        int salary;
        Work one(work_hours,rate_hour);

2. Метод
C++
1
one.add(work_hours,rate_hour);
Реализация
C++
1
2
3
4
5
    void add(int h, int rh)
    {
    this->work_hours = h ;
    this->rate_hour = rh;
    }
Почему можно написать без this и это тоже будет работать ?
3. В конструкторе
C++
1
2
3
4
5
    Work(int work_hours,int rate_hour)
    {
        this->work_hours = work_hours;
        this->rate_hour = rate_hour;
        salary = 0;
Там где указываем в скобках мы можем любое имя переменным дать ? И такое же должно быть после знака равно в теле конструктора, что это мы делаем зачем ?

Спасибо
0
636 / 219 / 64
Регистрация: 03.11.2009
Сообщений: 488
23.08.2011, 21:10 19
TBIKC,
Цитата Сообщение от TBIKC Посмотреть сообщение
int work_hours = 0;
int rate_hour = 0;
int salary;
это просто переменные,которые вы используете чтобы инициализировать члены объекта one

Добавлено через 4 минуты
Можно написать без this так как имена передаваемые в параметрах не совпадают с именами полей объекта
Цитата Сообщение от TBIKC Посмотреть сообщение
this->work_hours = h ;
this->rate_hour = rh;
здесь можно и без this
а вот здесь без this не обойтись потому что имена здесь одинаковые и this указывает на объект который вызывает данный метод,поэтому мы можем через this обратиться к полям объекта

Цитата Сообщение от TBIKC Посмотреть сообщение
this->work_hours = work_hours;
this->rate_hour = rate_hour;
Добавлено через 47 секунд
Как то так,надеюсь что объяснила более менее понятно
0
Заблокирован
23.08.2011, 21:11 20
Цитата Сообщение от TBIKC Посмотреть сообщение
Спасибо заработало, а теперь объясните мне пожалуйста пару моментов

Почему можно написать без this и это тоже будет работать ?
3. В конструкторе
C++
1
2
3
4
5
    Work(int work_hours,int rate_hour)
    {
        this->work_hours = work_hours;
        this->rate_hour = rate_hour;
        salary = 0;
Там где указываем в скобках мы можем любое имя переменным дать ? И такое же должно быть после знака равно в теле конструктора, что это мы делаем зачем ?

Спасибо
Без this вы изменяете значения лишь параметров вашей функции, а не члены вашего класса. То есть в подобных случаях, когда имена параметров функции совпадают с именами членов вашего класса, параметры функции "закрывают" собой члены вашего класса
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.08.2011, 21:11
Помогаю со студенческими работами здесь

Вывести размер заработной платы каждого сотрудника фирмы с учетом налога
6) Информация о сотрудниках фирмы включает: Ф.И.О., табельный номер, количество проработанных часов...

Вывести размер заработной платы каждого работника фирмы по разнице налога
Помогите пожалуста, немогу зделать никак лабу..... Помогите пожалуйста Постановка задачи* 1....

Программа для расчёта заработной платы
Составить программу записи в файл сведений о зарплате рабочих. Для каждого рабочего указать...

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru