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

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

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

> Построение линейной диаграммы (данные из файла), Как изминить процедуру построения линии
Vini
сообщение 4.12.2005 12:43
Сообщение #1


Гость






Доброе время суток.
Помогите люди добрые
Составить (очень желательно изминить имеющуюся) программу, которая прочитает данные из файла и интерпретирует их в виде линейной диаграммы.
Нужно как-то изминить процедуру построения линии , чтоб координата конца 1 линии была координатой начала 2 линии, и т.д. (5 значений в файле, 4 линии)
Ниже имеется измученная мной прога,


Program lineynay;
Uses Crt,Graph;
Const	x=50; y=450;
{
  х и у - горизонтальная и вертикальная
  графические координаты левого нижнего угла диаграммы
}
var
	x1 ,x2, grdr, grmd, st,i:integer;
	f:text;
	s1,s2,s3,s4,s5:integer;

Procedure Lin(c,k:integer; s:string; var xl,x2:integer);

{
  данная процедура для каждой категории строит линию
  в диаграмме и добавляет соответствующую запись в легенду;
с - цвет текущей линии,
k - число, относящееся к текущей линии,
s - переменная, содержащая текст записи, которая заносится в легенду; 
x1 - горизонтальная координата правой границы предыдущей линии, 
x2 - верхняя граница текущей записи в легенде
}
 begin
SetColor( c );				{цвет линии}

Line(x1+30,y-k*20,x2+50,y-1);	{линия 1=20 пикселям}

x1:=x1+50;				{смещение начала следующей линии в диаграммы}
SetColor(15);				{цвет легенды}
OuttextXY(x2,460,s);		{надпись легенды}
x2:=x2+50;				{смещение след надписи легеды}
 end;

begin
ClrScr;				{чистим экран}
assign(f,'GRAFIK.TXT'); {связывает f с файлом 'GRAFIK.TXT'}
 reset(f); 			{открывает для чтения файл f}
 while not eof(f) do 	{делать пока не конец файла}
  Begin   readln(f,s1,s2,s3,s4,s5);end;
  {считывает из f во вспомогательные переменные}
  close(f); 
grdr:=detect;		{автоопределение графического адаптера}
InitGraph(grdr, grmd,'');{иницыализация графики}
x1:=x-30; 	{координаты первого столбца по х}
x2:=55;		{координаты первой легенды по у}
Line(x,y,x+325,y) ;{горизонтальная линия}
Line(x,100,x,y);	{вертикальная линия}
OuttextXY(x-20,y,'0');
Line(x-3,y-100,x+3,y-100);
OuttextXY(x-20,y-100,'5');
Line(x-3,y-200,x+3,y-200);
OuttextXY(x-20,y-200,'10');
Line(x-3,y-300,x+3,y-300);
OuttextXY(x-20,y-300,'15');

{построение графика по данным из файла}
Lin(yellow, s1,   'A1', x1, x2);
Lin(magenta, s2,  'A2', x1, x2);
Lin(green, s3,    'A3', x1, x2);
Lin(lightred, s4, 'A4', x1, x2);
Lin(6, s5, 'A5', x1, x2);

SetTextStyle(defaultfont, horizdir, 2);
SetColor(cyan);
OuttextXY(100,30 , 'Деловая графика');
Readln;
Closegraph
End.


Сообщение отредактировано: volvo - 6.11.2006 17:49
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 2)
volvo
сообщение 4.12.2005 13:08
Сообщение #2


Гость






Попробуй так:
Program lineynay;
Uses Crt,Graph;
Const
  x=50; y=450;

var
  x1 ,x2, grdr, grmd, st,i:integer;
  f:text;
  s1,s2,s3,s4,s5:integer;
  start: integer;

Procedure Lin(c,k:integer; s:string; var xl,x2:integer);
begin
  SetColor( c );
  Line(x1+30, y-start*20, x2+50,y-k*20); start := k;
  x1:=x1+50;
  SetColor(15);
  OuttextXY(x2,460,s);
  x2:=x2+50;
end;

