Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
Sasha35
5 / 5 / 1
Регистрация: 31.10.2010
Сообщений: 94
#1

Показать диаграмму

18.04.2011, 11:50. Просмотров 727. Ответов 10
Метки нет (Все метки)

Нужно показать на экране диаграмму со значениями которая берёт значения из файла!!! Примерно как на рисунке, отступ между столбцами должен быть по размеру как и они!! Примерно как на рисунке и цвета диаграммы не должны повторяться!!! Высота стобца пусть будет 250 пикселей с низу отступит 50 пискесел !!!
0
Миниатюры
Показать диаграмму  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2011, 11:50
Ответы с готовыми решениями:

Построить столбчатую диаграмму
Пожалуйста помогите,очень срочно. Буду премного благодарен. Задание:...

Построить столбчатую диаграмму
помогите срочно как можно быстрее зарание благодарен Годовой выпуск...

Построить диаграмму прибыли
За прошедший месяц предприятие получило в первой декаде - х1 тыс.руб....

Построить столбиковую диаграмму,
Построить столбиковую диаграмму, отображающую рост цен на бензин? Как...

Сформировать столбчатую диаграмму
Сформировать с помощью датчика случайных чисел 100 чисел в пределах от 1 до 10,...

10
Sasha35
5 / 5 / 1
Регистрация: 31.10.2010
Сообщений: 94
18.04.2011, 13:22  [ТС] #2
так же можно брать значения с Массива!!! Если можно то с Объяснением!!
0
Tim0xAA
2 / 2 / 1
Регистрация: 08.09.2010
Сообщений: 10
18.04.2011, 13:23 #3
Однажды приходилось в турбо паскале строить график, но там я пользовался графическими функциями. Конкретно Bar. Если не ошибаюсь то выглядит это так: Bar(X1,Y1,X2,Y2); вобщем то вы можете ее использовать меняя высоту в зависимости от значений.
0
Puporev
Модератор
54370 / 41958 / 28981
Регистрация: 18.05.2008
Сообщений: 98,831
18.04.2011, 13:31 #4
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
uses graph;
var f:text;
    a:array[1..10] of integer;
    n,mx,i:integer;
    d,m,x0,y0,w:integer;
    h:real;
    s,s1:string;
begin
assign(f,'file1.txt');
reset(f);
n:=0;
while not eof(f) do
 begin
  n:=n+1;
  read(f,a[n]);
 end;
close(f);
mx:=a[1];
for i:=1 to n do
if a[i]>mx then mx:=a[i];
d:=0;
initgraph(d,m,'');
w:=round(getmaxX/(2*n+1));
x0:=0;
y0:=getmaxY-50;
h:=250/mx;
for i:=1 to n do
 begin
  Setfillstyle(1,i+1);
  Bar(x0+w*(2*i-1),y0-round(a[i]*h),x0+w*2*i,y0);
  setcolor(i+1);
  str(i,s);
  outtextXY(x0+w*(2*i-1)+w div 2,y0+20,s);
  str(a[i],s);
  outtextXY(x0+w*(2*i-1)+w div 2,y0-round(a[i]*h)-20,s);
 end;
readln
end.
В текстовый файл запиши 10 целых чисел, файл назови file1, положь его в паку с программой.
1
TAVulator
3953 / 1112 / 160
Регистрация: 27.07.2009
Сообщений: 3,457
18.04.2011, 13:35 #5
Как-то делал программу, которая отображает график количества символов в файле в процентах.
По такому графику можно представить каких символов больше, каких меньше и т.п.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Uses Graph;   {Подключаем модуль графики}
Var
 Massiv: array[#32..#255] of integer; {Массив, в котором содержится кол-во
                                       повторов символов}
 TextFile: Text;     {Переменная файла}
 FileName: string;   {Имя файла}
 Symbol: char;       {Текущий обрабатываемый символ}
 
Procedure CreateDiagram; {Процедура построения диаграммы}
var
 GrMode, GrDriver,   {Переменные для инициилизации графики}
 Step: integer;      {Шаг, используется для рисования с опред. шагом}
 Count: LongInt;     {Количество символов всего + используется для 1 цикла}
 Stroka: string;     {Строковая переменная}
Begin
 GrDriver:=detect;   {Инициилизируем графику}
 InitGraph(GrDriver,GrMode,'../bgi');
 if GraphResult = GrOk then {Если графика инициилизировалась, то}
  Begin
   Line(50,10,50,400);      {Рисуем ось с процентами}
   Step:=10;                {Устанавливаем начальное значение шага}
   For Count:=10 downto 1 do  {Рисуем значения процентов 10 20 30 ...}
    Begin
     Str(Count*10,Stroka);     {Преобразовываем число в текст}
     OutTextXY(25,Step,Stroka);{Выводим текст на экран}
     inc(Step,40);             {Увеличиваем шаг на 40}
    End;
   Count:=0;                {Кол-во символов = 0}
   For Symbol:=#32 to #255 do {Считаем сколько всего символов}
    if Massiv[Symbol]<>0 then inc(Count,Massiv[Symbol]);
   Step:=60;                {Устанавливаем начальный шаг = 60}
   For Symbol:=#32 to #255 do {Перебираем все символы}
    if Massiv[Symbol]<>0 then {Если текущий символ есть в тексте, то}
     Begin
      OutTextXY(Step,410,Symbol);    {Рисуем этот символ}
      SetFillStyle(1,Massiv[Symbol]);{Задаем цвет столбика}
      {Рисуем столбик в соответствии с процентом вречаний этого символа в тексте}
      Bar(Step,Round((380-(3.8*(Massiv[Symbol]/(Count/100)))))+20,Step+8,400);
      inc(Step,11); {Увеличиваем шаг на 11}
     End;
   Line(50,400,Step,400); {Рисуем ось с символами размером = кол-во символов * шаг}
   Readln;                {Ждем пока не нажмут Enter}
   CloseGraph;            {Закрываем графический режим}
  End else Writeln('ERROR'); {Выводим ошибку, если не удалось инициилизировать графический режим}
End;
 
Begin
 Write('Введите имя файла: ');
 Readln(FileName);            {Запрашиваем имя файла у пользователя}
 assign(TextFile,FileName);   {Присваеваем имя файла переменной}
 {$I-}                        {Отключаем обработчик ошибок работы с файлами}
 Reset(TextFile);             {Открываем файл}
 if IOResult<>0 then          {Если есть ошибки при открытии}
  writeln('ERROR') else
  Begin                       {Если ошибок нет, то}
   For Symbol:=#32 to #255 do {Обнуляем весь массив}
    Massiv[Symbol]:=0;
   While not EOF(TextFile) do {Проходим файл до конца}
    Begin
     Read(TextFile,Symbol);   {Считываем символ из файла}
     if not (Symbol in [#0..#31]) then {Если этот символ не служебный, то}
     inc(Massiv[Symbol]);     {Увеличиваем счетчик для этого символа на 1}
    End;
   Close(TextFile);           {Закрываем файл}
   CreateDiagram;             {Вызываем процедуру построения графика}
  End;
 {$I+}                        {Включаем обратно обработчик ошибок}
End.
Можешь под себя переделать.
1
Sasha35
5 / 5 / 1
Регистрация: 31.10.2010
Сообщений: 94
18.04.2011, 14:05  [ТС] #6
Цитата Сообщение от Puporev Посмотреть сообщение
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
uses graph;
var f:text;
    a:array[1..10] of integer;
    n,mx,i:integer;
    d,m,x0,y0,w:integer;
    h:real;
    s,s1:string;
begin
assign(f,'file1.txt');
reset(f);
n:=0;
while not eof(f) do
 begin
  n:=n+1;
  read(f,a[n]);
 end;
close(f);
mx:=a[1];
for i:=1 to n do
if a[i]>mx then mx:=a[i];
d:=0;
initgraph(d,m,'');
w:=round(getmaxX/(2*n+1));
x0:=0;
y0:=getmaxY-50;
h:=250/mx;
for i:=1 to n do
 begin
  Setfillstyle(1,i+1);
  Bar(x0+w*(2*i-1),y0-round(a[i]*h),x0+w*2*i,y0);
  setcolor(i+1);
  str(i,s);
  outtextXY(x0+w*(2*i-1)+w div 2,y0+20,s);
  str(a[i],s);
  outtextXY(x0+w*(2*i-1)+w div 2,y0-round(a[i]*h)-20,s);
 end;
readln
end.
В текстовый файл запиши 10 целых чисел, файл назови file1, положь его в паку с программой.
Если вас не затруднит не могли бы вы написать что обозначает каждая переменная!!
0
Puporev
Модератор
54370 / 41958 / 28981
Регистрация: 18.05.2008
Сообщений: 98,831
18.04.2011, 14:14 #7
f:text;//текстовый файл
a:array[1..10] of integer;//массив значений из файла
n,mx,i:integer;//размер массива, максимальное значение, счетчик цикла
d,m//переменные для входа в графический режим
x0,y0//начало отсчета координат диаграмм
w:integer;//ширина столбиков
h:real;//высота
s,s1:string//строковые переменные для вывода надписей
0
Iskander54
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 11
25.04.2011, 10:22 #8
Цитата Сообщение от Puporev Посмотреть сообщение
Pascal
1
  Bar(x0+w*(2*i-1),y0-round(a[i]*h),x0+w*2*i,y0);
извините что не по тему но что тут значит (2*i-1), 2*i не могли бы по подробнее объяснить?

Pascal
1
outtextXY(x0+w*(2*i-1)+w div 2,y0+20,s);
а тут для чего div 2??
0
Puporev
Модератор
54370 / 41958 / 28981
Регистрация: 18.05.2008
Сообщений: 98,831
25.04.2011, 12:39 #9
Цитата Сообщение от Iskander54 Посмотреть сообщение
что тут значит (2*i-1), 2*i
i-счетчик цикла=номер столбика слева направо, например при i=1 левая точка=w, прaвая=2*w

Добавлено через 53 секунды
Цитата Сообщение от Iskander54 Посмотреть сообщение
а тут для чего div 2??
чтобы число было по середине столбика
0
Iskander54
0 / 0 / 0
Регистрация: 25.04.2011
Сообщений: 11
26.04.2011, 07:25 #10
Цитата Сообщение от Puporev Посмотреть сообщение
i-счетчик цикла=номер столбика слева направо, например при i=1 левая точка=w, прaвая=2*w

Добавлено через 53 секунды

чтобы число было по середине столбика
И еще просьба не могли бы показать как сделать так как у него на картинке координатную ось только чтоб по Y были засечки!! Пожалуйста!
0
Puporev
Модератор
54370 / 41958 / 28981
Регистрация: 18.05.2008
Сообщений: 98,831
26.04.2011, 08:54 #11
Подписи координатной оси сделать на все случаи жизни если и возможно, то очень трудно, попробуйте сами. В файле могут быть числа например от 1 до 10, до 100, до 1000, а могут быть и меньше 1, меньше 0 и т.д.
Вот пример для чисел от 0 до 200, в любом наборе.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
uses graph;
var f:text;
    a:array[1..10] of integer;
    n,n1,mx,i,k:integer;
    d,m,x0,y0,w:integer;
    h,h1:real;
    s,s1:string;
begin
assign(f,'file1.txt');
reset(f);
n:=0;
while not eof(f) do
 begin
  n:=n+1;
  read(f,a[n]);
 end;
close(f);
mx:=a[1];
for i:=1 to n do
if a[i]>mx then mx:=a[i];
{вычислим максимальный разряд чисел
и количество делений вертикальной шкалы}
str(mx,s);
if mx<10 then{если все однозначные}
 begin
  k:=0;
  n1:=10;
 end
else{если 2х-3х-значные, в принципе любые}
 begin
  k:=length(s)-2;
  n1:=(ord(s[1])-48)*10+ord(s[2])-48+1;
 end;
d:=0;
initgraph(d,m,'');
x0:=40;
y0:=getmaxY-50;
w:=round((getmaxX-x0)/(2*n+1));
h:=250/mx;
h1:=250/n1;
line(x0,y0,getmaxX,y0);
line(x0,y0,x0,y0-250);
for i:=1 to n1 do
 begin
  line(x0-3,y0-round(i*h1),x0+3,y0-round(i*h1));
  str(i*exp(ln(10)*k):0:0,s);
  outtextXY(x0-25,y0-round(i*h1),s);
 end;
for i:=1 to n do
 begin
  setcolor(15);
  line(x0+w*(2*i-1)+3*w div 2 ,y0,x0+w*(2*i-1)+3*w div 2 ,y0+5);
  Setfillstyle(1,i+1);
  Bar(x0+w*(2*i-1),y0-round(a[i]*h),x0+w*2*i,y0);
  setcolor(i+1);
  str(i,s);
  outtextXY(x0+w*(2*i-1)+w div 2,y0+20,s);
 { str(a[i],s);
  outtextXY(x0+w*(2*i-1)+w div 2,y0-round(a[i]*h)-20,s); }
 end;
readln
end.
0
26.04.2011, 08:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2011, 08:54

Помогите подредактировать круговую диаграмму.
uses crt,graph; var z:array of integer; {Задаём массив}...

Нарисовать синтаксическую диаграмму оператора
помогите, пожалуйста, нарисовать синтаксическую диаграмму оператора case

Постройте диаграмму распределения сгенерированной последовательности
Создайте программу генерации случайных чисел методом Неймана. Проверьте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru