Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2022, 06:25   #1
СамоучкаРобот
Бывалый
 
Регистрация: 23.04.2022
Сообщения: 28
Сказал Спасибо: 4
Сказали Спасибо 1 раз(а) в 1 сообщении
Восклицание изменение типов переменых

такая проблема.
напишу кратко, функция которая поворачивает базу на определённый угол

onTurn(xp1,13)

def onTurn(qwe:IN, vall:IN)
decl e6pos qwe
decl int vall, i
decl real ang

ini

ang=360/vall
vall=vall-1
for i=0 to vall
base_data[21].a=360-(i*ang)
endfor



проблема в следующем. когда делится 360 на vall, а это количество отверстий, то результат получается интовый, и шаги углов плывут.
для себя понимаю что надо перед делением vall изменять на real, затем делить, и снова иpменять на int.




для проверки добавил в функцию ещё аргумент, но его тип real,

onTurn(xp1,13,13)

def onTurn(qwe:IN, vall:IN, vall2:IN)
decl e6pos qwe
decl int vall, i
decl real ang,vall2

ini

ang=360/vall2
vall=vall-1
for i=0 to vall
base_data[21].a=360-(i*ang)
endfor



в этом варианте всё работает отлично. все отверстия идеально отрабатываются. но как по мне, это костыль.
по плану, в функцию надо передать только исходную точку и количество отверстий.
есть ли решение данной проблемы?
и ещё, а вообще от какого ЯП произошел KRL?
СамоучкаРобот вне форума   Ответить с цитированием
Старый 04.05.2022, 11:46   #2
Pavel_T
Гуру
 
Регистрация: 04.08.2016
Сообщения: 81
Сказал Спасибо: 0
Сказали Спасибо 29 раз(а) в 19 сообщении
По умолчанию

а если так:
ang=360.0/vall2
Pavel_T вне форума   Ответить с цитированием
Старый 04.05.2022, 11:51   #3
СамоучкаРобот
Бывалый
 
Регистрация: 23.04.2022
Сообщения: 28
Сказал Спасибо: 4
Сказали Спасибо 1 раз(а) в 1 сообщении
По умолчанию

Сообщение от Pavel_T Посмотреть сообщение
а если так:
ang=360.0/vall2
с vall2 всё работает, оно real по умолчанию.
а вот 360,0 /vall надо попробовать.
СамоучкаРобот вне форума   Ответить с цитированием
Старый 04.05.2022, 12:23   #4
СамоучкаРобот
Бывалый
 
Регистрация: 23.04.2022
Сообщения: 28
Сказал Спасибо: 4
Сказали Спасибо 1 раз(а) в 1 сообщении
По умолчанию

Сообщение от СамоучкаРобот Посмотреть сообщение
с vall2 всё работает, оно real по умолчанию.
а вот 360,0 /vall надо попробовать.
спасибо за наводку. да, действительно,
360->360.0
работает, даже при делении на интовую переменную.
решено!!
СамоучкаРобот вне форума   Ответить с цитированием
Старый 05.05.2022, 07:36   #5
СамоучкаРобот
Бывалый
 
Регистрация: 23.04.2022
Сообщения: 28
Сказал Спасибо: 4
Сказали Спасибо 1 раз(а) в 1 сообщении
По умолчанию

Пишу тут, так как это дальнейшая часть кода

нужно каждые 4 отверстия останавливать горелку для очистки
по аналогии с С++, JS, PHP и тп, пишу так

if i%4==0 then ;тут пишет "ожидается THEN"
halt
endif ; а тут пишет "конец контрольной структуры здесь не разрешен"

не хочу писать ифы и вручную указывать на каком отверстии останавливаться. 4,8,12,16 и тд.


помогите.
пс. Роботёк, пока не распечатывал то, что ты прислал, времени не было вообще. возможно там есть данное решение.
СамоучкаРобот вне форума   Ответить с цитированием
Старый 05.05.2022, 13:34   #6
Роботёр
Гуру
 
Регистрация: 20.12.2017
Сообщения: 708
Сказал Спасибо: 18
Сказали Спасибо 142 раз(а) в 135 сообщении
По умолчанию