begin
  ClrScr;
  assign(f,'GRAFIK.TXT'); reset(f);
  while not eof(f) do begin
    readln(f,s1,s2,s3,s4,s5);
  end;
  close(f); 

  grdr:=detect;
  InitGraph(grdr, grmd,'');
  x1:=x-30;
  x2:=55;
  Line(x,y,x+325,y);
  Line(x,100,x,y); OuttextXY(x-20,y,'0');
  Line(x-3,y-100,x+3,y-100); OuttextXY(x-20,y-100,'5');
  Line(x-3,y-200,x+3,y-200); OuttextXY(x-20,y-200,'10');
  Line(x-3,y-300,x+3,y-300); OuttextXY(x-20,y-300,'15');

  start := 0;
  Lin(yellow, s1,   'A1', x1, x2);
  Lin(magenta, s2,  'A2', x1, x2);
  Lin(green, s3,    'A3', x1, x2);
  Lin(lightred, s4, 'A4', x1, x2);
  Lin(6, s5, 'A5', x1, x2);

  SetTextStyle(defaultfont, horizdir, 2);
  SetColor(cyan);
  OuttextXY(100,30 , 'Деловая графика');
  Readln;
  Closegraph
End.
Там, правда, получается небольшое "захлестывание" линий, но сама идея должна быть понятна...
 К началу страницы 
+ Ответить 
Vini
сообщение 6.12.2005 2:17
Сообщение #3


Гость






СПАСИБО за помощь вот окончательно замученная прога.
Правда может с "орфографией" не очень, но зато работает.
Program Grafik_ALL;
Uses Crt,Graph;
label metka1,metka2,metka3;
Const	x=50; y=450;
var
	x1,x2,grdr,grmd,st,i,ugol,y3,sum,s1,s2,s3,s4,s5,v:integer;
	f:text;
	s : array[1..5] of integer;
	
Procedure Lin(c,k,k2:integer; s:string; var xl,x2:integer);
 begin {начало тела процедуры}
SetColor(c);    {цвет линии}
Line(x1+30,y-k*20,x2+55,y-k2*20);	{линия 1=20 пикселям}
x1:=x1+50;    {смещение начала следующей линии в диаграммы}
SetColor(15);    {цвет легенды}
OuttextXY(x2,460,s);  {надпись легенды}
x2:=x2+50;    {смещение след надписи легеды}
 end; {конец тела процедуры}
{**}
Procedure sektor(c,k:integer; s:string; var ugol,y:integer);
var	delta,xp,yp:integer;
	pr,q,radian:real;
	proc:string;
 begin
q:=k/sum;
delta:=round(q*360);
If (ugol+delta)>360 then delta:=delta-1;
SetFillStyle(solidfill, c);
Pieslice(200, 300, ugol, ugol+delta,120) ;
pr:=100*q;
radian:=(ugol+delta/2)*pi/180;
xp:=round(200+cos(radian)*150);
yp:=round(300-sin(radian)*150);
OuttextXY(xp, yp, s);{надпись легенды}
ugol:=ugol+delta;
y:=y+30;
 end;
{**}
Procedure stolb(c,k:integer; s:string; var xl,x2:integer);
 begin
SetFillStyle(solidfill,c);{заполнение прямоуголника цветом с}
Bar(x1+30,y-k*20,x1+50,y-1);	{прямоугольник диаграммы 1=20 пикселям}
x1:=x1+50;    {смещение следующего прямо-ка диаграммы}
OuttextXY(x2,460,s);  {надпись легенды}
x2:=x2+50;    {смещение след надписи легеды}
 end;
{***}

begin
ClrScr;
Writeln('Вас приветствует программа деловая графика.');
Writeln('Выбирите желаемый график для представления числовых данных из файла.');
Writeln('1)-Линейный');
Writeln('2)-Круговой');
Writeln('3)-Столбиковый');
Readln(v); {Выбор пользователя}
Case v of
	1: Goto metka1;
	2: Goto metka2;
	3: Goto metka3;
 end;
Begin;
metka1:
ClrScr;    {чистим экран}
assign(f,'GRAFIK.TXT'); {связывает f с файлом 'GRAFIK.TXT'}
 reset(f);    {открывает для чтения файл f}
 for i:=1 to 5 do
    ReadLn(f, s[i]);{считывает из f во вспомогательные переменные s[i]}
  close(f); 
