• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Написание программы по блок-схеме. Вопрос с выводом данных

Андрей_1993

Ученик
Регистрация
13 Май 2014
Сообщения
5
Реакции
0
Баллы
0
Написание программы по блок-схеме. Вопрос с выводом данных

Составил программу в Pascal ABC по блок-схеме. Создал файл ввода и вывода. Программа рабочая, но в файле вывода выдает те же цифры, которые вводятся в файле DAT. Подскажите в чем проблема? Заранее благодарю)

program diplom;
var f1,f2:text;
t_k0,t_g0,t_kk,w_0f,d,p_u,H_z,dH,dt,t_kj,t_kn,t,t_g,dt_g,c_k,c_g,k_v,dt_k,H:real;
i,j,k,it,n:integer;
begin
assign(f1,'diplom.dat');
assign(f2,'diplom_1.res');
reset(f1);
rewrite(f2);
readln(f1,t_k0,t_g0,t_kk,w_0f,d,p_u,H_z,dH,dt);
n:=round(H_z/dH);
for j:=1 to n do
begin
t_kj:=t_k0;
end;
i:=0;
repeat
i:=i+1;
t:=dt*i;
t_g:=t_g0;
dt_g:=0;
writeln(f2,'t=',t:5:2);
for j:=1 to n do
begin
c_k:=0.59+(3.43*1e-3)*t_kj-(2.57*1e-6)*sqr(t_kj)+(8.18*1e-10)*exp(ln(t_kj)*3);
c_g:=1.312+(2.93*1e-4)*t_g;
end;
for k:=1 to it do
begin
k_v:=0.025*exp(ln(w_0f)*0.9)*exp(ln(t_g+0.5*dt_g+273)*0.3)/exp(ln(d)*0.75);
dt_k:=k_v*(t_kj-t_g-0.5*dt_g)*dt/(p_u*c_k+0.5*k_v*dt);
dt_g:=k_v*(t_kj-t_g-0.5*dt_k)*dH/(w_0f*c_g+0.5*k_v*dH);
end;
t_kj:=t_kj-dt_k;
t_g:=t_g+dt_g;
H:=dH*j;
writeln(f2,'H= ' ,H:6:5,'t_kj= ' ,t_kj:6:5, 't_g= ', t_g:6:5);
until t_kn<=t_kk;
close(f1);
close(f2);
end.
 

Вложения

  • 1231.webp
    1231.webp
    14.3 KB · Просмотры: 93
  • 1232.webp
    1232.webp
    19.6 KB · Просмотры: 86
Выложите, пожалуйста, формулировку задания - без этого трудновато.
И да, прикрепите или просто скопируйте в пост текст входного файла.
 
Мое задание не имеет четкой формулировки. Мне необходимо рассчитать процесс охлаждения кокса в Установке сухого тушения кокса на ЭВМ. Я прикрепил теоретический материал, где расписаны формулы и ручной расчет температур. Программа, написанная по блок-схеме должна работать так же, как и ручной расчет.

Файл с входными данными не прикрепляется, он в блокноте, я напишу здесь:

1000 180 250 0.644 0.065 450 7.9 0.15 120

Где:

1000 - начальная температура раскаленного кокса

180 - температура инертного газа, которым охлаждается кокс в установке

250 - конечная температура кокса после охлаждения

0.644 - фиктивная скорость газа через слой засыпки кокса в камере тушения

450 - насыпная плотность кокса

7.9 - высота слоя кокса в камере тушения

0.15 - высота элементарного слоя коксовой загрузки, принятая в расчета (указана в теории как "дельта H")

120 - элементарный интервал времени, также указанный в теоретических расчетах

Данные в файле ввода соответствуют readln(f1,t_k0,t_g0,t_kk,w_0f,d,p_u,H_z,dH,dt); каждый параметр расписан выше соответственно
 

