Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Свойства основных типов данных



 

Тип Значения Операции Внутреннее представление
Целый Целые положительные и отрицательные числа в некотором диапазоне. Примеры: 23, -12, 387 Арифметические операции с целыми числами: +, —, х, целое деление и остаток от деления. Операции отношений (<, >, = и др.) Формат c фиксированной точкой
Вещественный Любые (целые и дробные) числа в некотором диапазоне. Примеры: 2, 5, -0, 01, 45, 0, 3, 6х109 Арифметические операции: +, -, х, /. Операции отношений Формат с плавающей точкой
Логический True (истина), False (ложь) Логические операции: И (and), ИЛИ (or), HE (not). Операции отношений 1 бит: 1 — true; 0 - false
Символьный Любые символы компьютерного алфавита. Примеры: V, '5', '+', '$' Операции отношений Коды таблицы символьной кодировки. 1 символ — 1 байт

 

Типы констант определяются по контексту (т.е. по форме записи в тексте), а типы переменных устанавливаются в описании переменных.

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

Действия над величинами, определяемые алгоритмом (программой), основываются на следующей иерархии понятий: операция — выражение — команда, или оператор — система команд (рис. 11.7).

 

Рис. 11.7. Средства выполнения действий над величинами

Операция — простейшее законченное действие над данными. Операции для основных типов данных перечислены в приведенной выше таблице.

Выражение — запись в алгоритме (программе), определяющая последовательность операций для вычисления некоторой величины.

Команда — входящее в запись алгоритма типовое предписание исполнителю выполнить некоторое законченное действие. Команды присваивания, ввода, вывода называются простыми командами; команды цикла и ветвления — составными, или структурными, командами.

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

Не следует требовать от учеников строгости в описаниях алгоритмов с точностью до точки или запятой. Например, если каждая команда в алгоритме на АЯ записывается в отдельной строке, то совсем не обязательно в конце ставить точку с запятой. В качестве знака умножения можно употреблять привычные из математики точку или крестик, но можно и звездочку — характерную для языков программирования. Но следует иметь в виду, что и в описаниях алгоритмов нужно ориентироваться только на тот набор операций и команд, который имеется у исполнителя. Проще говоря, не нужно употреблять операции или функции, которых нет в используемом языке программирования. Например, если составляется алгоритм для дальнейшего программирования на Бейсике, то в нем можно использовать операцию возведения в степень в виде: х5 или хÙ 5, потому что в языке программирования есть эта операция (пишется ХÙ 5). Если же программа будет записываться на Паскале, в котором отсутствует операция возведения в степень, то и в алгоритме не следует ее употреблять; нужно писать так: х*х*х*х*х. Возведение в большую целую степень, например в 20, 30-ю, следует производить циклическим умножением. Возведение в вещественную степень организуется через функции ехр и In: xy= eylnx Þ exp(y*ln(x)).

Узловыми понятиями в программировании являются понятия переменной и присваивания. О переменной уже говорилось выше. Процесс решения вычислительной задачи — это процесс последовательного изменения значений переменных. В итоге в определенных переменных получается искомый результат. Переменная получает определенное значение в результате присваивания. Из числа команд, входящих в представленную выше СКИ, присваивание выполняют команда ввода и команда присваивания. Есть еще третий способ присваивания — передача значений через параметры подпрограмм. Но о нем мы здесь говорить не будем.

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

Команда присваивания имеет следующий вид:

< переменная> : = < выражение>

Знак «: =» надо читать как «присвоить». Это инструкция, которая обозначает следующий порядок действий:

1) вычислить выражение;

2) присвоить полученное значение переменной.

Обратите внимание учеников на то, что команда выполняется справа налево. Нельзя путать команду присваивания с математическим равенством Особенно часто путаница возникает в тех случаях, когда в качестве знака присваивания используется знак «=» и учитель читает его как «равно». В некоторых языках программирования знак «=» используется как присваивание, например, в Бейсике и Си. В любом случае надо говорить «присвоить».

