Студопедия Главная Случайная страница Задать вопрос

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

ЯЗЫКИ И МЕТОДЫ ПРОГРАММИРОВАНИЯ





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

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

Основу практикума составляет программирование на трех языках: Паскаль, Си и Пролог. Наиболее полно отражен Паскаль, что соответствует его реальной роли в подготовке учителей информатики и ряду других специальностей. На базе Паскаля предполагается отработка навыков по объектно-ориентированному про­граммированию. На уровне получения начальных практических навыков реализо­ван практикум по Си и Прологу. В то же время, в практикум не включены разде­лы по программированию на языках Бейсик и ЛИСП, описанных в базовом учеб­ном пособии.

Вопрос о целесообразности проведения практикума по языку Бейсик, формам и объему этого практикума следует рассматривать в контексте постановки изучения программирования в конкретном вузе. Роль Бейсика в профессиональном програм­мировании в настоящее время невелика (достаточно популярный объектно-ориен­тированный У18иа1 Вазю, по существу, есть иной язык). Чаще всего на Бейсик отпус­кается лишь немного времени для ознакомления (либо эта тема полностью исклю­чается или переносится на самостоятельное изучение). Учитывая, что языки Бейсик (в его современных версиях типа (^Вазю) и Паскаль нацелены на решение достаточ­но схожего круга прикладных задач, весьма объемный практикум по Бейсику с решением задач и выполнением лабораторных работ может быть при желании орга­низован с помощью заданий, приведенных в разделе по Паскалю.

Язык ЛИСП, реализующий принципиально иную, нежели Паскаль, парадигму программирования, в принципе заслуживает ознакомления, что и имели в виду авторы базового учебного пособия, включив в него соответствующую главу. Одна­ко на практическое освоение этого языка при подготовке студентов той катего­рии, которой адресован практикум, обычно не остается времени. Соответствую­щих требований нет и в государственных образовательных стандартах.

Важную роль в данном разделе практикума играет тема «Методы и искусство программирования». Именно на классических задачах поиска и сортировки и пост­роения рекурсивных алгоритмов традиционно оттачиваются практические навыки будущего программиста в сфере алгоритмизации и программирования. Вопрос о том, на каких языках реализовывать соответствующие программы, вторичен. В дан­ном случае это могут быть и Паскаль, и Си, и Бейсик.

§ 1. ПАСКАЛЬ КАК ЯЗЫК СТРУКТУРНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

Рекомендации по проведению занятий

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

Это обусловливает и организацию занятий. Они включают практические (груп­повые) семинарские занятия, на которых отрабатываются навыки реализации ти­повых алгоритмов; для этой деятельности и для домашних заданий необходимо некоторое число традиционных задач. Не все эти задачи становятся объектом от­ладки на компьютере, поскольку это требует немалого времени.

По отдельным темам обычно проводятся контрольные работы, для которых так­же нужны задания. Следует отметить, что указанные оценки продолжительности выполнения контрольных работ, приведенные ниже, весьма условны. Они исходят из полного выполнения всех приведенных заданий и отладки программ на ЭВМ; и то, и другое необязательно, и реальный состав задания определяется преподавате­лем. Часть этих заданий может быть использована на лабораторных работах.

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

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

Краткие сведения

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

1. Заголовок программы.

2. Описание внешних модулей, процедур и функций.

3. Описание меток.

4. Описание констант.

5. Описание типов переменных.

6. Описание переменных.

7. Описание функций и процедур.

8. Раздел операторов.

Основные операторы языка

Реализация последовательности действий (структуры следования) выполняет­ся с помощью составного оператора:

Ьед±п Споследовательность операторов> епс1;

Для реализации развилки в Паскале предусмотрены два оператора: условный оператор и оператор варианта (выбора). Первый выглядит так:

Слогическое выражение> "ЬЪеп <оператор1> е1зе <оператор2>;

или

И Слогическое выражение> "ЬЪеп <оператор>; .

Оператор варианта имеет следующую форму:

сазе <выражение> о^

<список констант 1>: <оператор 1>; <список констант 2>: <оператор 2>;

<список констант N>1 <оператор

епс1; .

Для реализации циклов в Паскале имеются три оператора.

Цикл с предусловием:

угЪИе Слогическое выражение> с1о <оператор>; .

Действие: вычисляется значение логического выражения. Если оно равно 1гие, то выполняется оператор, после чего снова вычисляется значение логического выражения, в противном случае действие заканчивается.

Цикл с постусловием:

гереаЪ

<последовательность операторов>

ип"Ы1 Слогическое выражение>;

Действие: выполняется последовательность операторов. Далее вычисляется зна­чение логического выражения. Если оно равно ггие, то действие заканчивается, иначе снова выполняется последовательность операторов и т.д.

Цикл с параметром:

^ог <параметр>:= <выражение 1> "Ьо <выражение 2> с!о <оператор>

Параметр, выражение 1, выражение 2 должны быть одного ординального типа. Параметр в этом цикле возрастает.

^ог <параметр>: =<выражение 1> сижп"Ьо <выражение 2> с!о <оператор>.

Параметр в этом цикле убывает.


Структуры данных

Простые типы

К ним относятся: геа1 — вещественный; ш1е§ег — целый; Ьоо1еап — логический; Ьу1е — байтовый; сЬаг — символьный.

Перечисляемые и интервальные типы данных задаются с помощью простых типов. Описание перечисляемого типа выполняется в разделе типов по схеме:

"Ьуре <имя типа> = ссписок имен> Примеры:

"Ьуре орегаЬог={р1из, Ш1пиз, ти111, <3л^л.с1е) ; со1ог= (мНИе, гес1, Ыие, уе11ом, ригр1е, дгееп) ;

Интервальный тип — это подмножество другого уже определенного простого типа, называемого базовым. Пример:

"Ьуре с1ауз = (шоп, Ъие, мес1, Ыпи, ±г±, за!, зип) ; могМауз = шоп..^г1; 1пс1ех = 1. . 30; 1е-Ыег = 'а'..'г';

Можно задать интервал и в разделе переменных: Vа^ а : 1. .100; Ь: -25. .25/.

Составные типы

Массив — это последовательность, состоящая из фиксированного числа одно­типных элементов:

"Ьуре <имя типа> = аггау ссписок типов индексов> о^ <тип элементов>.

Число типов индексов называется размерностью массива. После описания типа массива конкретные массивы можно задать в разделе описания переменных, на­пример:

"Ьуре Vес-Ьог = аггау [1..10] о^ геа1; 1:аЫе = аггау ['А1 . . 1 2 1 , 1. .5] о^ л.п1:едег;

Vа^ а,Ъ: Vес'Ьо^; с: "ЬаЫе;

Описание массива—типа можно совместить с описанием соответствующих пе­ременных:

Vа^ а,Ъ: аггау [1..10] о^ геа1; с1: аггау [Ьу1е] о^ сЬаг; .

Строковый тип определяется в разделе описания типов, переменные этого типа - в разделе описания переменных:

"Ьуре ыогс1: зЪгз.пд [20] ;

Vа^ а,Ъ,с: ыогй;

или


Vа^ а,Ъ,с: зЪг±пд[20]; с!: зЪг±пд[30];

Для строковых величин определены четыре стандартные функции:

1. Функция соединения — сопсаЪ (з1, з2, . . ., зк).

2. Функция выделения — сору (з, ±, к). Из строки $ выделяется к символов, начиная с /-го символа.

3. Функция определения длины строки — 1епдЪЬ (з).

4. Функция определения позиции — роз(з,ь). Вычисляется номер позиции, начиная с которой строка 5 входит первый раз в строку результат равен О, если строка ^ не входит в и

Также определены четыре стандартные процедуры для обработки строковых величин:

1. Процедура удаления — йе1еЪе (з, д., к). Из строки я удаляется к символов, начиная с /-го символа.

2. Процедура вставки — ±пзегЪ(з, ^ 1) • Строка я вставляется в строку начи­ная с позиции /.

3. Процедура преобразования числа в строку символов — зЪг (к, з).

4. Процедура преобразования строки из цифр в число — Vа1 (з, к, ±).

Множественный тип можно определить в разделе описания типов по схеме: Ьуре <имя> = зе"Ь о^ <тип элементов>. Например: Ьуре Ь = зеЪ о^ ЪуЪе; уаг а: Ь;

или

Vа^ сос1е: зе"Ь о^ 0..7; сИдз-Ьз: зеЪ о^ ' 0 1 . . ' 9 1 ;

Для данных множественного типа определены операции объединения, пересече­ния и дополнения множеств, обозначаемые соответственно знаками +, * и —, а также отношения равенства множеств (А = В), неравенства (АО В), включения (А<= В, А >= В). Логическая операция принадлежности: хтА принимает значение 1гие, если элемент х принадлежит множеству А и /аке в противном случае.

Запись — это последовательность, состоящая из фиксированного числа вели­чин разных типов, называемых полями или компонентами записи:

Ьуре имя типа записи = гесогс! имя поля 1: тип; имя поля 2: тип;

имя поля N: тип епс1;

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

Ьуре аск!гезз = гесогс! 1пс1ех: з1г±пд [ б ] ; зЪг±пд[2 0];

з!:гее1:: з1г±пд[20]; Ъаиз,1:1а1:: л.п"Ьедег епй;

Подпрограммы

В Паскале подпрограммы называются процедурами и функциями.

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

1) заголовок процедуры имеет другой синтаксис:

ргосес!иге <имя> (ссписок описаний формальных параметров>)

2) описание процедуры заканчивается точкой с запятой (а не точкой).

Оператор вызова процедуры имеет вид

<имя процедуры> (Ссписок выражений>);

Функция — это подпрограмма, определяющая единственное скалярное, веще­ственное или строковое значение. Отличия подпрограммы-функции от процедуры:

1) заголовок функции начинается со служебного слова ГипсИоп и заканчивается указанием типа значения функции:

^ипсЫоп <имя> (<список описаний формальных параметров>) : <тип>;

2) раздел операторов функции должен содержать хотя бы один оператор при­сваивания имени функции;

3) обращение к функции — не оператор, а выражение.

Функции и процедуры могут быть рекурсивными.

В Паскале имеются две встроенные процедуры ввода:

1)геас! <список переменных>;

2) геасИп <список переменных>.

Имеются две процедуры вывода на экран дисплея:

1)кг±-Ье <список выражений>;

2) ъг±Ъе1п Ссписок выражений>.

Модули

Модуль — это набор констант, типов данных, переменных, процедур и функ­ций. Используется для создания библиотек и разделения больших программ на логически связанные не зависимые друг от друга составные части. В состав модуля входят следующие разделы: заголовок, интерфейс, реализация, инициализация. Заго­ловок необходим для ссылок на модуль. Интерфейс содержит объявления, вклю­чая процедуры и функции, представленные списком заголовков и доступные пользо­вателям в теле основной программы. Раздел <реализация> содержит тела процедур и функций, перечисленных в интерфейсной части модуля. Раздел Инициализа­ция > содержит операторы, необходимые для инициализации модуля.

Каждый модуль компилируется отдельно; результат компиляции — файл с рас­ширением Лри (ТигЪоРазсаШпИ). Каждый элемент модуля можно использовать в программе пользователя без дополнительного объявления, для чего достаточно записать имя используемого модуля в директиве Цзез в начале программы после его заголовка: и§е§ <имя модуля>

Файлы

Для связи Паскаль-программы с внешними устройствами используют файловые переменные. Связь осуществляется оператором языка Паскаль:

а88±дп (<имя файловой переменной>,1<имя устройства>1).

Например:

азз1дп {Т., 1 ргл_тег . с1а1:1 )

Здесь / — имя файловой переменной, рг1тег .(За! — имя файла данных на внешнем носителе.

Если внешним устройством является принтер, то связь осуществляется опера­тором аззхдп 11з1:: 1). Здесь 1з1: — логическое имя печатающего устройства. Ниже приведены логические имена внешних устройств ввода-вывода:

соп: консоль; Ьгт: терминал;

кЪс!: клавиатура; 1з-ь: принтер;

аих: буфер сети; изг: драйвер пользователя.

После осуществления связи файловая переменная / отождествляется с соответ­ствующим файлом.

Для работы с файлом его необходимо открыть, по окончании работы — закрыть. Файл открывается для чтения оператором гезеЪ(:Е), для записи — оператором ге*гл.1:е (. Чтение и запись данных осуществляется известными процедурами геас!/ *г1Ье, только в начале списка помещается имя файловой переменной:

геас! <список ввода>) ; геасИп (Е, <список ввода>) ;

