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

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

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

 
 Ответить  Открыть новую тему 
> Графика, помогите с задачкой
сообщение
Сообщение #1


Новичок
*

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

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


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


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

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

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


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


Новичок
*

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

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


Все равно, просто уменьшают или увеличивают.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


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


Гость






Опять ошибаемся? Не так обрабатываются расширенные клавиши... У тебя будут отрабатываться "P", и т.п. клавиши...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

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

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


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


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


Гость






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


Профи
****

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

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


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


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


Гость






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


Новичок
*

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

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


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

Сообщение отредактировано: Ilius -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

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

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


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

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

 





- Текстовая версия 28.09.2020 15:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name