Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2013, 00:19   #1
vitalis
Новичок
Джуниор
 
Регистрация: 03.05.2013
Сообщений: 2
По умолчанию Задача на языке Pascal: Определить параметры поступательного движения

Помогите с решением пожалуйста, уже битый час не могу понять в чем дело. Не понимаю что нужно изменить в программе, но если при вводе параметров заменить данное значение массы на другое, например 3, то все работает как положено, но если я ввожу данные 2 кг, то выбивает ошибку 207. В чем может быть дело? Заранее спасибо.
Условие задачи:
Тело массой m, на которое действуют движущая сила Fд = Fд(S) и сила сопротивления Fc, разгоняется на участке пути Sр. После этого действие движущей силы прекращается (сила Fc продолжает действовать), начинается торможение, в процессе которого тело пройдет до остановки расстояние Sт за счет накопленной при разгоне кинетической энергии.
Требуется:
-Определить зависимость от пути S скорости v(s), ускорения a(s), вре-мени t(s);
-Установить время Тр прохождения телом участка Sp и времени TT прохождения участка ST;
-По полученным данным построить графики v(s), a(s), t(s) для интервала перемещения [0, Sp + ST]
Исходные данные:
Масса тела:
m = 2 (кг).
Закон движения:
Fд = F0 + S +2,5.
Сила сопротивления:
Fc = 30 (Н).
F0 = 40 (H),
Sp = 0,6 (м),
N = 6.

текст программы:

program Project2;
uses crt;
type mas=array [1..200] of real;
var
V, t, a, S, Fd:mas;
int, Fc, Fo, Sr, Vs, Tt, Tr, St, dS, dSt, m : real;
n, i: integer;
res: text;
begin
writeln('Vvedite parametr m:');
readln(m);
writeln('Vvedite parametr Fo:');
readln(Fo);
writeln('Vvedite parametr Sr:');
readln(Sr);
writeln('Vvedite parametr N:');
readln(N);
writeln('Vvedite parametr Fc:');
readln(Fc);
assign(res, 'res.txt');
rewrite(res);
writeln(res, 'Opredelenie parametrov postupatelnogo dvijeniya tela');
writeln(res);
writeln(res, 'Ishodnie dannie:');
writeln(res, 'Massa tela m = ', m:2:1,' (kg)');
writeln(res, 'Nachalnaya sila Fo = ', Fo:2:0,' (H)');
writeln(res, 'Sila soprotivleniya Fc = ', Fc:2:0,' (H)');
writeln(res, 'Ychastok razgona Sr = ', Sr:2:1,' (m)');
writeln(res, 'Kolichestvo shagov N = ', n:1);
writeln(res);
dS:=Sr/n;
S[1]:=0;
V[1]:=0;
t[1]:=0;
Fd[1]:=Fo+S[1]+2.5;
a[1]:=(Fd[1]-Fc)/m;
writeln(res, 'Ychastok razgona');
for i:=2 to n+1 do
begin
S[i]:=S[i-1]+dS;
Fd[i]:=Fo+S[i]+2.5;
int:=(Fd[i]-2*Fc+Fd[i-1])/2*dS;
V[i]:=sqrt(2*(m*v[i-1]*v[i-1]/2+int)/m);
Vs:=(V[i]+V[i-1])/2;
t[i]:=t[i-1]+(dS/Vs);
a[i]:=(v[i]-v[i-1])/(t[i]-t[i-1]);
end;
for i:=1 to n+1 do
writeln(res, i:5,' ',' S=',S[i]:6:3,' V=',v[i]:6:3,' a=',a[i]:10:7,' t=',t[i]:6:3);
Tr:=t[n+1];
writeln(res, 'Bistrodeistvie dlya ychastka razgona =', Tr:6:3);
writeln(res);
writeln(res);
St:=(m*sqr(v[n+1]))/(2*Fc);
a[n+1]:=-Fc/m;
dSt:=St/n;
writeln(res, 'Ychastok tormojeniya');
for i:=n+2 to (2*n)+1 do
begin
S[i]:=S[i-1]+dSt;
V[i]:=sqrt((2/m)*((m*sqr(v[i-1]))/2-Fc*dSt));
Vs:=(V[i]+v[i-1])/2;
t[i]:=t[i-1]+((S[i]-S[i-1])/Vs);
a[i]:=(v[i]-v[i-1])/(t[i]-t[i-1]);
end;
for i:=n+1 to (2*n)+1 do
writeln(res,i:5,' ',' S=',S[i]:6:3,' V=',V[i]:6:3,' a=',a[i]:6:3,' t=',t[i]:6:3);
Tt:=t[(2*n)+1]-Tr;
writeln(res,'Bistrodeistvie dlya ychastka tormojeniya=',Tt:6:3);
close(res);
end.
vitalis вне форума Ответить с цитированием
Старый 03.05.2013, 00:46   #2
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

А что за ошибка 207? Есть к ней какое-то пояснение? Советую выучить пошаговую трасировку и с помощью неё найти ошибку. Также советую отдохнуть, а потом на свежую голову попытаться найти ошибку.

UPD. Ошибка 207 - это 'Invalid floating point operation' - ошибка операции с плавающей точкой.
Код:
V[i]:=sqrt((2/m)*((m*sqr(v[i-1]))/2-Fc*dSt));
Проблема, возможно, здесь. Извлекаете (наверное) квадратный корень из отрицательного числа. Корень чётной степени не определён на множестве действительных чисел.

Последний раз редактировалось Вадим Мошев; 03.05.2013 в 00:50.
Вадим Мошев вне форума Ответить с цитированием
Старый 03.05.2013, 00:51   #3
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Подкоренное выражение отрицательно

Код:
...
V[i]:=sqrt((2/m)*((m*sqr(v[i-1]))/2-Fc*dSt));
...
Вам самому лениво с отладчиком посидеть 5 минут?

Upd.
Ну вот.. опоздал.
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 03.05.2013, 22:32   #4
vitalis
Новичок
Джуниор
 
Регистрация: 03.05.2013
Сообщений: 2
По умолчанию

Вадим Мошев, спасибо, как я понял именно в этом и было дело, попробовал сделать подкоренное выражение по модулю и все решилось, хотя не знаю правильно это будет или нет.
vitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на Pascal ABC. Определить среднюю кинетическую энергию вращательного движения молекул водорода faqbi4vosk Помощь студентам 1 22.04.2012 17:39
Задача на языке Pascal, с массивами Bonni Помощь студентам 4 06.05.2011 10:39
Задача на языке Pascal, с массивом Bonni Помощь студентам 1 05.05.2011 19:45
Задача на языке Pascal...что не правильно? PaScalpel Помощь студентам 2 01.10.2010 14:06
Задача на языке Pascal. Рекурсия. (FainT) Помощь студентам 6 23.05.2009 15:45