Вложения

  • 1 - 0001.webp
    1 - 0001.webp
    57 KB · Просмотры: 68
  • 1 - 0002.webp
    1 - 0002.webp
    67.4 KB · Просмотры: 79
  • 1 - 0003.webp
    1 - 0003.webp
    72.7 KB · Просмотры: 63
  • 1 - 0004.webp
    1 - 0004.webp
    50 KB · Просмотры: 71
  • 1 - 0005.webp
    1 - 0005.webp
    51.2 KB · Просмотры: 53
  • 1 - 0006.webp
    1 - 0006.webp
    50.8 KB · Просмотры: 70
  • 1 - 0007.webp
    1 - 0007.webp
    50.1 KB · Просмотры: 87
Файл с входными данными не прикрепляется
Прикрепляется, если ему либо дать расширение .txt, либо сохранить в Word'е в виде *.doc (*.docx), либо в Zip-архиве. Ну ладно, сойдет и так.
К сожалению, быстро не получится - нужно изучить представленный труд по расчету охлаждения кокса.
 
М-да... Еще даже не начав разбираться в вопросах остывания кокса, а просто глядя на программу, вижу кое-где полную бредятину.
Это вот что такое, скажите на милость?
Код:
for j:=1 to n do
 begin
  t_kj:=t_k0;
 end;
Вы хоть представляете себе, что делает этот цикл? Объясняю: он n раз повторяет одну и ту же операцию - присвоение скалярной переменной t_kj значения скалярной переменной t_k0. И в чем глубинно-потаенный смысл этой ахинеи?
Догадываюсь, что имелось в виду. Видимо, следовало:
1. Оценить самое максимально-возможное значение величины n. Обозначим ее Nmax. Ее задать в виде константы:
Код:
Const
 Nmax=1000;
2. Переменную t_k задать в виде массива:
Код:
t_k:Array[0..Nmax] of Real;
3. Цикл присвоения исходных значений элементам массива записать так:
Код:
for j:=1 to n do
 begin
  t_k[j]:=t_k[0];
 end;
И это, я чувствую, только начало. В циклах вычисления c_k и c_g я опять вижу всё то же многократное повторение одной и той же операции.
Ладно, будем дальше разбираться.
А Вы, сударь, учите пока работу с массивами - тут у Вас явный пробел.
 
Сразу скажу - в программировании не силен, тех знаний что дали в университете для меня не достаточно оказалось. Программу писал с помощью своих конспектов и лабораторных работ с моих прошлых курсов обучения. Хочу снова научиться азов, но не знаю с чего начать и какой литературой пользоваться.
 
Сразу скажу - в программировании не силен, тех знаний что дали в университете для меня не достаточно оказалось. Программу писал с помощью своих конспектов и лабораторных работ с моих прошлых курсов обучения. Хочу снова научиться азов, но не знаю с чего начать и какой литературой пользоваться.
Литературы и в бумаге, и в Сети по тому же Паскалю - море. А как самоучка, дам Вам один совет - практика, практика и еще раз практика! Ставьте для себя задачки, пишите программы, отлаживайте (конечно, параллельно с чтением книжек и пособий).
 
Дело в том что я не программист, но моя специальность требует от меня знаний базовых языков, умение их использовать для математического моделирования процессов и аппаратов химической технологии. В прошлых семестрах с программированием более менее справлялся. В данный момент у меня дипломирование, куда входит раздел расчета на ЭВМ. С теор расчетами технологии, чертежами и т.д... у меня проблем нету, но вот с программой явные неполадки. Сегодня приходил к консультанту насчет программы, но он сказал мне идти самому разбираться с программой..
 
Дело в том что я не программист
Я тоже. Я физик-экспериментатор.
Сегодня приходил к консультанту насчет программы, но он сказал мне идти самому разбираться с программой..
И правильно. Так оно надежнее. Если есть время и желание - быстро научитесь, тем более уж Вам, инженеру-расчетчику, грех не расщелкать такую школьную ерундистику, как основы ЯП, в шесть секунд.
Успехов!

P.S. Я тоже еще с Вашей программой повожусь - но когда время будет. Возни тут, чувствую, много.
 
Уф, ну, вроде, довел я это дело до ума. Получите:
Код:
program diplom;
const
 Nmax=200;
