Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите с кодом в PasсalABCNET

Семен Скибо Знаток (333), закрыт 1 год назад
Всем привет! Нужно было написать код для курсового проекта, формулы зависят друг от друга и решение возможно с любого участка. Решил начать с начала, но Паскаль не хочет работать....

program tad;
var
l, ae, v:INTEGER;
a,b,e,f,g,h,i,k,m,n,o,p,r,s,t,m1,u, w, x, y, z, aa, ab, ac, y1, ad:REAL;
c:= 1.25; d:= 1500; j:= 760;
begin
repeat
a:= random(5-1+1)+1;
b:= 5.3*(a/c)*d;
repeat
f:= random(0.16-0.12+1)+0.12;
g:= random(0.025-0.02+1)+0.02;
e:= c-2*(f+g);
h:= e/a;
until e=h;
i:= 9.555*(j/b);
writeln (i);
writeln ('введите значение горизонтали из таблицы 4.1');
readln (k);
writeln ('введите значение к = 1 для односторонней или 2 для двусторонней передачи');
readln (l);
repeat
if l = 2 then n:= random(8-7.5+1)+7.5 else n:= random(10-9+1)+9;
m1:= 0.1*(5.1*(i/(l*n)));
m:= (exp(ln(m1)/3));
o:= (h-m-2*k)/2;
until o>=20;
writeln ('введите значение угла наклона зубьев');
readln (t);
writeln ('введите значение Z для большей шестерни');
readln (p);
writeln ('введите значение z для малой шестерни');
readln (r);
s:= 0.5*k*(p+r)*(1/cos(t))+0.5*k;
repeat
repeat
writeln ('введите значение Da');
readln (u);
if (u <= 1.16*s) and (u >= 1.01*s) then v:= 4 else if (u <= 1.22*s) and (u >= 1.03*s) then v:= 6;
until (u <= 1.16*s) and (u >= 1.01*s) or (u <= 1.22*s) and (u >= 1.03*s);
x:= 5.3*(a/c)*84;
until a<=5;
w:= (3.14*u*x)/60;
until (w <= 70) and (w >= 65);
repeat
y1:= random(0.9-0.75+1)+0.75;
y:= y1*u;
z:= (3.14*y*x)/60;
until (z <= 55) and (z >= 52);
repeat
aa:= random(18.9-15.0+1)+15.0;
ab:= (v*d)/aa;
ad:= random(0.004-0.003+1)+0.003;
ac:= (3.14*y)/ad;
until (ab <= ae) and (ae <= ac);
writeln ('мю:', a);
writeln ('н а ном:', b);
writeln ('Д б', c);
writeln ('V ном', d);
writeln ('Dz', e);
writeln ('b', f);
writeln ('дельта', g);
writeln ('dz', h);
writeln ('Mn', i);
writeln ('Pn', j);
writeln ('m', k);
writeln ('k штрих', l);
writeln ('dвк', m);
writeln ('тау', n);
writeln ('bш', o);
writeln ('Z', p);
writeln ('z', r);
writeln ('Ц', s);
writeln ('пси', t);
writeln ('Da', u);
writeln ('2p', v);
writeln ('Va max', w);
writeln ('na max', x);
writeln ('Dk', y);
writeln ('Vk max', z);
writeln ('дельта U доп', aa);
writeln ('k min', ab);
writeln ('k max', ac);
writeln ('tk min', ad);
writeln ('K проверка целого числа', ae);
readln;
end.
Лучший ответ
Антоша Чёрт Профи (793) 1 год назад
Код не будет работать. Много ошибок
Семен СкибоЗнаток (333) 1 год назад
Можете подсказать в каких местах?
Остальные ответы
Janet Janet Мудрец (15192) 1 год назад
Что делает программа опишите
Семен СкибоЗнаток (333) 1 год назад
рассчитывает зубчатую передачу тягового электродвигателя. Возможно ошибка или в циклах репит, или в ограничениях интервалов. Учился по старому Паскалю, возможно у нового сейчас что-то изменилось. Например, ограничение g [20...25]
Janet JanetМудрец (15192) 1 год назад
Да, у вас вот это условие until e = h не выполнится никогда. Программа зациклится в этом цикле.
Janet JanetМудрец (15192) 1 год назад
e:= c-2*(f+g);
h:= e/a;
Как e может стать равным h?
Семен Скибо Знаток (333) Janet Janet, "e:= c-2*(f+g); h:= e/a; Как e может стать равным h?" пропустил один множитель: "until e=a*h;"
Janet JanetМудрец (15192) 1 год назад
a задается рандомно. Если оно не равно 1, то цикл зациклится.
Gennady Гений (60864) 1 год назад
> но Паскаль не хочет работать....

Что скрыто за этой фразой? Выводится сообщение об ошибке? Получаете не тот результат, который ожидали? Еще что-то? Но так, навскидку

> c:= 1.25; d:= 1500; j:= 760;
Такое в нормальном паскале не катит. Нужно или присваивать в теле программы или объявлять константами.

> random(0.16-0.12+1)+0.12;
Функция Random может вызываться или с целочисленным аргументом или вообще без него. В первом случае будет возвращено значение целого типа, во втором - действительное.

Дальше не смотрел, ибо бесполезно без постановки задачи.

