e:=0;
for j:=1 to x do begin
if S[1,j]=2 then begin
if S[4,j]>0 and S[4,j]<=3 then e:=e+0.55;
if S[4,j]>3 and S[4,j]<=6 then e:=e+0.79;
if S[4,j]>6 and S[4,j]<=10 then e:=e+0.9;
if S[4,j]>10 and S[4,j]<=18 then e:=e+1.08;
if S[4,j]>18 and S[4,j]<=30 then e:=e+1.31;
if S[4,j]>30 and S[4,j]<=50 then e:=e+1.56;
if S[4,j]>50 and S[4,j]<=80 then e:=e+1.86;
if S[4,j]>80 and S[4,j]<=120 then e:=e+2.19;
if S[4,j]>120 and S[4,j]<=180 then e:=e+2.52;
if S[4,j]>180 and S[4,j]<=250 then e:=e+2.9;
if S[4,j]>250 and S[4,j]<=315 then e:=e+3.23;
if S[4,j]>315 and S[4,j]<=400 then e:=e+3.54;
if S[4,j]>400 and S[4,j]<=500 then e:=e+3.89;
end;
выдает ошибку в 4ой строке(значит во всех что ниже тоже будет):"Нельзя преобразовать тип real к integer". все переменные, кроме j являются real.
вот полный код программы если надо:
program qq;
//uses
//crt;
const N=4;
const M=100;
const M1=100;
var
F, del:array of real;
Q, S: array[1..N,1..M] of real;
i, j, k, x, l, kol: integer;
y, c, b, w, e, tip, Ad: real;
Tvd, Tnd, Td:real;
begin
writeln ('Сколько звеньев участвует в цепи? ');
readln (x);
writeln ('Введите через пробел: тип звена(1 - замыкающее звено; 2 - составляющее звено), координаты начала и конца звена, размер:');
for j := 1 to x do
for i := 1 to N do
read (S[i,j]);
writeln ('Таблица значений:');
writeln ('Номер звена ':3,'| Тип',' ','| начало звена |':7,' конец звена |':7,' ':2,'Размер звена');
for j := 1 to x do begin
write ('A',j);
for i := 1 to N do
write (S[i,j]:15);
writeln;
end;
for j:=1 to x do begin
for i:=1 to N-1 do
Q:=S;
end;
for j:=1 to x do
if Q[1,j]=1 then begin // ищем замыкающее звено(1 в первом столбце)
b:=j;
writeln ('Замыкающее звено: А',b);
writeln;
end;
l:=(3*x)+1;
setlength(F, l); //задаем длину нового одномерного массива
k:=0;
for j:=1 to x do begin
for i:=1 to N-1 do begin
k:=k+1;
F[k]:=Q[i,j]; //создаем одномерный массив из элементов таблицы
end;
end;
write('Aв–І=');
k:=1;
while F[k]=2 do k:=k+3; //если значение массива равно 2 то пропускаем 2 элемента и смотрим значение третьего до тех пор пока не найдем 1
c:=F[k+2]; //после того как нашли "1" запоминаем число стоящее через 1 элемент (в таблице это конечная координата замыкающего звена)
F[k+2]:=0; //обнуляем его
w:=F[k+1]; // запоминаем число стоящее слева от него (начальная координата замыкающего звена)
repeat
k:=1;
while (F[k]<>c) or (k mod 3=1) do k+=1; //проверяем массив: если элемент не равен конечной координате звена то смотрим следующий элемент
if k mod 3=0 then begin //если номер элемента кратен трем то
write('+A',k div 3); //записываем положительное значение к/3(номер следующего звена)
c:=F[k-1]; //запоминаем начальную координату найденного звена
F[k-1]:=0; //обнуляем ее
end
else begin //если номер элемента не кратен трем то
write('-A',((k div 3) +1)); //записываем отрицательное значение звена
c:=F[k+1]; //запоминаем конечную координату звена
F[k+1]:=0; //обнуляем его
end;
until c=w; //повторяем до тех пор, пока не придем в начальную координату замыкающего звена
writeln;
write ('Какая задача решается?(1 - прямая; 2 - обратная)');
writeln;
readln (tip);
if tip=1 then begin
write('Введите данные для замыкающего звена:верхнее отклонение, нижнее отклонение(дробные числа записываются через точку"."):');
writeln;
write('в–Ів=');
read(Tvd);
write('в–Ін=');
read(Tnd);
Td:=Tvd-Tnd;
writeln('Допуск замыкающего звена равен: Tв–І=в–Ів-в–Ін=',Td);
kol:=x-1;
setlength(del, kol);
end;
e:=0;
for j:=1 to x do begin
if S[1,j]=2 then begin
if S[4,j]>0 and S[4,j]<=3 then e:=e+0.55;
if S[4,j]>3 and S[4,j]<=6 then e:=e+0.79;
if S[4,j]>6 and S[4,j]<=10 then e:=e+0.9;
if S[4,j]>10 and S[4,j]<=18 then e:=e+1.08;
if S[4,j]>18 and S[4,j]<=30 then e:=e+1.31;
if S[4,j]>30 and S[4,j]<=50 then e:=e+1.56;
if S[4,j]>50 and S[4,j]<=80 then e:=e+1.86;
if S[4,j]>80 and S[4,j]<=120 then e:=e+2.19;
if S[4,j]>120 and S[4,j]<=180 then e:=e+2.52;
if S[4,j]>180 and S[4,j]<=250 then e:=e+2.9;
if S[4,j]>250 and S[4,j]<=315 then e:=e+3.23;
if S[4,j]>315 and S[4,j]<=400 then e:=e+3.54;
if S[4,j]>400 and S[4,j]<=500 then e:=e+3.89;
end;
end;
writeln(e);
//readkey;
end.