УкраїнськаEnglishmRussian
Вход/Новый
В теме много сообщений

JavaLikeCalc


Автор Сообщение
Сообщение создано: 18. 03. 2010 [22:31]
almaz
Almaz Karimov
Contributor
Создатель темы
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
Есть необходимость в пределах одной ява-программы использовать массивный кусок кода, который будет многократно повторяться. Есть ли возможность выделить его в отдельную подпрограмму и осуществлять вызов одной строчкой?

Так как подпрограммы и операции перехода по меткам не поддерживаются (как во всех нормальных языках структурного программирования) вижу пока единственный способ использовать тип данных объект "Object". Поддерживает ли он функции? Если да, то как это делается (образец бы небольшой)?

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 18. 03. 2010 [22:42]
Aleksey
Aleksey Popkov
Contributor
Зарегистрирован(а) с: 31.07.2008
Сообщения: 326
almaz wrote:

Есть необходимость в пределах одной ява-программы использовать массивный кусок кода, который будет многократно повторяться. Есть ли возможность выделить его в отдельную подпрограмму и осуществлять вызов одной строчкой?


Можно. Отдельной функцией в JavaLikeCalc вычислителе пишется функция.
В любом месте к ней обращаешься и передаешь параметры.

Mode_items=DAQ.JavaLikeCalc.lib_StatusExtruders.SelectFromBase("FactoryMode","allmodes"); - вызываю функцию
Где:
lib_StatusExtruders - библиотека JavaLikeCalc вычислителя
SelectFromBase - id функции
и параметры
Mode_items - сюда результат.


[Сообщение редактировалось 2 раз(а), в последний раз 18.03.2010 в 22:44.]
Сообщение создано: 19. 03. 2010 [08:22]
almaz
Almaz Karimov
Contributor
Создатель темы
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
Спасибо. Подходит.
Может всё-таки есть возможность вызова подпрограммы в пределах одного и того же кода?

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 19. 03. 2010 [08:50]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
almaz wrote:

Спасибо. Подходит.
Может всё-таки есть возможность вызова подпрограммы в пределах одного и того же кода?

Нет. И ни в одном нормальном языке это не поощряется, имеется в виду goto.

Learn, learn and learn better than work, work and work.
Сообщение создано: 21. 03. 2010 [21:06]
almaz
Almaz Karimov
Contributor
Создатель темы
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
goto и подпрограммы нормальные языки структурного программирования не поддерживают. Я имел ввиду можно ли как-то задать функцию объекта Object в коде и потом ею пользоваться?

Возникла проблема при объявлении и инициализации массива Array. Использовал следующую строку:
CRC = new Array(0,1,2,3,4,5);

В итоге никаких ошибок не выдаётся, строка перед этой исполняется, весь код после - не исполняется. Что здесь не так?

Вроде следующая после объявления массива строчка заработала. Только не понял как...

Но стоило далее присвоить значение массива переменной - Ошибка сегментирования:
hi=CRC[1];

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 22. 03. 2010 [09:13]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
almaz wrote:

Но стоило далее присвоить значение массива переменной - Ошибка сегментирования:
hi=CRC[1];

Не воспроизводится. Например, следующий код нормально работает:
CRC = new Array(0,1,2,3,4,5);
hi=CRC[1];
test = hi;

Learn, learn and learn better than work, work and work.
Сообщение создано: 22. 03. 2010 [10:33]
almaz
Almaz Karimov
Contributor
Создатель темы
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
У меня на другом компьютере тоже не воспроизводится. Видимо обновился некорректно. Перед установкой OpenSCADA надо будет удалить старую установку полностью.

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 22. 03. 2010 [11:05]
almaz
Almaz Karimov
Contributor
Создатель темы
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
Не работает следующий код:

CRC = new Array
(
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
);
hi=CRC[7];
test = hi;

Если удалить последний элемент массива всё нормально. Видимо стоит ограничение на 255 элементов. 256-ой не помещается.
Нельзя ли увеличить количество элементов массива?

Если использовать строки вместо массивов, насколько помню, тоже ограничение 255.

[Сообщение редактировалось 1 раз(а), в последний раз 22.03.2010 в 11:36.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Сообщение создано: 22. 03. 2010 [13:55]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3742
almaz wrote:

Нельзя ли увеличить количество элементов массива?

Увеличить нельзя, а проверку добавил.

almaz wrote:

Если использовать строки вместо массивов, насколько помню, тоже ограничение 255.

Такое ограничение только на размер строкового литерала, т.е. то что записывается как "1234567".
Реального ограничение на строку и массив нет.

Learn, learn and learn better than work, work and work.
Сообщение создано: 22. 03. 2010 [15:45]
almaz
Almaz Karimov
Contributor
Создатель темы
Зарегистрирован(а) с: 25.09.2008
Сообщения: 516
Получилось. Программа некрасивая, но работает:

CRC = new Array
(
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41
);
CRC1 = new Array
(
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40
);
CRC.concat(CRC1);
hi=CRC[255];
test = hi;

21 век - век повсеместной автоматизации. Главное - во благо всем людям.



3127