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

Pascal (Паскаль)

Войти
Регистрация
Восстановить пароль
 
aleks_massa
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 28
#1

Переполнение плавающей точкой. Где ошибка в программе? - Pascal

11.12.2015, 17:13. Просмотров 360. Ответов 10
Метки нет (Все метки)

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
Program U2ITELb;
Uses graph, crt;
Const
  w1:real=1e8;
  w:real=1e7;
  l:real=0.2;
  w0:real=2e-8;{sobsvetna chastota kolebanyu}
  A1:real=3;
  pt:real=2.5e-8;
  tm:real=36e-6;
  dt:real=0.5e-8;
  dtau:real=0.2e-8;
  m:real=0.3;
Var
  t,tau,y:real;
  z,g:integer;
  driver,mode:integer;
 
function U1(t:real):real;
begin
U1:=A1*(1+m*sin(w*t))*sin(w1*t);
end;
 
function h(t:real):real;
begin
h:=(1-1*exp(-t/pt))*(cos(w0*t)+l*sin(w0*t));
end;
 
Begin
driver:=detect;
initgraph(driver,mode,' ');
line(10,10,10,470);
line(10,240,630,240);
moveto(10,240);
t:=0;tau:=0;
repeat
   y:=0;
   if t>(3*tau) then tau:=t-(3*tau) else tau:=0;
        repeat
        y:=y+abs(U1(tau))*h(t-tau)*dtau;
        tau:=tau+dtau;
        until tau>t;
   t:=t+dt;
   z:=10+round(600/tm*t);
   g:=240-round(100*y);
   lineto(z,g);
until t>tm;
readln;
END.
0
Миниатюры
Переполнение плавающей точкой. Где ошибка в программе?  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2015, 17:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Переполнение плавающей точкой. Где ошибка в программе? (Pascal):

Вычислить сумму ряда (Ошибка, переполнение. Где?) - Pascal
Вычисление суммы ряда. Program fuuuuu; Const e=0.0001; Var a,s,f,x:real; k:integer; Function F1(n:real;m:byte):real; Var...

Подскажите где ошибка. Выдаёт арифметическое переполнение? - Pascal
program z1; USES crt; const N= 10; var x: array of integer; i: integer; y: array of integer; begin ClrScr; randomize; for...

Числа с плавающей точкой - Pascal
Нужно разработать программу сложения, вычитания чисел с плавающей запятой. Формат числа с плавающей запятой задается при запуске программы....

Сложение чисел с плавающей точкой - Pascal
Помогите сложить числа А=73.9 и В=76.3 в формате с плавающей точкой и выполнить проверку.

где ошибка в программе??? - Pascal
uses crt; var i:byte; begin clrscr; goToXY((lo(windMax)-15) div 2,hi(windMax) div 2); for i:=1 to...

Ошибка плавающей точки - Pascal
Здравствуйте, что у меня за ошибка в программе? uses CRT; type TLimits=record LeftFrontier:extended; ...

10
Puporev
Модератор
54042 / 41675 / 14754
Регистрация: 18.05.2008
Сообщений: 98,011
11.12.2015, 17:39 #2
205 Floating point overflow (Переполнение при операции с плавающей запятой).
В результате выполнения операции с плавающей запятой получено слишком большое вещественное число.
У меня ошибку не выдает, но рисует оси и зависает...
Даже при смене real на extended.
Нужно смотреть задание.
0
aleks_massa
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 28
11.12.2015, 18:30  [ТС] #3
Вообще задание вот. Но там я передаточную функцию W(p) преобразовал в импульсную характеристику h(t). И дальше начал писать прогу..В чём-то я ошибся. Никак не могу понять в чём и как эту ошибку исправить.
0
Миниатюры
Переполнение плавающей точкой. Где ошибка в программе?   Переполнение плавающей точкой. Где ошибка в программе?  
Puporev
Модератор
54042 / 41675 / 14754
Регистрация: 18.05.2008
Сообщений: 98,011
11.12.2015, 18:56 #4
Да, в этой мути видимо Вам самому придется разбираться...
0
aleks_massa
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 28
11.12.2015, 20:38  [ТС] #5
Очень печально..Помощь бы была очень необходима. Может, хоть кто-то посоветует, что сделать с ошибкой "С плавающей точкой".
0
ФедосеевПавел
Модератор
3397 / 1894 / 755
Регистрация: 01.02.2015
Сообщений: 6,436
11.12.2015, 21:48 #6
Попробуйте вместо построения графика вывести значения на экран.

Могу ошибаться. Кажется, что идёт вычисление свёртки. Но там нужно учитывать, что при t<0 значения функций равны 0. И что-то наворочено в строке 38 с вычислением tau.

И, наверное, стоит привести математику, используемую в программе - у меня нет методички, а ВУЗ я закончил десятилетия назад.
0
aleks_massa
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 28
11.12.2015, 22:57  [ТС] #7
Да, Вы абсолютно правы.Идёт вычисление интеграла Дюамеля (свётрки). Как правильно учесть момент функции ноль? Что необходимо исправить? Или дописать?

