Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Создание файла с параметрами из консоли Вообщем это должно работать, но не работает. В принципе работы программы разобраться очень просто, поэтому не объясняю. #include <iostream> #include <fstream> int i; std::fstream f; const... Дошло Выше тебе намекали, что нельзя сравнивать указатели оператором == (точнее можно, но результат будет не тот, который ожидается:)). Используй strcmp() для сравнения. https://www.cyberforum.ru/ cpp-beginners/ thread1559476.html C++ Показатель знаний Мне как студенту, интересно как оценивают работодатели junior`ов. Время от времени прохожу тесты на quizful. Пользуются ли при собеседовании подобными тестами, и на сколько объективной оценкой можно... https://www.cyberforum.ru/ cpp-beginners/ thread1559485.html
C++ List как продолжать программу ? Упражнение Тип Бинар List ( Каждый элемент знает его адрес следующий и предыдущий элемент ) Придерживайтесь переопределить все основные функции и операторы.... https://www.cyberforum.ru/ cpp-beginners/ thread1559481.html C++ Интерполирование функции полиномом. Не совпадают значения в узлах #include <iostream> #include <cmath> using namespace std; #define c 10 #define n 3 double function_1(double l) { double m; m = pow(l,4); https://www.cyberforum.ru/ cpp-beginners/ thread1559494.html
C++ Перемножение матриц N на M ошибка в выводе #include "stdafx.h" #include <iostream> #include <stdlib.h> #include <conio.h> using namespace std; int **mas_1; int **mas_2; int **mas_3; Да, проблема не в этом Добавлено через 7 минут нужно дописать строчку кода 75 строкой cout << " "; тогда вывод не будет сливаться и выведется матрица, но теперь я понимаю что функция считает... https://www.cyberforum.ru/ cpp-beginners/ thread1559454.html C++ Разные результаты программы при постоянных входных значениях https://www.cyberforum.ru/ cpp-beginners/ thread1559446.html
Доброго времени суток! Столкнулся с такой проблемой - ввожу одни и те же значения в исходный массив. Запускаю программу - выдает один результат. Запускаю еще раз (значения не меняю) - результат... if(x!=-1) result*=(1+x); result+=((x-2)/P(x,n,i)); Элемент x находится все массива x (последний элемент имеет номер n-1). Поэтому программа и цепляет всякий мусор.
C++ Если в матрице найдутся две соседние строки, которые состоят из четных элементов, поменять их местами https://www.cyberforum.ru/ cpp-beginners/ thread1559488.html
Отладка идет, результат не верный. #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <clocale> int main() { setlocale(LC_ALL, "Rus"); int **mas, i, j, ni, nj,fl; Может таки посмотришь на код и подскажешь нубу? Так и быть, подскажу - озвучь задание.
C++ наследование https://www.cyberforum.ru/ cpp-beginners/ thread1559417.html
Каково состояние бытия выпуклый шестиугольник??? #include <iostream> #include <conio.h> #include <cmath> using namespace std; class Point { Это тролль. Я минусую. Советую и вам.
C++ Определить цифру, наиболее часто встречающуюся в числе https://www.cyberforum.ru/ cpp-beginners/ thread1559464.html
Помогите, не понимаю, что нужно сделать? Для заданного целого числа N определить цифру а, наиболее часто встречающуюся в числе. Сформировать одномерный массив из 5 элементов: a, а2, а3, а4, а5. AL_Int, #include <iostream> #include <map> #include <algorithm> bool compare_second(const std::pair<int, int>& aLeft, const std::pair<int, int>& aRight) { return aLeft.second <...
C++ В прямоугольной матрице определить сумму элементов в строках, содержащих хотя бы один ноль в прямоугольной матрице определить сумму элементов в строках, содержащих хотя бы один ноль c++ #include "stdafx.h" #include <iostream> #include <locale> using namespace std; int main() {... //Вывод сформированной матрицы и подсчет сумм строк без нулей for (int i(0); i < a; i++) { bool Nozero=true; int sum=0; for (int j(0); j < b; j++) { ... https://www.cyberforum.ru/ cpp-beginners/ thread1559414.html
C++ Не понимаю, как работает код? https://www.cyberforum.ru/ cpp-beginners/ thread1559483.html
int main(int argc, char** argv) //кол-во аргументов, указатель на массив указателей на сами аргументы. { setlocale( LC_ALL , "Russian") ; printf(" Имя файла \n" ) ; printf("%s \n" ,... TC, тема в разделе "Форум Электротехника, ТОЭ". Если немного пораскините мозгами, что вы ждете со своим кодом тут? Переношу.
C++ Определить количество подряд идущих нулей в младших разрядах числа https://www.cyberforum.ru/ cpp-beginners/ thread1559465.html
Дано натуральное число N (N > 9). Определить количество нулей, идущих подряд в младших разрядах данного числа. Пример. N = 1 020 000. Количество нулей равно четырем. zss, Redzep, попробовал ваши решения, ввел ноль, скажите когда мне консоль можно будет закрыть? :D Добавлено через 33 секунды гзл, N чему равно?
542 / 163 / 79
Регистрация: 23.09.2013
Сообщений: 316
23.10.2015, 00:49 0

Изменение вектора родителя через наследников - C++ - Ответ 8232005

23.10.2015, 00:49. Показов 2620. Ответов 5
Метки (Все метки)

Лучший ответ Сообщение было отмечено Shinichi как решение

Решение

Shinichi,

Не по теме:

Я в данный момент пишу для Вас пример моего видения данного решения, мы с Вами потом сможем развернуто обсудить его.



Добавлено через 36 минут
Итак, код:
Кликните здесь для просмотра всего текста
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
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#ifndef CHESS
#define CHESS
 
#include <iostream>
#include <vector>
#include <string>
#include <assert.h>
 
struct Pos {
  size_t x;
  size_t y;
};
 
class Figure {
 public:
  virtual std::string TextRepresentation() const = 0;
  virtual bool CanMove(const Pos &from, const Pos &to) = 0;
  virtual ~Figure() {}
};
 
class Cell {
 public:
  Figure *set_figure_inside_cell(Figure *figure) {
    auto old_figure = figure_inside_cell_;
    figure_inside_cell_ = figure;
    return old_figure;
  }
 
  Figure *remove_figure() {
    auto figure_inside_cell = figure_inside_cell_;
    figure_inside_cell_ = nullptr;
    return figure_inside_cell;
  }
 
  Figure *figure_inside_cell() const { return figure_inside_cell_; }
 
  std::string TextRepresentation() const {
    auto figure = figure_inside_cell();
    if (figure != nullptr) {
      return figure->TextRepresentation();
    }
    return ".";
  }
 
 private:
  Figure *figure_inside_cell_ = nullptr;
};
 
class Field {
 public:
  Field(size_t size = 8);
 
  std::string TextRepresentation() const {
    std::string text_representation;
    for (auto line : field_) {
      for (auto cell : line) {
        text_representation +=
            cell.TextRepresentation() + kCellSeparationSymbol;
      }
      text_representation += kLineSeparationSymbol;
    }
    return text_representation;
  }
 
  bool SetFigure(Figure *figure, const Pos &position) {
    auto is_position_valid = IsPositionValid(position);
 
    if (is_position_valid) {
      field_[position.y][position.x].set_figure_inside_cell(figure);
    }
    return is_position_valid;
  }
 
  void SetFigureBack(Figure *figure_from_cell, const Pos &from) {
    assert(field_[from.y][from.x].set_figure_inside_cell(figure_from_cell) ==
           nullptr);
  }
 
  bool MoveFigure(const Pos &from, const Pos &to) {
    auto are_positions_valid = IsPositionValid(from) && IsPositionValid(to);
    if (are_positions_valid) {
      auto figure_from_cell = field_[from.y][from.x].remove_figure();
      if (figure_from_cell && figure_from_cell->CanMove(from, to)) {
        auto figure_inside_destination_cell =
            field_[to.y][to.x].set_figure_inside_cell(figure_from_cell);
        if (figure_inside_destination_cell == nullptr) {
          return true;
        } else {
          SetFigureBack(figure_from_cell, from);
        }
      }
    }
    return false;
  }
 
 private:
  bool IsPositionValid(const Pos &pos) const {
    return pos.y < field_.size() && pos.x < field_[pos.y].size();
  }
 
  const char kCellSeparationSymbol = '\t';
  const char kLineSeparationSymbol = '\n';
 
  std::vector<std::vector<Cell> > field_;
};
 
Field::Field(size_t size) {
  field_.resize(size);
  for (size_t i = 0; i < size; ++i) {
    field_[i].resize(size);
  }
}
 
class Bishop : public Figure {
 public:
  std::string TextRepresentation() const override;
  bool CanMove(const Pos &from, const Pos &to) override;
};
 
class Rook : public Figure {
 public:
  std::string TextRepresentation() const override;
  bool CanMove(const Pos &from, const Pos &to) override;
};
 
#endif
 
/// -----------------------------
 
std::string Bishop::TextRepresentation() const { return "*"; }
 
bool Bishop::CanMove(const Pos &from, const Pos &to) {
  return true;
}  // todo fill with logic
 
std::string Rook::TextRepresentation() const { return "#"; }
 
bool Rook::CanMove(const Pos &from, const Pos &to) {
  return true;
}  // todo fill with logic
 
void ShowField(const Field &field) {
  std::cout << '\n' << field.TextRepresentation() << std::endl;
}
 
int main() {
  Field field;
  ShowField(field);
 
  Bishop b;
  Pos b_pos = {2, 2};
  std::cout << "set bishop figure success:" << field.SetFigure(&b, b_pos)
            << '\n';
 
  Rook r;
  Pos r_pos = {5, 2};
  std::cout << "set rook figure success:" << field.SetFigure(&r, r_pos) << '\n';
 
  ShowField(field);
 
  Pos new_b_pos = {3, 2};
  std::cout << "change bishop position success:"
            << field.MoveFigure(b_pos, new_b_pos);
 
  ShowField(field);
}


Пруф работоспособности:
http://ideone.com/FPPSar

Прошу строго не судить. Я полностью убрал на данный момент ограничения на перестановку фигур (оставил заглушки с todo). Кроме того, в зависимости от накладываемых требований на функционал - возможно потребуется доработка иерархий и отношений сущностей. Например чтобы суметь взяться за Фигуру - и поставить её в позицию - нужно научить фигуру определять в какой позиции она сейчас находится ( а для этого, возможно, её придется подружить с Cell, а Cell научить понимать свою позицию). Вариантов тут масса, это просто пример рабочий как иллюстрация возможностей реализации через композицию.

Добавлено через 3 минуты
При реализации использован стандарт языка с++11.

Добавлено через 9 минут
Основные идеи - хоть на доске и располагаются все фигуры - она не отвечает за их время жизни (хотя можно использовать и обратный подход). Мы можем установить фигуру на позицию в доске, можем убрать фигуру с позиции доски. Можем передвинуть фигуру (композиция снятия и установки). Доска не знает какая конкретная фигура установлена в ячейке доски. Фигура, ячейка, доска - имеют методы текстового представления своей сущности (для фигуры - просто символ, для ячейки - символ ячейки - если ячейка пуста и символ фигуры если в ячейку установлена фигура, для доски - символы всех ячеек из которых она состоит в отформатированном виде). Символ для фигуры получается из виртуального метода - что позволяет полиморфно менять его от фигуры к фигуре. (Хотя можно было сделать базовый класс, в который мы устанавливаем этот символ как строку - и он её отображает - вот оно многообразие реализаций). Далее текстовое представление может быть отображено (например в поток вывода). В нашем случае информацию для отображения содержит std::string - в общем случае это был бы отдельный абстрактный тип данных. (набор координат, картинка, или целая 3д модель).

Добавлено через 12 минут
Из мыслей пришедших на ум в последний момент:
В моей реализации доска является гарантом соблюдения игровых правил. (Если не считать доступность метода SetFigure) - по крайней мере moveFigure - защищает от нечестных с точки зрения игровых правил действий. Но в целом имело бы смысл разнести данную доску на 2 разные сущности - доска и игра (Game) - в игре были бы методы связанные с игровой логикой - а доска осталось бы для презентации игровой доски и не более - позволяющей делать с собой что угодно (В реальности же доска тебя не накажет за то что ты пешкой начал ходить как ферзём). Это в частности позволило бы с одной и той же доской и фигурами играть в разные игры (Шахматы и шашки например).
Еще одна мысль - игре понадобится отслеживать состояние доски потому-что, например, да фигура может походить по диагонали... но что она не может перепрыгнуть через другие фигуры, стоящие на её пути - скажет только игра, обладающая знаниями о том, что находится на пути следования фигуры.

Добавлено через 3 минуты
Еще один момент - фигурам нужно будет присвоить принадлежность к сторонам (белые, черные) - и дописать логику замены фигур на доске. (Например, если белая пешка наехала на поле с белым же ферзем - пользователю должно написать, что так ходить нельзя) А вот если белая пешка попала на поле с черным ферзем - она его съедает - поле занимается пешкой, ферзь удаляется, пользователю записывают счет. Кроме того нужно было бы добавить контроль последовательности ходов и сущность игрока. Т.е. на верхнем уровне были бы написаны строки, позволяющие ходить по очереди игроку белых и игроку черных, при этом, если игрок белых пытается взять фигуру черных - он получает сообщение об ошибке, что мол не твоё - не трожЪ).

Вернуться к обсуждению:
Изменение вектора родителя через наследников C++
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.10.2015, 00:49
Готовые ответы и решения:

