"Нельзя преобразовать real к integer" - PascalABC.NET
Формулировка задачи:
Листинг программы
- 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.
Решение задачи: «"Нельзя преобразовать real к integer"»
textual
Листинг программы
- 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;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д