IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Графика, помогите с задачкой
Ilius
сообщение 20.05.2007 11:53
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


Составить программу для управления размерами прямоугольника и его положением на экране.Левый верхний угол исходного прямоугольника расположен в точке (50,50), правый нижний в точке(100,100).Управление выполняется клавишами:
">"-увелич.ширину прямоугольника на 5 точек;
"<"-уменьш.ширину прямоугольника на 5 точек;
"+" -увелич. высоту на 5 точек;
"-" уменьшает высоту на 5 точек.
Клавиши управл.курсором-вызывают перемещение в соответствующем направлении.
"Ввод завершает работу программы.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 12)
MAXXX
сообщение 20.05.2007 11:57
Сообщение #2


В поисках Занаду
*

Группа: Пользователи
Сообщений: 17
Пол: Мужской
Реальное имя: Андрей Максай

Репутация: -  0  +


Уменьшают ширину-справа, слева или все равно как?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ilius
сообщение 20.05.2007 12:07
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


Все равно, просто уменьшают или увеличивают.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tan
сообщение 20.05.2007 14:52
Сообщение #4


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Что - то такое ?
uses crt, Graph;
var x,y,x1,y1,
    grMode,grDriver : integer;
     ch : char;
procedure draw;
begin
clrscr;
rectangle (x,y,x1,y1);
end;
begin
grDriver := detect;
Initgraph (grDriver,grMode,'');
x := 50;
y := x;
x1 := 100;
y1 := x1;
draw;
repeat
ch := readkey;
 case ch of
   #46 : begin
             x1 := x1 + 5;
             Draw;
          end;
   #44  : begin
             x1 := x1 - 5;
             Draw;
          end;
   #61 : begin
             y := y - 5;
             Draw;
        end;
   #45 : begin
             y := y + 5;
             Draw;
        end;
    #072 : begin
            y := y - 5;
            y1 := y1 - 5;
            Draw;
         end;
    #080: begin
            y := y + 5;
            y1 := y1 + 5;
            Draw;
        end;
    #077: begin
           x := x+ 5;
           x1 := x1 + 5;
           Draw;
        end;
   #075: begin
           x := x - 5;
           x1 := x1 - 5;
           Draw;
         end;
   end;
until ord(ch) = 13;
end.


Сообщение отредактировано: Tan - 20.05.2007 15:08


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.05.2007 15:04
Сообщение #5


Гость






Опять ошибаемся? Не так обрабатываются расширенные клавиши... У тебя будут отрабатываться "P", и т.п. клавиши...
 К началу страницы 
+ Ответить 
klem4
сообщение 20.05.2007 15:05
Сообщение #6


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


procedure draw;
begin
clrscr; // <------------------- Тут надо ClearDevice;
rectangle (x,y,x1,y1);
end;


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Tan
сообщение 20.05.2007 15:09
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


volvo, спасибо, это моя частая ошибка, я просто только по нужным кнопком понажимал, проверил, что работает, совсем забыл про расширенные коды, klem4 а зачем ? У меня и без этого всё работает на стандартном компиляторе.


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.05.2007 15:12
Сообщение #8


Гость






Цитата
а зачем ?
А затем, что в графике надо использовать процедуры для графики, а в тексте - для текста...
 К началу страницы 
+ Ответить 
Tan
сообщение 20.05.2007 15:14
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 559
Пол: Мужской
Реальное имя: Бруно

Репутация: -  10  +


Просто в данном случае визуальная разница лишь в том, что с clrscr сероватый фон, а с cleardevice чёрный, но на будущее учту, спасибо!


--------------------
Цитата
Imagination is more important than knowledge.
Albert Einstein
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.05.2007 15:29
Сообщение #10


Гость






Кстати, здесь можно обойтись и вообще без постоянной очистки экрана, если воспользоваться
SetWriteMode(XORPut);
, (в случае если есть фоновое изображение, например, то постоянно его очищать и перерисовывать - с ума можно сойти...)
 К началу страницы 
+ Ответить 
Ilius
сообщение 20.05.2007 17:18
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


Почему то не работает, запускаю экрат мигнул, разглядел BGI Error: и т.д. Что это значит?

Сообщение отредактировано: Ilius - 20.05.2007 18:22
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 20.05.2007 18:29
Сообщение #12


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


InitGraph(gd, gm, 'ТУТ укажи полный пусть к папке BGI');


Или в настройках компилера.


еще вариант
uses crt, graph;
type

  TRect = Object
    leftX, leftY, height, width: Integer;

    constructor Create(const x, y, h, w: Integer);
    destructor Done;

    procedure Run;

    function Request: Char;
    procedure Show(const visible: Boolean);
  end;

constructor TRect.Create(const x, y, h, w: Integer);
begin
  leftX := x;
  leftY := y;
  height := h;
  width  := w;
  Show(true);
end;

destructor TRect.Done;
begin end;

procedure TRect.Show(const visible: Boolean);
begin
  if visible then SetColor(white) else SetColor(black);
  Rectangle(leftX, leftY, leftX + width, LeftY + Height);
end;

function TRect.Request: Char;
var
  ch: Char;
begin
  ch := readkey;

  Show(false);

  case ch of
    #0: case readkey of
          #72: dec(leftY, 5);
          #80: inc(leftY, 5);
          #75: dec(leftX, 5);
          #77: inc(leftX, 5);
        end;
    '>', '.': inc(width, 5);
    '<', ',': dec(width, 5);
    '+', '=': inc(height, 5);
    '-':      dec(height, 5);
  end;

  Show(true);

  Request := ch;
end;

procedure TRect.Run;
begin
  while (Request <> #27) do;
end;

var
  gd, gm: Integer;
  R: TRect;
begin
  gd := Detect;
  InitGraph(gd, gm, '');

  R.Create(50, 50, 100, 100);
  R.Run;
  R.Done;

  CloseGraph;
end.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ilius
сообщение 20.05.2007 19:13
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 27
Пол: Мужской
Реальное имя: Игорь

Репутация: -  0  +


Спасибо вам всем, все работает, выручили!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 29.07.2025 5:35
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"