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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
23.08.2011, 20:20     [ООП + while]Определение заработной платы для каждого #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
#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]Определение заработной платы для каждого  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2011, 20:20     [ООП + while]Определение заработной платы для каждого
Посмотрите здесь:

C++ ООП для рисования
Литература по ООП для новичков C++
C++ Подскажите задачки для ООП С++
данный код считает количество нечетных элементов в столбце , но он считает не для каждого столбца , как сделать , чтобы считал для каждого?подскажите C++
Создать список отделов и вычислить общую сумму заработной платы сотрудников каждого отдела C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
23.08.2011, 20:27     [ООП + while]Определение заработной платы для каждого #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 странно выглядит..
lera8
 Аватар для lera8
630 / 213 / 26
Регистрация: 03.11.2009
Сообщений: 488
23.08.2011, 20:28     [ООП + while]Определение заработной платы для каждого #3
TBIKC, В цикле while нужно вот такое условие
C++
1
 while (count > 0)
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
23.08.2011, 20:30  [ТС]     [ООП + while]Определение заработной платы для каждого #4
изменил на while (count > 0)
Ошибки:
Ввожу 3 сотрудника, программа даёт добро на ввод 4х;
После ввода каждого сотрудника не выводиться зарплата
Сыроежка
Заблокирован
23.08.2011, 20:30     [ООП + while]Определение заработной платы для каждого #5
Цитата Сообщение от nameless Посмотреть сообщение
Будьте внимательны. Вы скорее всего count вводите > 0; тогда как цикл while будет выполняется при count <= 0; поэтому программа сразу же завершает работу..

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

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

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

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

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

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

Кроме того, как я понимаю, вы в своем цикле должны присваивать членам класса вводимые значения и на их основе считать зарплату. А в вашем классе нет методов, которые бы задавали значения вашим сленам класса.
lera8
 Аватар для lera8
630 / 213 / 26
Регистрация: 03.11.2009
Сообщений: 488
23.08.2011, 20:42     [ООП + while]Определение заработной платы для каждого #11
TBIKC, почему же не выполняется то? выполняется, правда его реализация какая то странная, Вы передаёте туда переменную salary,но Вы её ничем не инициализируете, а работу метода Вы не видите, потому что возвращаемое значение никуда не записываете
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 14
Регистрация: 16.06.2009
Сообщений: 486
23.08.2011, 20:44     [ООП + while]Определение заработной платы для каждого #12
Цитата Сообщение от Сыроежка Посмотреть сообщение
Вы объявляете свой объект Work one(work_hours,rate_hour), а в качестве аргументов передаете ему неинициализированные переменные. Поэтому там может быть все, что угодно.
Именно это я и имел в виду..
lera8
 Аватар для lera8
630 / 213 / 26
Регистрация: 03.11.2009
Сообщений: 488
23.08.2011, 20:44     [ООП + while]Определение заработной платы для каждого #13
И да Сыроежка правильно заметил насчёт отсуствия методов
Сыроежка
Заблокирован
23.08.2011, 20:47     [ООП + while]Определение заработной платы для каждого #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 Посмотреть сообщение
Именно это я и имел в виду..
Да, спасибо. Я сразу же не обратил внимание, так как все внимание было сосредоточено на выражении цикла.
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
23.08.2011, 20:48  [ТС]     [ООП + while]Определение заработной платы для каждого #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;
}
Без результатно
lera8
 Аватар для lera8
630 / 213 / 26
Регистрация: 03.11.2009
Сообщений: 488
23.08.2011, 20:52     [ООП + while]Определение заработной платы для каждого #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 секунд
можно вот так вот вашу задачу решить
Сыроежка
Заблокирован
23.08.2011, 20:52     [ООП + while]Определение заработной платы для каждого #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;
    }
TBIKC
web dev
 Аватар для TBIKC
104 / 91 / 1
Регистрация: 23.09.2010
Сообщений: 738
23.08.2011, 21:02  [ТС]     [ООП + while]Определение заработной платы для каждого #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;
Там где указываем в скобках мы можем любое имя переменным дать ? И такое же должно быть после знака равно в теле конструктора, что это мы делаем зачем ?

Спасибо
lera8
 Аватар для lera8
630 / 213 / 26
Регистрация: 03.11.2009
Сообщений: 488
23.08.2011, 21:10     [ООП + while]Определение заработной платы для каждого #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 секунд
Как то так,надеюсь что объяснила более менее понятно
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2011, 21:11     [ООП + while]Определение заработной платы для каждого
Еще ссылки по теме:

C++ Создать список отделов и вычислить общую сумму заработной платы сотрудников этого отдела
C++ Определить размер заработной платы каждого сотрудника фирмы
Программа расчета суммы налоговых отчислений от заработной платы C++

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

Или воспользуйтесь поиском по форуму:
Сыроежка
Заблокирован
23.08.2011, 21:11     [ООП + while]Определение заработной платы для каждого #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 вы изменяете значения лишь параметров вашей функции, а не члены вашего класса. То есть в подобных случаях, когда имена параметров функции совпадают с именами членов вашего класса, параметры функции "закрывают" собой члены вашего класса
Yandex
Объявления
23.08.2011, 21:11     [ООП + while]Определение заработной платы для каждого
Ответ Создать тему
Опции темы

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