Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб.раб1.DOC
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
161.28 Кб
Скачать

Задача 2.1. Программа для решения задачи об остывании кофе

а). После того набора текста программы и устранения всех синтаксических ошибок, необходимо убедиться в правильной реализации в программе требуемого алгоритма. Самое простое, что можно сделать - это сравнить численные результаты с предельными случаями, для которых имеется аналитическое решение, или вычисления можно проделать вручную. Используйте метод Эйлера и калькулятор для численного решения задачи теплопроводности Ньютона с теми же параметрами, что и в программе Сool. Сравните свои расчеты с тем, что получилось по программе Cool, и проверьте свою программу в этом случае.

б). Модифицируйте программу Cool так, чтобы значения параметров r, dt, tmax можно было вводить с клавиатуры, а также, чтобы перед таблицей, содержащей время и температуру, печатался заголовок.

Поскольку приведенная задача программирования может оказаться для вас новой, ниже приводится “решение”. Заметим, что в модифицированной подпрограмме Euler производится ncalc итерации между обращениями к подпрограмме Оutput. Конечно же, наше решение не единственное и должно рассматриваться только в качестве одного из вариантов.

program Сooler; {модифицированная программа}

{все описанные ниже переменные являются глобальными}

var t, dt,tmax,

tmpr, tmpr_0, room_tmpr, r : real;

i, j, n_out, ncalc : integer;

{----------------------------------------------------------------------}

procedure Initial;

begin

t:=0.0; { начальный момент времени }

tmpr_0 := 83;

tmpr := tmpr_0 ; {начальная температура кофе (С)}

room_tmpr := 22; {комнатная температура (С) }

{ Блок ввода с клавиатуры }

writeln (' Введите входные данные ');

write ('коэффициент остывания r = ');

readln(r);

write ('шаг по времени dt, мин = ');

readln(dt);

write ('длительность наблюдения tmax, мин= ');

readln(tmax);

write ('через сколько шагов печатать = ');

readln(n_out);

ncalc:=trunc((tmax/dt)); {общее количество шагов }

end;

{----------------------------------------------------------------------}

procedure Output;

begin

writeln('! ',t:5:2, ' ! ',tmpr:6:3,' !');

end;

{-----------------------------------------------------------------------}

procedure Euler;

var change : real;

begin

change := - r  (tmpr - room_tmpr);

tmpr := tmpr + change  dt;

t := t+dt; { время}

end;

{---------------------------------------------------------------------}

procedure Table;

begin

writeln; {пропуск пустой строки}

writeln('-------------------------');

writeln('! время ! температура !');

writeln('-------------------------');

j:=0;

for i:=1 to ncalc do

begin

j:=j+1;

Euler;

if j = n_out then

begin

Output;

j:=0;

end

end;

writeln('-------------------------');

readln;

end;

{----------------------- основная программа -------------------}

begin

Initial;

Table;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]