OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 24 Июнь, 2017 15:12

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Массив
СообщениеДобавлено: Понедельник, 09 Январь, 2017 19:49 

Зарегистрирован: Суббота, 26 Ноябрь, 2016 17:01
Сообщения: 14
В документации написано, как создавать массив, но я не нашёл, как "вручную" добавить значения в массив.
Сегодня у меня получилось добавить (см.код внизу), но возможно, кто-то сможет подсказать, как правильно можно это сделать?

Мой модуль:
Код:
MODULE MyArray;
   IMPORT  In := i21sysIn, Log, Math;
   
PROCEDURE  Array*;
      VAR 
         x: REAL;
         s: ARRAY 8 OF REAL;
         i: INTEGER;
   BEGIN
      In.OpenCommander;   ASSERT( In.done );
      FOR i := 0 TO 7 DO
         In.Real( x );   ASSERT( In.done );  (*Log.Real( x );*)
         s[i] := x;
         Log.Real(s[i]);
         Log.Ln;   
      END;
      
   END Array;

BEGIN   
END MyArray.

(Командер)MyArray.Array 0 0.1 0.3 0.8 1 1 0.5 0


Вывод:
Код:
 0.0
 0.1
 0.3
 0.8
 1.0
 1.0
 0.5
 0.0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Понедельник, 09 Январь, 2017 21:49 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 1822
Откуда: Красноярск
Правильно будет вот так:
Код:
    MODULE MyArray;
       IMPORT Log;

    PROCEDURE  Array*;
          VAR
             s: ARRAY 8 OF REAL;
             i: INTEGER;
       BEGIN
              s[0] := 0;
              s[1] := 0.1;
              s[2] := 0.3;
              s[3] := 0.8;
              s[4] := 1;
              s[5] := 1;
              s[6] := 0.5;
              s[7] := 0;
          FOR i := 0 TO 7 DO
             Log.Real(s[i]); Log.Ln;   
          END;
         
       END Array;
 
    END MyArray.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Вторник, 10 Январь, 2017 08:06 

Зарегистрирован: Суббота, 26 Ноябрь, 2016 17:01
Сообщения: 14
Спасибо, но я думал, что можно, как-то проще, в одну строку.

С другой стороны, я планирую вводить массив из формы или файла, а это уже совсем другая история.

Чтобы два раза не вставать, а как правильно (минимально по коду) задать МНОЖЕСТВО:
{0,1,2,3,4,5,6,7,8,9} и вывести его?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Вторник, 10 Январь, 2017 10:28 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7560
Откуда: Троицк, Москва
StdLog.Set( {0 .. 9} )


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Вторник, 10 Январь, 2017 11:56 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 154
Откуда: Украина, Днепропетровская обл.
qrkx, в одну строку тоже можно, но это сомнительный вариант. Надо написать отдельный парсер. А потом как-то так:
Код:
ParseReal(realarr, "0 0.1 0.3 0.8 1 1 0.5 0");
Такой способ я видел в каком-то из компиляторов Оберона-07, там так задавались машинные команды в шестнадцатеричном коде. Но, понятно, дополнительные накладные расходы на парсинг.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Вторник, 10 Январь, 2017 15:08 

Зарегистрирован: Суббота, 26 Ноябрь, 2016 17:01
Сообщения: 14
Спасибо за ответы, но я остаюсь озадаченым.
Получается, что отсутствие возможности вручную записать массив или множество - это благо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Вторник, 10 Январь, 2017 16:21 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8730
Откуда: Россия, Орёл
Вы, видимо, имели опыт интерпретируемых-скриптовых языков?