ну а почему ты не хочешь через "или" сделать
if ((i%4==4) or (i%4==8) or (i%4==12)) then; и так далее
funcion()
endif
Роботёр на форуме   Ответить с цитированием
Старый 05.05.2022, 15:43   #7
СамоучкаРобот
Бывалый
 
Регистрация: 23.04.2022
Сообщения: 28
Сказал Спасибо: 4
Сказали Спасибо 1 раз(а) в 1 сообщении
По умолчанию

Сообщение от Роботёр Посмотреть сообщение
ну а почему ты не хочешь через "или" сделать
if ((i%4==4) or (i%4==8) or (i%4==12)) then; и так далее
funcion()
endif
погоди.
Я нисколько не ставлю под сомнение твою компетентность, но ты напутал с делением на остаток.
I%4==4 физически не получится. например. 8%4=2(в остатке 0), то есть что бы в остатке осталось 4, это надо 12 делить на 4, а это уже целое 3, 7%4=1( в остатке 3). именно это мне и нужно. что бы когда при делении на 4 в остатке был 0, в этот момент и надо отправлять на чистку.

может ты имел ввиду это
if ((i/4==4) or (i/4==8) or (i/4==12)) then; и так далее
Я думал над этим вариантом. но это костыль. есть трубы примерно 50 мм, там хватает чистки через каждые 4 отверстия. а есть и 85. там в идеале каждые 3 чистить. а их там порядка 65 в 5 рядах. это рехнёшся всё прописывать.
Я и хотел сделать по уму, чтоб в начале программы изменить количество отверстий и всё. в текущей проге, которая кривая, из за которой он и стоял 2 года, там все через ифы сделано. Я уже думал над вариантом, Я буду в одном ифе через ИЛИ делать.
но хотелось бы понять, есть ли тут деление через остаток.
например в С++ это схематично выглядит так

3%4==0 не тру(равно 0 в остатке 3)
4%4==0 тру (равно 1, в остатке 0)
5%4==0 не тру (равно 1, в остатке 1)
11%4==0 не тру (равно 2, в остатке 3)
и тд.
то есть этот ==0 и есть сравнение с остатком. если он ноль, то число кратное 4( ну или на что делим)

Последний раз редактировалось СамоучкаРобот, 05.05.2022 в 15:48 Причина: ошибся в цифре
СамоучкаРобот вне форума   Ответить с цитированием
Старый 05.05.2022, 15:46   #8
СамоучкаРобот
Бывалый
 
Регистрация: 23.04.2022
Сообщения: 28
Сказал Спасибо: 4
Сказали Спасибо 1 раз(а) в 1 сообщении
По умолчанию

Сообщение от Роботёр Посмотреть сообщение
ну а почему ты не хочешь через "или" сделать
if ((i%4==4) or (i%4==8) or (i%4==12)) then; и так далее
funcion()
endif
в этом то и проблема. ЯП не понимает знак "%". может в этом ЯПе для этого другой символ используется.
как пример
тут "==" это равно, в С++ "==" тоже равно
но тут "<>" не равно, а в С++ "!=" так пишется
СамоучкаРобот вне форума   Ответить с цитированием
Старый 05.05.2022, 16:31   #9
Роботёр
Гуру
 
Регистрация: 20.12.2017
Сообщения: 708
Сказал Спасибо: 18
Сказали Спасибо 142 раз(а) в 135 сообщении
По умолчанию

а так это процент))). я думал это имя переменной
Роботёр на форуме   Ответить с цитированием
Старый 05.05.2022, 16:55   #10
СамоучкаРобот
Бывалый
 
Регистрация: 23.04.2022
Сообщения: 28
Сказал Спасибо: 4
Сказали Спасибо 1 раз(а) в 1 сообщении
По умолчанию

Сообщение от роботёр Посмотреть сообщение
а так это процент))). я думал это имя переменной
ну как? никаких вариантов в этом япе нет?
СамоучкаРобот вне форума   Ответить с цитированием
Ответ
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +2, время: 14:02.

vBulletin v3.6.2, Copyright ©2000-2024, Jelsoft Enterprises Ltd.
Русский перевод: zCarot, Vovan & Co