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

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


cp:edu-school

Это старая версия документа!


Компонентный Паскаль в школьном курсе информатики

Тезис пионера советской информатики академика А.П. Ершова “Программирование — вторая грамотность” не потерял своей актуальности и в наши дни. Более того, быстрое развитие высоких технологий в мире и в России увеличивает спрос на ИТ-специалистов высшей квалификации.

Однако в школьной информатике сегодня наблюдается определенный отход от направления, заданного А.П. Ершовым, подмена программирования курсом ИКТ. А там, где программирование все же преподается, нередко используются либо безнадежно устаревшие языки и среды, либо неимоверно тяжеловесные коммерческие системы.

Автор семейства языков профессор Н.Вирт говорит: “Как профессионалы в информатике, мы обязаны поднять свои голоса против традиции, приравнявшей компьютерную грамотность к знанию темных деталей языка программирования, используемого в индустрии.

Конечной целью образования должно быть искусство конструктивного мышления. Именно в таком контексте становится важным наличие хорошо спроектированного языка программирования …хороший дизайн должен быть в центре нашего преподавания. Но как нам учить образцовому дизайну с помощью инструментов и языков, которые делают нас посмешищем? К нашему сожалению, индустрия программирования сделала не много, чтобы помочь нам, преподавателям, преодолеть наши трудности” [1].

Происходящий сегодня перевод российских школ на свободное ПО дает еще один повод серьезно подумать о том, что взять на перспективу в качестве бесплатной современной учебной среды для преподавания основ алгоритмизации и программирования. К сожалению, российские разработчики трансляторов пока ничего достойного в этом плане не предлагают. Придется обратиться к мировому опыту. Однако и здесь, как справедливо отмечает Н.Вирт, тоже негусто. Но по крайней мере одно удачное решение уверенно можно назвать. Это язык Компонентный Паскаль (Component Pascal) и среда его реализации Блэкбокс (BlackBox Component Builder) швейцарской фирмы Oberon Microsystems [2]. Среда идеально подходит для сквозного курса программирования, начиная со средних классов школы и заканчивая средними курсами университетов. Распространяется бесплатно вместе с исходными текстами.

Среда не требует установки, допускает модификацию, дополнение, расширение и полную перекомпиляцию. Работает под управлением Windows 95’XP и Linux с эмулятором Wine. Ведутся работы по полному переносу среды на платформу Linux.

Российские специалисты приняли активное участие в развитии и русификации среды [3]. Дополнительные удобства для преподавания предоставляет серия подсистем под общим названием Info21 Ф.В. Ткачева.

Разработана облегченная, школьная версия Блэкбокса. Ее основное отличие заключается в отсутствии некоторых подсистем, использование которых в школе не представляется возможным. И включено три полезных, на наш взгляд, подсистемы, не входящих в базовую поставку: инструментальная панель с пиктограммами, исполнитель “черепашка” и просмотрщик файлов. Кроме того, внесен ряд изменений в настройки для обеспечения большего удобства начинающим пользователям. Имеется русскоязычная документация, меню, диалоговые формы и сообщения компилятора. В архивированном виде среда занимает всего около 5 Мб.

