Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия Следующая версия Следующая версия справа и слева | ||
cp:edu-school [2022/07/02 19:25] iadenisov создано |
cp:edu-school [2022/07/02 19:47] iadenisov [Программный модуль] |
||
---|---|---|---|
Строка 17: | Строка 17: | ||
Разработана облегченная, | Разработана облегченная, | ||
- | Новосибирской фирмой Excelsior разработан профессиональный оптимизирующий компилятор XDS языков Modula-2/ | + | Новосибирской фирмой Excelsior разработан профессиональный оптимизирующий компилятор XDS языков Modula-2/ |
Язык Component Pascal представляет собой немного дополненный Oberon-2. Для подавляющего большинства школьных учебных примеров исходные тексты программ на этих языках идентичны. | Язык Component Pascal представляет собой немного дополненный Oberon-2. Для подавляющего большинства школьных учебных примеров исходные тексты программ на этих языках идентичны. | ||
Строка 23: | Строка 23: | ||
В сети Интернет есть несколько сайтов, | В сети Интернет есть несколько сайтов, | ||
- | — оригинальный (англоязычный) | + | — Блэкбокс можно скачать с сайта разработчиков: |
- | — сайт общественного проекта, | + | — сайт общественного проекта, |
- | — сайт поддержки Блэкбокса в России (г. Орел) | + | — сайт поддержки Блэкбокса в России (г. Орел) |
- | www.oberoncore.ru | + | — коллекция алгоритмов и программных компонентов: https://www.zinnamturm.eu |
- | — коллекция алгоритмов и программных компонентов: | ||
- | |||
- | — сайт факультета информатики Томского государственного университета (отсюда можно скачать школьный Блэкбокс, | ||
В школьной версии Блэкбокса представлена новая реализация известного исполнителя “черепашка”, | В школьной версии Блэкбокса представлена новая реализация известного исполнителя “черепашка”, | ||
Строка 68: | Строка 65: | ||
Появилась возможность соединять несколько IF-ов в цепочку с помощью ELSIF: < | Появилась возможность соединять несколько IF-ов в цепочку с помощью ELSIF: < | ||
+ | |||
+ | |||
+ | В цикле FOR появилась возможность указывать величину шага, отличную от единицы, | ||
+ | |||
+ | FOR i := 0 TO -10 BY -2 DO … END. | ||
+ | |||
+ | Цикл REPEAT … UNTIL не изменился. | ||
+ | |||
+ | Основные типы и их диапазоны: | ||
+ | |||
+ | ^ Тип ^ Диапазон значений ^ | ||
+ | | BOOLEAN | FALSE ... TRUE | | ||
+ | | CHAR | 0X .. 0FFFFX | | ||
+ | | BYTE | -128 .. 127 | | ||
+ | | INTEGER | -2147483648 .. -2147483647 | | ||
+ | | LONGINT | -9223372036854775808 .. -9223372036854775807 | | ||
+ | | REAL | -1.797693134862316E+308 ... 1.797693134862316E+308, | ||
+ | | SET | подмножество из 0 .. 31 | | ||
+ | |||
+ | Способ объявления переменных не изменился: | ||
+ | |||
+ | < | ||
+ | ch: CHAR;</ | ||
+ | | ||
+ | Работа с массивами изменилась, | ||
+ | |||
+ | < | ||
+ | |||
+ | Для определения длины массива в программе используется стандартная процедура LEN(d). Например, | ||
+ | |||
+ | < | ||
+ | |||
+ | или | ||
+ | |||
+ | < | ||
+ | |||
+ | WHILE i < LEN(d) DO d[i]:= 0; INC(i) END;</ | ||
+ | |||
+ | Для объявления двухмерного массива используется конструкция следующего вида: | ||
+ | |||
+ | < | ||
+ | |||
+ | или | ||
+ | |||
+ | < | ||
+ | |||
+ | Узнать размер многомерного массива по любому измерению можно так: | ||
+ | |||
+ | i := LEN(table, 0); (* i = 3, число строк в массиве table *) | ||
+ | |||
+ | k := LEN(table, 1); (* k = 15, число столбцов в массиве table *) | ||
+ | |||
+ | Компонентный Паскаль корректно работает с многомерными динамическими массивами. Динамический массив объявляется с помощью указателя: | ||
+ | |||
+ | < | ||
+ | |||
+ | VAR b: POINTER TO ARRAY OF ARRAY OF REAL;</ | ||
+ | |||
+ | Непосредственно перед использованием массива его необходимо разместить в памяти специальным оператором, | ||
+ | |||
+ | NEW(a, n); NEW(b, x, y); | ||
+ | |||
+ | В остальном приемы работы с динамическими и статическими массивами совпадают, | ||
+ | |||
+ | При объявлении функций не используется ключевое слово function, вместо этого процедурам разрешено возвращать значение с помощью оператора RETURN. | ||
+ | |||
+ | ^ Turbo Pascal ^ Компонентный Паскаль ^ | ||
+ | | < | ||
+ | begin | ||
+ | sqr := a*a | ||
+ | end;</ | ||
+ | BEGIN | ||
+ | | ||
+ | END Sqr;</ | ||
+ | |||
+ | Обратите внимание, | ||
+ | |||
+ | ===== Программный модуль ===== | ||
+ | |||
+ | |||
+ | Строительными блоками программ являются модули, | ||
+ | |||
+ | |||
+ | < | ||
+ | |||
+ | IMPORT In, L := StdLog; | ||
+ | |||
+ | PROCEDURE Делать*; | ||
+ | VAR | ||
+ | x, n: INTEGER; | ||
+ | a: ARRAY 25 OF INTEGER; | ||
+ | BEGIN | ||
+ | In.Open; In.Int(n); | ||
+ | IF n < LEN(a) THEN | ||
+ | FOR x := 0 TO n - 1 DO | ||
+ | In.Int(a[x]) | ||
+ | END; | ||
+ | FOR x := n - 1 TO 0 BY -1 DO | ||
+ | L.Int(a[x]) | ||
+ | END | ||
+ | ELSE | ||
+ | L.String(" | ||
+ | L.Ln | ||
+ | END | ||
+ | END Делать; | ||
+ | |||
+ | END МоиПример.</ | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Вместо ключевого слова uses в Компонентном Паскале используется слово IMPORT, после которого перечисляются имена используемых модулей. При импорте длинному имени модуля можно задать краткий синоним-замену. В нашем примере имени StdLog мы назначили замену “L”. Этот прием может быть очень полезен потому, | ||
+ | |||
+ | Компиляция и выгрузка модуля в школьной версии Блэкбокса производится нажатием клавиши F8 или выбором пункта “Компилировать и выгрузить” в меню “Разработка”. Выгрузка нужна для того, чтобы при успешной компиляции старая версия машинного кода модуля была заменена в памяти на новую. Компиляция происходит очень быстро, | ||
+ | |||