На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> Разработать систему построения дома из элементов заданного типа
    Прикреплённый файлПрикреплённый файлdom_obj.zip (1,8 Кбайт, скачиваний: 57) Разработать систему построения дома из элементов заданного типа: окно, дверь, крыша, стены, фронтон и т.д.
    Эти элементы надо сгенерировать на краю поля экрана, иметь возможность генерации разных по цвету и по размерам элементов. Перенося их со склада на "стройплощадку" построить дом (два вида - спереди и сбоку). Программу следует написать с использованием объектного типа, наследованием и виртуальными методами.


    что делать?очень важно.
    есть исходник этой программы в 3Д, а нужно написать программу только в 2Д

    Добавлено
    хотя бы набросок, препод изнасилует, завтра сдать нужно. помогите прошу!!!
      Вам в раздел "Помощь студентам". А, в целом, это сильно некрасиво ничего не делать, а потом взять и попросить кого-то сделать за вас. От таких в стране и бардак... Пусть насилует, зато вы впредь будете ответственнее.
        я не прошу делать за меня, я прошу объяснить как делать
          Цитата piko @
          хотя бы набросок, препод изнасилует, завтра сдать нужно. помогите прошу!!!

          Тут если только свечку подержать. Так как быстро это не сделать.
          1) Я бы посоветовал посмотреть на аналогичные программы. Таких много.
          2)
          Цитата piko @
          есть исходник этой программы в 3Д, а нужно написать программу только в 2Д

          Если это так, то просто надо сделать вывод в соответствующих проекциях. Но что-то мне говорит что такой программы нет. А да в исходнике в самом вверху практически ничего нет.
          3)
          Цитата piko @
          я не прошу делать за меня, я прошу объяснить как делать

          Это вообще не вариант. В задании написано что делать, фактически это и есть как. Вопрос насколько глубоко ваш провал в знаниях.
          Создаешь объекты типа: окно, дверь, крыша, стена
          Думаю надо породить от общего предка. Унаследовать можно общие свойства и методы объектов.

          Создаешь панель слева путем создания объектов и указания координат вывода. Надо добавить прокрутку.
          Сделать обработку мыши по переносу объектов с панели на рабочую площадку. Путем создания объекта и изменения его координат.
          Ещё надо сделать обработку событий мыши по изменению существующих свойств объектов, цвет, размер.
          По нажатию кнопки надо будет вызвать меню свойств объекта. А перед этим надо определить по координатом соответствующий объект.

          А ещё надо и графический редактор объектов сделать. Графическое представление можно сделать путем векторным описанием. Любой объект можно представить группой произвольных многоугольников. Это для упрощения по хорошему ещё и сплайны можно впихнуть.

          Не забудь отделить вывод от ввода и модели поведения объектов.
          При обработке ввода мыши надо разделить на режимы.
            ну вот я что то набросал. но она все равно очень криво работает
            эту программу можно доработать до нужной?
            Прикреплённый файлПрикреплённый файлdomm.pas (2,65 Кбайт, скачиваний: 147)
              piko
              На задание описанное в 1 посте нужно не меньше 3-х дней.

              Точно хочешь продолжить мучиться?
              Программу в 5 посте можно выкинуть. Так как её проще переписать, чем доработать. Ну и по любому тут не хватает нескольких тысяч строк кода минимум 2-х.

              Твоя задача научиться мыслить абстрактно. Мыслить объектами. Тут как минимум надо сесть и подумать.
              Выдели общее для объектов. Какие общие структуры можно применять для описания объекты типа: окно, дверь, крыша, стена?
              Какие общие действия с ними будут происходить?

              1.
              Ты мучился подбирал циферки чтобы правильно нарисовать и расставить прямоугольники.
              Так никто не делает. Делается графический реактор, который запоминает нажатия мыши. Нарисованный объект можно сохранить в файле. А потом если надо загрузить и от рисовать с ново.
              Это гораздо проще и быстрее.
              2.
              Более того таких одинаковых объектов можно нарисовать много и в разных местах используя простые процедуры и функции.
              Сообщение отредактировано: Pavia -
                я готов мучатся. и 3 дня есть. но какие 2 тысячи строк? это 11 класс. самое главное в этой задаче это (Программу следует написать с использованием объектного типа, наследованием и виртуальными методами) и вот это (Эти элементы надо сгенерировать на краю поля экрана, иметь возможность генерации разных по цвету и по размерам элементов).
                я не понимаю как это сделать.
                ну все таки на счет 2 тысяч строк спорить не буду, тебе виднее.

                Добавлено
                я в 11 классе, в школе которая находится можно сказать в селе. я единственный в школе для кого это не просто набор странных символов. я прочитал всю теорию по этому поводу, но мне нужно наглядно убедиться, ибо я не понимаю как это применить на практике( за этим я и обратился сюда) препод дал мне это задание тк у меня с ним не есть хорошие отношения(затопить решил наверное)
                  piko
                  Тебе сказали что "Программу следует написать с использованием объектного типа, наследованием и виртуальными методами." В твоем коде и близко этого нет. Советую почитать об этих вещах. Затем каждый элемент который надо выводить сделать через объект с известным набором свойств. Возможно, как заметил Pavia, они могут создаваться от другого объекта с общими свойствами.

                  А далее примерно такой порядок.
                  Для работы с графикой, где будут двигаться предметы(можно перемещать) требуется:
                  1 перед выводом элемента скопировать в буфер область экрана которую займет объект,
                  2 отрисовать объект(наложить),
                  3 вставить буфер
                  4 определить новые координаты для вывода, затем как в п.1 -3.

                  Если это просто статичные объекты, отрисованные 1 раз, с этим можно не париться. Ещё вариант - просто заного пересоздать сцену - очистить весь экран, построить все заново.

                  Добавлено
                  И вообще это полный маразм делать такие вещи через примитивы. Должен быть 2D движек, сами графические файлы объектов, а далее выводим файлы, 2D фвижкем масштабируем и перемещаем\вращаем объекты.
                    я же говорю, я теорию прочитал. Но все равно не полностью понимаю как применить ее на практике
                      я именно как составлять объекты не понимаю. помогите. накидайте набросок программы. пожалуйста))
                        Цитата piko @
                        я именно как составлять объекты не понимаю. помогите. накидайте набросок программы. пожалуйста))

                        А чего именно не понятно?
                        Приведи свои попытки.

                        В BP просто терминология старая.
                        Поэтому, давай определимся сразу объект это экземпляр класса.


                        Объект состоит из полей и методов.
                        Классы имеет название, также предка от которого порождается класс. Внутренние поля и методы. Методы можно разделить на 2 типа для доступа к переменным и для доступа к объекту.

                        Согласно теории сокрытия все переменные делаешь сокрытыми, защищенными. А доступ делаешь к переменным делаешь через методы.

                        К примеру
                        ExpandedWrap disabled
                          TWindow= object(TBaseBlock)
                            private
                             {Поля, внутренние переменные}
                             Width:Integer;
                             Height:Integer;
                            public
                             {методы переменных}
                             function GetWidth:Integer;
                             procedure SetWidth(value:Integer);
                             function GetHeight:Integer;
                             procedure SetHeight(value:Integer);
                             {методы объекта}
                             constructor Create;
                             destructor Destroy;
                             и т.д.
                            end;

                        TWindow - название класса
                        TBaseBlock - предок от которого порождается класс.
                        Width, Height поля объектов.
                        Имена переменных, процедур функций, конструктора и деструктора можно задавать произвольно.
                        Но обычно делают так как у меня описано. Приставка Set, Get.
                        Конструктор и деструктор обязательные поля.
                        Конструктор нужен для инициализации объекта. Для задания первоначального состояния объекта.
                        К примеру ширину и высоту можно установить в 1, а методы реализовать таким способом чтобы нельзя было установить состояния переменных в 0.
                        Тем самым можно решить проблему деления на 0.

                        Деструктор служат для коректного уничтожения. Если у тебя будут динамически переменные(поля объекта), то в деструкторе ты должен будешь их освободить.


                        Создание или генерация объекта

                        ExpandedWrap disabled
                          var Window1,Window2:TWindow;
                          begin
                          Window1:=TWindow.Create;
                          Window2:=TWindow.Create;


                        Window1, Window2 имена объектов.

                        Добавлено
                        Для самостоятельной работы. Подумать какие параметры надо и стоит передавать в конструктор Create.
                        Описать метод Draw или PaintTo. Т.е дать описание декларации метода и описания реализации.
                        Цитата piko @
                        наследованием и виртуальными методами.

                        Какие надо сделать методы виртуальными, а какие надо унаследовать?
                        Сообщение отредактировано: Pavia -
                          спасибо большое, большинство вопросов ушло в небытие. вы гений)) мне для каждой вещи создавать свой объект? те отдельно окно,дверь и т д

                          Добавлено
                          так в том то и дело, он мне просто сказал виртуальными методами и наследованием, так что хрен пойми что он хочет
                            Цитата piko @
                            мне для каждой вещи создавать свой объект? те отдельно окно,дверь и т д

                            Да. Для каждой вещи создавать свой тип объекта. Но чтобы не дублировать код используют общего предка, т.е наследование. То что нельзя унаследовать перекрываешь или используешь виртуализацию.
                            Сообщение отредактировано: Pavia -
                              Видимо, просто, чтобы и дверь и окно были от одного предка 'рама'. А окно - прозрачная рама или стеклянная, а дверь - деревянная рама (или какая-то другая).
                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                              0 пользователей:


                              Рейтинг@Mail.ru
                              [ Script execution time: 0,0409 ]   [ 18 queries used ]   [ Generated: 27.04.24, 20:44 GMT ]