ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Turbo Pascal. Круговая диаграмма
  #1  
Старый 15.02.2010, 11:34
ZagZag
Участник форума
Регистрация: 22.02.2007
Сообщений: 213
Провел на форуме:
388345

Репутация: 58
По умолчанию Turbo Pascal. Круговая диаграмма

Пишу курсовик. Надо построить круговую диаграмму.
Сектора строятся правильно, а вот надписи к ним ставятся под каким-то непонятным углом.
Код:
	on:array [1..100] of string[20];
	oc:array [1..100] of integer;
...
Код:
	{ Вывести on[..] и oc[..] в порядке убывания oc }
	angle_pred:=0;
	clrscr;
  DetectGraph(Device, Mode);
	InitGraph(Device, Mode, 'EGAVGA.BGI');
  SetTextStyle(3, HorizDir, 2);
  SetFillStyle(11, 11);
	repeat
		f := false;
		m := -1; { Текущее наибольшее значение oc }
		for i := 1 to 100 do
		begin
			if oc[i] > m then
			begin
				i2 := i;
				m := oc[i];
				f := true;
			end;
		end;
		if (f = true) then
		begin
      if (oc[i2] > 0) then
      begin
        { Вывести часть диаграммы }
        angle := angle_pred + Trunc(oc[i2] / c * 360);
				setcolor(12);
				for a:=0 to 45 do
				begin
					Line(200, 200, 200 + Trunc(120 * cos(a)), 200 + Trunc(120 * sin(a)));
				end;
{
				Str(angle, tmp);
				outtextxy(200 + Trunc(120 * cos(angle)), 200 + Trunc(120 * sin(angle)), tmp);
}
				setcolor(i2);
				setfillstyle(i2, i2);
				setlinestyle(0, 0, 1);
				PieSlice(200, 200, angle_pred, angle-1, 100);
      	angle_pred := angle;
      end;
			oc[i2] := -1;
		end;
	until (f = false) or ((i=100) and (oc[i2]=0));
	ReadKey;
	CloseGraph;
	RestoreCrtMode;
собственно проблема отмечена красным. По идее должен рисоваться сектор, закрашенный красным, а на практике получается что красные линии раскиданы равномерно по всей диаграмме.
Может быть надо какой-то флаг компилятора включить или что?

Последний раз редактировалось ZagZag; 15.02.2010 в 11:37..
 
Ответить с цитированием

  #2  
Старый 16.02.2010, 12:39
ZagZag
Участник форума
Регистрация: 22.02.2007
Сообщений: 213
Провел на форуме:
388345

Репутация: 58
По умолчанию

Неужели никто в досовском паскале круговые диаграммы не делал? Ну что ж вы, народ? XD
 
Ответить с цитированием

  #3  
Старый 16.02.2010, 22:50
n1ghtstalker
Познающий
Регистрация: 28.09.2008
Сообщений: 65
Провел на форуме:
152084

Репутация: 8
По умолчанию

м) с графикой лучше посидеть всё на бумаге начертить. возьми на листре линий 5 проведи по заданным координатам. мне просто не охота код перебирать.
 
Ответить с цитированием

  #4  
Старый 16.02.2010, 23:14
ZagZag
Участник форума
Регистрация: 22.02.2007
Сообщений: 213
Провел на форуме:
388345

Репутация: 58
По умолчанию

Я всегда думал что построить линию повернутую на заданный угол можно по формуле:

XK = XN + Длина_линии * cos(Угол)
YK = YN + Длина_линии * sin(Угол)

Но в паскале эта формула дает какой-то бред. Совсем не то, что я ожидал.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачи. Turbo Pascal Richard С/С++, C#, Delphi, .NET, Asm 13 18.05.2009 21:13
turbo pascal sadfeel С/С++, C#, Delphi, .NET, Asm 0 28.02.2009 19:37
СРОЧНО!!! Turbo Pascal MAG0t Разное - Покупка, продажа, обмен 3 23.12.2008 18:36
TURBO PASCAL 7 1.0 Daemond С/С++, C#, Delphi, .NET, Asm 1 03.12.2008 22:32



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