Ну и еще до кучи. В паскале можно пользоваться константой pi вместо 3.14
Семен СкибоЗнаток (333) 1 год назад
Программа доходит до этого места и дальше ничего не происходит. Значение i повторяется при нескольких запусках, видимо программа видит решение только таким подбором.
Gennady Гений (60864) Семен Скибо, она что, прекращает работу или зависает или вываливается с ошибкой? Тогда с какой? НО, если не доходит до предложения ввести угол наклона зубьев, значит не может выбраться из цикла repeat if l = 2 then n:= random(8-7.5+1)+7.5 else n:= random(10-9+1)+9; m1:= 0.1*(5.1*(i/(l*n))); m:= (exp(ln(m1)/3)); o:= (h-m-2*k)/2; until o>=20; Вы уверены, что с вашими данными переменная о когда-нибудь превысит 20?
Илья Ус Мастер (1143) 1 год назад
У тебя недостающие объявления переменных такие как c, d, j, они тем более не объявлены.
c, d, j, используются в операциях присваивания до их объявления и они должны быть объявлены как REAL. c:= 1.25; d:= 1500; j:= 760
У тебя переменная readln (k) нигде не объявлена.
Объяви все используемые переменные и убедись, что все операции с действительными числами выполняются с помощью переменных типа REAL.
Также проверь все синтаксисы, возможно в них проблема.
И возможно заработает, либо проверь свою программу в браузере на этих сайтах: https://www.onlinegdb.com/online_pascal_compiler и https://onecompiler.com/pascal
Удачи тебе!
Mercio Mcbavin Профи (861) 1 год назад
Программа не работает, потому что в ней есть несколько ошибок. Вот исправленный код:


program tad;
var
l, ae, v:INTEGER;
a,b,e,f,g,h,i,k,m,n,o,p,r,s,t,m1,u, w, x, y, z, aa, ab, ac, y1, ad:REAL;
c:= 1.25; d:= 1500; j:= 760;
begin
repeat
a:= random(5-1+1)+1;
b:= 5.3*(a/c)*d;
repeat
f:= random(0.16-0.12+1)+0.12;
g:= random(0.025-0.02+1)+0.02;
e:= c-2*(f+g);
h:= e/a;
until e=h;
i:= 9.555*(j/b);
writeln ('i: ', i);
writeln ('введите значение горизонтали из таблицы 4.1');
readln (k);
writeln ('введите значение к = 1 для односторонней или 2 для двусторонней передачи');
readln (l);
repeat
if l = 2 then n:= random(8-7.5+1)+7.5 else n:= random(10-9+1)+9;
m1:= 0.1*(5.1*(i/(l*n)));
m:= (exp(ln(m1)/3));
o:= (h-m-2*k)/2;
until o>=20;
writeln ('введите значение угла наклона зубьев');
readln (t);
writeln ('введите значение Z для большей шестерни');
readln (p);
writeln ('введите значение z для малой шестерни');
readln (r);
s:= 0.5*k*(p+r)*(1/cos(t))+0.5*k;
repeat
repeat
writeln ('введите значение Da');
readln (u);
if (u <= 1.16*s) and (u >= 1.01*s) then v:= 4 else if (u <= 1.22*s) and (u >= 1.03*s) then v:= 6;
until (u <= 1.16*s) and (u >= 1.01*s) or (u <= 1.22*s) and (u >= 1.03*s);
x:= 5.3*(a/c)*84;
until a<=5;
w:= (3.14*u*x)/60;
until (w <= 70) and (w >= 65);
repeat
y1:= random(0.9-0.75+1)+0.75;
y:= y1*u;
z:= (3.14*y*x)/60;
until (z <= 55) and (z >= 52);
repeat
aa:= random(18.9-15.0+1)+15.0;
ab:= (v*d)/aa;
ad:= random(0.004-0.003+1)+0.003;
ac:= (3.14*y)/ad;
until (ab <= ae) and (ae <= ac);
writeln ('мю: ', a);
writeln ('н а ном: ', b);
writeln ('Д б: ', c);
writeln ('V ном: ', d);
writeln ('Dz: ', e);
writeln ('b: ', f);
writeln ('дельта: ', g);
writeln ('dz: ', h);
writeln ('Mn: ', i);
writeln ('Pn: ', j);
writeln ('m: ', k);
writeln ('k штрих: ', l);
writeln ('dвк: ', m);
writeln ('тау: ', n);
writeln ('bш: ', o);
writeln ('Z: ', p);
writeln ('z: ', r);
writeln ('Ц: ', s);
writeln ('пси: ', t);
writeln ('Da: ', u);
writeln ('2p: ', v);
writeln ('Va max: ', w);
writeln ('na max: ', x);
writeln ('Dk: ', y);
writeln ('Vk max: ', z);
writeln ('дельта U доп: ', aa);
writeln ('k min: ', ab);
writeln ('k max: ', ac);
writeln ('tk min: ', ad);
writeln ('K проверка целого числа: ', ae);
readln;
end.
ФГУП Охрана Знаток (288) 1 год назад
у Вас ошибки:

1) переменные надо объявить c,d,j:real;

2) c:= 1.25; d:= 1500; j:= 760; надо писать в коде(после begin), а не в секции var

3) функция random принимает целое число, а не дробное
GennadyГений (60864) 1 год назад
Как оказалось, можно и дробное. Век живи...
Математические подпрограммы
Похожие вопросы