Смотрите.
Для языка со статической системой типов.
Если можно задавать массив как-то конструкцией, как целое - это будет, во-первых, литералы массивового типа. Во-вторых, появляются константы массивового типа. Вопросы, что это ещё влечёт в языке.
По сути, для ARRAY OF CHAR так и сделано: строка как литерал, возможность объявить константу этого типа.
Для массивов остальных типов...
А что дальше? Вводить конструкцию, которая будет уже собирать значение не просто из литералов, а из переменных?
Проследите цепь нагромождений.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Вторник, 10 Январь, 2017 17:45 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 315
Но автор говорит не о литералах/константных массивах, а об инициализации массива одной строкой.
Впрочем, и константные массивы и инициализаторы есть во всех языках, авторы которых заботятся об эффективности и удобстве разработки, а не о том, как придумать такой язык, компилятор которого студиозус мог бы реализовать за обозримое время.
Вот как понадобилось, так для Активного Оберона и математическое расширение сделали и инициализацию массивов, ибо без него это и не расширение получается.
Правильный подход, это когда компилятор берет на себя работу, которая, в общем-то к программированию и не относится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Вторник, 10 Январь, 2017 18:34 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7560
Откуда: Троицк, Москва
Расширение Активного Оберона -- это эксперимент + тема для кандидатской. Надо же придумывать темы аспирантам.

Эти расширения для массивов проверялись на моей реальной системке еще при разработке. Там пяток строк сократилось из порядка тысячи. Овчинка выделки не стоила.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Вторник, 10 Январь, 2017 20:15 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8730
Откуда: Россия, Орёл
Kemet писал(а):
Правильный подход, это когда компилятор берет на себя работу, которая, в общем-то к программированию и не относится.


Правильный подход, когда любую специализированную работу на себя берёт соответствующая библиотека.

У меня, например, есть библиотечные "enum-ы" (на секундочку, да, статически декларируемые, с контролем компилятором и т.п.), метавозможности которых (типа уникального кодирования, сериализации, деревьев аля "онтологии", доп. атрибуты) ни в какой язык-компилятор не втиснуть. А втиснуть - год реализовывать, десять лет популяризовать, потом осознаешь, что всё надо по-другому, а ещё десять лет жалко - и проще выкинуть.

(Коллеги, кто был на Дне Оберона, видели).


Последний раз редактировалось Илья Ермаков Вторник, 10 Январь, 2017 21:36, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Вторник, 10 Январь, 2017 21:14 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7560
Откуда: Троицк, Москва
День Оберона пишется с большой буквы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Среда, 11 Январь, 2017 04:13 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 315
хрень, типа уникального кодирования, сериализации, деревьев аля "онтологии", доп. атрибутов и т.п, действительно нужно помещать в библиотеки, помещение этого в компилятор говорило бы о проблемах с головой у разработчиках. Впрочем это никто в компиляторы и не помещает.
Однако я говорил совершенно о другом.
И если это не понятно, то, наверное, нужно активно позаниматься другими языками программирования и ide, возможно, тогда станет понятно, почему пользователей оберонов исчезающе мало.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Среда, 11 Январь, 2017 04:25 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 315
Info21 писал(а):
Расширение Активного Оберона -- это эксперимент + тема для кандидатской. Надо же придумывать темы аспирантам.

Эти расширения для массивов проверялись на моей реальной системке еще при разработке. Там пяток строк сократилось из порядка тысячи. Овчинка выделки не стоила.
Это же по заказу было сделано и используется в коммерческой системе, поэтому синтаксис был заимствован из матлаба.
Сокращение на пяток строк говорит о том, что что-то пошло не так, видимо это сокращение происходило через не могу/не хочу/не буду/это не по оберонвски/это нарушает мои представления о мире и тп. Потому что у других таки сокращение получается значительным. Впрочем, мат расширение Активного Оберона это не столько про сокращение записи, сколько про упрощение и понятность записи, и производительность, так как время вычислений может снижаться на пару порядков.
Ну, для академических вычислений, конечно, можно и пару дней результат вычислений подождать, не велика беда.
Но ведь задачи и другие бывают.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Среда, 11 Январь, 2017 08:34 
Аватара пользователя

Зарегистрирован: Вторник, 28 Август, 2007 00:55
Сообщения: 154
Откуда: Украина, Днепропетровская обл.
В Ofront+ для BlackBox Олег Комлев реализовал константные массивы. Идея взята из Оберона для Амиги (Amiga-Oberon v3.11, F. Siebert / A+L AG). Работа с ними выглядит так:
Код:
  TYPE TheClocks = ARRAY 10 OF INTEGER;
  CONST AnimClockData = TheClocks(
    00400, 00070, 00000, 00700, 00100, 00380, 00000, 00700, 03008, 00000);

Конечно транслятор при этом усложнился. Но расширение полезное, чтобы эффективно задавать данные в коде, а не присваивать поэлементно или считывать из внешних ресурсов (что будет неприемлемо, например, при разработке для микроконтроллеров).

Илья прав, появились дополнительные сложности. Так что, наверное, в подчёркнуто простом языке программирования, каким является, например, Оберон-07, они не нужны просто из стремления к простоте транслятора, языка и концепта в целом. Это вопрос философии минимализма. Во что выливается стремление удобно задавать массивы скопом? В такое же желание иметь возможность задавать константные записи, тогда их элементы тоже будут считаться константами, и понеслось. Понимаете, qrkx? Простота утекает, накапливается сложность, и потом мы в ней тонем. А какой язык использовать - каждый решает для себя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Среда, 11 Январь, 2017 08:43 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7560
Откуда: Троицк, Москва
Можно подумать, что коммерсанты понимают, что они программерам заказывают.

По моему опыту -- что первые, что вторые в подавляющем большинстве изрядные долбо*бы, несмотря на всю свою, нередко нерядовую смекалистость. Одно другому ведь не мешает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Среда, 11 Январь, 2017 09:25 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 899
Kemet писал(а):
Но автор говорит не о литералах/константных массивах, а об инициализации массива одной строкой.

А чем ещё можно проинициализировать массив?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Среда, 11 Январь, 2017 09:47 

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7560
Откуда: Троицк, Москва
Прошу прощения: моё утверждение не должно быть ограничено коммерсантами и программерами, оно совершенно общее. Просто в данном контексте именно из этих двух категорий обобщённо лепятся неземные авторитеты.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Среда, 11 Январь, 2017 12:50 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 315
Trurl писал(а):
Kemet писал(а):
Но автор говорит не о литералах/константных массивах, а об инициализации массива одной строкой.

А чем ещё можно проинициализировать массив?

Прошу прощения, это остатки более длинного сообщения, после неудачного редактирования.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Среда, 11 Январь, 2017 12:55 

Зарегистрирован: Вторник, 26 Январь, 2010 09:31
Сообщения: 315
Info21 писал(а):
Можно подумать, что коммерсанты понимают, что они программерам заказывают.

По моему опыту -- что первые, что вторые в подавляющем большинстве изрядные долбо*бы, несмотря на всю свою, нередко нерядовую смекалистость. Одно другому ведь не мешает.

Не мешает.
Но дело не в понимании, а в в потребностях.
Если я получу результат через пару дней, а некто за пару часов, я могу катастрофически опоздать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Массив
СообщениеДобавлено: Среда, 11 Январь, 2017 13:15 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8730
Откуда: Россия, Орёл
Kemet писал(а):
Однако я говорил совершенно о другом.
И если это не понятно, то, наверное, нужно активно позаниматься другими языками программирования и ide, возможно, тогда станет понятно, почему пользователей оберонов исчезающе мало.


Kemet, а я не знаю из серьёзных участников форума никого, кто не имел бы многолетнего различного опыта в "других языках программирования и ide".
Всё это сто раз обсуждалось. Разумеется, есть общеличностные (общекогнитивные в том числе, хотя и не только) установки тоже, которые приводят к тому, что кому-то чего-то не хватает (а хочется взять и пользовать), а кого-то наоборот раздражает избыток, наваленный без понимания (а хочется выкинуть большую часть и продумать с чистого листа).

Безусловно, если отбросить часть, что кто-то чего-то не понимает, а говорить только о понимающей части, то есть и ролевая матрица: кто-то должен, действительно, решать те задачи, где надо прямо сегодня, сейчас и быстро. И психологически ему эти задачи подходят. А кто-то должен сидеть и втыкать, как всё перебрать и сделать не через одно место. И психологически ему это подходит.
Беда бывает, когда первые забывают, что накапливается инженерный долг (всё, что сделано через одно место, надо при первой возможности переделывать через нормальное).
Также беда бывает, когда задача, требующая "прямо сейчас", падает на человека второго типа.
Да что говорить, там наверняка даже на уровне гормональном отличия у этих типов (А - адреналин - хватай-атакуй-беги, Б - кортизол - затаись-понаблюдай-подумай). Info21 поправит, как знаток этой темы.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 52 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2017, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB