OberonCore
https://forum.oberoncore.ru/

Массив
https://forum.oberoncore.ru/viewtopic.php?f=35&t=5991
Страница 1 из 4

Автор:  Sergey Volkov [ Понедельник, 09 Январь, 2017 19:49 ]
Заголовок сообщения:  Массив

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

Мой модуль:
Код:
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

Автор:  Иван Денисов [ Понедельник, 09 Январь, 2017 21:49 ]
Заголовок сообщения:  Re: Массив

Правильно будет вот так:
Код:
    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.

Автор:  Sergey Volkov [ Вторник, 10 Январь, 2017 08:06 ]
Заголовок сообщения:  Re: Массив

Спасибо, но я думал, что можно, как-то проще, в одну строку.

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

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

Автор:  Info21 [ Вторник, 10 Январь, 2017 10:28 ]
Заголовок сообщения:  Re: Массив

StdLog.Set( {0 .. 9} )

Автор:  Oleg N. Cher [ Вторник, 10 Январь, 2017 11:56 ]
Заголовок сообщения:  Re: Массив

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

Автор:  Sergey Volkov [ Вторник, 10 Январь, 2017 15:08 ]
Заголовок сообщения:  Re: Массив

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

Автор:  Илья Ермаков [ Вторник, 10 Январь, 2017 16:21 ]
Заголовок сообщения:  Re: Массив

Вы, видимо, имели опыт интерпретируемых-скриптовых языков?

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

Автор:  Kemet [ Вторник, 10 Январь, 2017 17:45 ]
Заголовок сообщения:  Re: Массив

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

Автор:  Info21 [ Вторник, 10 Январь, 2017 18:34 ]
Заголовок сообщения:  Re: Массив

Расширение Активного Оберона -- это эксперимент + тема для кандидатской. Надо же придумывать темы аспирантам.

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

Автор:  Илья Ермаков [ Вторник, 10 Январь, 2017 20:15 ]
Заголовок сообщения:  Re: Массив

Kemet писал(а):
Правильный подход, это когда компилятор берет на себя работу, которая, в общем-то к программированию и не относится.


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

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

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

Автор:  Info21 [ Вторник, 10 Январь, 2017 21:14 ]
Заголовок сообщения:  Re: Массив

День Оберона пишется с большой буквы.

Автор:  Kemet [ Среда, 11 Январь, 2017 04:13 ]
Заголовок сообщения:  Re: Массив

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

Автор:  Kemet [ Среда, 11 Январь, 2017 04:25 ]
Заголовок сообщения:  Re: Массив

Info21 писал(а):
Расширение Активного Оберона -- это эксперимент + тема для кандидатской. Надо же придумывать темы аспирантам.

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

Автор:  Oleg N. Cher [ Среда, 11 Январь, 2017 08:34 ]
Заголовок сообщения:  Re: Массив

В 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? Простота утекает, накапливается сложность, и потом мы в ней тонем. А какой язык использовать - каждый решает для себя.

Автор:  Info21 [ Среда, 11 Январь, 2017 08:43 ]
Заголовок сообщения:  Re: Массив

Можно подумать, что коммерсанты понимают, что они программерам заказывают.

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

Автор:  Trurl [ Среда, 11 Январь, 2017 09:25 ]
Заголовок сообщения:  Re: Массив

Kemet писал(а):
Но автор говорит не о литералах/константных массивах, а об инициализации массива одной строкой.

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

Автор:  Info21 [ Среда, 11 Январь, 2017 09:47 ]
Заголовок сообщения:  Re: Массив

Прошу прощения: моё утверждение не должно быть ограничено коммерсантами и программерами, оно совершенно общее. Просто в данном контексте именно из этих двух категорий обобщённо лепятся неземные авторитеты.

Автор:  Kemet [ Среда, 11 Январь, 2017 12:50 ]
Заголовок сообщения:  Re: Массив

Trurl писал(а):
Kemet писал(а):
Но автор говорит не о литералах/константных массивах, а об инициализации массива одной строкой.

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

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

Автор:  Kemet [ Среда, 11 Январь, 2017 12:55 ]
Заголовок сообщения:  Re: Массив

Info21 писал(а):
Можно подумать, что коммерсанты понимают, что они программерам заказывают.

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

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

Автор:  Илья Ермаков [ Среда, 11 Январь, 2017 13:15 ]
Заголовок сообщения:  Re: Массив

Kemet писал(а):
Однако я говорил совершенно о другом.
И если это не понятно, то, наверное, нужно активно позаниматься другими языками программирования и ide, возможно, тогда станет понятно, почему пользователей оберонов исчезающе мало.


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

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

Страница 1 из 4 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/