Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Задача на использование графического режима в Pascal

60K
09 июня 2010 года
korj
4 / / 09.06.2010
Есть задача следующего содержания:

Построить на экране видеомонитора изображение 3-х октав клавиатуры рояля. Изображение поместить в центральной части в прямоугольнике размером 500х200 пикселей.

Я смог написать только вот:

Код:
program lab_8;
 uses graph;
 var gd,gm,getmaxX,getmaxY,x1,x2,x3,x4,y1,y2,y3,y4,i,k:integer;
 
begin
 gd:=DETECT;
 initgraph(gd,gm,'');
 setbkcolor (black);
 setcolor(white);
 x1:=1;
 y1:=1;
 x3:=16;
 x4:=1;
 k:=0;
 for k:=1 to 3 do
 begin
 i:=0;
 for i:= 1 to 2 do
  begin
   x2:=x1 + 24;
   y2:=y1 + 200;
   x4:=x3 + 16;
   y4:=y3 + 133;
   setcolor(0);
   setfillstyle(1,0);
   rectangle (x1,y1,x2,y2);
   setcolor(15);
   setfillstyle(1,15);
   rectangle (x3,y3,x4,y4);
   x1:=x2;
   y1:=y2 - 200;
   x3:=x4 + 8;
   y3:=y4 - 133;
  end;
  i:=3;
  rectangle (x1,y1,x2,y2);
  x1:=x2;
  y1:=y2 - 200;
  x3:=x4 + 32;
  y3:=y4 - 133;
  for i:= 4 to 6 do
  begin
   x2:=x1 + 24;
   y2:=y1 + 200;
   x4:=x3 + 16;
   y4:=y3 + 133;
   rectangle (x1,y1,x2,y2);
   rectangle (x3,y3,x4,y4);
   x1:=x2;
   y1:=y2 - 200;
   x3:=x4 + 8;
   y3:=y4 - 133;
  end;
  i:=7;
  rectangle (x1,y1,x2,y2);
  x1:=x2;
  y1:=y2 - 200;
  x3:=x4 + 32;
  y3:=y3 - 133;
  end;
 readln;
 closegraph;
end.


Результат далеко не тот, который хотелось бы. Завтра - день сдачи задачи, программирование идет в довесок к информатике, и сам я в нем не особо силен. Надеюсь на помощь форумчан.
1.8K
09 июня 2010 года
LM(AL/M)
332 / / 20.12.2005
ваша ошибка в том что используется чрезмерно сложная логика, все эти манипуляции с x/y1,2,3...
попробуйте высчитывать координаты прямоугольников в явном виде через переменные циклов, что-то типа
 
Код:
for i := ... to ... do
    rectangle(X0 + i*BarWidth, Y0, X0 + (i+1)*BarWidth, Y1);

будет проще и надёжнее
60K
09 июня 2010 года
korj
4 / / 09.06.2010
Спасибо, приму к сведению и попытаюсь подобным образом.
60K
10 июня 2010 года
korj
4 / / 09.06.2010
Вот еще вопрос. Как разместить получившееся изображение посередине экрана. Я пытался следующим образом:

 
Код:
x1:=getmaxX div 2;
y1:=getmaxY div 2;


Увы, картинка уходит за левую и верхнюю границы экрана, что немного удивительно. Может, я что-то делаю не так?
1.8K
10 июня 2010 года
LM(AL/M)
332 / / 20.12.2005
то что вы написали -- это координаты центра экрана, а надо чтобы они совпали с центром картинки: x1 := getmaxX div 2 - 250; y1 := getmaxY div 2 - 100;
если я правильно понял что x1,y1 означет верхний левый угол
60K
10 июня 2010 года
korj
4 / / 09.06.2010
Да, я уже изменил привел координаты в соответствующий вид, однако получается, что картинка уходит за левый край монитора, оставляя лишь небольшой кусок в начале координат.
P.S. Левый вверхний угол - начало координат.
На прикрепленном изображении та ситуация, что получается в моем случае.
1.8K
10 июня 2010 года
LM(AL/M)
332 / / 20.12.2005
то что изображение уходит за край монитора -- симптом того что неверно рассчитываются смещения. чтобы разобраться в чём ошибка нужно видеть код
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог