Тема «Введение в Паскаль»

Форма изложения материала — лекционная. Рассматриваются вопросы:

• что такое программирование;

• краткая история развития языков программирования;

• классификация методических подходов («парадигм») в программировании;

• язык Паскаль, история его создания и развития, области применения;

• структура программы на Паскале;

• понятие о метаязыках описания языков программирования. Материал для этой лекции можно найти во многих пособиях по языку Паскаль, включая указанные ниже в списке литературы.

Говоря об истории развития языка и рассказав о Турбо Паскаля, в дальнейшем можно не подчеркивать всякий раз, что тот или иной фрагмент связан именно с Турбо Паскалем, поскольку это расширение языка стало в наше время общепринятым. Фактически курс целесообразно базировать именно на Турбо Паскале.

По вопросу об изучении структуры программы на Паскале можно придерживаться двух подходов. Первый — вводить разделы по мере изучения языка (например, о существовании раздела «Описание процедур» сказать тогда, когда приступите к теме «Процедуры и функции»). Второй — сразу перечислить все возможные разделы программы, порядок их следования, не вдаваясь, естественно, в вопрос о деталях устройства. В целостном курсе второй подход представляется предпочтительным. Таким образом, уже на вводном занятии рекомендуется дать полный перечень:

программа = заголовок + блок + точка, блок = [описание меток] + [определение констант] + [определение типов] + [описание переменных] + [описание процедур и функций] + составной оператор

НЕ нашли? Не то? Что вы ищете?

(разделы, названия которых заключены в квадратные скобки, факультативны, т. е. могут в конкретной программе отсутствовать). Приведите общее, без деталей, описание назначения каждого из разделов, укажите ключевые слова, по которым их можно опознать.

То обстоятельство, что Паскаль является языком со строго определенными понятиями, часто ускользает от внимания «практиков». В спецкурсе, ориентированном на программирование, этот вопрос заслуживает обсуждения, хотя и является материалом повышенной трудности. Вначале ставим проблему ключевого различия между естественными (русским, английским и т. д.) и формальными языками (все языки программирования и не только они). Это интересный способ установить связи между информатикой и лингвистикой, разобраться в таких понятиях, как «синтаксис», «семантика». Далее, подведите учащихся к осознанию того, что для формального языка, в отличие от естественного, должен существовать способ полного, однозначно интерпретируемого описания допустимых в нем конструкций — метаязык. Опыт показывает, что нецелесообразно привлекать на этом этапе обучения нормальные формы Бэкуса, которые довольно трудно воспринимаются. Напротив, синтаксические диаграммы Вирта, благодаря элементам графической поддержки, гораздо «понятнее» и полностью решают поставленную задачу. Следует с осторожностью относиться к привлечению формальных описаний вне той сферы, для которой они созданы (это практикуется в ряде пособий, например, для описания бытовых понятий). Напротив, диаграммы понятий «цифра», «четное число» и им подобные достаточно прозрачны и создают представление о метаязыке еще до появления достаточно сложных конструкций Паскаля. В дальнейщем злоупотреблять синтаксическими диаграммами не следует, они на данном уровне обучения играют вспомогательную роль.

Тема «Данные. Типы данных. Выражения»

Мысль о том, что объект обработки (данные) не менее важен, чем орудийные средства (алгоритмы, операторы), следует внедрять на самой ранней стадии изучения программирования.

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

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

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

Завершают эту часть темы утверждением и примерами о том, что правильное, адекватное проблеме выстраивание структур входных и выходных данных является не меньшим искусством, чем правильно сформулированный алгоритм.

Разговор о типах данных разумно привязать к изучаемому языку (т. е. Паскалю). Введите четыре стандартных типа (целочисленный — integer, вещественный — real, логический (булевский) — boolean и символьный — char), покажите, какие значения могут принимать величины этих типов. Укажите на обязательность явного описания типов переменных в Паскале и покажите на примерах, как это сделать. Рассказ о том, что в Турбо Паскале на базе целочисленного и вещественного типов образованы одноименные группы типов, можно отложить на тот момент, когда стандартных типов real и integer станет недостаточно для решения задач.

