Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 18.11.2010
Сообщений: 14
1

построить график функции из файла с ее точками

24.11.2010, 10:09. Просмотров 2631. Ответов 12
Метки нет (Все метки)


как в паскале построить график функции из файла с ее точками (*.dat) ?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2010, 10:09
Ответы с готовыми решениями:

Построить график функции. вычислить и построить все асимптоты для этой функции
Помогите пожалуйста... Устал с ней возиться... Задание: Построить график функции,вычислить и...

Почему график функции рисуется точками?
Нарисовала график, а он получился точками. А надо сплошной линией, как мне сказали. Сама задача: ...

Выводит черными точками график функции y=f(x)=kx+10k, k=7
как такую программу б написать?

Составить график функции. Дана функция нужно построить график по полученным точкам
Помогите составить график функции. Дана функция нужно построить график по полученным точкам...

__________________
Помогаю в написании студенческих работ здесь.
12
Модератор
63216 / 46975 / 32375
Регистрация: 18.05.2008
Сообщений: 113,850
24.11.2010, 11:28 2
Например вот я делал табуляцию функции с записью результатов в файл, а потом из файла строил график.
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
uses crt,graph;
const m=21;
      n=5;
var j,i,jmn,gd,gm,x0,y0,xp,yv,yn:integer;
    an,h,a,b,s,c,mn,mx,ym,xm:real;
    x,y:array[1..m] of real;
    f:file of real;
    st:string;
begin
clrscr;
{табулирование функции, вычисления и запись значений в массив и в файл}
an:=17.5;
h:=4.5;
b:=2;
assign(f,'D:\file1.dat');
rewrite(f);
for j:=1 to m do
 begin
  a:=an-j*h;
  x[j]:=sqrt(abs(a*a*a*b))/(3*j);
  if x[j]>=b then y[j]:=sin(x[j])+sin(2*x[j])+2*sin(3*x[j])
  else
   begin
    s:=0;a:=an-j*h;
    for i:=1 to n do
     begin
      c:=exp(ln(b)*(i/3));
      s:=s+c;
     end;
    y[j]:=s-ln(abs(2*a*a-5*a+2))/ln(5);
   end;
  write(f,x[j]);
  write(f,y[j]);
 end;
close(f);
{найдем мин. и макс.функции для графика}
mn:=y[1];mx:=y[1];
for i:=1 to m do
 begin
  if y[i]<mn then mn:=y[i];
  if y[i]>mx then mx:=y[i];
 end;
writeln('Min=',mn:0:2);
writeln('Max=',mx:0:2);
write('Press Enter...');
readln;
gd:=0;
initgraph(gd,gm,'');
x0:=20;
y0:=330;
xm:=600/20;
ym:=440/(mx-mn);
xp:=getmaxX-x0;
yv:=y0-round((mx+1)*ym);
yn:=y0-round((mn-1)*ym);
{ось Х}
line(x0,y0,xp,y0);
outtextXY(xp+5,y0-15,'j');
for j:=0 to m-1 do
 begin
  line(x0+round(j*xm),y0+3,x0+round(j*xm),y0-3);
  str(j+1,st);
  outtextXY(x0+round(j*xm),y0+10,st);
 end;
{ось Y}
line(x0,yn,x0,yv);
outtextXY(x0-15,yv-15,'F(j)');
{вверх}
for j:=1 to round(mx) do
 begin
  line(x0-3,y0-round(j*ym),x0+3,y0-round(j*ym));
  str(j,st);
  outtextXY(x0-15,y0-round(j*ym),st);
 end;
{вниз}
for j:=1 to abs(round(mn)-1) do
 begin
  line(x0-3,y0+round(j*ym),x0+3,y0+round(j*ym));
  str(j,st);
  outtextXY(x0-18,y0+round(j*ym),'-'+st);
 end;
{график}
reset(f);
moveto(x0,y0);
for j:=1 to m-1 do
 begin
  read(f,x[j],y[j]);
  Setcolor(12);
  lineto(x0+round(j*xm),y0-round(y[j]*ym));
  Setcolor(10);
  circle(x0+round(j*xm),y0-round(y[j]*ym),2);
 end;
close(f);
readln
end.
1
0 / 0 / 0
Регистрация: 18.11.2010
Сообщений: 14
24.11.2010, 11:46  [ТС] 3
Как то сложновато.... для меня.... но все равно, спасибо.
0
Модератор
63216 / 46975 / 32375
Регистрация: 18.05.2008
Сообщений: 113,850
24.11.2010, 11:47 4
Как то сложновато.
А кто Вам сказал что построить график в Паскале это просто? Стройте в Экселе...
1
0 / 0 / 0
Регистрация: 18.11.2010
Сообщений: 14
24.11.2010, 11:49  [ТС] 5
Нет в Экселе не пойдет... нужно в паскале.... А если нужно, значит придется разбираться, других вариантов нет!
0
Модератор
63216 / 46975 / 32375
Регистрация: 18.05.2008
Сообщений: 113,850
24.11.2010, 11:53 6
_Юлия_*, Если что, скинете точное задание, помогу.
1
0 / 0 / 0
Регистрация: 18.11.2010
Сообщений: 14
24.11.2010, 13:52  [ТС] 7
Что-то не могу со своими функциями разобраться, если можно, помогите, пожалуйста.
У меня задание состоит в том, чтобы построить поочередно (с очисткой экрана) три сигнала из трех соответствующих файлов этих функций (три файла 1.dat; 2.dat; 3.dat). 3.txt

Третий файл прикрепила, он по размеру подходит, а вот первые два превышают размер, там 20 000 точек.
Ну я думаю остальные два файла можно по анологии с первым построить.

