Сделай Сам Свою Работу на 5

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





 

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

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

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



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

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

Разговор о типах данных разумно привязать к изучаемому языку (т. е. Паскалю). Введите четыре стандартных типа (целочисленный — 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 рекомендуется умалчивать, ибо его использование не органично для структурного программирования. Такую специальную конструкцию, как оператор присоединения, лучше ввести при изучении записей, так как на данном этапе объяснить его назначение невозможно.

Начинать надо с тщательной отработки понятия присваивание, без которого в дальнейшем многое не будет правильно воспринято. Вопрос представляется крайне простым: вычисляется значение выражения, стоящего справа от знака := и его получает переменная величина, стоящая слева от этого знака. Однако понимание этого приходит не сразу. В частности, необходимо на примерах величин различных типов пояснить, что до первого присваивания переменная вообще не имеет значения.

Здесь же следует ввести понятие «совместимость типов». Паскаль является жестко типизированным языком, что способствует большей корректности программ. В языке есть понятие «совместимости типов по присваиванию», т.е. при присваивании тип переменной слева от знака присваивания доожет не совпадать с типом выражения справа; останавливаться на этом подробно в данном месте нецелесообразно, но один момент надо пояснить — допустимо, чтобы переменная имела тип real, а выражение — integer.

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

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

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

Более общим (и более мощным) средством, аналогичным условному оператору, является оператор множественного ветвления. Объяснив его достаточно сложную структуру, покажите на примерах, что применение этого оператора часто избавляет от громоздких конструкций — многократно вложенных развилок, делает программу более читаемой. Обратите также внимание, что селектор и метки могут быть не обязательно типа integer (допустим любой порядковый тип), что в свою очередь добавляет выразительности программам.

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

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

Как правило, при организации циклических процессов при заранее известном числе выполнения тела цикла наиболее удобен цикл с параметром (цикл for). Познакомьте с ним учащихся; обратите внимание, что по организации работы в Паскале этот цикл вначале проверяет условие, а затем реализует тело цикла. Цикл for устроен достаточно сложно, и детальное, по пунктам, «проговаривание» порядка его исполнения существенно помогает пониманию темы. Обратите внимание учащихся на то, что параметр цикла может иметь не только тип integer, но и любой порядковый тип. Разберите, например, задачу: вывести на экран последовательность латинских букв а, Ь, ..., z- Достичь этого можно, например, так:

 

var i, j, k: integer;

…………………………………………………………………………

i:=ord(a); j:=ord(z); for k:=i to j do write (chr(k), '_')

 

но можно и более изящно:

 

var с:char;

………………………………………………………………………

for c:= 'a' to 'z' do write (c, '_')

 

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

Необходимо показать учащимся и задачи, в которых цикл с параметром неприменим (или применение его требует особых ухищрений). Это, прежде всего, итерационные циклические процессы, в которых выход из цикла определяется не заранее известным числом шагов, а условием, связанным с чем-то, вычисляемым в теле цикла. Хорошим примером будут математические задачи типа: найти приближенное значение по итерационной формуле с выходом из итераций при достижении условия |хя+1 - х„| < е.

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

 








Не нашли, что искали? Воспользуйтесь поиском по сайту:



©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.