Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 8
1

Помогите разобраться.

18.11.2011, 21:28. Показов 1436. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет всем!!!Помогите найти ошибку.Заранее спасибо)))
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
PROGRAM zam_capl;
uses crt;
label w1,w2,w3,w4;
const
n=100;            {количество точек}
z1=1.0;z2=0.1; {коэффициент теплопроводности/ плотность/ уд. Теплоёмкость}
s=0.001;s2=0.002; {коэффициент теплопроводности/плотность/уд. Теплота плавления}
t0=0;                   {температура замерзания воды  }
T1=50;lm=0;       {температура и радиус внутренней области капли}
l=100;T2=-50;     {температура и радиус внешней области капли}
VAR
Rl,dR,r,dt,dtm:real;
k,i,nt,nm,j:integer;
T,tt,td,TT1:array [0..n+1] of real ;
RR:array [0..200] of real ;
capl:text;
BEGIN
 assign(capl, 'c:\kapl50.dat');
 rewrite(capl);
 clrscr;
 dtm:=0.001;  dr:=l/n; nm:=trunc(n/l*lm);
FOR k:=1 TO n do begin
   T[k]:=T1; end;
   T[n]:=t0;
   T[n+1]:=T2;
   nt:=n; Rl:=dR*Nt; i:=0;
while i<100 do begin
    dt:=32;
    for k:=nm+1 to nt-1 do begin
       r:=l/n*k;
       td[k]:=z1/(dR*dR)*(T[k-1]*(1-dR/r)+T[k+1]*(1+dr/r)-2*T[k]);
       for j:=1 to 200 do begin
if T[j]+dt*td[j]>T[j-1]+dt*td[j-1] then dt:=dt/2 else goto w1;
if dt=0 then dt:=dtm ;
     w1:end;
  end;
for k:=1 to 200 do begin
  if T[nt-1]+dt*td[nt-1]<T[nt] then dt:=dt/2 else goto w2;
  if dt=0 then dt:=dtm ;
   w2:end;
for k:=nt+1 to n do begin
    r:=l/n*k;
    td[k]:=z2/(dR*dR)*(T[k-1]*(1-dR/r)+T[k+1]*(1+dr/r)-2*T[k]);
    for j:=1 to 500 do begin
    if T[j]+dt*td[j]>T[j-1]+dt*td[j-1] then dt:=dt/2 else goto w3;
         if dt=0 then dt:=dtm;
 w3:end; end;
 for j:=1 to 200 do begin
   if T[nt+1]+dt*td[nt+1]>T[nt] then dt:=dt/2 else goto w4;
   if dt=0 then dt:=dtm ;
w4:end;
   Rl:=Rl-(s*(T[nt]-T[nt-1])-s2*(T[nt+1]-T[nt]))*dt;
   nt:=trunc(Rl/dR);
   RR[J]:=RL;
   if T[nt]<>t0 then T[nt]:=t0;
   td[nt]:=0;
   T[nt+1]:=(T[nt+2]+t0)/2;
   T[nt-1]:=(T[nt-2]+t0)/2;
   for k:=0 to n do
begin
     T[k]:=T[k]+td[k]*dt;
end;
     i:=i+1;
     T[0]:=T[1]
  end;
   for i:=0 to n do begin
     writeln (capl,RR[n],' ',T[i]);
   end; close(capl);
end.
Нужно составить блок-схему согласно алгоритму.Выходные данные должны быть представлены в графической форме.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.11.2011, 21:28
Ответы с готовыми решениями:

Помогите разобраться в коде
Помогите в коде разобраться. const dx :array of integer = (0, -1, 0, 1); dy :array of...

