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

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

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

 
 Ответить  Открыть новую тему 
> Построение линейной диаграммы (данные из файла), Как изминить процедуру построения линии
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
Там, правда, получается небольшое "захлестывание" линий, но сама идея должна быть понятна...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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©; {цвет линии}
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 -
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 28.04.2024 16:35
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name