Українська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
Повідомлення: 3750
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
Повідомлення: 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.
Повідомлення створено: 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
Повідомлення: 3750
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 век - век повсеместной автоматизации. Главное - во благо всем людям.



11043