^г <список вывода>) ; \*гл."Ье1п (, <список вывода>) .

Закрытие файла осуществляется командой с1озе {?). Команда гезеЬ. (I) уста­навливает указатель маркера файла на нулевое состояние.

В системе Турбо-Паскаль предусмотрены встроенные функции по работе с файлами:

^Иезхге (±) — возвращает текущее число компонент открытого файла;

ЁИероз — возвращает номер текущей позиции маркера;

гепате (^, имя) — переименование файла, связанного с /;

егазе(^) — уничтожение файла;

ехесиЪе (±) — выполнение СОМ-файла;

сЪал.п (^) — выполнение СНК-файла;

зеек(:Е,Ы) — устанавливает маркер на позицию Тч[;

ео^(^) — возвращает ТБШЕ, если найден конец файла;

еа1п(Г) — возвращает ТК11Е, если найден конец строки.

Файловый тип данных в программе задается по следующему правилу:

Ьуре <имя файлового типа> = ^Ие о^ <тип компонентов>.

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

Ьуре = ^Ие о^ 1П"Ьедег;

Динамические переменные и указатели

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

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

Ьуре <имя ссылочного типа> = А <имя типа динамической величины> (значок А указывает на то, что величина является динамической).

Например:

"Ьуре р = А±п"Ьедег; д = Агесогс1 х: ±п"Ьедег; у: зЪг±пд [20] епс1;

В некоторых случаях возникает необходимость в качестве значения указателя принять «пустую» ссылку п±1, которая не связывает с указателем никакого объек­та и принадлежит любому ссылочному типу.

Для порождения динамического объекта, на который указывает ссылочная переменная л., служит стандартная процедура пек (л.). Имя ссылочной перемен­ной с последующим символом А называют «переменной с указателем». Именно она синтаксически выполняет роль динамической переменной и может быть ис­пользована в любых конструкциях языка, где допустимо использование пере­менных того типа, что и тип динамической переменной.

Процедура сИзрозе (л.) уничтожает порожденные динамические объекты.

Графика

Графические возможности реализованы с помощью стандартного модуля СгарЪ. Ьри. Подключение модуля к программе выполняется директивой изез дгарЬ. Процедура инициализации графического режима имеет три аргумента:

1п±-ЬдгарЪ (<драйвер>, <режим>, 'Спуть к драйверу>') и может быть выполнена так: изез дгарЬ;

Vа^ дс1, дш: ±п-Ьедег;

{переменные дс! и дш определяют драйвер и режим} Ьед±п

дс1:=^да; дт: =^даМ ; ±п±"ЬдгарЬ (дс1, дт, ' с1: \1:р55 ' ) ;

Первые две команды можно заменить одной: дй:=<1еЪесЪ с целью автомати­ческого распознавания драйвера и установления режима максимального разреше­ния для данной машины.

Процедура с1озедгарЪ освобождает память от драйвера и устанавливает ре­жим работы экрана, который был до инициализации графики.

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

изез дгарЬ; Vа^ дс1, дт, еггогсос!: ±п-Ьедег; Ьед±п

дс!: =с1е1:ес1:; л.пл.'ЬдгарЪ (дс!, дт, ' ') ; еггогсос!: =дгарЪгези11:; еггогсос! о дгок "ЬЬеп

Ьед±п

кг±-Ье1п ( ' ошибка графики' ) ; кг±-Ье1п (дгарЬеггогтзд (еггогсос!) ) ;

Ьа1Ьепс! ;

Процедура Ьа1Ъ останавливает выполнение программы и возвращает управле­ние операционной системе.

Параметр «цвет» в процедурах работы с палитрой является выражением целого типа со значением из интервала 0..15, в частности, может быть константой из приведенного списка:


 

 


0 (черный)

1 (синий)

2 (зеленый)

3 (голубой)

4 (красный)

5 (малиновый)

6 (коричневый)

В1аск В1ие Огееп Суап Кед Ма§еп1а Вгошп ЬщЬ^гау

7 (светло-серый)

Иагк&гау =

ЬщМЫие =

ЬщЫ^гееп =

ЪщЫсуап =

ЬщЫгей =

Ы§Ыта§еп1а = Уе11ош

тие

8 (темно-серый)

9 (светло-синий)

10 (светло-зеленый)

11 (светло-голубой)

12 (светло-красный)

13 (светло-малиновый)

14 (желтый)

15 (белый).


 

 


Процедуры зе'ЬсоЛ.ог (<цвет>) и зеЪЬксо1ог (<цвет>) устанавливают теку­щий цвет рисунка и цвет фона. При инициализации графики по умолчанию уста­навливается черный фон и белый цвет рисунка.

Та б л и ца 3.1

Основные процедуры модуля бгарН
Заголовок процедуры Геометрический смысл
ри1:р1хе1 (х, у, с) Построить точку (х,у) цветом с
5еЫ1пезЬу1е (а, Ъ, 1:) Установить стиль, образец и толщину линий
Ипе (х 1, у1, х2, у2 ) Соединить две точки отрезком
гес1:апд1е (х1, у1, х2 , у2 ) Прямоугольник с заданными концами диагонали и сторонами, параллельными осям координат
с1гс1е (х, у,г) Построить окружность с центром (х,у) и радиусом Я
агс (х, у, а,Ъ, г) Построить дугу окружности: а, Ь — начальный и конечный углы в градусах
еШрзе (х, у, а, Ъ, гх, гу) Построить эллиптическую дугу: гх, гу— полуоси эллипса
зеЬ^ШзЬуХе (1:, с) Установить стиль закраски и ее цвет
йПеШрзе (х, у, гх, гу) Построить закрашенный эллипс, используя цвет рисунка
ПоойГШ (х,у, сд) Закрасить фигуру до границы с цветом (х,у) — внутренняя точка фигуры
Ъаг (х1, у 1, х2 , у2 ) Построить столбец, используя тип и цвет закраски
р1ез11се (х,у,а,Ь,г) Построить и закрасить сектор круга: а, Ь — начальный и конечный углы дуги в градусах
зес1:ог(х,у,а,Ь,гх,гу) Построить и закрасить эллиптический сектор
зе1:1:ех1:з1:у1е (Г, п, <3) Установить шрифт, направление вывода, размер символов текста
оиЫехЬху(х,у,5Ь) Вывести строку начиная с точки (х,у)
оиЫехЪ ( з"Ь ) Вывести строку, начиная с точки расположения текущего указателя
5еЫ1пезЬу1е (а, Ъ, 1:) Стильлинии

 

Т а б л и ц а 3.2 Значения первого аргумента процедуры зеШпез1у1е(а,ЬД)
Значение стиля Смысл
0 зоНс11п Непрерывная линия
1 с!о-Ы:е1п Пунктирная линия
2 сепЬег1п Штрихпунктирная линия
3 йазЬесПп Штриховая линия
4 изегЫип Определенная пользователем

 

Второй параметр Ь, «образец», имеет значение 4, если а = 4, в остальных случа­ях Ь = 0.

Третий параметр толщина линии, может иметь значение 1 (нормальная тол­щина) или 3 (жирная линия).

Первый аргумент процедуры зе1:^111з1:у.1е(1:/с) — тип закраски/—прини­мает значения из интервала 0..12. Наиболее употребителен тип / = 1 — заполнение фигуры текущим цветом.

Для вывода текста на графический экран сначала выполняется процедура зе"Ы:ех1:з1:у1е (^,п,с!), устанавливающая шрифт/, направление вывода п и раз­мер символов (параметр с1). При/= 0 используется стандартный точечный шрифт, встроенный в систему Турбо-Паскаль.

Контрольные вопросы

1. Из каких разделов состоит программа на Паскале?

2. В каких случаях используют циклы с параметром, с предусловием и с постус­ловием? Приведите примеры.

3. В чем различия и сходство данных типа скаг и Мпп§?

4. В чем различия и сходство данных типа массив и множество?

5. В чем различия и сходство данных типа массив и запись?

6. В чем принципиальные отличия подпрограммы-процедуры от подпрограммы- функции?

7. Для каких целей служат модули?

8. Какую роль в программе играет файловая переменная?

9. Для чего вводят динамические структуры? В чем их принципиальное отличие от статических типов данных?

10. Каким образом в Паскаль-программе инициализируется графический ре­жим?






Дата добавления: 2014-11-10; просмотров: 213. Нарушение авторских прав

Studopedia.info - Студопедия - 2014-2017 год . (0.104 сек.) русская версия | украинская версия