Помогите разобраться в коде программы
Здравствуйте Помогите разобраться в коде программы (НЕ МОГУ ПОНЯТЬ КАК В ПРОГРАММЕ РАБОТАЮТ МАССИВЫ...

Решение задачи усовершенствованным методом Эйлера. Error 207. Помогите разобраться
Помогите, пожалуйста, решение задачи усовершенствованным методом Эйлера:

Помогите разобраться построчно что делает данная программа
помогите разобраться построчно что делает данная программа program z2; uses crt; var...

14
albor
18.11.2011, 23:38 2
В строке 54 RR[J]:=RL; J всегда равно 200. По моему, непорядок..
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 8
19.11.2011, 12:50  [ТС] 3
Ну и что тут надо поменять???
0
albor
19.11.2011, 12:56 4
Вообще то Вы автор, Вам лучше знать, но мне кажется, что главный цикл у Вас по i , значит надо индекс i использовать.

RR[i]:=RL;
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 8
19.11.2011, 15:36  [ТС] 5
Если б я был автором,то всё было бы проще)))
Вот такая ошибка вылазит:
»*Ошибка: 102 - выход за границы диапазона изменения индекса 0..101 (Program1.pas, строка 33)
0
albor
19.11.2011, 17:14 6
Смотрим:
0033: if T[j]+dt*td[j]>T[j-1]+dt*td[j-1] then dt:=dt/2 else goto w1;

в этой строке есть T[j] и td[j]. Они объявлены как массивы 0..n+1 где n=100.

А в 32 строке for j:=1 to 200 do.. еще вопросы будут?
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 8
20.11.2011, 13:02  [ТС] 7
И что мне исправить надо????
0
albor
20.11.2011, 16:49 8
Надо разобраться в чем смысл этой программы. Почему выходные данные выводятся из расчета 100 значений, а в теле проги что-то вычисляется в диапазоне 200 значений?
Причем массивы рассчитаны на 100. :o
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 8
20.11.2011, 19:38  [ТС] 9
вообще это компьютерное моделирование замерзания капли.текст данной программы взят с книги,но почему-то не работает)))
0
albor
20.11.2011, 20:44 10
Я бы попробовал заменить во всех циклах for .. to 200 на 100
Хотя разбираться во всей этой физике меня, честно говоря, ломает.
Почему расчеты на 200 точек, может это опечатка, а может проверка Вашей внимательности? :o
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 8
20.11.2011, 20:57  [ТС] 11
»*Ошибка: 102 - выход за границы диапазона изменения индекса 0..101 (Program1.pas, строка 57)
0
albor
20.11.2011, 22:16 12
А глаза поднять на строку 57 самому! Там что-то считается в ячейку массива n+2, при n=100 это получается попытка записать в 102-й элемент. А их всего 101! Авария! Кто так пишет! :mad:
Чтобы раз и навсегда избавиться от этих проблем советую в секции var исправить размерности массивов на [0..201]. По крайней мере эта ошибка исчезнет.

вместо
T,tt,td,TT1:array [0..n+1] of real ;

написать
T,tt,td,TT1:array [0..201] of real ;
TheCat
20.11.2011, 22:29 13
И вообще названия переменных - тт... тд!!! Черт ногу сломит!.. Толи дело tZamerzanya, KolvoTochek, KakayaToHren... Конечно, писать дольше, но ведь будет понятнее!
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 8
21.11.2011, 15:16  [ТС] 14
Спасибо albor!!!
0
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 8
21.11.2011, 15:18  [ТС] 15
[QUOTE=albor;922298]Кто так пишет! :mad:

Этот текст проги взял с какого-то заумного учебника)))
0
21.11.2011, 15:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2011, 15:18
Помогаю со студенческими работами здесь

Помогите пожалуйста, не могу разобраться как сохранять файл, например в формате bmp?
Помогите пожалуйста, не могу разобраться как сохранять файл, например в формате bmp? uses ...

Помогите разобраться в коде модели Марковица
Дали вот такой код, но я не могу в нем разобраться. Преподаватель сказала, что не разбирается....

Совершенно запуталась с операторными скобками (BEGIN и END). Помогите разобраться
Совершенно запуталась с BEGINами и ENDами.. помогите пожалуйста program echo(input,output); var...

Помогите разобраться.
В чем разница между turbo pascal и free pascal? ну кроме названия и то что free пошёл у меня на...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru