|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
18.03.2014, 18:34 | #1 (permalink) |
Новичок
Регистрация: 18.03.2014
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Нужна помощь с программой расчета колебаний струны
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; |
18.03.2014, 18:34 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Эти топики схожи с вашим, вам будет интересно ознакомиться Программа расчета цепей Нужна срочная помощь с программой на Pascal |
18.03.2014, 19:47 | #4 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Дорогой друг - постарайтесь решить проблему самостоятельно. Ибо вряд ли кто-нибудь из наших программистов (я так уж точно не) побросает все дела и засядет за разбор Вашей программы (что, между прочим, всегда сложнее, чем написать свою), да еще полезет в книжки по матфизике вспоминать решения уравнения колебаний струны. Извините. Думаю, Вы сумеете отладить и оттестировать свою программу. Удачи!
|
18.03.2014, 19:57 | #5 (permalink) |
Новичок
Регистрация: 18.03.2014
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Нееет, тут и не нужно уже разбирать, мне нужно выяснить могу ли я просто подставить вместо result в формуле внутри функции, массив Arr[i+1,j] то есть +1 шаг по времени. именно тут загвоздка,я не знаю возможно ли это.
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
18.03.2014, 20:06 | #7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Возьмите да попробуйте и посмотрите, что будет. Уж чего проще. И вообще, отладка программы - это то, чем программист должен заниматься сам. А не бегать по форумам и вопить "срочно отладьте мне код!".
|
18.03.2014, 20:09 | #8 (permalink) |
Новичок
Регистрация: 18.03.2014
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Так помимо прог. кода я проводил расчеты( аппроксимации упрощения и т.п.) это вообще проект. я только тут запинаюсь, всё остальное делал сам. По этому и прошу помощи
|
18.03.2014, 20:24 | #9 (permalink) |
Новичок
Регистрация: 18.03.2014
Сообщений: 7
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Я банально не знаю как сделать так, чтобы после каждого расчета вместо result пк видел arr[i+1,j]
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|