Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » Языки программирования в TRACE MODE 6 / Algorithm Programming Languages » Оператор if-then-else

   
Автор / Author Тема / Topic: Оператор if-then-else
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534


Icon 5 отправлено / posted      Профиль для / Profile for Abram Shnider           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Уважаемая техническая поддержка!
У меня возникает следующая проблема: при использовании оператора if-then-else с несколькими условиями (типа IF ((N1 >= N2) && (N3 == 0))) по какой-то причине во время компиляции возникает ошибка ("Неверный аргумент операции"). Как выяснилось, компилятору не нравится числовое значение в условии (0). При замене нуля, например на локальную константу с начальным значением 0, программа компилируется без ошибок.
Собственно вопрос: как в Техно ST происходит работа с простыми числами (не объявленными) и является ли этот момент уникальным, а если нет, то где еще могут не работать такие приемы?

Сообщения / Posts 78 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
SATER
Forum Haunter / Завсегдатай форума
Участник № / Member № 1414


Icon 1 отправлено / posted      Профиль для / Profile for SATER           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
у вас наверное N3 типа bool.
тогда правильно:
IF ( N1 >= N2 && !N3 )

Сообщения / Posts 141 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534


Icon 1 отправлено / posted      Профиль для / Profile for Abram Shnider           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
SATER,
Да, действительно, N3 типа bool. С вашей версией согласен.
Значит сравниваемые величины должны быть одинаковых типов данных? Или это справедливо только для типа bool?

Сообщения / Posts 78 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
SATER
Forum Haunter / Завсегдатай форума
Участник № / Member № 1414


Icon 1 отправлено / posted      Профиль для / Profile for SATER           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
не знаю, не специалист..
наверно, только с bool нельзя сравнивать

Сообщения / Posts 141 | Из / From: Украина  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534


Icon 1 отправлено / posted      Профиль для / Profile for Abram Shnider           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Это вопрос к технической поддержке...
В любом случае большое спасибо за консультацию!

Сообщения / Posts 78 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Romсheg
unregistered



Icon 1 отправлено / posted            Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Тип bool - уже состояние результата сравнения, зачем его еще с чем-то сравнивать?
Результат выполнения операции сравнения в любом языке - есть результат в формате bool. Если у вас сама переменная этого типа - то сравнивать ее с чем-то смысла фактически нет, поэтому выражение вида:
bool b1;
if (b1==true)
в любом языке программирования будет некорректным. А корректным будет только такое выражение:
bool b1;
if (b1)
а для состояния false:
bool b1;
if (!b1)

но это как пример...

IP / IP: IP адрес / IP address | Report this post to a Moderator
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534


Icon 1 отправлено / posted      Профиль для / Profile for Abram Shnider           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Romсheg,
Вы правы. В данном конкретном случае N3 уже является результатом сравнения, однако в программе мне требуется признак результата этого сравнения, поэтому и предпринимается такая конструкция оператора.
Ваши замечания по поводу корректного способа получения требуемого мне результата вполне справедливы (назову их своим недосмотром). Предложенное Вами решение предложил также г-н SATER.
Мне интересно требуется ли при сравнении, чтобы типы данных величин были одинаковы или же TM сам преобразует остальные типы данных также как это декларируется в руководстве IDE?

Сообщения / Posts 78 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
Romсheg
unregistered



Icon 1 отправлено / posted            Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Преобразование типа должно учитываться, однако есть некоторые особенности, например при сравнении типа с константой - надо явно указать тип константы. Например: сравнивая переменную типа REAL с константой - желательно константу указать тоже в том же типе.
v1 : REAL;
if (v1==10) - я так понимаю не совсем корректная формулировка, правильнее будет вот так:
if (v1==10.0)

Когда сравнивается две переменные - то, вроде как ТМ6 преобразование типа выполняет сам. Но - особенно надо учитывать правила этих преобразований, а то при вычислениях может привести к потере точности. Например - умножение REAL и INT однозначно даст потерю точности, потому как результат будет целочисленным. Как-то уже сам на подобное натыкался. Но это оговорено в документации.

IP / IP: IP адрес / IP address | Report this post to a Moderator
Abram Shnider
Active Forum Member / Активный участник форума
Участник № / Member № 4534


Icon 1 отправлено / posted      Профиль для / Profile for Abram Shnider           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Romсheg,
Спасибо за ответ!
То, что "целочисленность результата арифметических вычислений в программе имеет высший приоритет" действительно оговорено в документации.
Похоже на то, что по крайней мере желательно явно указывать тип данных для получения адекватных результатов, а также во избежании ошибок компилятора.

Сообщения / Posts 78 | Из / From: РФ  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2