Инструменты пользователя

Инструменты сайта


cp:edu-school

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
cp:edu-school [2022/07/02 19:29]
iadenisov
cp:edu-school [2022/07/02 19:47]
iadenisov [Программный модуль]
Строка 23: Строка 23:
 В сети Интернет есть несколько сайтов, на которых размещены обсуждаемые материалы: В сети Интернет есть несколько сайтов, на которых размещены обсуждаемые материалы:
  
-— оригинальный (англоязычный) Блэкбокс можно скачать с сайта разработчиков: https://blackboxframework.org;+— Блэкбокс можно скачать с сайта разработчиков: https://blackbox.oberon.org;
  
 — сайт общественного проекта, посвященного обновлению основ преподавания программирования в школах и вузах: https://informatika-21.ru/. Здесь можно найти версии Блэкбокса для школ и для вузов, статьи ученых и преподавателей, адреса коллег; — сайт общественного проекта, посвященного обновлению основ преподавания программирования в школах и вузах: https://informatika-21.ru/. Здесь можно найти версии Блэкбокса для школ и для вузов, статьи ученых и преподавателей, адреса коллег;
Строка 65: Строка 65:
  
 Появилась возможность соединять несколько IF-ов в цепочку с помощью ELSIF: <code>IF … THEN … ELSIF … THEN … ELSIF … THEN … ELSE … END</code> Появилась возможность соединять несколько IF-ов в цепочку с помощью ELSIF: <code>IF … THEN … ELSIF … THEN … ELSIF … THEN … ELSE … END</code>
 +
 +
 +В цикле FOR появилась возможность указывать величину шага, отличную от единицы, с помощью ключевого слова BY:
 +
 +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, INF |
 +| SET | подмножество из 0 .. 31 |
 +
 +Способ объявления переменных не изменился:
 +
 +<code>VAR a, b: REAL; i, k: INTEGER;
 +             ch: CHAR;</code>
 +              
 +Работа с массивами изменилась, но незначительно. Первый элемент массива всегда имеет индекс 0. При объявлении массива указывается не диапазон индексов, а количество элементов:
 +
 +<code>VAR d: ARRAY 20 OF INTEGER;</code>
 +
 +Для определения длины массива в программе используется стандартная процедура LEN(d). Например, чтобы обнулить массив d, можно воспользоваться следующим циклом:
 +
 +<code>FOR i := 0 TO LEN(d)-1 DO d[i]:= 0 END;</code>
 +
 +или
 +
 +<code>i := 0;
 +
 +WHILE i < LEN(d) DO d[i]:= 0; INC(i) END;</code>
 +
 +Для объявления двухмерного массива используется конструкция следующего вида:
 +
 +<code>VAR table: ARRAY 3, 15 OF INTEGER;</code>
 +
 +или
 +
 +<code>VAR table: ARRAY 3 OF ARRAY 15 OF INTEGER;</code>
 +
 +Узнать размер многомерного массива по любому измерению можно так:
 +
 +i := LEN(table, 0); (* i = 3, число строк в массиве table *)
 +
 +k := LEN(table, 1); (* k = 15, число столбцов в массиве table *)
 +
 +Компонентный Паскаль корректно работает с многомерными динамическими массивами. Динамический массив объявляется с помощью указателя:
 +
 +<code>VAR a: POINTER TO ARRAY OF INTEGER;
 +
 +VAR b: POINTER TO ARRAY OF ARRAY OF REAL;</code>
 +
 +Непосредственно перед использованием массива его необходимо разместить в памяти специальным оператором, указывая нужный в данный момент размер:
 +
 +NEW(a, n); NEW(b, x, y);
 +
 +В остальном приемы работы с динамическими и статическими массивами совпадают, в том числе производится автоматический контроль выхода индексов за границы.
 +
 +При объявлении функций не используется ключевое слово function, вместо этого процедурам разрешено возвращать значение с помощью оператора RETURN.
 +
 +^ Turbo Pascal ^ Компонентный Паскаль ^
 +| <code>function sqr (a: real):nreal;
 +begin
 +   sqr := a*a
 +end;</code> | <code>PROCEDURE Sqr (a: REAL): REAL;
 +BEGIN
 +   RETURN a*a
 +END Sqr;</code> |
 +
 +Обратите внимание, что имя процедуры должно быть повторено после завершающего END.
 +
 +===== Программный модуль =====
 +
 +
 +Строительными блоками программ являются модули, пришедшие на смену unit’ам. Модуль — это единица компиляции и загрузки/выгрузки, расположенная, как правило, в отдельном файле. Общий вид исходного текста модуля покажем на примере:
 +
 +
 +<code>MODULE МоиПример;
 +
 +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("Слишком большое n.");
 +    L.Ln
 +  END
 +END Делать;
 +
 +END МоиПример.</code>
 +
 +{{:cp:commander.gif|}} МоиПример.Делать 6 0 -58 39 14 2 3 
 +
 +Вместо ключевого слова uses в Компонентном Паскале используется слово IMPORT, после которого перечисляются имена используемых модулей. При импорте длинному имени модуля можно задать краткий синоним-замену. В нашем примере имени StdLog мы назначили замену “L”. Этот прием может быть очень полезен потому, что в Компонентном Паскале (в отличие от Turbo Pascal) всякий вызов процедуры, импортированной из другого модуля, должен сопровождаться указанием модуля-экспортера. Необходимость указания имени модуля исключает возможную путаницу с одинаковыми именами процедур (или переменных), находящихся в разных модулях.
 +
 +Компиляция и выгрузка модуля в школьной версии Блэкбокса производится нажатием клавиши F8 или выбором пункта “Компилировать и выгрузить” в меню “Разработка”. Выгрузка нужна для того, чтобы при успешной компиляции старая версия машинного кода модуля была заменена в памяти на новую. Компиляция происходит очень быстро, поэтому ее рекомендуется использовать для постоянного самоконтроля при написании программы. Сообщения об ошибках выводятся в строку состояния и рабочий журнал, а в исходном тексте программы места ошибок отмечаются серыми перечеркнутыми квадратиками: 
 +
  
  
cp/edu-school.txt · Последнее изменение: 2022/07/02 20:03 — iadenisov