Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не могу реализовать тестовое задание. / 25 сообщений из 26, страница 1 из 2
27.10.2016, 09:13
    #39334949
son456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
Здравствуйте! Читаю тестовое задание и не понять как в классе реализовать объект с различными типами "целое число", "вещественное число", "строка".
Само задание:
Реализовать двухсвязный список. Каждый элемент списка может содержать один объект. Объект может быть трех типов: "целое число", "вещественное число", "строка". В разных узлах одного списка может быть любой объект одного из допустимых типов. Каждый объект должен иметь возможность вывести свое содержимое на консоль. У списка должен быть метод, выводящий все элементы.
...
Рейтинг: 0 / 0
27.10.2016, 09:21
    #39334957
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
Делаешь классу 4 свойства: тип, целое значение, вещественное вещественное, строка.
При записи устанавливаешь тип в соответствии с типом записывываемого значения, значение пишешь в соответствующее свойство.
Метод Вывести() смотрит на тип и в соответствии с ним выводит требуемое.
...
Рейтинг: 0 / 0
27.10.2016, 09:30
    #39334964
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
От Объекта наследуешь: объект целое число, объект вещественное число, объект строка + виртуальные функции
...
Рейтинг: 0 / 0
27.10.2016, 09:31
    #39334966
son456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
Я на словах понимаю что делать не могли бы Вы привести примерный код?
...
Рейтинг: 0 / 0
27.10.2016, 09:42
    #39334972
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
Код: plaintext
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.
class object
{
	public:
		virtual void print()
		{	cout << "object" << endl; }
};

class float_object : public object
{
	public:
		void print()
		{	cout << value << endl; }
	
	private:
		float value;
};


int main() 
{
	
	object *mas[3];
	
	mas[0] = new object();
	mas[1] = new object();
	mas[2] = new float_object();
	
	for(size_t i=0;i<3;i++)
		mas[i]->print();
		
	return 0;
}

...
Рейтинг: 0 / 0
27.10.2016, 09:51
    #39334981
son456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
А почему object *mas[3]; Зачем указатель?
...
Рейтинг: 0 / 0
27.10.2016, 10:09
    #39335005
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
son456,

мне надо создать не три object, а два object и один float_object.
Эти три разных объекта ( 2*object + 1*float_object ) для удобства работы пихаю в один массив.
...
Рейтинг: 0 / 0
27.10.2016, 10:13
    #39335011
son456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
А можно было бы сделать так object mas[3][1];?
...
Рейтинг: 0 / 0
27.10.2016, 10:15
    #39335017
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
son456,

делай как Dima_T посоветовал :)
...
Рейтинг: 0 / 0
27.10.2016, 10:29
    #39335043
son456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
Хорошо, если бы Dima_T не на словах описал, а реальным кодом хотя бы приблизительно.
...
Рейтинг: 0 / 0
27.10.2016, 10:53
    #39335079
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
son456Не могу реализовать тестовое задание.
son456Я на словах понимаю что делать не могли бы Вы привести примерный код?

Не можешь - ищи другую работу :)
...
Рейтинг: 0 / 0
27.10.2016, 11:13
    #39335107
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
m_Slason456,

делай как Dima_T посоветовал :)
Если посмотреть темы ТС, там сплошное "Не могу, помогите за меня...."
...
Рейтинг: 0 / 0
27.10.2016, 11:27
    #39335132
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
Почему-то никто не посоветовал использовать union для выпендрёжа
...
Рейтинг: 0 / 0
27.10.2016, 11:51
    #39335175
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
NekZПочему-то никто не посоветовал использовать union для выпендрёжа
потому что ещё не выбрана реализация строки
...
Рейтинг: 0 / 0
27.10.2016, 11:57
    #39335187
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
NekZПочему-то никто не посоветовал использовать union для выпендрёжа

Потому что задача - не на union, а на проектирование иерархии объектов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.10.2016, 12:03
    #39335195
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
son456Хорошо, если бы Dima_T не на словах описал, а реальным кодом хотя бы приблизительно.
Чего там описывать? Я тебе самый примитивный способ решения описал.
Слова в код почти один в один превращаются.
Код: plaintext
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.
class multi_type {
  int type = 0;
  int val_int = 0;
  float val_float = 0;
public:
  void set(int v) {
     val_int = v;
     type = 1;
  }

  void set(float v) {
     val_float = v;
     type = 2;
  }

  void print() {
   switch(type) {
     case 0:
        cout << "X3";
        break;
     case 1:
        cout << val_int;
        break;
     case 2:
        cout << val_float;
        break;
   }
  }
}

...
Рейтинг: 0 / 0
27.10.2016, 13:15
    #39335289
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
Dimitry SibiryakovПотому что задача - не на union, а на проектирование иерархии объектов.
где иерархия?
...
Рейтинг: 0 / 0
27.10.2016, 13:34
    #39335320
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
Изопропилгде иерархия?
ListItem от которого наследуются IntListItem, FloatListItem и StringListItem.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
27.10.2016, 14:35
    #39335407
NekZ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
ИзопропилNekZПочему-то никто не посоветовал использовать union для выпендрёжа
потому что ещё не выбрана реализация строки
char * или string * не годятся?
...
Рейтинг: 0 / 0
27.10.2016, 20:04
    #39335762
son456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
Скажите, а если вводить с клавиатуры то как определить что мы ввели (какой тип имею ввиду)? Интересует дальнейшая реализация кода m_Sla?
...
Рейтинг: 0 / 0
27.10.2016, 20:30
    #39335774
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
son456Скажите, а если вводить с клавиатуры то как определить что мы ввели (какой тип имею ввиду)?
регулярные выражения помогут
...
Рейтинг: 0 / 0
27.10.2016, 23:06
    #39335822