Ученикам, отождествляющим присваивание с равенством, совершенно непонятна такая команда: Х: = Х+ 1. Такого математического равенства не может быть! Смысл этой команды следует объяснять так: к значению переменной X прибавляется единица и результат присваивается этой же переменной X. Иначе говоря, данная команда увеличивает значение переменной Х наединицу.

Под вводом в программировании понимается процесс передачи данных с любого внешнего устройства в оперативную память. В рамках введения в программирование можно ограничиться узким пониманием ввода как передачи данных с устройства ввода (клавиатуры) в ОЗУ. В таком случае ввод выполняется компьютером совместно с человеком. По команде ввода работа процессора прерывается и происходит ожидание действий пользователя; пользователь набирает на клавиатуре вводимые данные и нажимает на клавишу < ВВОД>; значения присваиваются вводимым переменным.

Вернемся к вопросу об архитектуре ЭВМ — исполнителе вычислительных алгоритмов. Как известно, одним из важнейших дидактических принципов в методике обучения является принцип наглядности. За каждым изучаемым понятием в сознании ученика должен закрепиться какой-то визуальный образ. Успешность обучения алгоритмизации при использовании учебных исполнителей объясняется именно наличием таких образов (Черепашки, Робота, Кенгуренка и др.). Можно еще сказать так: архитектура учебных исполнителей является наглядной, понятной ученикам. Исполнителем вычислительных алгоритмов (алгоритмов работы с величинами) является компьютер. Успешность освоения программирования для ЭВМ во многом зависит от того, удастся ли учителю создать в сознании учеников наглядный образ архитектуры компьютера-исполнителя. Работа с реализованными в виде исполнителей учебными компьютерами («УК Нейман», «Кроха», «Малютка» и др.) помогает решению этой задачи. Составляя вычислительные алгоритмы, программы на языках высокого уровня, ученики в своем понимании архитектуры могут отойти от деталей адресации ячеек памяти, типов регистров процессора и т.п. подробностей, но представление об общих принципах работы ЭВМ по выполнению программы у них должно остаться.

Вот как должен представлять себе ученик выполнение алгоритма сложения двух чисел (рис. 11.8):

Алг сложение

цел А, В, С

Нач

ввод А

ввод В

С: = А + В

вывод С

Кон

Рис. 11.8. Исполнение компьютером вычислительного алгоритма

 

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

Примеры решения задач

 

Рассмотрим несколько задач, назначение которых состоит в закреплении понятий «переменная», «присваивание». Условия задач взяты из списка заданий к подразделу 12.1 учебника [6].

Пример 1. Вместо многоточия впишите в алгоритм несколько команд присваивания, в результате чего получится алгоритм возведения в 4-ю степень введенного числа (дополнительных переменных кроме А не использовать):

ввод А... вывод А

Решение. Ввод А

А: = А*А (А2)

А: = А*А (A4)

Вывод А

Пример 2. Написать на АЯ алгоритм вычисления У по формуле:

Y= (1 — X2 + 5Х4)2,

где X— данное целое число. Учесть следующие ограничения: 1) в арифметических выражениях можно использовать только операции сложения, вычитания и умножения; 2) выражение может содержать только одну арифметическую операцию. Выполнить трассировку алгоритма при X = 2.

Решение. Ученики могут построить разные варианты алгоритма решения этой задачи. Для сохранения промежуточных результатов можно использовать дополнительные переменные. Обсуждая эту задачу, полезно рассмотреть вариант алгоритма, при котором не понадобится дополнительных переменных, т. е. можно обойтись всего двумя переменными Хи Y. Тем самым достигается экономия памяти компьютера. Вот как выглядит этот алгоритм и его трассировка (табл. 11.2):

Таблица 11.2

 

Команда X Y
Ввод X 2  
X = X * X  
Y = 1 - X   -3
X = X * X  
X = 5 * X  
Y = Y + X  
у = у * Y  
Вывод У  

 

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

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

Решение. Выполним вариант г) задания. Построим алгоритм, учитывая равенство: X19 = Х16-Х*. Значения Xk, где k = 2", быстро вычисляются л-кратным умножением переменной самой на себя. Алгоритм:

Ввод X

Вывод Z

Пример 4. Записать алгоритм циклического обмена значениями трех переменных А, В, С. Схема циклического обмена:

Например, если до обмена было: А = 1, В = 2, С = 3, то после обмена должно стать: А = 3, В= I, С = 2. Выполнить трассировку.

Решение. Эта задача является естественным продолжением задачи об обмене значениями двух переменных, рассмотренной в [6]. Идея прежняя: для обмена значениями требуется дополнительная переменная, обозначим ее — X. Вот как будет выглядеть алгоритм и его трассировка:

Таблица 11.3

 

Команда А B С X
Ввод А, В, С 2  
Х: =С      
С: =В      
В: =А      
А: =Х      
ВыводА, В, С  

Элементы программирования в

Базовом курсе информатики

 

Изучаемые вопросы:

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

• Методические вопросы изучения языков программирования.

• Методические вопросы изучения систем программирования.

Программирование ~ это раздел информатики, задача которого

разработка программного обеспечения ЭВМ.

В узком смысле слово «программирование» обозначает процесс разработки программы на определенном языке программирования. Разработку средств системного ПО и систем программирования принято называть системным программированием; разработку прикладных программ называют прикладным программированием. По этому принципу делят программистов на системных и прикладных, в зависимости от типа создаваемых ими программ.

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

• процедурное программирование (Паскаль, Бейсик, Фортран, Си, Ассемблеры);

• логическое программирование (Пролог);

• функциональное программирование (Лисп);

• объектно-ориентированное программирование (Смолток, Си++, Делфи).

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

Классической, универсальной и наиболее распространенной является процедурная парадигма. Наибольшее количество существующих языков программирования относятся к этой линии. Поэтому чаще всего в учебных заведениях изучается процедурное программирование. А наиболее часто изучаемыми в школе языками программирования являются Паскаль и Бейсик. В дальнейшем под словом «программирование» мы будем подразумевать именно процедурную парадигму.

Процесс изучения и практического освоения программирования можно разделить на три части:

• изучение методов построения вычислительных алгоритмов;

• изучение языка программирования;

• изучение и практическое освоение определенной системы программирования.

Эта структура отражена на схеме 4. Здесь и в дальнейшем термин «вычислительные алгоритмы» будем понимать в самом широком смысле — как алгоритмы работы с величинами любых типов, ориентированные на исполнителя — ЭВМ.

Методические вопросы изучения алгоритмизации обсуждались в предыдущих разделах. Теперь рассмотрим вопросы методики изучения языков программирования и систем программирования.

Методические рекомендации по изучению

Языков программирования

 

Достаточно хорошо известна методика изучения языков программирования с целью практического их освоения. Эта методика опирается на структуру самого объекта изучения — языка программирования, которая отражена на схеме 4.

Языки программирования делятся на две группы:

• машинно-ориентированные: Автокоды, Ассемблеры;

• языки программирования высокого уровня (ЯПВУ).

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

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

Важнейшим оператором является оператор присваивания. В ЯПВУ оператор присваивания записывается практически так же, как в алгоритмическом языке команда присваивания.

В ЯПВУ одним оператором представляются целые алгоритмические структуры: ветвление, цикл. Правда, такое есть не во всех языках (например, нет в стандартном Бейсике). Языки, в которых имеются структурные операторы, принято называть структурными языками. К их числу относятся Паскаль и Си.

Изучение языков программирования высокого уровня в базовом курсе должно носить только ознакомительный характер. Но использовать для этого какой-то учебный язык, учебную систему программирования, совсем не обязательно. Реальные ЯПВУ можно изучать с разной степенью подробности. Освоение же работы в современных системах программирования на таких языках не вызывает больших затруднений.

Наиболее целесообразно для начального знакомства с языками программирования использовать язык Паскаль. Язык Паскаль был создан в 1971 г. Никлаусом Виртом как учебный язык. Основной принцип, заложенный в нем, — это поддержка структурной методики программирования. Этот же принцип лежит в основе учебного алгоритмического языка (АЯ). По сути дела, расхождение между АЯ и Паскалем состоит в следующем: АЯ — русскоязычный, Паскаль — англоязычный; синтаксис Паскаля определен строго и однозначно в отличие от сравнительно свободного синтаксиса АЯ.

Конечно, учитель может выбрать и язык Бейсик из-за привычки к нему или при отсутствии системы программирования на Паскале. Но в этом случае возникают серьезные методические проблемы: как аккуратно отразить концепцию типов данных и структурную методику программирования на Бейсике? В принципе, известно, как это делать, но для неопытного учителя это может оказаться проблемой.

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

Учитель может задуматься над проблемой: как лучше связать изучение методов построения алгоритмов работы с величинами и языка программирования. Здесь возможны два варианта:

1) сначала рассматриваются всевозможные алгоритмы, для описания которых используются блок-схемы и АЯ, а затем — правила языка программирования, способы перевода уже построенных алгоритмов в программу на этом языке;

2) алгоритмизация и язык программирования осваиваются параллельно.

В учебнике [15] используется первый подход, в учебниках [6, 12] использован второй подход. В курсе А.Г.Кушниренко [14] учебный алгоритмический язык доведен до уровня языка программирования, реализованного в системе КуМир. В этом случае алгоритмизация и программирование осуществляются в единой языковой среде.

Опыт показывает, что теоретическое изучение алгоритмизации и программирования, оторванное от практики, малоэффективно. Желательно, чтобы ученики как можно раньше получили возможность проверять правильность своих алгоритмов, работая на компьютере. А для этого им нужно знакомиться с языком программирования, осваивать приемы работы в системе программирования. Метод последовательного изучения алгоритмизации и языка программирования приемлем лишь в «безмашинном» варианте.

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

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

• линейные алгоритмы: вычисления по формулам, всевозможные пересылки значений переменных;

• ветвящиеся алгоритмы: поиск наибольшего или наименьшего значений из нескольких данных; сортировка двух-трех значений; диалог с ветвлениями;

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

Такая последовательность задач рассматривается в учебнике [6] и предлагается в списке заданий для самостоятельного выполнения.

Примеры решения задач

Изучение языка программирования происходит в контексте решаемых задач, т.е. новые средства языка вводятся по мере необходимости для решения очередного типа задач. Рассмотрим решение некоторых задач с использованием языка Паскаль, предлагаемых в учебнике [6]. Эти примеры иллюстрируют использование метода аналогии между учебным алгоритмическим языком и Паскалем.

Пример 1. Составить алгоритм, по которому на компьютере будет происходить следующее: в переменную S вводится возраст Саши, в переменную М вводится возраст Маши. В качестве результата на экран выводится фраза «Саша старше Маши», или «Маша старше Саши», или «Саша и Маша ровесники». Написать программу на Паскале по этому алгоритму.

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

 

алг САША-MАША Program Sasha& Masha;

вещ S, M var S, M: real;

нач вывод 'Возраст Саши: '. begin write ('Возраст

ввод S Саши: ');

вывод 'Возраст readln(S);

Маши: ' write('Возраст

ввод М Маши: ' );

если S > M readln( М);

то вывод 'Саша if S > М

старше Маши' then write('Саша

иначе если S = М старше Маши')

то вывод 'Саша else if S = М

и Маша then write('Саша

ровесники' и Маша ровесники')

иначе вывод else write('Маша

'Маша старше старше Саши')

Саши1 end.

кв

кв

Кон

Пример 2. Составить алгоритм упорядочения значений трех переменных по возрастанию, т.е. при любых исходных значениях А, Б, С отсортировать их так, чтобы стало А < В < С. Написать программу на Паскале по этому алгоритму.

Решение. В подразделе 12.4учебника [6] рассмотрен алгоритм упорядочения значений двух переменных. Для решения данной задачи требуется трижды применить этот алгоритм: упорядочить А и В, упорядочить В и С (после этого максимальное значение попадет в С), еще раз упорядочить Aw. В. Таким образом, алгоритм будет иметь структуру трех последовательных неполных ветвлений.

 

Алг СОРТИРОВКА-3 Program SORT_3;

вещ А, В, С, X var A, B, C, X: real;

Нач begin

ввод А, В, С readln (А, В, С);

если А > В if A > В

То then begin

X: = А; X: = А;

А: = В; А: = В;

В: = XВ: = X

kb end;

если В > С if В > С

То then begin

X: = В; X: = В;

В: = С; В: = С;

С: = X С: = X

kb end;

если А > В if A > В

То then begin

X: = А; X: = А;

А: = В; А: = В;

В: = X В: = X

kb end;

вывод А, В, С write(А, В, С)

Кон end.

 

По поводу рассмотренной задачи сделаем следующее замечание. Эта задача, которая выводит на идею использования вспомогательных алгоритмов. Упорядочение трех переменных производится трехкратным применением алгоритма упорядочения двух переменных, поэтому разумно этот алгоритм оформить как вспомогательный. Программы, реализующие вспомогательные алгоритмы, называются подпрограммами. В Паскале есть два вида подпрограмм: подпрограммы-процедуры и подпрограммы-функции. В данной задаче можно использовать процедуру.

В учебнике [6] подпрограммы не рассматриваются. Это объясняется ограниченностью учебного времени, которое можно выделить в базовом курсе на тему «Введение в программирование». При наличии дополнительного времени рекомендуется дать ученикам представление о подпрограммах. Рассмотренная здесь задача может быть использована как опорная для раскрытия этой темы. Приведем пример программы сортировки значений трех переменных с использованием процедуры (правила работы с процедурами смотрите в учебниках по Паскалю).

Program Sort_3;

var А, В, С: real;

Procedure SOR2(var X, Y: real);

var Z: real; begin

Z: =X; X: =Y; Y: =Z

end;

begin readln(А, В, С);

SOR2(A, B);

SOR2(B, C);

SOR2(A, B);

writeln(A, B, C)

End.

Пример З. Дано вещественное число Хк натуральное N. Составить алгоритм вычисления XN. Написать программу на Паскале.

Решение.В Паскале нет операции возведения в степень. Если показатель степени — целое положительное число, то возводить в степень нужно путем ЛГ-кратного умножения основания самого на себя. Реализуется это циклическим алгоритмом:

 

алг Степень Program Power;

цел N, i; вещ X; var N, i: integer;

нач ввод N X: real;

ввод X begin readln(N);

i: =l; readln(X);

Y: =l; i: =i;

пока i< =N, повторять Y: =l;

нц while i< =N do

Y: =Y*X begin

i: =i+l Y: =Y*X;

кц i: =i+l

вывод Y end;

кон write(Y)

End.

 

При выполнении трассировки этого алгоритма обязательно следует проверить правильность его работы при N = 0. Как известно из математики, Х° = 1. Трассировка доказывает, что и в этом случае алгоритм будет давать правильный результат.

Пример 4. Последовательно вводятся N целых чисел. Найти максимальное из них.

Решение. В программировании часто приходится решать задачу поиска максимального (минимального) значения в числовом массиве. В базовом курсе могут не рассматриваться структурированные данные, в том числе массивы. Однако-эту задачу можно решить и без использования массива, ограничившись простыми переменными. Для этого ввод данных и обработку надо совместить в одном цикле. Вот как это делается:

 

Алг максимум Program maximum;

цел N, i, X, MAX var N, i, X, MAX: integer;

Нач begin

вывод 'введите N'; write('введите N');

ввод N readln(N);

вывод 'введите X'; write С введите X');

ввод X readln(X);

МАХ: =Х; i: =l MAX: = X; i: =l;

пока i < N, повторять while i < N do

Нц begin

вывод 'Введите X'; write('Введите X');

ввод X readln(X);

если X > MAX if X > MAX

то MAX: =X then MAX: = X;

kb i: = i + 1

i: = i + l end;

кц writeln(MAX)

вывод MAX end.

Кон

Методические рекомендации


Поделиться:



Последнее изменение этой страницы: 2017-05-05; Просмотров: 822; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.128 с.)
Главная | Случайная страница | Обратная связь