Вывод поста, который содержит id категории, её родителя, родителя родителя
Есть 2 таблицы, первая - категории ( category_id, parent_id и т.д), вторая - посты (post_id, category_id) В общем, в...

Вывод полей наследников через foreach из List
Или не обязательно через foreach. Доброго дня! У меня все плохо с основами, потому кидайте, пожалуйста, свои помидоры. Вопрос в...

Изменение родителя в Qt Designer
Не как не могу разобраться как изменить родителя в Qt Designer, например у меня есть форма класса QMainWindow я кидаю на нее виджет...

5
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.10.2015, 00:49
Помогаю со студенческими работами здесь

ООП - изменение переменной родителя
Простой скрипт В корне есть переменная $SERVER_PARAMS{location} = 1; В пакет Components передаю весь хэш %SERVER_PARAMS ...

Изменение вектора. Наибольший элемент вектора
Добрый день, нужна оценка кода. Пропустил занятия, делал по теории, опирался на массивы. Скажите, правильно ли реализовано? Создать...

CSS и изменение стиля родителя при нажатии на дочь
Как это сделать? Имеется: &lt;div class=&quot;bag&quot;&gt;&lt;div class=&quot;tes&quot;&gt;&lt;/div&gt;&lt;input class=&quot;bt&quot; type=&quot;submit&quot;...

Пропорциональное изменение размеров div (от родителя до всех вложенных)
Есть такой код: &lt;div id=&quot;dsk-l&quot;&gt; &lt;div id=&quot;dsk-l-brd&quot;&gt;&lt;/div&gt; &lt;div id=&quot;dsk-l-stp&quot;&gt;&lt;/div&gt; &lt;div id=&quot;dsk-l-trmz&quot;&gt;&lt;/div&gt; &lt;div...

Как при клике взять ID родителя и скрыть дивы с классом взятого ранее родителя?
Здравствуйте друзья, столкнулся с задачкой для решения которой у меня не хватает опыта JS программировании. Имеется сайт с системой...

0
Новые блоги и статьи
Вопросы на собеседовании по Android
mobDevWorks 14.03.2025
По данным статистики, Android занимает более 70% мирового рынка мобильных операционных систем, что делает платформу привлекательной как для начинающих разработчиков, так и для опытных профессионалов. . . .
Лучшие игровые движки для Python
py-thonny 14.03.2025
Python обеспечивает разработчиков игр мощными движками и фреймворками, которые позволяют воплотить практически любую идею — от простой аркады до визуального романа с разветвленным сюжетом. Главное. . .
Бессерверный JavaScript: Разработка масштабируемых API с AWS Lambda
run.dev 14.03.2025
Но что такое бессерверные вычисления на самом деле? По сути, это модель облачных вычислений, где разработчик фокусируется исключительно на создании бизнес-логики, не тратя время на настройку. . .
Безопасность кода в C++26: Менеджеры ресурсов и висячие ссылки
NullReferenced 14.03.2025
C++ всегда был языком, предоставляющим разработчикам большие возможности и гибкость, но вместе с тем требующим ответственности. Одной из самых коварных проблем даже для опытных программистов остаются. . .
smart-agent proper interface settings (2025)
jigi33 14.03.2025
Smart-agent proper interface settings (mart 2025). (see screenshots to look at "Etalon" ARM)
Продвинутые настройки JVM
Javaican 14.03.2025
Стандартные параметры запуска JVM хороши для повседневной разработки, но совершенно недостаточны для высоконагруженных систем. Представьте, что вы запускаете финансовую платформу, обрабатывающую. . .
CI/CD для приложений Java с Azure DevOps и Docker
Mr. Docker 14.03.2025
Разработка современных Java-приложений немыслима без системы непрерывной интеграции и доставки (CI/ CD). Azure DevOps в сочетании с Docker предоставляет мощный инструментарий для создания таких. . .
Разработка на PHP и интернет вещей (IoT)
Jason-Webb 14.03.2025
Интернет вещей (IoT) произвел настоящую революцию в способах взаимодействия устройств с окружающим миром. В эпоху, когда холодильники сами заказывают молоко, а термостаты учатся вашим привычкам,. . .
Node.js 20: Новые возможности и улучшения производительно­сти
Reangularity 14.03.2025
Что же принёс нам релиз Node. js 20? В первую очередь, это существенные улучшения в производительности. Движок V8 получил серьёзные оптимизации, благодаря чему JavaScript-код выполняется заметно. . .
Безопасность кластеров Apache Kafka
Javaican 14.03.2025
Apache Kafka стал одним из ключевых компонентов современных архитектур, обрабатывающих потоки данных в режиме реального времени. Его используют тысячи компаний от стартапов до технологических. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер