Форум программистов, компьютерный форум, киберфорум
Наши страницы

Turbo Pascal

Войти
Регистрация
Восстановить пароль
 
Sasha35
5 / 5 / 0
Регистрация: 31.10.2010
Сообщений: 94
#1

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

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

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

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

Построить столбчатую диаграмму - Pascal
помогите срочно как можно быстрее зарание благодарен Годовой выпуск предприятием белого кирпича-31%, красного-49%, желтого-20%.

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

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

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

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

10
Sasha35
5 / 5 / 0
Регистрация: 31.10.2010
Сообщений: 94
18.04.2011, 13:22  [ТС] #2
так же можно брать значения с Массива!!! Если можно то с Объяснением!!
0
Tim0xAA
2 / 2 / 0
Регистрация: 08.09.2010
Сообщений: 10
18.04.2011, 13:23 #3
Однажды приходилось в турбо паскале строить график, но там я пользовался графическими функциями. Конкретно Bar. Если не ошибаюсь то выглядит это так: Bar(X1,Y1,X2,Y2); вобщем то вы можете ее использовать меняя высоту в зависимости от значений.
0
Puporev
Модератор
54020 / 41653 / 14731
Регистрация: 18.05.2008
Сообщений: 97,922
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
3950 / 1109 / 72
Регистрация: 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 / 0
Регистрация: 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
Модератор
54020 / 41653 / 14731
Регистрация: 18.05.2008
Сообщений: 97,922
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
Модератор
54020 / 41653 / 14731
Регистрация: 18.05.2008
Сообщений: 97,922
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
Модератор
54020 / 41653 / 14731
Регистрация: 18.05.2008
Сообщений: 97,922
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
Привет! Вот еще темы с ответами:

Помогите подредактировать круговую диаграмму. - Turbo Pascal
uses crt,graph; var z:array of integer; {Задаём массив} i,x,y,r,a,b,s:integer; st:string; const n=6; begin clrscr; ...

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

Создать диаграмму на основе одномерного массива - Pascal
Создать диаграмму на основе одномерного массива.

Нарисовать линейную диаграмму изменения температуры по месяцам - Turbo Pascal
Ребята как такое сделать в Паскале ??? Я в шоке… Надо нарисовать линейную диаграмму изменения, например, температуры по месяцам, типа...


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

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

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