Заранее, огромное Вам спасибо!
0
Модератор
63216 / 46975 / 32375
Регистрация: 18.05.2008
Сообщений: 113,850
24.11.2010, 15:36 8
Цитата Сообщение от _Юлия_* Посмотреть сообщение
там 20 000 точек.
по 20000 точек тоже можно построить, просто вывести точки на экран и будет типа точечный график, только оформление нужно делать не по всем точкам, а с разряжением, например для каждой тысячной.

Добавлено через 1 час 38 минут
Вот для 3.txt, там в конце пустую строку уберите. Точно также для любого текстового файла, для типизированных только тип файла сменить и все.

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 crt,graph;
var f:text;
    n,a,max,min:integer;
    g,d,x0,y0,x,y:integer;
    mx,my:real;
    nf:string;
begin
clrscr;
{если путь к файлу константой, то всю дальнейшую проверку не нужно}
write('Имя файла для чтения: ');
readln(nf);
nf:=nf+'.txt';
assign(f,nf);
{$I-} reset(f);  {$I+}
if IOResult <> 0 then
 begin
  writeLn('Файл ',nf,' не найден!');
  writeLn('Работа программы завершена. Нажмите ENTER');
  readln;
  exit;
 end;
read(f,min);{читаем первое число}
max:=min;{пока оно макс. и мин.}
n:=1;{одно есть}
while not eof(f) do{пока не конец файла}
 begin
  read(f,a);{читаем числа}
  n:=n+1;{считаем}
  if a<min then min:=a;{находим мин, но здесь это не нужно, нет отрицательных}
  if a>max then max:=a;{а вот максимум нужен для графика}
 end;
close(f);
writeln('a=',a);{выведем последнее число, если ноль, то значит в конце файла есть мусор, нужно почистить, у вас как раз лишняя пустая строка}
writeln('n=',n,'  min=',min,'  max=',max);{для проверки выведем, можно убрать}
write('Press Enter...');
readln;
g:=0;{переходим в графику}
initgraph(g,d,'');
x0:=40;{ось У слева}
y0:=getmaxY-40;{ось Х внизу}
mx:=(getmaxX-2*x0)/n;{масштаб по оси Х}
my:=(y0-40)/max;{по оси У}
line(x0,y0,x0,0);{ось У}
line(x0,y0,getmaxX-x0,y0);{ось Х}
reset(f);{открываем файл}
n:=1;{первое число}
read(f,a);{читаем}
x:=x0+round(n*mx);{координата первой точки по Х}
y:=y0-round(a*my);{по У}
moveto(x,y);{встаем в первую точку}
setcolor(12);{красный цвет}
while not eof(f)do{пока не конец файла}
 begin
  read(f,a);{читаем числа}
  n:=n+1;{считаем}
  x:=x0+round(n*mx);{координата Х на экране}
  y:=y0-round(a*my);{У}
  lineto(x,y);{проводим линию}
 end;
close(f);
readln
end.
Если пойдет, то можно будет всякие украшательства делать.
1
0 / 0 / 0
Регистрация: 18.11.2010
Сообщений: 14
25.11.2010, 08:44  [ТС] 9
Спасибо огромное, и отдельное спасибо за пояснения!
0
0 / 0 / 0
Регистрация: 18.11.2010
Сообщений: 14
01.12.2010, 13:09  [ТС] 10
Здравствуйте, мне очень неудобно, не могли бы Вы мне еще помочь. Я никак не могу построить график, у которого 20 000 точек. Что мне нужно в программе (см. выше) сделать, чтобы построить его. Там очень много отрицательных значений. Построила в экселе, там получилось как бы два графика, ну видимо реальный сигнал и шумы. Может я скину Вам на электронную почту текстовый файл с точками? через форум такой размер не передается....
0
Модератор
63216 / 46975 / 32375
Регистрация: 18.05.2008
Сообщений: 113,850
01.12.2010, 14:27 11
Цитата Сообщение от _Юлия_* Посмотреть сообщение
через форум такой размер не передается....
В архиве передается....
0
0 / 0 / 0
Регистрация: 18.11.2010
Сообщений: 14
02.12.2010, 06:32  [ТС] 12
Прикрепила файлы...
0
Вложения
Тип файла: rar 1.rar (80.7 Кб, 63 просмотров)
Тип файла: rar 2.rar (84.8 Кб, 91 просмотров)
Модератор
63216 / 46975 / 32375
Регистрация: 18.05.2008
Сообщений: 113,850
02.12.2010, 06:41 13
_Юлия_*, Зряшную работу Вы сделали. Если в файле записаны вещественные числа, то разделителем целой и дробной части для Паскаля должна быть точка. Нужно переделывать.
И потом, для чего стоят номера точек? Из на графике точно не показать.
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2010, 06:41

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Написать блок-схему и программу вычисления функции на заданном промежутке с шагом 0.2 и построить график этой функции
Написать блок-схему и программу вычисления функции на заданном промежутке с шагом 0.2 и построить...

Построить график функции, на этом же графике построить графики первой и второй производных функции
построить график функции,на этом же графике построить графики первой и второй производных...

Построить график функции и отметить точки пересечения функции с осями координат
Построить график функции при значении коэффициентов: а = 2, b = 3. Отметить точки пересечения...

Построить график функции f (x) таким образом, чтобы были видны все корни функции
ПОРЯДОК ВЫПОЛНЕНИЯ ЛАБОРАТОРНОЙ РАБОТЫ 1. Построить график функции f(x) таким образом, чтобы были...


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

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

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