Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 18.03.2014, 18:34   #1 (permalink)
losted
Новичок
 
Регистрация: 18.03.2014
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Нужна помощь с программой расчета колебаний струны

Доброго времени суток! Мне срочно нужна помощь. Я пишу программу. расчитывающую колебания струны. на выходе файл с таблицей. ось узлов и ось времени. Я мат. расчеты, в их точности я уверен. Ниже код, в нем не очень трудно разобраться. 2 массива - для таблицы по времени и узлам. формула расчета верна *(((a * a) * (Arr[i,j+1] - (2 * Arr[i,j]) + Arr[i,j-1]) * (Ht*Ht))/(Hx*Hx)) + ( (f *(Ht * Ht)) + (2 * Arr[i,j] - Arr[i-1,j]))* могу и фотографии расчетов отправить. я постарался расписать действия в программе. но значения не адекватные выдаёт. в общем Очень прошу помощи. завтра буквально нужно её представить.

program struna;
type Mass = Array[0..1000, 0..1000] Of Real;
label M1;
var
S : Text;
f: Real;
Q : real;
Fi : real;
d : real;
Ht: Real;
Hx: Real;
ft: Real;
a: Real;
t: integer;
i, j : integer;
n, m: integer;
Arr: Mass;
fCSV: TEXT;//текстовый файл

function vvod_i(i,j:integer): Real;
begin
Q:= Fi/Ht;

if (i <= 1) then result := 0 else

if (j <= 1) then result := 0 else

if (j = m) then result := 0 else

if (i <= Q) and (j = Ft) then

result := (((a * a) * (Arr[i,j+1] - (2 * Arr[i,j]) + Arr[i,j-1]) * (Ht*Ht))/(Hx*Hx)) + ( (f *(Ht * Ht)) + (2 * Arr[i,j] - Arr[i-1,j])) else

if (i <= Q) and (j > Ft) then

result := (((a * a) * (Arr[i,j+1] - (2 * Arr[i,j]) + Arr[i,j]) * (Ht*Ht))/(Hx*Hx)) + (2* Arr[i,j]) - Arr[i-1,j] else

if (i = Q) and (j < Ft) then

result := (((a * a) * (Arr[i,j+1] - (2 * Arr[i,j]) + Arr[i,j-1]) * (Ht*Ht))/(Hx*Hx)) + (2* Arr[i,j]) - Arr[i-1,j] else

if (i >= Q) and (j > Ft) then

result := (((a * a) * (Arr[i,j+1] - (2 * Arr[i,j]) + Arr[i,j-1]) * (Ht*Ht))/(Hx*Hx)) + (2* Arr[i,j]) - Arr[i-1,j] else

if (i >= Q) and (j < Ft) then

result := (((a * a) * (Arr[i,j+1] - (2 * Arr[i,j]) + Arr[i,j-1]) * (Ht*Ht))/(Hx*Hx)) + (2* Arr[i,j]) - Arr[i-1,j] else

if (i >= Q) and (j = Ft) then

result := (((a * a) * (Arr[i,j+1] - (2 * Arr[i,j]) + Arr[i,j-1]) * (Ht*Ht))/(Hx*Hx)) + (2* Arr[i,j]) - Arr[i-1,j] else;



end;

begin
write('Введите кол-во узлов n');Readln(n);
write('Введите кол-во узлов m');Readln(m);
Write('Введите плотность струны');Readln(a);
Write('Введите силу воздействующую на узел (в ньютонах)');Readln(F);
Write('Введите шаг по времени');Readln(Ht);
Write('Введите шаг между узлами');Readln(Hx);
Write('Введите точку приложения силы');Readln(ft);
write ('введите время действия силы'); Readln(fi);
//Заполняем матрицу очевидными значениями

Arr[0, 0] := 0;
for i := 0 to n do
begin
Arr[i, 0] := i;
end;
for j := 1 to m do
begin
Arr[0, j] := j;
end;
//теперь расчитывем значения в узлах от 1 до размерности
for i := 1 to n do


for j := 1 to m do

Arr[i, j] := vvod_i(i,j);
//посмотрим что получилось
assign(fCSV,'c:\temp\out1.txt');//связываем файловую переменную с файлом
rewrite(fCSV);//открываем файл на перезапись
for i := 0 to n do
begin
for j := 0 to m do
begin
//выводим на экран
write(Arr[i, j]);
write(chr(09));
//выводим в файл
write(fCSV,Arr[i, j]);
write(fCSV,';');
end;
writeln;
//переход на новую сртоку
write(fCSV,chr(13));
write(fCSV,chr(10));
end;
close(fCSV);//закрываем файл
assign(s,'c:\temp\out2.txt');//связываем файловую переменную с файлом
rewrite(s);//открываем файл на перезапись
WriteLn(s, 'Plot ''do'' with it pause 0,5');
Close(s);
end.

Меня очень интересует нормально-ли идет расчет Q, и не изменится-ли рез-тат если меня местами уравнение(вместе с ограничениями) т.е. зависит-ли от места, то как будет идти расчет?

Как видите, расставлено много ограничений, но похоже он не верно видит массив...

Ошибка похоже где-то здесь (ниже),по тому как до сего момента всё в порядке

if (i <= Q) and (j > Ft) then

result := (((a * a) * (Arr[i,j+1] - (2 * Arr[i,j]) + Arr[i,j]) * (Ht*Ht))/(Hx*Hx)) + (2* Arr[i,j]) - Arr[i-1,j] else

if (i = Q) and (j < Ft) then

result := (((a * a) * (Arr[i,j+1] - (2 * Arr[i,j]) + Arr[i,j-1]) * (Ht*Ht))/(Hx*Hx)) + (2* Arr[i,j]) - Arr[i-1,j] else

if (i >= Q) and (j > Ft) then

result := (((a * a) * (Arr[i,j+1] - (2 * Arr[i,j]) + Arr[i,j-1]) * (Ht*Ht))/(Hx*Hx)) + (2* Arr[i,j]) - Arr[i-1,j] else

if (i >= Q) and (j < Ft) then

result := (((a * a) * (Arr[i,j+1] - (2 * Arr[i,j]) + Arr[i,j-1]) * (Ht*Ht))/(Hx*Hx)) + (2* Arr[i,j]) - Arr[i-1,j] else

if (i >= Q) and (j = Ft) then

result := (((a * a) * (Arr[i,j+1] - (2 * Arr[i,j]) + Arr[i,j-1]) * (Ht*Ht))/(Hx*Hx)) + (2* Arr[i,j]) - Arr[i-1,j] else;
losted вне форума   Ответить с цитированием

Старый 18.03.2014, 18:34
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Эти топики схожи с вашим, вам будет интересно ознакомиться

Программа расчета цепей
Нужна срочная помощь с программой на Pascal

Старый 18.03.2014, 19:40   #2 (permalink)
losted
Новичок
 
Регистрация: 18.03.2014
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ох, черт, меня озарило. вместо result нужно поставить z[i+1;j] прочтет-ли?
losted вне форума   Ответить с цитированием
Старый 18.03.2014, 19:43   #3 (permalink)
losted
Новичок
 
Регистрация: 18.03.2014
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Точнее как это впихнуть, туда, вместо результов, везде Arr[i+1,j] помогите!!!
losted вне форума   Ответить с цитированием
Старый 18.03.2014, 19:47   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Дорогой друг - постарайтесь решить проблему самостоятельно. Ибо вряд ли кто-нибудь из наших программистов (я так уж точно не) побросает все дела и засядет за разбор Вашей программы (что, между прочим, всегда сложнее, чем написать свою), да еще полезет в книжки по матфизике вспоминать решения уравнения колебаний струны. Извините. Думаю, Вы сумеете отладить и оттестировать свою программу. Удачи!
Vladimir_S вне форума   Ответить с цитированием
Старый 18.03.2014, 19:57   #5 (permalink)
losted
Новичок
 
Регистрация: 18.03.2014
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Нееет, тут и не нужно уже разбирать, мне нужно выяснить могу ли я просто подставить вместо result в формуле внутри функции, массив Arr[i+1,j] то есть +1 шаг по времени. именно тут загвоздка,я не знаю возможно ли это.
losted вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 18.03.2014, 19:58   #6 (permalink)
losted
Новичок
 
Регистрация: 18.03.2014
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

losted вне форума   Ответить с цитированием
Старый 18.03.2014, 20:06   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от losted Посмотреть сообщение
мне нужно выяснить могу ли я просто подставить вместо result в формуле внутри функции, массив Arr[i+1,j] то есть +1 шаг по времени. именно тут загвоздка,я не знаю возможно ли это.
Возьмите да попробуйте и посмотрите, что будет. Уж чего проще. И вообще, отладка программы - это то, чем программист должен заниматься сам. А не бегать по форумам и вопить "срочно отладьте мне код!".
Vladimir_S вне форума   Ответить с цитированием
Старый 18.03.2014, 20:09   #8 (permalink)
losted
Новичок
 
Регистрация: 18.03.2014
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Так помимо прог. кода я проводил расчеты( аппроксимации упрощения и т.п.) это вообще проект. я только тут запинаюсь, всё остальное делал сам. По этому и прошу помощи
losted вне форума   Ответить с цитированием
Старый 18.03.2014, 20:24   #9 (permalink)
losted
Новичок
 
Регистрация: 18.03.2014
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Я банально не знаю как сделать так, чтобы после каждого расчета вместо result пк видел arr[i+1,j]
losted вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 02:23.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.