grdr:=detect;  {автоопределение графического адаптера}
InitGraph(grdr, grmd,'');{иницыализация графики}

x1:=x-30;  {координаты первой линии по х}
x2:=45;  {координаты первой легенды по у}
Line(x,y,x+325,y) ;{горизонтальная линия}
Line(x,100,x,y);	{вертикальная линия}
OuttextXY(x-20,y,'0');{надпись цены деления}
Line(x-3,y-100,x+3,y-100); {черта цены деления}
OuttextXY(x-20,y-100,'5');
Line(x-3,y-200,x+3,y-200);
OuttextXY(x-20,y-200,'10');
Line(x-3,y-300,x+3,y-300);
OuttextXY(x-20,y-300,'15');{надпись цены деления}

{построение графика по данным из файла}
Lin(yellow, s[1],s[2],   'A1', x1, x2);
Lin(magenta, s[2],s[3],  'A2', x1, x2);
Lin(green, s[3],s[4],    'A3', x1, x2);
Lin(lightred, s[4],s[5], 'A4', x1, x2);
OuttextXY(x2,460,'A5'); {вывод легенды для 5-го значения}

SetTextStyle(defaultfont, horizdir, 2);
SetColor(cyan);
OuttextXY(100,30 , 'Деловая графика');
Readln;
Closegraph;
exit;
End;

{*************}
 begin
metka2:
ClrScr;
assign(f,'GRAFIK.TXT'); {связывает f с файлом 'GRAFIK.TXT'}
 reset(f);    {открывает для чтения файл f}
 while not eof(f) do  {делать пока не конец файла}
  Begin
   readln(f,s1,s2,s3,s4,s5);	{считывает из f во вспомогательные переменные}
  end;
close(f); 
grdr:=detect;
InitGraph(grdr, grmd, '');

sum:=s1+s2+s3+s4+s5;
y3:=200; ugol:=0;
Circle(200,300,120);
sektor(yellow, s1, 'А1',ugol,y3);
sektor(magenta, s2, 'А2',ugol,y3);
sektor(green, s3, 'А3',ugol,y3);
sektor(lightred, s4, 'А4',ugol,y3);
sektor(blue, s5, 'А5',ugol,y3);
SetTextStyle(defaultfont, horizdir,2);
SetColor(cyan);
OuttextXY(100, 15, 'Деловая графика');

Readln;
Closegraph;
exit;
 end;

{******************}
begin
metka3:
ClrScr;    {чистим экран}
assign(f,'GRAFIK.TXT'); {связывает f с файлом 'GRAFIK.TXT'}
 reset(f);    {открывает для чтения файл f}
 while not eof(f) do  {делать пока не конец файла}
  Begin
   readln(f,s1,s2,s3,s4,s5);	{считывает из f во вспомогательные переменные}
  end;
close(f); 

grdr:=detect;
InitGraph(grdr, grmd,'');{определение видео режима}
x1:=x-29;  {координаты первого столбца по х}
x2:=55;  {координаты первой легенды по у}
Line(x,y,x+325,y) ;{горизонтальная линия}
Line(x,100,x,y);	{вертикальная линия}
OuttextXY(x-20,y,'0');
Line(x-3,y-100,x+3,y-100);
OuttextXY(x-20,y-100,'5');
Line(x-3,y-200,x+3,y-200);
OuttextXY(x-20,y-200,'10');
Line(x-3,y-300,x+3,y-300);
OuttextXY(x-20,y-300,'15');

{построение графика по данным из файла}
stolb(yellow, s1,   'A1', x1, x2);
stolb(magenta, s2,  'A2', x1, x2);
stolb(green, s3,    'A3', x1, x2);
stolb(lightred, s4, 'A4', x1, x2);
stolb(blue, s5, 'A5', x1, x2);

SetTextStyle(defaultfont, horizdir, 2);
SetColor(cyan);
OuttextXY(100,30 , 'Деловая графика');
Readln;
Closegraph;
End;
exit;
end.


Сообщение отредактировано: volvo - 6.11.2006 17:49
 К началу страницы 
+ Ответить 

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

 

- Текстовая версия 26.07.2025 7:40
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"