Добавлено через 4 минуты
И почему высвечиваются пустые оси? Как получить сигнал на выходе?
0
ФедосеевПавел
Модератор
3397 / 1894 / 755
Регистрация: 01.02.2015
Сообщений: 6,436
11.12.2015, 23:17 #8
Нужно отладить вычисления. И только потом строить график.

Pascal
1
2
3
4
5
6
7
  function h(t: real): real;
  begin
    if t >= 0 then
      h := (1 - 1 * exp(-t / pt)) * (cos(w0 * t) + l * sin(w0 * t))
    else
      h := 0;
  end;
0
aleks_massa
13.12.2015, 21:45  [ТС]
  #9

Не по теме:

Я разобрался в том, как решать данное задание. Но возникла другая проблема. Я написал программу решения диф.уравнение методом рунге-кутта. Вот здесь я создал тему данного вопроса Решение диф.уравнение методом Рунге-Кутта и построение графика Теперь возникла проблема там.

0
aleks_massa
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 28
17.12.2015, 19:37  [ТС] #10
ФедосеевПавел, Добро времени суток! Могли бы помочь найти ошибку в тексте программы? Здесь решение диф уравнение и вывод графика на экран. Но рисует пустые оси..
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
uses graph;
const
w1:real=1e+8; {sobstvenni kolebaniy}
tm:real=10e-9; {vremya modelirovaniya}
dt:real=1e-9; {shag modelirovaniya}
n:integer=2; {kol-vo uravneniy}
dk:real=0.0001; {masshtabnyi koef-t}
ti:real=1e-8;{metka}
u1:real=1e+7;
T1:real=0.5e-8;
T2:real=0.2e-8;
type
vec=array[1..2] of real;
matr=array[1..4,1..2] of real;
proc1=procedure(n:integer;var y,dy:vec);
proc2=procedure(n:integer;dt:real;var y,dy:vec;var ier:boolean);
var
i,j,driver,mode,x,z:integer;
ier:boolean;
y,dy:vec;
w2,d,t,f:real;
procedure fct(n:integer;var y,dy:vec) ;far;
begin
f:=sqr(3*(1+0.7*sin(u1*t))*(sin(w1*t)));
dy[1]:=y[2];
dy[2]:=(f-y[1]-y[2]*T2)/(T1*T1);
end;
procedure out(n:integer;dt:real;var y,dy:vec;var ier:boolean); far;
begin
t:=t+dt; {shag vremeny}
if t>tm then ier:=true;
x:=10+round(620/tm*t);
z:=240-round(dk*y[1]);
lineto(x,z);
end;
procedure rk4(n:integer;ier:boolean;h:real;fct:proc1;out:proc2;var y,dy:vec);
var
c:vec;
k:matr;
i,j:integer;
begin
repeat
c:=y;
for i:=1 to 4 do begin
fct (n,y,dy);
for j:=1 to n do begin
k[i,j]:=dy[j]*h;
case i of
3: y[j]:=c[j]+k[i,j];
4: y[j]:=c[j]+(k[1,j]+2*k[2,j]+2*k[3,j]+k[4,j])/6
else y[j]:=c[j]+0.5*k[i,j];
end;end;end;
out (n,h,y,dy,ier);
until ier;
end;
begin
ier:=false;
t:=0; y[1]:=0; y[2]:=0; f:=1/dt;
driver:=detect;
initgraph (driver,mode,'');
line(10,10,10,480);
line(10,240,640,240);
moveto(10,240);
for i:=0 to 10 do begin
x:=10+i*round(620/tm*ti);
line(x,(240-10),x,(240+10));
for j:=1 to 9 do begin
line(x+round(620/tm*ti*0.1*j),(240-5),x+round(620/tm*0.1*ti*j),(240+5));
end;end;
rk4(n,ier,dt,fct,out,y,dy);
readln;
end.
0
ФедосеевПавел
Модератор
3397 / 1894 / 755
Регистрация: 01.02.2015
Сообщений: 6,436
17.12.2015, 21:49 #11
Вы совершаете ошибку новичков - пытаетесь сразу написать сложную программу типа Word. А нужно разделить на независимые этапы - отладить решение дифура, отладить построение графика по данным из массива.
Начните с решения дифура.

Кстати, в той же теме топикстартер после решения дифура строил график не на Pascal, а специальной утилитой gnuplot и получал результат в виде картинки.
0
17.12.2015, 21:49
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2015, 21:49
Привет! Вот еще темы с ответами:

Где исправить ошибки в программе?? - Pascal
задача такая написать программу в которой требуется &quot;Удалить все символы 'а' из слов, длина которых равна выбранной&quot; при исходных данных...

Переполнение типа с плавающей точкой - C++
Добрый вечер, существует ли понятие переполнение float c UB как полагается?

Подскажите, где здесь ошибка?(нужно сложить 3 числа с плавающей точкой и больше 1.32 - JavaScript
Function myFunction(){ var a=document.getElementById('X').value; var b=document.getElementById('Y').value; var...

Ошибка операции с плавающей точкой - Turbo Pascal
Program qqq; Uses crt; var i,n:byte; s:real; begin clrscr; Writeln('Vvedite n'); Readln(n); s:=0;


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

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

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