Новосибирской фирмой Excelsior разработан профессиональный оптимизирующий компилятор XDS языков Modula-2/Oberon-2, с 2005 года ставший бесплатным и полноценно работающий на платформах Windows и Linux (https://www.excelsior.ru/products/xds).

Язык Component Pascal представляет собой немного дополненный Oberon-2. Для подавляющего большинства школьных учебных примеров исходные тексты программ на этих языках идентичны.

В сети Интернет есть несколько сайтов, на которых размещены обсуждаемые материалы:

— Блэкбокс можно скачать с сайта разработчиков: https://blackbox.oberon.org;

— сайт общественного проекта, посвященного обновлению основ преподавания программирования в школах и вузах: https://informatika-21.ru/. Здесь можно найти версии Блэкбокса для школ и для вузов, статьи ученых и преподавателей, адреса коллег;

— сайт поддержки Блэкбокса в России (г. Орел) https://www.oberoncore.ru и форум для вопросов и обсуждений https://forum.oberoncore.ru;

— коллекция алгоритмов и программных компонентов: https://www.zinnamturm.eu

В школьной версии Блэкбокса представлена новая реализация известного исполнителя “черепашка”, выполненная на Компонентном Паскале. Программа управления черепашкой пишется полностью на нем же, что принципиально отличается от подхода, принятого в “ЛогоМирах”. Это является большим преимуществом ввиду острой нехватки учебных часов, выделяемых на изучение азов алгоритмизации, поскольку при переходе от работы с исполнителем к изучению “настоящего”, более абстрактного программирования ученикам не придется осваивать новый язык и среду разработки. Кроме того, учащиеся становятся в силах сами расширять ассортимент команд черепашки, что существенно повышает интерес к занятиям.

Отличия

Покажем основные особенности Компонентного Паскаля в сравнении с Turbo Pascal.

Все ключевые слова пишутся в верхнем регистре (большими буквами). Большие и маленькие (прописные и строчные) буквы везде различаются, т.е. в именах переменных, констант, типов, процедур и модулей. Например, INTEGER и Integer — это разные имена.

Оператор присваивания ничем не отличается. Основные алгоритмические конструкции изменились мало и стали удобнее. При написании блочных операторов больше не требуется ключевое слово begin.

Turbo Pascal Компонентный Паскаль
if ... then begin
 ...        end
else begin ... end
IF ... THEN
       ELSE
END 
while ... do begin
...
end
WHILE ... DO
...
END
for i := 1 to 10 do
begin
...
end
FOR I  := 1 TO 10 DO
 ...
END

Появилась возможность соединять несколько IF-ов в цепочку с помощью ELSIF:

IF … THEN … ELSIF … THEN … ELSIF … THEN … ELSE … END

В цикле 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

Способ объявления переменных не изменился:

VAR a, b: REAL; i, k: INTEGER;

            ch: CHAR;
            

Работа с массивами изменилась, но незначительно. Первый элемент массива всегда имеет индекс 0. При объявлении массива указывается не диапазон индексов, а количество элементов:

VAR d: ARRAY 20 OF INTEGER;

Для определения длины массива в программе используется стандартная процедура LEN(d). Например, чтобы обнулить массив d, можно воспользоваться следующим циклом:

FOR i := 0 TO LEN(d)-1 DO d[i]:= 0 END;

или

i := 0;

WHILE i < LEN(d) DO d[i]:= 0; INC(i) END;

Для объявления двухмерного массива используется конструкция следующего вида:

VAR table: ARRAY 3, 15 OF INTEGER;

или

VAR table: ARRAY 3 OF ARRAY 15 OF INTEGER;

Узнать размер многомерного массива по любому измерению можно так:

i := LEN(table, 0); (* i = 3, число строк в массиве table *)

k := LEN(table, 1); (* k = 15, число столбцов в массиве table *)

Компонентный Паскаль корректно работает с многомерными динамическими массивами. Динамический массив объявляется с помощью указателя:

VAR a: POINTER TO ARRAY OF INTEGER;

VAR b: POINTER TO ARRAY OF ARRAY OF REAL;

Непосредственно перед использованием массива его необходимо разместить в памяти специальным оператором, указывая нужный в данный момент размер:

NEW(a, n); NEW(b, x, y);

В остальном приемы работы с динамическими и статическими массивами совпадают, в том числе производится автоматический контроль выхода индексов за границы.

При объявлении функций не используется ключевое слово function, вместо этого процедурам разрешено возвращать значение с помощью оператора RETURN.

Turbo Pascal Компонентный Паскаль
function sqr (a: real):nreal;
begin
   sqr := a*a
end;
PROCEDURE Sqr (a: REAL): REAL;
BEGIN
   RETURN a*a
END Sqr;

Обратите внимание, что имя процедуры должно быть повторено после завершающего END.

Программный модуль

Строительными блоками программ являются модули, пришедшие на смену unit’ам. Модуль — это единица компиляции и загрузки/выгрузки, расположенная, как правило, в отдельном файле. Общий вид исходного текста модуля покажем на примере:

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 МоиПример.

оригинал https://inf.1sept.ru/article.php?ID=200800100

cp/edu-school.1656779879.txt.gz · Последнее изменение: 2022/07/02 19:37 — iadenisov