Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2012, 13:06   #1
Falcao
Пользователь
 
Регистрация: 29.11.2012
Сообщений: 33
Радость Работа с графикой

Помогите с заданием, нужно нарисовать ромб, выделив его диагонали пунктиром + Подписать все его вершины... Нарисовать - то я смог(обычными линими), а вот где прочесть больше информации... Если не сложно, дайте ссылку или помогите в решении....
Код:
program abc;
uses crt,graphABC;
begin
write('S = (AC · BD) / 2');
writeln('S = a · H');
writeln('S = a^2 · sin a');
writeln('S = 4r^2 / sin a');
SetWindowSize(900,900);
line(320,10,440,225);
line(440,225,320,460);
line(200,225,320,460);
line(200,225,320,10);
end.
Ещё одно: есть задание, нужно нарисовать такое, используя цикл:

Прошу, если не решить, так дайте ссылку с понятной теорией, а так я всё сделаю.
Спасибо за внимание, с Наступающим)

p.s. не обращайте внимание на
Код:
write('S = (AC · BD) / 2');
writeln('S = a · H');
writeln('S = a^2 · sin a');
writeln('S = 4r^2 / sin a');
Это часть задания - вывести формулы нахождения площади.
Falcao вне форума Ответить с цитированием
Старый 30.12.2012, 15:37   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Никогда не рисуйте по координатам,посчитанным вручную.
У Вас получился не ромб.
Всегда, если есть возможность, задавайте координаты через параметры.
Код:
program abc;

uses
  crt, graphABC;

const
  x = 320;
  y = 240;
  rx = 120;
  ry = 215;
  a = 10;

var
  h, w: integer;

begin
  write('S = (AC · BD) / 2');
  writeln('S = a · H');
  writeln('S = a^2 · sin a');
  writeln('S = 4r^2 / sin a');
  SetWindowSize(900, 900);
  pen.Width := 3;
  h := textheight('A') div 2;
  w := textwidth('A') div 2;
  TextOut(x - rx - a - w, y - h, 'A');
  TextOut(x - w, y - ry - a - h, 'B');
  TextOut(x + rx + a - w, y - h, 'C');
  TextOut(x - w, y + ry + a - h, 'D');
  moveto(x, y - ry);
  lineto(x + rx, y);
  lineto(x, y + ry);
  lineto(x - rx, y);
  lineto(x, y - ry);
  pen.Style := psDash;
  line(x, y - ry, x, y + ry);
  line(x - rx, y, x + rx, y);
end.
В Pascal ABC есть встроенная справка, где можно все найти.
Кстати, уточните, в каком Паскале работаете.
Код выше работает в Pascal ABC NET и не работает в Pascal ABC.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 30.12.2012 в 15:49.
BDA на форуме Ответить с цитированием
Старый 30.12.2012, 20:04   #3
Falcao
Пользователь
 
Регистрация: 29.11.2012
Сообщений: 33
По умолчанию хмм

у меня просто АВС, и, как вы говорите, не работает... Неизвестный идентификатор pen
/// с помощью справки исправил ошибку с пен, сейчас выбивает на penStyle:=psDash;
присвоение имени функции вне тела этой функции

Последний раз редактировалось Falcao; 30.12.2012 в 20:32.
Falcao вне форума Ответить с цитированием
Старый 30.12.2012, 22:47   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

для обычного Pascal ABC достаточно было заменить 2 строчки работы с пером (кстати, я за пару минут прочитал это во встроенном хелпе Паскаля ABC по F1)

Код:
program abcromb;
{ (c) BDA }

uses
  crt, graphABC;

const
  x = 320;
  y = 240;
  rx = 120;
  ry = 215;
  a = 10;

var
  h, w: integer;

begin
  write('S = (AC · BD) / 2');
  writeln('S = a · H');
  writeln('S = a^2 · sin a');
  writeln('S = 4r^2 / sin a');
  SetWindowSize(900, 900);
  SetPenWidth( 3 );
  h := textheight('A') div 2;
  w := textwidth('A') div 2;
  TextOut(x - rx - a - w, y - h, 'A');
  TextOut(x - w, y - ry - a - h, 'B');
  TextOut(x + rx + a - w, y - h, 'C');
  TextOut(x - w, y + ry + a - h, 'D');
  moveto(x, y - ry);
  lineto(x + rx, y);
  lineto(x, y + ry);
  lineto(x - rx, y);
  lineto(x, y - ry);
  SetPenStyle ( psDash );
  SetPenWidth( 1 );
  line(x, y - ry, x, y + ry);
  line(x - rx, y, x + rx, y);
end.

Последний раз редактировалось Serge_Bliznykov; 30.12.2012 в 22:51.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 31.12.2012, 00:05   #5
Falcao
Пользователь
 
Регистрация: 29.11.2012
Сообщений: 33
По умолчанию 1

Спасибо, а как вы узнали что нужно 'Set...' писать?
Falcao вне форума Ответить с цитированием
Старый 31.12.2012, 13:42   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
как узнали
Например, так:
1) Помощь-Содержание
2) Вкладка Указатель
3) Поиск по слову pen
4) 1 строка - pen, 2 строка - pencolor
5) Кликаем по pencolor
6) Попадаем в статью Действия с пером
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 01.01.2013, 21:17   #7
Falcao
Пользователь
 
Регистрация: 29.11.2012
Сообщений: 33
По умолчанию

на счёт второго, смотрите, что получилось
Код:
program num3;

uses crt, graphABC;
var i,x1,x2,y1,y2,xc,yc:integer;
begin
writeln('Enter x1,y1,x2,y2');
read(x1,y1,x2,y2);
writeln('Enter xc,yx');
read(xc,yc);
clrscr;
 SetWindowSize(900, 900);
 SetPenWidth( 1 );
  for i:=1 to 5 do
   begin
      ellipse(x1,y1,x2,y2);
      floodfill(xc,yc,red);
      x1:=x1+100;
      x2:=x2+100;
      xc:=xc+90;
   end;

end.
мне нужен результат как на картинке

Я поставил заливку красной, хоть мне нужно заштрихование, а заливка все равно чёрная... как сделать заштриховку, подскажите...
Falcao вне форума Ответить с цитированием
Старый 01.01.2013, 21:29   #8
Falcao
Пользователь
 
Регистрация: 29.11.2012
Сообщений: 33
По умолчанию

Написал с кружочками в центре

Код:
program num3;

uses crt, graphABC;
var i,x1,x2,y1,y2,x3,x4,y3,y4,xc,yc:integer;
begin

writeln('Enter x1,y1,x2,y2');
read(x1,y1,x2,y2);

writeln('Enter xc,yx');
read(xc,yc);

writeln('Enter x3,y3,x4,y4');
read(x3,y3,x4,y4);


clrscr;
 SetWindowSize(900, 900);
 SetPenWidth( 1 );
  for i:=1 to 5 do
   begin
      ellipse(x1,y1,x2,y2);
      floodfill(xc,yc,0);
      x1:=x1+100;
      x2:=x2+100;
      xc:=xc+90;
      ellipse(x3,y3,x4,y4);
      x3:=x3+100;
      x4:=x4+100;
   end;

end.
Falcao вне форума Ответить с цитированием
Старый 01.01.2013, 21:45   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
program num3;

uses
  crt, graphABC;

const
  rx1 = 30;
  ry1 = 20;
  rx2 = 70;
  ry2 = 30;
  d = 50;
  count = 5;

var
  i, c, x0, y0: integer;

begin
  SetWindowSize(2 * (count * rx2 + d), 2 * (ry2 + d));
  SetPenWidth(1);
  c := count div 2 + count mod 2;
  x0 := d + 2 * c * rx2 - rx2;
  y0 := d + ry2;
  for i := 1 to count do
  begin
    setbrushcolor(clred);
    setbrushstyle(bsDiagCross);
    ellipse(x0 - rx2 + 2 * rx2 * (-c + i), y0 - ry2, x0 + rx2 + 2 * rx2 * (-c + i), y0 + ry2);
    setbrushcolor(clwhite);
    setbrushstyle(bsSolid);
    ellipse(x0 - rx1 + 2 * rx2 * (-c + i), y0 - ry1, x0 + rx1 + 2 * rx2 * (-c + i), y0 + ry1);
  end;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 01.01.2013, 22:01   #10
Falcao
Пользователь
 
Регистрация: 29.11.2012
Сообщений: 33
По умолчанию

спасибо, а какая часть за заштриховку отвечает?)
setbrushstyle(bsDiagCross);?
Falcao вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с графикой, СИ Newb1e Помощь студентам 3 25.06.2012 16:51
Работа с графикой Mr_freeman Помощь студентам 0 15.04.2011 16:51
Работа с графикой Dark Espeon Помощь студентам 1 06.04.2011 22:40
Работа с графикой в Qt Kostia Qt и кроссплатформенное программирование С/С++ 8 25.02.2011 02:35
Работа с графикой! Gladiator Фриланс 6 10.03.2010 18:47