Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> классы 
:(
    Опции темы
elenSV
  Дата 1.5.2009, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.4.2009

Репутация: -1
Всего: -1



проверьте пожлста
Рассмотреть модификацию магнитофона, который запоминает у себя в памяти все выполняемые пользователем действия. Считается что видиокассета обладает уникальным числовым идентификатором. В качестве тестовой программы рассмотреть задачу выполнения просмотра кассеты на магнитофоне, точный вид которого не определен. Просмотр сосстоит в последовательности след. операций: вставить кассету, перемотать кассету в начало, включить воспроизведение, выполнить останов и извлечь кассету.
Код

#include <iostream>
#include <string>
#include <vector>
using namespace std;
class magnitofon
{
        bool play, rec, kasset, stop;   // Процессы: воспроизведение, запись и наличие кассеты
        int rew;                                                // Процесс перемотки (положительное число - вперёд на заданный интервал, 
                                                                        // отрицательное число - назад на заданный интервал, 0 - бездействие)

        vector<string>  ListDat;                // Запоминает все действия
public:
        magnitofon()                                    // Конструктор
        {
                play = false;
                stop = false;                           // По-умолчанию все процессы выключены
                rec = false;
                rew = 0;
                kasset = false;                         // По-умолчванию кассеты нет
        }

        void m_stop()                                   // Метод останавливает все процессы видеомагнитофона
        {
                play = false;
                rec = false;
                rew = 0;
                ListDat.push_back("m_stop");
        }

        void m_play()                                   // Метод включает воспроизведение кассеты
        {
                m_stop();                                       // Может быть активен только один процесс, поэтому вызывается метод "Stop"
                play = true;
                ListDat.push_back("m_play");
        }

        void m_rew(int interval)                // Метод перематывает кассету в заданном направление
        {
                m_stop();
                rew = interval;                         // Перемотка на заданный интервал
                ListDat.push_back("m_rew");
        }

        void m_rec()                                    // Метод начинает запись
        {
                if (play) rec = true;           // Запись возможна только при включённом процессе play
                ListDat.push_back("m_rec");
        }

        void insert()                                   // Метод вставляет кассету
        {
                m_stop();
                kasset = true;
                ListDat.push_back("insert");
        }

        void get()                                              // Метод достаёт кассету      
        {
                m_stop();
                kasset = false;
                ListDat.push_back("get");
        }

        bool check()                                    // Метод проверяет, есть ли кассета
        {
                return kasset;                          // Возвращает true, если кассета есть, в противном случае false.
        }

        void outListDat()
        {
                vector<string>::iterator it;
                for(it = ListDat.begin(); it != ListDat.end(); ++it)
                        cout<<*it<<endl;
        }
};
int main()
{
        magnitofon mag;
        mag.insert();
        mag.m_play();
        mag.m_rec();
        mag.m_rew(1);
        mag.m_stop();
        mag.get();

        mag.outListDat();

        system("pause");
        return 0;

}



А как это в KDevelop оформить как cpp и h файл - какие директивы подключать
  
и ещё подскажите как это сделать:
Пусть имеется магнитофон с записью операций 
Требуется определить самую часто воспроизводимую кассету
то есть такую для которой операция воспроизведения производилась наиболее часто
PM MAIL   Вверх
mes
Дата 1.5.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(elenSV @  1.5.2009,  17:34 Найти цитируемый пост)
и ещё подскажите как это сделать:
Пусть имеется магнитофон с записью операций 
Требуется определить самую часто воспроизводимую кассету
то есть такую для которой операция воспроизведения производилась наиболее часто 

хранить где то кол-во воспроизведений для каждой кассеты (можно кол-во воспроизведений сделать свойством кассеты)
ну а дальше очевидное сравнение.

Добавлено через 6 минут и 24 секунды

Цитата(elenSV @  1.5.2009,  17:34 Найти цитируемый пост)
А как это в KDevelop оформить как cpp и h файл - какие директивы подключать

разбиваешь на три файла main.cpp magnitofon.h magnitofon.cpp
инклудишь в первый и третий  второй файл, и во все те системные файлы которые необходимо в этом файле файле.
в первый переносишь всю процедуру main.
во втором оставляешь весь класс, но без реализаций функций т.ев таком виде :
 
Код

class magnitofon
{
        bool play, rec, kasset, stop;   // Процессы: воспроизведение, запись и наличие кассеты
        int rew;                                                // Процесс перемотки (положительное число - вперёд на заданный интервал, 
                                                                        // отрицательное число - назад на заданный интервал, 0 - бездействие)
        vector<string>  ListDat;                // Запоминает все действия
public:
        magnitofon();                                    // Конструктор   
        void m_stop();
...

ну а в третий выносишь реалицию,  так :
Код



magnitofon::magnitofon()                                    // Конструктор
{
                play = false;
                stop = false;                           // По-умолчанию все процессы выключены
                rec = false;
                rew = 0;
                kasset = false;                         // По-умолчванию кассеты нет
}

void magnitofon::m_stop()                                   // Метод останавливает все процессы видеомагнитофона
{
                play = false;
                rec = false;
                rew = 0;
                ListDat.push_back("m_stop");
}

не забудь перед названием функции указать имя класса в котом они определены (т.е  добавить magnitofon::, см пример в коде)

Добавлено через 7 минут и 1 секунду
ну и дублировать темы правилами форума запрещено smile



--------------------
PM MAIL WWW   Вверх
elenSV
Дата 1.5.2009, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.4.2009

Репутация: -1
Всего: -1



 smile 
Я просто не оч понимаю как модифицировать методы и поле kasset так, что бы вставлялась каасета с именем, и при воспроизведении счётчик для вставленной кассеты увеличивался.
PM MAIL   Вверх
bsa
Дата 1.5.2009, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



создай проект c++ hello world и замени файл main.cpp своим.
Как вариант, запусти консоль (терминал) и скомпилируй вручную: g++ -o myprog myprog.cpp, затем останется только запустить ./myprog
PM   Вверх
mes
Дата 1.5.2009, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(elenSV @  1.5.2009,  17:45 Найти цитируемый пост)
Я просто не оч понимаю как модифицировать методы и поле kasset так, что бы вставлялась каасета с именем, и при воспроизведении счётчик для вставленной кассеты увеличивался. 


можно так к примеру :

Код


struct Kassete
{
    int InsertCount;
// ..
};

class Magnitofon
{
    ...
        void insert (Kassete& kassete);
         {
              ++kassete.InsertCount;
             ...
         }
 ...
};
int main (
...
Kassete  kassete[100]; // массив на 100 кассет
Magnitofon magnitofon;
magnitofon.insert(Kassete[11]);  // вставляем кассету условное ид которой =11
..



Это сообщение отредактировал(а) mes - 1.5.2009, 19:06


--------------------
PM MAIL WWW   Вверх
zim22
Дата 1.5.2009, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(mes @  1.5.2009,  18:57 Найти цитируемый пост)
Kassete [100] kassete; // массив на 100 кассет

smile
Код

Kassete kassete[100]; // массив на 100 кассет



--------------------
PM MAIL   Вверх
mes
Дата 1.5.2009, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(zim22 @  1.5.2009,  18:03 Найти цитируемый пост)
    
Kassete kassete[100]; // массив на 100 кассет
 smile  smile 



--------------------
PM MAIL WWW   Вверх
elenSV
  Дата 1.5.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.4.2009

Репутация: -1
Всего: -1



Я не оч поняла зачем вот это:
Код

int main (
...
Kassete  kassete[100]; // массив на 100 кассет
Magnitofon magnitofon;
magnitofon.insert(Kassete[11]);  // вставляем кассету условное ид которой =11
..

почему в main'e
 smile 
А как определить самую часто воспроизводимую кассету?
PM MAIL   Вверх
zim22
Дата 1.5.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(elenSV @  1.5.2009,  19:11 Найти цитируемый пост)
почему в main'e

потому что main выступает в качестве программы-драйвера для тестирования классов Mmagnitofon и Kassette

Добавлено @ 19:23
Цитата(elenSV @  1.5.2009,  19:11 Найти цитируемый пост)
А как определить самую часто воспроизводимую кассету?

отсортировать массив kassette. алгоритм partial_sort из <algorithm> подойдёт

Код

struct Kassete
{
  Kassete() : InsertCount(0),  id(unique_id++){ }
    int InsertCount;
    int id;;
    static int unique_id;
// ..
};
int Kassete::unique_id = 0;

bool cmp_fcn(const Kassete &k1, const Kassete &k2) {
  return k1.InsertCount > k2.InsertCount;
}

int main() {
  ...
  std::partial_sort(kassete, kassete + 1, kassete + 100, cmp_fcn);
  int max_number = kassete[0].InsertCount;
  int id_kassette = kassete[0].id;
  ...
}


Это сообщение отредактировал(а) zim22 - 1.5.2009, 19:37


--------------------
PM MAIL   Вверх
mes
Дата 1.5.2009, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(elenSV @  1.5.2009,  18:11 Найти цитируемый пост)
почему в main'e

определяй, где тебе удобнее  smile

Цитата(elenSV @  1.5.2009,  18:11 Найти цитируемый пост)
А как определить самую часто воспроизводимую кассету? 

примерно, так определяем самую часто вставляемую кассету :

Код


int max=0;
for (int i=0; i<100; ++i) проходим весь список касет.
   if (kassete[i].InsertCount > kassete[max].InsertCount) max=i;

std::cout << "Больше всех (а именно "<< kassete[max].InsertCount) "раз) была вставлена кассета с id " << max;


для самой воспроизводимой нужно завести еще одно поле, которое будет изменяться в magnitofon::play
(изменять можно на единицу при каждом включении или например по длине времени воспроизведения  - это уж на свой вкус)


P.S. все приведенные коды даны с допущениями. В частности предполагается, что поле InsertCount изначально обнулено.

Добавлено через 6 минут и 30 секунд
Цитата(zim22 @  1.5.2009,  18:22 Найти цитируемый пост)

отсортировать массив kassette. алгоритм partial_sort из <algorithm> подойдёт 

тогда id потеряется, так как в приведенном примере оно основывается на позиции элемента в массиве.
Кстати возможность таких последствий говорит, о том что решение не самое красивое. (но зато отн. легкое )  smile 

Это сообщение отредактировал(а) mes - 1.5.2009, 19:27


--------------------
PM MAIL WWW   Вверх
elenSV
Дата 1.5.2009, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.4.2009

Репутация: -1
Всего: -1



то есть здесь кроме этого ничего не надо:
Код

struct Kassete
{
 int InsertCount;
#include <iostream>
#include <string>
#include <vector>
using namespace std;
};
class magnitofon
{
        bool play, rec, kasset, stop;   // Процессы: воспроизведение, запись и наличие кассеты
        int rew;                                                // Процесс перемотки (положительное число - вперёд на заданный интервал, 
                                                                        // отрицательное число - назад на заданный интервал, 0 - бездействие)

        vector<string>  ListDat;                // Запоминает все действия
public:
        magnitofon()                                    // Конструктор
        {
                play = false;
                stop = false;                           // По-умолчанию все процессы выключены
                rec = false;
                rew = 0;
                kasset = false;                         // По-умолчванию кассеты нет
        }
        void m_stop()                                   // Метод останавливает все процессы видеомагнитофона
        {
                play = false;
                rec = false;
                rew = 0;
                ListDat.push_back("m_stop");
        }

        void m_play()                                   // Метод включает воспроизведение кассеты
        {
                m_stop();                                       // Может быть активен только один процесс, поэтому вызывается метод "Stop"
                play = true;
                ListDat.push_back("m_play");
        }

        void m_rew(int interval)                // Метод перематывает кассету в заданном направление
        {
                m_stop();
                rew = interval;                         // Перемотка на заданный интервал
                ListDat.push_back("m_rew");
        }

        void m_rec()                                    // Метод начинает запись
        {
                if (play) rec = true;           // Запись возможна только при включённом процессе play
                ListDat.push_back("m_rec");
        }

        void insert()                                   // Метод вставляет кассету
        {
                m_stop();
                kasset = true;
                   ++kassete.InsertCount;
                ListDat.push_back("insert");
        }

        void get()                                              // Метод достаёт кассету      
        {
                m_stop();
                kasset = false;
                ListDat.push_back("get");
        }

        bool check()                                    // Метод проверяет, есть ли кассета
        {
                return kasset;                          // Возвращает true, если кассета есть, в противном случае false.
        }

        void outListDat()
        {
                vector<string>::iterator it;
                for(it = ListDat.begin(); it != ListDat.end(); ++it)
                        cout<<*it<<endl;
        }
};
int main()
{
        magnitofon mag;
        mag.insert();
        mag.m_play();
        mag.m_rec();
        mag.m_rew(1);
        mag.m_stop();
        mag.get();
        Kassete  kassete[100]; // массив на 100 кассет
        Magnitofon magnitofon;
        magnitofon.insert(Kassete[11]);  // вставляем кассету условное ид которой =11
        mag.outListDat();

        system("pause");
        return 0;
}


али что - я на измене
 smile 
PM MAIL   Вверх
zim22
Дата 1.5.2009, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(mes @  1.5.2009,  19:23 Найти цитируемый пост)
тогда id потеряется, так как в приведенном примере оно основывается на позиции элемента в массиве.Кстати возможность таких последствий говорит, о том что решение не самое красивое. (но зато отн. легкое )

я это уже понял и изменил в своём посте структуру Kassete smile

Это сообщение отредактировал(а) zim22 - 1.5.2009, 19:39


--------------------
PM MAIL   Вверх
mes
Дата 1.5.2009, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Цитата(elenSV @  1.5.2009,  18:31 Найти цитируемый пост)
то есть здесь кроме этого ничего не надо:

В принципе в магнитофон необходимо добавить только лишь изменение свойств кассеты при каком нужно  действии.
ну и конечно описать саму структуру/класс кассеты и создать их список/массив.





--------------------
PM MAIL WWW   Вверх
EvilsInterrupt
Дата 2.5.2009, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Executables research
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 14.7.2007
Где: Железнодорожный, МО, Россия

Репутация: нет
Всего: 9



Код

        magnitofon()                                    // Конструктор
        {
                play = false;
                stop = false;                           // По-умолчанию все процессы выключены
                rec = false;
                rew = 0;
                kasset = false;                         // По-умолчванию кассеты нет
        }

Я бы переписал на:
Код

        magnitofon():                                    // Конструктор
                play(false),
                stop(false),                           // По-умолчанию все процессы выключены
                rec(false),
                rew(0),
                kasset(false)                         // По-умолчванию кассеты нет
        {
        }

инициализация должна быть в месте иницализации, а в конструкторе после constructor_name(): [section initialiation] {}
PM MAIL WWW ICQ Jabber   Вверх
zim22
Дата 2.5.2009, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Цитата(EvilsInterrupt @  2.5.2009,  09:20 Найти цитируемый пост)
инициализация должна быть в месте иницализации, а в конструкторе после constructor_name(): [section initialiation] {}

Хорошо. Допустим, мне нужно проинициализировать массив char значением "hello". 
Как вы перепишете код, чтобы buffer инициализировался в initializer list?

Код

class Foo {
public:
  Foo() {
    strcpy(buffer, "hello");
  }
private:
  char buffer[256];
};


Так не получается:
Код

Foo() :buffer("hello") { } // ошибка компиляции


Это сообщение отредактировал(а) zim22 - 2.5.2009, 10:08


--------------------
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1158 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.