son456
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
А вы не могли б привести пример. Хоть как это будет выглядеть.
...
Рейтинг: 0 / 0
27.10.2016, 23:58
    #39335837
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
son456А вы не могли б привести пример. Хоть как это будет выглядеть.
Код: php
1.
2.
3.
4.
5.
6.
7.
if ( /^\d+\./\d+$ ) {
   print "float";
} elseif ( /^\d+$/ ) {
   print "int";
} else {
   print "string"'
}
...
Рейтинг: 0 / 0
28.10.2016, 04:56
    #39335854
Пётр Седов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
son456Само задание:
Реализовать двухсвязный список. Каждый элемент списка может содержать один объект. Объект может быть трех типов: "целое число", "вещественное число", "строка". В разных узлах одного списка может быть любой объект одного из допустимых типов. Каждый объект должен иметь возможность вывести свое содержимое на консоль. У списка должен быть метод, выводящий все элементы.Если делать в объектно-ориентированном стиле (с виртуальными методами), то можно так:
Код: plaintext
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.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
#include <assert.h>
#include <stdio.h>
#include <string>

using namespace std;

class list_item_t {
public:
  virtual ~list_item_t() {}
  const list_item_t* prev() const {return _prev;}
  const list_item_t* next() const {return _next;}
  list_item_t* prev() {return _prev;}
  list_item_t* next() {return _next;}
  virtual void print() const = 0;
private:
  list_item_t* _prev = nullptr;
  list_item_t* _next = nullptr;
  friend class list_t;
};

class list_t {
public:
  // запрещаем неявное копирование
  list_t(const list_t& source) = delete; // удаляем конструктор копирования
  list_t& operator=(const list_t& source) = delete; // удаляем оператор присваивания

  list_t() {}
  ~list_t() {clear();}
  const list_item_t* first() const {return _first;}
  const list_item_t* last() const {return _last;}
  list_item_t* first() {return _first;}
  list_item_t* last() {return _last;}
  void add(list_item_t* item) {insert(item, _last, nullptr);} // добавляет в конец списка
  void insert(list_item_t* item, list_item_t* prev, list_item_t* next);
  void clear();
  void print_items() const;
private:
  list_item_t* _first = nullptr;
  list_item_t* _last = nullptr;
};

void list_t::insert(list_item_t* item, list_item_t* prev, list_item_t* next) {
  assert(item->_prev == nullptr);
  assert(item->_next == nullptr);
  item->_prev = prev;
  item->_next = next;
  if (prev != nullptr) {
    assert(prev->_next == next);
    prev->_next = item;
  } else {
    assert(_first == next);
    _first = item;
  }
  if (next != nullptr) {
    assert(next->_prev == prev);
    next->_prev = item;
  } else {
    assert(_last == prev);
    _last = item;
  }
}

void list_t::clear() {
  list_item_t* i2;
  for (list_item_t* i = _first; i != nullptr; i = i2) {
    i2 = i->_next;
    delete i;
  }
  _first = _last = nullptr;
}

void list_t::print_items() const {
  for (const list_item_t* i = _first; i != nullptr; i = i->_next) {
    i->print();
  }
}

class int_list_item_t : public list_item_t {
public:
  explicit int_list_item_t(int value) : _value(value) {}
  virtual void print() const override {printf("int %i\n", _value);}
private:
  int _value;
};

class float_list_item_t : public list_item_t {
public:
  explicit float_list_item_t(float value) : _value(value) {}
  virtual void print() const override {printf("float %f\n", _value);}
private:
  float _value;
};

class string_list_item_t : public list_item_t {
public:
  explicit string_list_item_t(const char value[]) : _value(value) {}
  virtual void print() const override {printf("string %s\n", _value.c_str());}
private:
  string _value;
};

int main() {
  list_t list;
  int_list_item_t* i1 = new int_list_item_t(1); list.add(i1);
  float_list_item_t* i3 = new float_list_item_t(0.5f); list.add(i3);
  string_list_item_t* i2 = new string_list_item_t("abc"); list.insert(i2, /*prev:*/i1, /*next:*/i3);

  assert(list.first() == i1);
  assert(list.first()->next() == i2);
  assert(list.first()->next()->next() == i3);
  assert(list.first()->next()->next()->next() == nullptr);

  list.print_items();
  return 0;
}

Вывод на консоль:
Код: sql
1.
2.
3.
int 1
string abc
float 0.500000


son456Скажите, а если вводить с клавиатурыЭто разве требуется в задании? Можно просто за-hardcode-ить элементы списка.

son456С такими советами у Вас в стране будет майдан.Вы работаете в Госдепе США?

m_Sla
Код: plaintext
1.
2.
3.
4.
5.
	object *mas[3];
	
	mas[0] = new object();
	mas[1] = new object();
	mas[2] = new float_object();

Это не список. В задании требуется список:son456Реализовать двухсвязный список.
...
Рейтинг: 0 / 0
28.10.2016, 05:49
    #39335860
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не могу реализовать тестовое задание.
Пётр Седовm_Sla
Код: plaintext
1.
2.
3.
4.
5.
	object *mas[3];
	
	mas[0] = new object();
	mas[1] = new object();
	mas[2] = new float_object();

Это не список. В задании требуется списокя за него задание делать не собирался
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Не могу реализовать тестовое задание. / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]