Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия Следующая версия Следующая версия справа и слева | ||
cp:edu-school [2022/07/02 19:37] iadenisov [Отличия] |
cp:edu-school [2022/07/02 19:53] iadenisov |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
====== Компонентный Паскаль в школьном курсе информатики ====== | ====== Компонентный Паскаль в школьном курсе информатики ====== | ||
- | Тезис пионера советской информатики академика А.П. Ершова | + | Тезис пионера советской информатики академика А.П. Ершова |
Однако в школьной информатике сегодня наблюдается определенный отход от направления, | Однако в школьной информатике сегодня наблюдается определенный отход от направления, | ||
- | Автор семейства языков профессор Н.Вирт говорит: | + | Автор семейства языков профессор Н. Вирт говорит: |
- | Конечной целью образования должно быть искусство конструктивного мышления. Именно в таком контексте становится важным наличие хорошо спроектированного языка программирования …хороший дизайн должен быть в центре нашего преподавания. Но как нам учить образцовому дизайну с помощью инструментов и языков, | + | Конечной целью образования должно быть искусство конструктивного мышления. Именно в таком контексте становится важным наличие хорошо спроектированного языка программирования …хороший дизайн должен быть в центре нашего преподавания. Но как нам учить образцовому дизайну с помощью инструментов и языков, |
Происходящий сегодня перевод российских школ на свободное ПО дает еще один повод серьезно подумать о том, что взять на перспективу в качестве бесплатной современной учебной среды для преподавания основ алгоритмизации и программирования. К сожалению, | Происходящий сегодня перевод российских школ на свободное ПО дает еще один повод серьезно подумать о том, что взять на перспективу в качестве бесплатной современной учебной среды для преподавания основ алгоритмизации и программирования. К сожалению, | ||
- | Среда не требует установки, | + | Среда не требует установки, |
Российские специалисты приняли активное участие в развитии и русификации среды [3]. Дополнительные удобства для преподавания предоставляет серия подсистем под общим названием Info21 Ф.В. Ткачева. | Российские специалисты приняли активное участие в развитии и русификации среды [3]. Дополнительные удобства для преподавания предоставляет серия подсистем под общим названием Info21 Ф.В. Ткачева. | ||
Строка 86: | Строка 86: | ||
Способ объявления переменных не изменился: | Способ объявления переменных не изменился: | ||
- | VAR a, b: REAL; i, k: INTEGER; | + | < |
- | ch: CHAR; | + | |
| | ||
Работа с массивами изменилась, | Работа с массивами изменилась, | ||
- | VAR d: ARRAY 20 OF INTEGER; | + | < |
Для определения длины массива в программе используется стандартная процедура LEN(d). Например, | Для определения длины массива в программе используется стандартная процедура LEN(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; | + | 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; | + | < |
Узнать размер многомерного массива по любому измерению можно так: | Узнать размер многомерного массива по любому измерению можно так: | ||
Строка 119: | Строка 119: | ||
Компонентный Паскаль корректно работает с многомерными динамическими массивами. Динамический массив объявляется с помощью указателя: | Компонентный Паскаль корректно работает с многомерными динамическими массивами. Динамический массив объявляется с помощью указателя: | ||
- | VAR a: POINTER TO ARRAY OF INTEGER; | + | < |
- | VAR b: POINTER TO ARRAY OF ARRAY OF REAL; | + | VAR b: POINTER TO ARRAY OF ARRAY OF REAL;</ |
Непосредственно перед использованием массива его необходимо разместить в памяти специальным оператором, | Непосредственно перед использованием массива его необходимо разместить в памяти специальным оператором, | ||
Строка 153: | Строка 153: | ||
PROCEDURE Делать*; | PROCEDURE Делать*; | ||
- | |||
VAR | 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 Делать; | ||
- | x, n: INTEGER; | + | END МоиПример.</ |
- | a: ARRAY 25 OF INTEGER; | + | {{:cp: |
- | BEGIN | + | Вместо ключевого слова uses в Компонентном Паскале используется слово IMPORT, после которого перечисляются имена используемых модулей. При импорте длинному имени модуля можно задать краткий синоним-замену. В нашем примере имени StdLog мы назначили замену “L”. Этот прием может быть очень полезен потому, |
- | In.Open; In.Int(n); | + | Компиляция и выгрузка модуля в школьной версии Блэкбокса производится нажатием клавиши F8 или выбором пункта “Компилировать и выгрузить” в меню “Разработка”. Выгрузка нужна для того, чтобы при успешной компиляции старая версия машинного кода модуля была заменена в памяти на новую. Компиляция происходит очень быстро, |
- | IF n < LEN(a) THEN | ||
- | FOR x := 0 TO n – 1 DO | + | Хотим особо подчеркнуть, |
- | In.Int(a[x]) | + | Рабочий журнал Блэкбокса — это универсальное средство вывода, |
+ | Ввод-вывод обычно осуществляется с помощью библиотечных процедур, | ||
+ | |||
+ | Начинающему программисту на первое время будет достаточно основных процедур вывода в журнал: | ||
+ | |||
+ | StdLog.Int (вывод целочисленного значения), | ||
+ | |||
+ | StdLog.Real (вывод вещественного значения), | ||
+ | |||
+ | StdLog.String (вывод строки), | ||
+ | |||
+ | StdLog.Ln (перевод строки). | ||
+ | |||
+ | Ввод данных из входного потока осуществляется с помощью одноименных “обратных” процедур модуля In: | ||
+ | |||
+ | In.Int (ввод целочисленного значения), | ||
+ | |||
+ | In.Real (ввод вещественного значения), | ||
+ | |||
+ | In.String (ввод строки). | ||
+ | |||
+ | При прогоне программы на различных наборах входных данных в Turbo Pascal последние приходится либо каждый раз вводить с клавиатуры, | ||
+ | |||
+ | |||
+ | ===== Среда разработки ===== | ||
+ | |||
+ | Блэкбокс — среда разработки программ, | ||
+ | |||
+ | Рис. 1. Иллюстрация возможностей Блэкбокса по встраиванию сторонних объектов | ||
+ | |||
+ | Текст документа может быть оформлен весьма разнообразно. Допускается использование разных шрифтовых оформлений — гарнитура, | ||
+ | |||
+ | — открывающий коммандер, | ||
+ | |||
+ | — закрывающий коммандер; | ||
+ | |||
+ | — командная кнопка, | ||
+ | |||
+ | — штамп даты-времени и номера версии, | ||
+ | |||
+ | — часы, отображают текущее время; | ||
+ | |||
+ | — текстовая складка, | ||
+ | |||
+ | — линейка для форматирования текста, | ||
+ | |||
+ | < | ||
+ | |||
+ | — действующая гиперссылка на другой документ, | ||
+ | |||
+ | < | ||
+ | |||
+ | <1>1. Введение<> | ||
+ | |||
+ | — действующая мишень. | ||
+ | Структура папок Блэкбокса | ||
+ | |||
+ | По соглашению, | ||
+ | |||
+ | Исходный модуль сохраняется в папке Mod подсистемы. Имя файла соответствует имени модуля, | ||
+ | |||
+ | Модули, | ||
+ | |||
+ | Модули, | ||
+ | |||
+ | Каждая папка подсистемы может содержать следующие вложенные папки (см. таблицу). | ||
+ | |||
+ | Code | ||
+ | Папка с исполняемыми кодовыми файлами. Расширение имен у таких файлов: | ||
+ | Docu | ||
+ | |||
+ | Папка с полностью документированными интерфейсами и другими документами. Например, | ||
+ | Mod Папка с исходными модулями. Например, | ||
+ | Rsrc | ||
+ | |||
+ | Папка с ресурсными документами подсистемы: | ||
+ | Sym | ||
+ | |||
+ | Папка с символьными файлами. Расширение имен у таких файлов: | ||
+ | |||
+ | Пользователям настоятельно рекомендуется сохранять свои модули в собственной подсистеме, | ||
+ | В этом случае нам потребуется создать папку Школа, внутри которой расположить указанные (пустые) папки. В таком случае модуль с именем Привет будет иметь полное имя ШколаПривет и будет располагаться в файле Школа\Mod\Привет.odc. | ||
+ | Сетевая работа | ||
+ | |||
+ | При использовании Блэкбокса в компьютерном классе можно выполнить серверную установку. | ||
+ | В этом случае на сервер устанавливается одна копия среды, и папка с ней открывается на доступ только для чтения. Для каждого пользователя создается локальная папка на рабочем месте, в которую помещается ярлык для запуска Блэкбокса. Например, | ||
+ | |||
+ | H: | ||
+ | |||
+ | Объект (Target): H: | ||
+ | |||
+ | Рабочая папка (Start in): C: | ||
+ | |||
+ | Этот ярлык можно поместить куда угодно, | ||
+ | |||
+ | Такая сетевая установка защищает файлы среды от разрушительных действий пользователя, | ||
+ | |||
+ | Аналогичную “сетевую” установку можно провести локально, | ||
+ | |||
+ | В случае сетевой установки подсистему с рабочими файлами учащегося следует разместить в папке C: | ||
+ | |||
+ | В простейшем случае достаточно просто распаковать архив Блэкбокса на диск и можно сразу начинать им пользоваться. | ||
+ | Гибкость | ||
+ | |||
+ | Продолжим разговор об эргономических преимуществах Блэкбокса. Еще одной отличительной чертой является его гибкость. Среду легко настроить так, чтобы было удобно работать разным категориям пользователей. Например, | ||
+ | |||
+ | i INTEGER 4 байта -2147483648 .. | ||
+ | +2147483647 | ||
+ | r REAL 8 байт | ||
+ | ±1.797693134862316E±308, | ||
+ | m заготовка модуля | ||
+ | if IF условие THEN ... END; | ||
+ | iff IF условие THEN ... ELSE ... END; | ||
+ | f FOR := TO DO ... END; | ||
+ | w WHILE условие DO ... END; | ||
+ | rep | ||
+ | ar ARRAY OF ; | ||
+ | p PROCEDURE имя*; | ||
+ | VAR ... ; | ||
+ | BEGIN ... END имя; | ||
+ | ret RETURN | ||
+ | v VAR | ||
+ | |||
+ | In.Open; In.Int( ); In.Real( ); | ||
+ | L.Int( ); L.Real( ); L.String(' | ||
+ | L.Ln; | ||
+ | |||
+ | IMPORT L := StdLog, In, Math, Dialog, Strings, Integers; | ||
+ | |||
+ | В первом абзаце приведены сокращения для быстрого набора. Для программирования “черепашки” приведенный список сокращений существенно дополнен. Подстановка вместо сокращений полных конструкций выполняется по нажатию клавиши • модулем Edit подсистемы Info21sys. Этот модуль легко поддается модификации даже учащимися. | ||
+ | |||
+ | Вызов справки можно добавить в инструментальную панель, | ||
+ | Строки | ||
+ | |||
+ | В Блэкбоксе имеются достаточно богатые средства для работы со строками. Строки в КП описываются как символьные массивы: | ||
+ | |||
+ | VAR строка: | ||
+ | VAR str: ARRAY 30 OF CHAR; | ||
+ | |||
+ | Цепочки или отдельные символы можно заносить в массив разными способами: | ||
+ | |||
+ | Строка как цепочка символов должна быть задана либо в одинарных апострофах ‘’, либо в двойных кавычках “”. Например: | ||
+ | |||
+ | In.Open; In.String(str); | ||
+ | строка := " | ||
+ | str := ' | ||
+ | str := str+' — ' | ||
+ | L.String(str); | ||
+ | |||
+ | Текущую длину цепочки символов в массиве можно определить через процедуру LEN(str$), указав сразу после имени знак доллара. Конец символьной цепочки в массиве отмечается специальным нулевым кодом, который в программе записывается 0X. Длину (размер) символьного массива выдает та же процедура, | ||
+ | |||
+ | k := LEN(строка); | ||
+ | |||
+ | К элементам символьного массива можно обращаться обычным образом: | ||
+ | |||
+ | FOR i := 0 TO LEN(str) – 1 DO | ||
+ | L.Char(str[i]) | ||
END; | END; | ||
+ | строка[4] := " | ||
+ | k := ORD(str[13]); | ||
+ | str[10] := CHR(50); | ||
- | FOR x := n - 1 TO 0 BY -1 DO | + | Процедуры модуля Strings позволяют находить, |
- | L.Int(a[x]) | + | r := 0.0031416; |
- | END | + | Strings.RealToStringForm(r, |
- | ELSE | + | В рабочий журнал будет выдано: |
- | L.String(" | + | ----3.142E-3 |
+ | ООП | ||
- | L.Ln | + | Компонентный Паскаль поддерживает полноценное объектно-ориентированное программирование. Покажем это на примере графического объекта Круг, имеющего такие свойства, |
- | END | + | MODULE МоиМетод; |
+ | | ||
+ | Gr := Info21sysTPGraphics; | ||
+ | TYPE (* создаем объект Круг *) | ||
+ | Круг = RECORD | ||
+ | x, y, | ||
+ | r, (*радиус круга *) | ||
+ | цвет (*номер цвета по упро щенной цветовой модели *) | ||
+ | : INTEGER | ||
+ | END; | ||
+ | |||
+ | (* определяем методы объекта Круг *) | ||
+ | |||
+ | (* метод, вычисляющий площадь круга*) | ||
+ | PROCEDURE (VAR p: Круг) Площадь | ||
+ | (VAR s: REAL), NEW; | ||
+ | BEGIN | ||
+ | s := Math.Pi()*p.r*p.r | ||
+ | END Площадь; | ||
+ | |||
+ | (*метод, | ||
+ | PROCEDURE (VAR p: Круг) Периметр | ||
+ | (VAR s: REAL), NEW; | ||
+ | BEGIN | ||
+ | s := 2*Math.Pi()*p.r | ||
+ | END Периметр; | ||
+ | |||
+ | (* метод, задающий цвет круга *) | ||
+ | PROCEDURE (VAR p: Круг) ЦветКруга | ||
+ | (c: INTEGER), NEW; | ||
+ | BEGIN | ||
+ | p.цвет := c | ||
+ | END ЦветКруга; | ||
+ | |||
+ | (* метод, рисующий круг в графическом окне*) | ||
+ | PROCEDURE (VAR p: Круг) РисКруг, | ||
+ | BEGIN | ||
+ | (* задание цвета заливки круга *) | ||
+ | Gr.SetFillColor(p.цвет); | ||
+ | (* рисование круга в виде эллипса с равными полуосями *) | ||
+ | Gr.FillEllipse(p.x, | ||
+ | END РисКруг; | ||
+ | |||
+ | PROCEDURE Делать*; | ||
+ | VAR k1, k2: Круг; s, p: REAL; | ||
+ | BEGIN | ||
+ | Gr.Clear; | ||
+ | k1.r := 60; k1.Площадь(s); | ||
+ | L.String(" | ||
+ | L.Real(s); L.Ln; | ||
+ | k1.x := 80; k1.y := 80; | ||
+ | Gr.SetBkColor(14); | ||
+ | k1.ЦветКруга(1); | ||
+ | k2.r := 50; k2.Периметр(s); | ||
+ | L.String(" | ||
+ | L.Real(s); L.Ln; | ||
+ | k2.x := 200; k2.y := 60; | ||
+ | k2.ЦветКруга(7); | ||
+ | k2.x := 220; k2.y := 100; | ||
+ | k2.r := 40; | ||
+ | k2.ЦветКруга(11); | ||
+ | Gr.Open | ||
END Делать; | END Делать; | ||
- | END МоиПример.</ | + | END МоиМетод. |
+ | МоиМетод.Делать | ||
+ | Рис. 2. Результат работы процедуры МоиМетод.Делать | ||
+ | Выдача в рабочем журнале: | ||
+ | площадь 1-го круга = 11309.73355292326 | ||
- | оригинал https:// | + | периметр 2-го круга = 314.1592653589793 |
+ | “Длинная” арифметика | ||
+ | Встречаются задачи, | ||
+ | |||
+ | Модуль Integers реализует абстрактный тип данных Integer для представления целых чисел произвольной точности. Он содержит также наиболее важные арифметические операции для таких чисел и набор операций преобразования. Арифметические операции включают сложение, | ||
+ | |||
+ | Что касается присваивания и параметров процедур, | ||
+ | Диалог | ||
+ | |||
+ | Диалоговые средства Блэкбокса очень просты в использовании и достаточно богаты по ассортименту. Для взаимодействия с программой в диалоге необходимо подключить специальный модуль Dialog, изменить операторы ввода-вывода на диалоговые, | ||
+ | |||
+ | Чтобы значения переменных были видны на форме, в их описаниях добавляется специальный признак: | ||
+ | |||
+ | Многое станет ясно из примера программы-калькулятора. | ||
+ | |||
+ | MODULE МоиКалькулятор; | ||
+ | | ||
+ | |||
+ | VAR x*, y*, результат: | ||
+ | |||
+ | PROCEDURE Сложить*; | ||
+ | BEGIN результат := x + y; | ||
+ | | ||
+ | END Сложить; | ||
+ | |||
+ | PROCEDURE Вычесть*; | ||
+ | BEGIN результат := x - y; | ||
+ | | ||
+ | END Вычесть; | ||
+ | |||
+ | (* для экономии места некоторые процедуры не приведены *) | ||
+ | |||
+ | BEGIN x := 0; y := 0; | ||
+ | END МоиКалькулятор. | ||
+ | |||
+ | После компиляции приведенного модуля возможно автоматическое построение диалоговой формы. Для этого необходимо в меню “Диалоги” выбрать пункт “Новая форма…”. В поле ввода появившегося окна нужно ввести имя модуля: | ||
+ | |||
+ | Будет создана форма следующего вида: | ||
+ | |||
+ | Форма для полнофункциональной программы “Калькулятор” после редактирования может выглядеть более приятно и удобно: | ||
+ | |||
+ | |||
+ | |||
+ | ===== Заключение ===== | ||
+ | |||
+ | Преподавание программирования на основе Компонентного Паскаля/ | ||
+ | |||
+ | |||
+ | |||
+ | ===== Литература ===== | ||
+ | |||
+ | 1. Вирт Н. Преподавание информатики: | ||
+ | |||
+ | 2. Жилин С.А., Жилина И.Б. Малые компонентные среды и языки программирования в школьном информационном образовании // Информатика и образование, | ||
+ | |||
+ | 3. Электронный ресурс: | ||
+ | |||
+ | |||
+ | оригинал https:// | ||
+ | А. С. Ильин, | ||
+ | технический директор “Amadeus IT Solutions”, | ||
+ | А. И. Попков, | ||
+ | директор по образовательным проектам ГК |