EnglishУкраїнськаmRussian
Login/New
Topic with many replies

JavaLikeCalc


Author Message
Written on: 18. 03. 2010 [22:31]
almaz
Almaz Karimov
Contributor
Topic creator
registered since: 25.09.2008
Posts: 516
Есть необходимость в пределах одной ява-программы использовать массивный кусок кода, который будет многократно повторяться. Есть ли возможность выделить его в отдельную подпрограмму и осуществлять вызов одной строчкой?

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

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 18. 03. 2010 [22:42]
Aleksey
Aleksey Popkov
Contributor
registered since: 31.07.2008
Posts: 326
almaz wrote:

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


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

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


[This article was edited 2 times, at last 18.03.2010 at 22:44.]
Written on: 19. 03. 2010 [08:22]
almaz
Almaz Karimov
Contributor
Topic creator
registered since: 25.09.2008
Posts: 516
Спасибо. Подходит.
Может всё-таки есть возможность вызова подпрограммы в пределах одного и того же кода?

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 19. 03. 2010 [08:50]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
almaz wrote:

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

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

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

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

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

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

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

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 22. 03. 2010 [09:13]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
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.
Written on: 22. 03. 2010 [10:33]
almaz
Almaz Karimov
Contributor
Topic creator
registered since: 25.09.2008
Posts: 516
У меня на другом компьютере тоже не воспроизводится. Видимо обновился некорректно. Перед установкой OpenSCADA надо будет удалить старую установку полностью.

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 22. 03. 2010 [11:05]
almaz
Almaz Karimov
Contributor
Topic creator
registered since: 25.09.2008
Posts: 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.

[This article was edited 1 times, at last 22.03.2010 at 11:36.]

21 век - век повсеместной автоматизации. Главное - во благо всем людям.
Written on: 22. 03. 2010 [13:55]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
almaz wrote:

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

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

almaz wrote:

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

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

Learn, learn and learn better than work, work and work.
Written on: 22. 03. 2010 [15:45]
almaz
Almaz Karimov
Contributor
Topic creator
registered since: 25.09.2008
Posts: 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 век - век повсеместной автоматизации. Главное - во благо всем людям.



16764