Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.04.2011, 14:41   #1
Шиншилка
Пользователь
 
Регистрация: 20.04.2011
Сообщений: 11
По умолчанию динамический массив объектов класса. С++

Используя объекты, классы, конструкторы и деструкторы необходимо разработать программу по следующим заданиям. Создать динамический массив объектов класса. Используя статическую переменную в конструкторе определять количество созданных объектов.
Задача:
Составить программу для подсчёта количества сотрудников компании, у которых стаж работы больше 15 лет. Количество сотрудников для ввода определить во время создания объекта.
Шиншилка вне форума Ответить с цитированием
Старый 25.04.2011, 14:53   #2
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию

И? ................
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 25.04.2011, 15:02   #3
Шиншилка
Пользователь
 
Регистрация: 20.04.2011
Сообщений: 11
По умолчанию

Помогите написать код.
Шиншилка вне форума Ответить с цитированием
Старый 25.04.2011, 15:03   #4
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию

Так а где ваши наработки?
Где класс? Вы начните хотя бы делать, потому что сейчас надо не помогать, а делать вместо вас.
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 25.04.2011, 15:07   #5
Шиншилка
Пользователь
 
Регистрация: 20.04.2011
Сообщений: 11
По умолчанию

Подскажите как правильно в программе подсчитать количество сотрудников , у которых стаж больше 15 лет?
Шиншилка вне форума Ответить с цитированием
Старый 25.04.2011, 15:12   #6
AlDelta
Реанимируюсь...
Участник клуба
 
Аватар для AlDelta
 
Регистрация: 19.07.2007
Сообщений: 1,445
По умолчанию

Объявляете и обнуляете переменную, которая будет счетчиком.
Код:
int amount=0;
Запускаете цикл, в котором будет обход всех сотрудников (объектов класса). Цикл от 0 до N-1
Код:
for(int i=0;i<N;i++)
{
   ....
}
В цикле смотрите соответствующее поле стажа и если оно больше 15 увеличиваете счетчик на 1
Код:
amount+=1;
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.
Правила форума => Правила раздела => Для общего развития => Помощь студентам => Перед тем, как создавать тему, скачайте себе...
P.S.: форум не песочница (с)
название статьи на сайте MS: "Отмена принудительного отключения автоматического запуска в реестре Windows"
AlDelta вне форума Ответить с цитированием
Старый 25.04.2011, 16:21   #7
Шиншилка
Пользователь
 
Регистрация: 20.04.2011
Сообщений: 11
По умолчанию

Проверьте,где в коде ошибки.Этот код для подсчёта количества сотрудников компании, у которых стаж работы больше 15 лет.
Код:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

class Staff
{
    public:
       Staff() {};
       ~Staff() {};
       void SetName(string fN)
       {
            fullName = fN;
       }
       void SetAge(int a)
       {
            experience = a;
       }
       int getExp()
       {
            return experience;
       }
       int getName()
       {
           return fullName;
       }
    private:
       string fullName;
       int experience;
};

int main(int argc, char* argv[])
{
		
		int n=0;
		cout<<"Input: ";
		cin>>n;
        Staff myA[n];
		int amout=0;
        for (int i = 0;i<n;i++)
        {	
				myA[i].SetAge(i*5);
        
                if (myA[i].getExp() >= 15)
                {
                        amout+=1;
                }
        }
        getch();
        return 0;
}

Последний раз редактировалось Шиншилка; 25.04.2011 в 16:26.
Шиншилка вне форума Ответить с цитированием
Старый 25.04.2011, 16:40   #8
Alt_Shift
Пользователь
 
Аватар для Alt_Shift
 
Регистрация: 11.11.2010
Сообщений: 74
По умолчанию

навскидку- пространства имен нет, массив объектов класса нужен динамический и int getName должен быть string getName
Alt_Shift вне форума Ответить с цитированием
Старый 25.04.2011, 17:58   #9
RusGim
 
Регистрация: 20.04.2011
Сообщений: 5
По умолчанию

Смотри, удобно делать так:

Код:
struct TSotrudnik           // структура данных о сотруднике
{
TSotrudnik (void);
char Name[128];  // имя
int Stage;          // возраст
};

TSotrudnik::TSotrudnik (void)
{
// собственно, конструктор
strcpy(Name, "");
Stage = 0;
}

// здесь деструктор переопределять не надо, программа сама знает, что с нужно делать.

class TMyFirm
{
private:
int cnt; // кол-во сотрудников
public:
TSotrudnik* Sotrudnik;   // динамический массив сотрудников
int Count (void);  // возвращает кол-во
int Count (const int); // возвращает кол-во сотрудников со стажем, более указанного
void AddSotr (const AnsiString, const int); // добавить сотрудника
void Delete (const int); // Удалить сотрудника
TMyFirm (void);   // конструктор
~TMyFirm (void);  // деструктор
};

TMyFirm::TMyFirm (void)
{
cnt = 0;
Sotrudnik = new TSotrudnik[cnt+1]; // объявление ДИНАМИЧЕСКОГО массива
}

TMyFirm::~TMyFirm (void) // а вот здесь декструктор нужно переписать
{
delete [] Sotrudnik;
cnt = 0;
}

void TMyFirm::AddSotr (const AnsiString Name, const int Stage)
{
TSotrudnik Buf;
strcpy(Buf.Name, Name.c_str());
Buf.Stage = Stage;
Sotrudnik = (TSotrudnik*)ReallocMemory(Sotrudnik, (cnt+1)*sizeof(Buf)); // переопределение размера массива
Sotrudnik[cnt] = Buf;
cnt=cnt+1;
}

void TMyFirm::Delete (const int Index)
{
Sotrudnik[Index] = TSotrudnik();
cnt--;
for(int i=Index; i<cnt; i++)
Sotrudnik[i]=Sotrudnik[i+1];
if (cnt > 0)
Sotrudnik = (TSotrudnik*)ReallocMemory(Sotrudnik, cnt);
}

int TMyFirm::Count (void)
{
return cnt;
}

int TMyFirm::Count (const int Stage)
{
int amount=0;
for (int i=0; i<cnt; i++)
if (Sotrudnik[i].Stage > Stage) amount++;
return amount;
}
Потом объявляешь TMyFirm* MyFirm = new TMyFirm() и работаешь с классом, как хочешь.
Метод слегка сложноват для новичка, но с точки зрения экономии памяти и удобства работы - вариант - то что надо.

Будут ещё вопросы, пиши. ;-)

Последний раз редактировалось RusGim; 25.04.2011 в 18:24.
RusGim вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамический массив класса Array emnm Общие вопросы C/C++ 0 21.12.2010 22:04
Динамический массив как закрытый член класса Zhigool' Visual C++ 11 15.12.2010 13:20
Динамический массив - или всё таки не динамический? vedro-compota Общие вопросы C/C++ 30 10.12.2010 23:22
Коллекция объектов класса в С++ MarihuanaP Помощь студентам 2 09.05.2010 13:06
2-мерный динамический массив экземпляров класса. С++ Парсифаль Общие вопросы C/C++ 1 29.12.2009 14:35