Теперь уместно перейти к понятию арифметическое выражение. Поскольку с понятием выражение учащиеся раньше встречались (обычно интуитивно выражение отождествляется с математической формулой), начните с того, что такое тип выражения. Следует реализовать две простые, но нетривиальные мысли:

а) тип выражения определяется типом принимаемых им значений;

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

Уточните понятия операнд, функция, знак операции и на примерах отрабатывайте правила конструирования арифметических выражений. Попутно введите арифметические действия (в том числе и непривычные div и mod), стандартные математические функции, четко указывая для каждой из них тип аргумента и тип значения. Удобно сгруппировать эту информацию в таблицу, рассказать о «необычных» (на уровне школьного математического образования) функциях и объяснить смысл двойного вхождения некоторых из функций в таблицу (табл. 15.1).

Таблица 15.1


Значение

Аргумент

real

integer

integer

abs(X), sqr(x)

round (x), trunc (x)

real

sin(x), cos(x), arctan(x), ln(x), exp(x), sqrt(x)

abs(x), sqr(x), sin(x), cos(x), arctan(x), ln(x), exp(x), sqrt(x), int(x)


Большая часть этих функций не вызывает затруднений, так как знакома по курсу математики. Однако такие функции, как trunc и round требуют комментариев. Это функции преобразования типов, и нетривиальность равенства trunc(5.0) = 5 должна стать темой обсуждения.

Нетривиальным является для учащихся и утверждение о том, что функции бывают не только математическими. Нематематическая функция — такая, у которой либо аргумент, либо результат имеют нечисловую природу. Более того, нематематические функции могут входить в арифметические выражения. Примером такой функции на этом этапе может стать функция ord(x), аргумент которой может принимать значения (в частности) типов char и boolean (полный ее смысл будет раскрыт позже).

В связи с введением функции ord(x) уместен разговор о различии понятий упорядоченный и порядковый тип (в некоторых пособиях используется иная терминология, но существо дела от этого не меняется). Все четыре базовых типа являются упорядоченными, так как внутри каждого из них возможно сравнение элементов по ≤ ≠ ≥ < > =. Однако тип real, в отличие от остальных трех, не является порядковым, так как в нем нельзя пронумеровать элементы. Это существенно сказывается на ряде моментов в программировании (например, величину этого типа нельзя использовать как аргумент функции ord).

В этом месте надо обсудить и особенности целочисленной и вещественной арифметики, показать принципиальную разницу между хранением в памяти ЭВМ целых чисел как точных (и отсюда — ограниченность диапазона представимости) и вещественных чисел как приближенных, а также невозможность определения для них понятий «следующий» и «предыдущий», неизбежность машинных округлений.

После усвоения этого материала перейдите к построению нематематических выражений. На данном этапе, до введения строковых величин, отрабатывайте лишь логические выражения. Введите основные логические операции И, ИЛИ, НЕ и запишите для них таблицы истинности. Далее, не прибегая к нотациям Паскаля, строят простые логические выражения и показывают, как вычисляются их значения. При этом используют в этих выражениях как переменные величины, так и логические константы. Например: (А ∧ В) ∨ С, А ∧ (В ∧¬ С) ∧ true и т. п.

Затем вводят нотации Паскаля и продолжают отработку навыков вычисления логических выражений, вводя в них элементы — сравнения. Например: (А < В) or С. На примере такого выражения (и ему подобных) можно объяснить, что сравнение по ≤ ≠  ≥ < > = возможно и для величин нечисловой природы (любых упорядоченных, в частности, для символьных и логических).

Тема «Операторы»

В начале темы уместно привести список основных операторов языка Паскаль (по крайней мере, тех из них, назначение которых интуитивно ясно учащимся после изучения базового курса информатики): присваивания, ввода, вывода, условный, множественного ветвления, цикла с предусловием, цикла с постусловием, цикла с параметром. То обстоятельство, что ввод и вывод, строго говоря, не входят в список основных операторов, малосущественно. Об операторе перехода GOTO рекомендуется умалчивать, ибо его использование не органично для структурного программирования. Такую специальную конструкцию, как оператор присоединения, лучше ввести при изучении записей, так как на данном этапе объяснить его назначение невозможно.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135