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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2019, 14:15   #1
Rilpack
Пользователь
 
Регистрация: 14.05.2019
Сообщений: 25
По умолчанию График в Canvas

Реализовать рекурсивный алгоритм возведения числа в натуральную степень.
Задание я сделал, вот листинг:
Код:
procedure TForm1.Button1Click(Sender: TObject);
function stepen(a:double;n:real):double;
begin
  if n=0 then
    stepen:=1
  else
    stepen:=stepen(a,n-1)*a;
end;
var n,a:integer;
begin
  try
    n:=StrToInt(Edit1.Text);
    a:=StrToInt(Edit2.Text);
  except
    exit;
  end;
  Label1.Caption:=FloatToStr(Stepen(n,a));
end;
Нужно сделать график, чтобы на одной оси были числа n, на другой - а. И при заданности этих переменных, линии этих осей пересекались и показывало степень.
На компоненте Image должен находиться график.
Изображения
Тип файла: png 123.png (3.4 Кб, 26 просмотров)
Rilpack вне форума Ответить с цитированием
Старый 22.05.2019, 14:24   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Нарисуй такой график на бумаге и покажи что получилось здесь )
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 22.05.2019 в 14:44.
Аватар вне форума Ответить с цитированием
Старый 22.05.2019, 14:51   #3
Rilpack
Пользователь
 
Регистрация: 14.05.2019
Сообщений: 25
По умолчанию

Например, мы присвоили переменным значения 4.
В ответе у меня получается 256 и должен появится график.
Изображения
Тип файла: png 111111.png (8.9 Кб, 119 просмотров)

Последний раз редактировалось Rilpack; 22.05.2019 в 14:53.
Rilpack вне форума Ответить с цитированием
Старый 22.05.2019, 14:59   #4
taras-proger77
Заблокирован
 
Регистрация: 17.12.2018
Сообщений: 514
По умолчанию

Цитата:
Сообщение от Rilpack Посмотреть сообщение
Задание я сделал
Нет. Во-первых в задании степень натуральная. А у тебя real. Real – это действительный. А во-вторых действительные числа вообще нельзя так сравнивать.
taras-proger77 вне форума Ответить с цитированием
Старый 22.05.2019, 15:03   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Image.Canvas и его методов MoveTo, LineTo и TextOut вполне достаточно. Учесть, что пиксели нумеруются слева направо и сверху вниз от 0
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.05.2019, 15:05   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Rilpack Посмотреть сообщение
В ответе у меня получается 256 и должен появится график.
а где на графике 256 ? И какое отношение этот график имеет к степенной функции?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.05.2019, 15:08   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Да ни какой это не график ) Почему и попросил изобразить. Ну хочется - пусть рисует )
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.05.2019, 15:12   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Да ни какой это не график ) Почему и попросил изобразить. Ну хочется - пусть рисует )
понятно. непонятно что иллюстрирующий рисунок.

Да пусть рисует. я не против!


Цитата:
Сообщение от taras-proger77 Посмотреть сообщение
Нет. Во-первых в задании степень натуральная. А у тебя real. Real – это действительный. А во-вторых действительные числа вообще нельзя так сравнивать.
согласен с замечанием.

Цитата:
Сообщение от Rilpack Посмотреть сообщение
Код:
function stepen(a:double;n:real):double;
Код:
function stepen(a:double;n:integer):double;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.05.2019, 15:43   #9
Rilpack
Пользователь
 
Регистрация: 14.05.2019
Сообщений: 25
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а где на графике 256
Я имею в виду, результат появляется в Label в программе.

Цитата:
Сообщение от Аватар Посмотреть сообщение
Да ни какой это не график ) Почему и попросил изобразить. Ну хочется - пусть рисует )
Я поэтому и прошу помочь сделать этот "рисунок". Я с методами Canvas плохо знаком.
Цитата:
Сообщение от taras-proger77 Посмотреть сообщение
Нет. Во-первых в задании степень натуральная. А у тебя real. Real – это действительный. А во-вторых действительные числа вообще нельзя так сравнивать.
Прошу прощения, не заметил.
Rilpack вне форума Ответить с цитированием
Старый 22.05.2019, 16:01   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

вот пример (с) Puporev с киберфорума

Код:
procedure TForm1.Button1Click(Sender: TObject);
var xc,yc,w,h,i:integer;
    mx,my,x,y:real;

  lb : LOGBRUSH;

begin
xc:=Image1.Width div 2;
yc:= Image1.Height div 2;
w:=xc*2;
h:=yc*2;
mx:=(w-50)/12;
my:=(h-40)/60;
with Image1.Canvas do
 begin
  Brush.Color:=clWhite;
  Pen.Color:=clBlack;
  MoveTo(0,yc);//линии осей
  LineTo(w,yc);
  MoveTo(xc,0);
  LineTo(xc,h);
  textout(w-20,yc-20,'X');//подпись концов
  textout(xc+10,10,'Y');
  textout(xc+10,yc+10,'0');
  for i:=1 to 6 do
   begin
    MoveTo(xc+round(i*mx),yc-3); LineTo(xc+round(i*mx),yc+3);//засечки на оси Х
    MoveTo(xc-round(i*mx),yc-3); LineTo(xc-round(i*mx),yc+3);
    textout(xc+round(i*mx),yc+10,Inttostr(i));//подписи
    textout(xc-round(i*mx),yc+10,Inttostr(-i));
    MoveTo(xc+3,yc-round(i*my*5)); LineTo(xc-3,yc-round(i*my*5));//засечки по У
    MoveTo(xc+3,yc+round(i*my*5)); LineTo(xc-3,yc+round(i*my*5));
    textout(xc-30,yc-round(i*my*5),Inttostr(i));//подписи
    textout(xc-30,yc+round(i*my*5),Inttostr(-1*i));
   end;

  lb.lbStyle := BS_SOLID;
  lb.lbColor := clGreen;
  Pen.Handle := ExtCreatePen(PS_GEOMETRIC or PS_DASH, 2, lb, 0, nil);
  MoveTo(xc+round(4*mx),yc); LineTo(xc+round(4*mx),yc-round(4*my*5));
  LineTo(xc,yc-round(4*my*5));


 end;
end;
изврат с ExtCreatePen только для того, чтобы пунктирную линию нарисовать.
если отказаться от пунктира (или рисовать его самостоятельно кусочками линий) - тогда в этом коде нет необходимости.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Canvas. График. Zoom NEymexa:c Мультимедиа в Delphi 2 07.06.2015 12:48
Delphi. Canvas. График не получается Erlotaza Помощь студентам 3 13.06.2013 01:22
компонент Canvas, график функции Dimabara Компоненты Delphi 0 05.02.2013 21:13
Как центрировать график построеный Canvas'ом в Image? CallMeJammer Общие вопросы Delphi 3 25.03.2012 02:11
График в Canvas (с масштабированием) из StringGrid. PereCCC Помощь студентам 1 11.05.2008 10:45