var
 f1,f2:text;
 t_k:Array[1..Nmax] of real;
 t_k0,t_g,dt_g,t_g0,dt_k,t_kk,w_0f,d,p_u,H_z,dH,dt,t_kn,
 t,c_k,c_g,k_v,H:real;
 i,j,k,it,n:integer;
begin
 assign(f1,'diplom.dat');
 assign(f2,'diplom_1.res');
 reset(f1);
 rewrite(f2);
 readln(f1,t_k0,t_g0,t_kk,w_0f,d,p_u,H_z,dH,dt);
 n:=round(H_z/dH);
 it:=5;
 for j:=1 to n do
  begin
   t_k[j]:=t_k0;
  end;
 i:=0;
 repeat
  i:=i+1;
  t:=dt*i;
  t_g:=t_g0;
  dt_g:=0;
  for j:=1 to n do
   begin
    c_k:=0.59+(3.43*1e-3)*t_k[j]-(2.57*1e-6)*sqr(t_k[j])+
                               (8.18*1e-10)*exp(ln(t_k[j])*3);
    c_g:=1.312+(2.93*1e-4)*t_g;
    for k:=1 to it do
     begin
      k_v:=0.025*exp(ln(w_0f)*0.9)*exp(ln(t_g+0.5*dt_g+273)*0.3)/
                                                     exp(ln(d)*0.75);
      dt_k:=k_v*(t_k[j]-t_g-0.5*dt_g)*dt/(p_u*c_k+0.5*k_v*dt);
      dt_g:=k_v*(t_k[j]-t_g-0.5*dt_k)*dH/(w_0f*c_g+0.5*k_v*dH);
     end;
    t_k[j]:=t_k[j]-dt_k;
    t_g:=t_g+dt_g;
   end;
 until t_k[n]<=t_kk;
 writeln(f2,'t= ',t:0:3);
 writeln(f2);
 for j:=1 to n do
  writeln(f2,'H= ' ,dH*j:7:5,'  t_k= ' ,t_k[j]:7:2);
 close(f1);
 close(f2);
end.

Результат:

Код:
t= 11880.000

H = 0.15       t_k = 180.000
H = 0.30       t_k = 180.000
H = 0.45       t_k = 180.000
H = 0.60       t_k = 180.001
H = 0.75       t_k = 180.002
H = 0.90       t_k = 180.003
H = 1.05       t_k = 180.005
H = 1.20       t_k = 180.008
H = 1.35       t_k = 180.012
H = 1.50       t_k = 180.017
H = 1.65       t_k = 180.025
H = 1.80       t_k = 180.036
H = 1.95       t_k = 180.050
H = 2.10       t_k = 180.069
H = 2.25       t_k = 180.093
H = 2.40       t_k = 180.125
H = 2.55       t_k = 180.165
H = 2.70       t_k = 180.216
H = 2.85       t_k = 180.279
H = 3.00       t_k = 180.358
H = 3.15       t_k = 180.455
H = 3.30       t_k = 180.574
H = 3.45       t_k = 180.719
H = 3.60       t_k = 180.894
H = 3.75       t_k = 181.104
H = 3.90       t_k = 181.356
H = 4.05       t_k = 181.655
H = 4.20       t_k = 182.009
H = 4.35       t_k = 182.426
H = 4.50       t_k = 182.915
H = 4.65       t_k = 183.486
H = 4.80       t_k = 184.150
H = 4.95       t_k = 184.919
H = 5.10       t_k = 185.805
H = 5.25       t_k = 186.824
H = 5.40       t_k = 187.990
H = 5.55       t_k = 189.319
H = 5.70       t_k = 190.828
H = 5.85       t_k = 192.536
H = 6.00       t_k = 194.461
H = 6.15       t_k = 196.623
H = 6.30       t_k = 199.041
H = 6.45       t_k = 201.736
H = 6.60       t_k = 204.728
H = 6.75       t_k = 208.036
H = 6.90       t_k = 211.679
H = 7.05       t_k = 215.676
H = 7.20       t_k = 220.044
H = 7.35       t_k = 224.798
H = 7.50       t_k = 229.951
H = 7.65       t_k = 235.514
H = 7.80       t_k = 241.497
H = 7.95       t_k = 247.905
 
Назад
Сверху