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

advertisement
Муниципальное общеобразовательное учреждение
средняя общеобразовательная школа №3
Учебное пособие
по программированию
для учащихся 10 классов
Составила:
Жесткова Светлана Семеновна
Учитель информатики МОУ СШ№3
Саяногорск
Оглавление
ОСНОВНЫЕ ЭТАПЫ РЕШЕНИЯ ЗАДАЧ НА КОМПЬЮТЕРЕ ............................................................3
Язык программирования Паскаль ................................................................................................................5
Структура программы на Паскале ...............................................................................................................8
Операторы ввода и вывода..........................................................................................................................11
Линейная программа ...................................................................................................................................12
Разветвляющиеся вычислительные процессы ..........................................................................................17
Циклические вычислительные процессы ..................................................................................................19
Массивы ........................................................................................................................................................22
Процедуры и функции .................................................................................................................................24
Строковые переменные. ..............................................................................................................................26
Множества ....................................................................................................................................................28
Основные этапы решения задач на компьютере
Процесс решения задач на компьютере - это совместная деятельность человека и ЭВМ. Этот
процесс можно представить в виде нескольких последовательных этапов. На долю человека приходятся этапы, связанные с творческой деятельностью – постановкой, алгоритмизацией, программированием задач и анализом результатов, а на долю компьютера – этапы обработки информации в
соответствии с разработанным алгоритмом.
Рассмотрим эти этапы на следующем примере: пусть требуется вычислить сумму двух целых
чисел и вывести на экран видеомонитора результат.
Первый этап – постановка задачи. На этом этапе участвует человек, хорошо представляющий предметную область задачи. Он должен четко определить цель задачи, дать словесное описание содержания задачи и предложить общий подход к её решению. Для задачи вычисления суммы
двух целых чисел человек, знающий, как складываются числа, может описать задачу следующим
образом: ввести два целых числа, сложить их и вывести сумму в качестве результата решения задачи.
Второй этап – математическое или информационное моделирование. Цель этого этапа –
создать такую математическую модель решаемой задачи, которая может быть реализована в компьютере. Существует целый ряд задач, где математическая постановка сводится к простому перечислению формул и логических условий. Этот этап тесно связан с первым этапом, и его можно отдельно рассматривать, однако возможно, что для полученной модели известны несколько методов
решения, и тогда предстоит выбрать лучший. Для вышеописанной задачи данный этап сведется к
следующему: введенные в компьютер числа запомним в памяти под именами А и В, затем вычислим значение суммы этих чисел по формуле А+В, и результат запомним в памяти под именем S.
Третий этап - алгоритмизация задачи. На основе математического описания необходимо
разработать алгоритм решения.
Алгоритмом называется точное предписание, определяющее последовательность действий
исполнителя, направленных на решение поставленной задачи. В роли исполнителей алгоритмов могут выступать роботы, компьютеры
Используются различные способы записи алгоритмов, Широко распространен словесный
способ записи: это записи рецептов приготовления различных блюд в кулинарной книге, инструкции по использованию технических устройств, правила правописания и многие другие. Наглядно
представляется алгоритм языком блок-схем:
.
Начало,
конец
Ввод, вывод данных
условие
Выполнение
действий
Например:
Составим блок схему для приведенной выше задачи:
Введем два числа, найдем их сумму и выведем на экран.
начало
Ввести (a,b)
S:=a+b
вывести(‘s=’,s)
=
конец
Свойства алгоритма
При составлении и записи алгоритма необходимо обеспечить, чтобы он обладал рядом свойств.
Однозначность алгоритма, под которой понимается единственность толкования исполнителем правил выполнения действий и порядка их выполнения. Чтобы алгоритм обладал этим свойством, он должен быть записан командами из системы команд исполнителя.
Для нашего примера исполнитель алгоритма должен понимать такую запись действий, как
сложить числа А и В.
Конечность алгоритма – обязательность завершения каждого из действий, составляющих
алгоритм, и завершимость
выполнения алгоритма в целом. Записанный на рисунке алгоритм обладает этим свойством, так как
запись действий исполнителя завершается записью об окончании алгоритма.
Результативность алгоритма, предполагающая, что выполнение алгоритма должно завершиться получением определенных результатов. Алгоритм в нашем примере обладает этим свойством, так как для целых чисел А и В всегда будет вычислена сумма.
Массовость, то есть возможность применения данного алгоритма для решения целого класса задач, отвечающих общей постановке задачи. Так как алгоритм, показанный на рисунке, позволяет правильно подсчитать сумму не только чисел 2 и 3, но любой другой пары целых чисел, он обладает свойством массовости. Для того чтобы алгоритм обладал свойством массовости, следует составлять алгоритм, используя обозначения величин и избегая конкретных значений.
Правильность алгоритма, под которой понимается способность алгоритма давать правильные результаты решения поставленных задач. Представленный в примере алгоритм обладает свойством правильности, так как в нем использована правильная формула сложения целых чисел, и для
любой пары чисел результат выполнения алгоритма будет равен их сумме.
Четвертый этап – программирование. Программой называется план действий, подлежащих выполнению некоторым исполнителем, в качестве которого может выступать компьютер. Составление программы обеспечивает возможность выполнения алгоритма и соответственно поставленной задачи исполнителем - компьютером. Во многих задачах при программировании на алгоритмическом языке часто пользуются заменой блока алгоритма на один лил несколько операторов,
введением новых блоков, заменой одних блоков другими.
Пятый этап - ввод программы и исходных данных в ЭВМ. Программа и исходные данные вводятся в ЭВМ с клавиатуры с помощью редактора текстов, и для постоянного хранения осуществляется их запись на гибкий или жесткий магнитный диск.
Шестой этап - тестирование и отладка программы. На этом этапе происходят выполнение
алгоритма с помощью ЭВМ, поиск и исключение ошибок. При этом программисту приходится выполнять рутинную работу по проверке работы программы, поиску и исключению ошибок, и поэтому для сложных программ этот часто требует гораздо больше временит и сил, чем написание первоначального текста программы..
Отладка программы - сложный и нестандартный процесс. Исходный план отладки заключается в том, чтобы оттестировать программу на контрольных примерах.
Контрольные примеры стремятся выбрать так, чтобы при работе с ними программа прошла
все основные пути блок-схемы алгоритма, поскольку на каждом из путем могут быть свои ошибки,
а детализация плана зависит от того, как поведет себя программа на этих примерах: на одном она
может зациклиться (то есть бесконечно повторять одно и тоже действие) на другом - дать явно неверный или бессмысленный результат и так далее. Сложные программы отлаживают отдельными
фрагментами.
Для повышения качества выполнения этого этапа используются специальные программы отладчики, которые позволяют исполнить программу “по шагам” с наблюдением за изменением
значений переменных, выражений и других объектов программы, с отслеживанием выполняемых
операторов.
Седьмой этап - исполнение отлаженной программы и анализ результатов. На этом этапе
программист запускает программу и задает исходные данные, требуемые по условию задачи.
Полученные в результате решения выходные данные анализируются постановщиком задачи,
и на основании этого анализа вырабатываются соответствующие решения, рекомендации, выводы.
Например, если при решении задач на компьютере результат сложения двух чисел 2 и 3 будет 4, то
следует сделать вывод о том что надо изменить алгоритм и программу.
Возможно, что по итогам анализа результатов потребуются пересмотр самого подхода к решению задачи и возврат к первому этапу для повторного выполнения всех этапов с учетом приобретенного опыта. Таким образом, в процессе создания до тех пор, пока мы получим алгоритм и программу,. некоторые этапы программы будут повторяться удовлетворяющие показанным выше
свойствам.
КОНТРОЛЬНЫЕ ВОПРОСЫ И ЗАДАНИЯ
1. Опишите как можно вызвать программу?
2. Что такое алгоритм? Каким свойствам должен он удовлетворять? Приведите пример словесного
описания алгоритма и покажите, что он обладает указанными свойствами.
3. Какие вы знаете способы записи алгоритма? Приведите примеры алгоритмов, записанные разными способами: словесным, формулами, блок-схемами.
4. Составьте и запишите алгоритмы:
а) перехода улицы через переход, оборудованный светофором;
б) деления отрезка пополам с помощью циркуля и линейки;
в) вычисления скорости равномерного движения тела, если известны перемещение
время, за которое это перемещение совершилось.
Большинство программ создаются для решения какой-либо задачи на определенном языке .
В процессе решения задачи на компьютере пользователю нужно ввести обрабатываемые данные,
указать, как их обрабатывать, задать способ вывода полученных результатов. Поэтому как программист вы должны знать:
 как ввести информацию в память (ввод);
 как хранить информацию в памяти (данные);
 как указать правильные команды для обработки данных (операции);
 как передать обратно данные из программы пользователю (вывод).
Вы должны упорядочить команды таким образом, чтобы:
 некоторые из них выполнялись только в том случае, если соблюдается некоторое условие
или ряд условий (условное выполнение);
 другие выполнялись повторно некоторое число раз (циклы);
 третьи выделялись в отдельные части, которые могут быть неоднократно выполнены в
разных местах программы (подпрограммы).
Мы для этого познакомимся с языком программирования Паскаль.
Язык программирования Паскаль
Язык Паскаль является языком программирования высокого уровня. Начиная с момента своего
создания Н.Виртом в 1970 г., играет особую роль и в практическом программировании. Текст Паскаль-программы представляет собой последовательность строк, состоящих из символов, образующих алфавит языка.
Алфавит языка Паскаль состоит из следующих символов:
 Заглавных и строчных латинских букв: A, B, C, …, X, Y, Z, a, b, c, …, x, y, z;
 арабских цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;
 спец. символов: + – * / = > < . , ; : @ ` ( ) [ ] { } # $ ^ _
Буквы используются для формирования идентификаторов и служебных слов, цифры – для записи чисел и идентификаторов, специальные символы используются для конструирования выражений, комментариев, а также как разделители.
Символы из алфавита языка используются для построения базовых элементов программ – лексем.
Лексема – минимальная единица языка, имеющая самостоятельный смысл. В Turbo Pascal имеются следующие классы лексем:
1. Служебные (зарезервированные) слова. Служебное слово представляет собой неделимое образование, смысл которого фиксирован в языке. Служебные слова нельзя использовать в качестве
имен, вводимых программистом. Например: and, array, begin, case, const, do, else, end, for, goto, if, or,
then, to, var и др.
2. Идентификаторы (имена). Идентификаторы вводятся для обозначения в программе переменных, констант, типов, меток, процедур и функций. Идентификаторы вводятся в программу посредством описаний. Строчные и
3. Знаки операций формируются из одного или нескольких специальных символов и предназначены для задания действий по преобразованию данных и вычислению значений.
Разделители Примером разделителей могут служить следующие конструкции: ; :=. Важную
роль в тексте программы играет символ, не имеющий специального графического изображения, –
пробел. Символы пробелов используются для отделения лексем друг от друга в тех случаях, когда
слитное написание двух или более лексем может исказить смысл программы.
В текстах программ допускаются фрагменты пояснительного характера – комментарии. Наличие комментариев не изменяет смысл программы и не влияет на ее выполнение. Комментарии записывают в фигурных скобках {}.
Язык Паскаль является алгоритмическим, т.е. правильная программа на этом языке представляет собой формальную запись некоторого алгоритма, то есть конечной последовательности действий, приводящих к решению некоторой задачи.
Программа на языке Паскаль всегда состоит из двух основных частей: описания последовательности действий, которые необходимо выполнить, и описания данных, с которыми оперируют
действия. Действия представляются операторами языка, данные вводятся посредством описаний и
определений. Кроме того, программа может быть снабжена заголовком, который задает имя программы и ее параметры. Текст программы должен завершаться символом «.» (точка).
Описания данных предшествуют описанию действий и должны содержать упоминание всех
объектов, используемых в действиях (операторах).
Объекты, вводимые посредством описаний и определений, могут быть разбиты на пять классов:
 метки;
 константы;
 типы;
 переменные;
 процедуры и функции.
Описание меток вводит совокупность идентификаторов и/или целых чисел, предназначенных
для организации последовательности вычислений. Посредством меток можно отметить (указать) те
операторы, на которые будет передано управление из других точек программы. Передача управления на помеченный оператор реализуется с помощью специального оператора перехода goto.
Определение типов предназначено для задания конкретных множеств значений. Указанные
множества обозначаются именами (идентификаторами) и в дальнейшем могут служить для описания переменных.
Описание переменных вводит совокупность данных, с которыми производятся действия. Переменная обозначается идентификатором; с каждой переменной связывается ее тип, определяющий
множество допустимых значений этой переменной и набор допустимых операций.
Запуск и настройка среды
Чтобы работать с интегрированной средой Turbo Pascal 7.0, необходимо установить соответствующий программный пакет на своем компьютере. Реально для работы необходимо только небольшое число из многих десятков файлов пакета.
Таблица Основные файлы системы Турбо Паскаль
Имя файла
Назначение
TURBO.EXE. Интегрированная среда, редактор, компилятор, компоновщик и отладчик
TURBO.TPL
Библиотека стандартных модулей для приложений реального режима
(это, в частности, модули System, DOS и CRT)
TURBO.TPH
Справочная информация для интегрированной среды
TURBO.TP
Конфигурационный файл среды
EGAVGA.BGI Программа-драйвер, необходимая для выполнения графических программ
на мониторах VGA или EGA.
GRAPH.TPU
Библиотека графических процедур и функций
Интегрированная среда Турбо Паскаля запускается командой
Turbo.exe
При этом на экране появляется окно, которое состоит из нескольких частей. Эти части —
строка меню в верхней части экрана, рабочая область в центре и строка состояния внизу.
File
Edit
Search
Run
Compile
Debug
Tools
Options Window
Help
Строка меню предоставляет доступ к командам интегрированной среды. Активизировать строку меню можно, нажав клавишу F10. Можно воспользоваться для этого и мышью, указав на меню и
нажав левую кнопку.
Работа с файлами через меню File:
New – новое окно. В верхней части окна редактирования появится название, которое среда автоматически присваивает новому файлу, – NONAME00.PAS. После набора текста программы надо
обязательно изменить имя файла, иначе есть опасность потерять его, если он случайно будет замещен другим файлом с таким же стандартным именем. При первой записи файла на диск система
предложит задать имя файла, причем расширение .PAS добавляется автоматически.
Open (F3) – открыть файл для редактирования.
Save (F2) – сохранить файл в текущем окне.
Exit – выход.
В нижней части экрана находится строка статуса. Она содержит напоминание о назначении основных комбинаций клавиш.
Набор и редактирование исходного текста программы
Набор и редактирование исходного текста программы производится средствами встроенного
текстового редактора интегрированной среды. Основные возможности редактора связаны с использованием клавиатуры и специальных комбинаций клавиш.
Таблица Специальные клавиши и комбинации клавиш
Клавиши
Ctrl + Del
Ctrl + Ins
Shift + Del
Команда меню
Edit > Clear
Edit > Copy
Edit > Cut
Функция
Удаление выбранного текста
Копирование выбранного текста в буфер
Перемещение выбранного текста в буфер
Shift + Ins Edit > Paste
Запись текста из буфера в активное окно
Компиляция и запуск программы
После завершения набора программы и ее записи на диск можно приступать к компиляции
(клавиша F9). При этом компилятор может обнаружить ошибки в программе, и эти ошибки надо
будет исправить. Сообщение об ошибке выводится в верхней части экрана и выделяется красным
цветом. Курсор при этом устанавливается в той строке программы, где обнаружена ошибка.
После завершения «борьбы» с синтаксическими ошибками можно запускать программу на выполнение (клавиши Ctrl + F9). Программа может благополучно отработать, но могут обнаружиться
логические ошибки. Если в программе не предусмотрена приостановка выполнения для просмотра
результатов работы, выведенные на экран результаты перекрываются окном интегрированной среды. Временно убрать это окно и просмотреть результаты работы можно, нажав клавиши Alt + F5.
После просмотра нажатие любой клавиши вернет на экран рабочее поле редактора.
В том случае, когда в интегрированную среду загружено несколько файлов, а это возможно при
работе над достаточно сложной программой, состоящей из нескольких частей, расположенных в
различных файлах, важным оказывается навык работы с окнами. Основные операции с окнами вынесены в специальное меню Window, перечень основных его операций приведен в таблице:
Таблица Перечень специальных комбинаций клавиш для управления окнами
Клавиши
Alt+цифра 1-9
Alt + 0
Alt + F3
Alt + F5
Shift + F6
Ctrl + F5
F5
F6
Команда меню
Функция
Переход к окну с заданным номером
Window > List
Показать список открытых окон
Window > Close
Закрыть активное окно
Window > User Показать экран пользователя
Screen
Window > Previous Переход к предыдущему открытому окну
Window
> Изменение размера (Shift + клавиши со стрелками) или
Size/Move
положения (клавиши со стрелками) активного окна
Window > Zoom
Раскрытие активного окна на полный экран или возвращение окна к исходному размеру
Window > Next
Переход к следующему открытому окну
Структура программы на Паскале
Блочная структура обеспечивает структуризацию программ на уровне исходных текстов. В
идеальном случае программа на языке Паскаль состоит из процедур и функций, которые вызываются для выполнения из раздела операторов основной программы. Исходя из этого можно записать
структуру программы следующим образом:
Program имя;
USES – раздел вызова модулей
CRT – модуль работы с экраном и клавиатурой;
GRAPH – для работы с графикой;
TYPE – раздел описания типов, определенных пользователем;
CONST – раздел описания констант;
VAR – раздел описания переменных
LABEL – раздел описания меток
– в виде меток можно использовать только буквенные символы и целые числа
PROCEDURE
FUNCTION
BEGIN
Операторная часть программы
END.
Арифметические операции
операция
*
/
div
mod
+
умножение
деление
Целочисленное деление (15 div 2=7)
Остаток от деления (15 mod 2=1)
вычитание
сложение
Основные стандартные функции, определенные в Паскале:
Математика
X2
X
X
PASCAL
SQR(X)
SQRT(X)
ABS(X)
SIN X
COSX
ex
LN X
XY
SIN(X)
COS(X)
EXP(X)
LN(X)
EXP(Y*LN(X))
Логические операции
операция
not
and
or
xor
=
<>
<
<=
>
>=
значение
Отрицание
Логическое умножение (коньюнкция) И
Логическое сложение (дизьюнкция) ИЛИ
Исключающее ИЛИ
равно
не равно
меньше
не больше
больше
не меньше
ПОРЯДОК ВЫПОЛНЕНИЯ ОПЕРАЦИЙ
Операция
@, NOT
*, /, DIV, MOD, AND
+, -, OR, XOR
=, <>, <, >, <=, >=, IN
Приоритет
Первый (высший)
Второй
Третий
Четвертый (низший)
Вид операции
Унарная операция
Операция типа умножение
Операция типа сложения
Операция отношения
Для определения старшинства операций имеется четыре основных правила:
1. Операнд, находящийся между двумя операциями с различными приоритетами, связывается с
операцией, имеющей более высокий приоритет.
2. Операция, находящаяся между двумя операциями с равными приоритетами, связывается с той
операцией, которая находится слева.
3. Выражение, заключенное в скобки, перед выполнением вычисляется как отдельный операнд.
4. Операции с равным приоритетом производятся слева направо с возможным регулированием порядка выполнения скобками.
Типы данных
Паскаль имеет развитую систему типов данных. Их принято делить на группы:
1. Простые типы:
▪ скалярные:
- целые;
- вещественные;
- символьные;
- булевский (логический) тип;
- перечислимые;
▪ ограниченные;
2. Составные типы:
▪ регулярные (массивы);
▪ комбинированные (записи);
▪ файловые;
▪ множественные;
▪ строковые;
▪ объекты;
3. Ссылочные типы;
4. Процедурные типы.
Базовыми в системе типов являются простые типы. Составные типы по определенным правилам строятся из простых. Ссылочные типы образуются из любых других типов. Составные и ссылочные типы можно считать некоторыми правилами для построения более сложных типов из простых. Первичными в иерархии типов являются скалярные типы, представляющие традиционные в
языках программирования множества значений (целые, вещественные, символьные, булевские.
Таблица Скалярные типы
Название
Целые типы
Короткий целый
Идентификатор
Shortint
Множество допустимых зна- Размер памяти
чений
-128..127
1 байт
Байтовый
Слово
Целый
Длинный целый
Вещественные типы
Вещественный
Byte
Word
Integer
Longint
0..255
0..65 535
-32 768..32 767
-2147483648 .. 2147483647
1 байт
2 байта
2 байта
4 байта
Real
6 байт
С одинарной точностью
Single
-1,7х1038 .. -2,9х10-39,
2,9x10-39 .. 1,7х1038
-3,4x1038 .. -1,5x10-45,
1,5х1045 .. 3,4х1038
Символьный
Символьный
Char
Символы из расширенного
набора символов кода ASCII
1 байт
Булевский
Булевский
Boolean
False, True
4 байт
1 байт
Вопросы для повторения:
1. Какого типа будет результат деления 15/4 (16/4, 16.4/2) ?
2. Какие из приведенных ниже записей вещественных чисел являются неправильными и почему?
б) -6.1
в) 0.0
г) 9
а) 7.
ж) -5.3Е4
з)+2.3Е+3
Д) -ОЕ-2 е) 0.1Е-5
л)
.456
к) 0.31
ы) 2,1
и) -71
3. Определить тип результата следующих выражений:
а) I*I+J*J+2*K/2; б) X<Y
в) SIN(X)+2*COS(Y)+Z; г) I+SQRT(J), если известно, что I, J, K:INTEGER; X, Y, Z:REAL.
4. Вычислить значения выражений, если А =2,5; В=7,8; С= -17,3; М=5; Х=8,7; E=TRUE:
а) (А+В)/С*М
б) 2+Х*Х/(Х+(А+В)/5)
в) (А<В) AND (X+A<B) OR (C<M) OR Е
5. Какого типа будет значение выражения: 10/2 + 5?
6. Можно ли утверждать, что в Паскале значение выражения (1/3)*3–1 равно нулю?
7. Укажите порядок выполнения операций в выражении: –a mod b + a div b*c.
8. Есть ли разница (с точки зрения языка Паскаль) между числами 100 и 100.0, между 20 и
2Е1?
Операторы ввода и вывода
1. Оператор ввода
a) READ (список переменных) – этим оператором вводятся последовательно значения переменных
из списка;
Пример: READ (X,Y);
b) READLN (список переменных) – тоже что и READ, но с переводом курсора на новую строку
после ввода последней переменной;
Пример: READLN (X,Y);
c) READLN – ввод пустой строки.
Пример: READLN;
2. Оператор вывода
a) WRITE (список переменных) – выводятся последовательно переменные из списка;
Пример: write(x, y);
write (x : 7 : 2, y : 7 : 2); где
7 – количество позиций под все число, а 2 – количество позиций после запятой
b) WRITELN (список переменных) – тоже что и write, но с переводом курсора на новую строку после вывода последней переменной;
c) WRITELN – вывод пустой строки;
Вопросы для закрепления:
Вычислить значение выражения:
1. 2*3-13mod(19-3*4)
2. 23+3*17div(9-18mod4)
3. 2(x + 3) + (
3 2
)
1- 4x
x
4.
5. x +
6.
1
3
ln|2-
+ (x +
1
x2
| (x-
1 2
)
3
x
x(arctg x  e -3 )
7.
8.
ln|x2 +
при х=2.1 и х=0.3;
,
x
| x  sin x |
1
cos
x
1 x 2
cos|x |,
(1  x) 2
,
),
при x=4 и х=0.74;
2
x
cos x 2
1
1
1  tg
x
|,
при x=1.57 и х=-2.5;
Линейный алгоритм
Простейшей алгоритмической структурой является линейная последовательность операций, которые выполняются по очереди и
именно в том порядке, в котором они записаны. Линейные алгоритмы и линейные программы обычно предназначены для решения относительно простых задач.
Например: Написать программу вычисления площади треугольника
по трем сторонам, пользуясь формулой Герона.
нач
A,B,C
P:=(a+b+c)/2
S:=sqrt(p*(p-a)*(p-b)*(p-c))
s
Program tr;
var
a, b, c, p, s : real;
кон
begin
writeln(’Введите длины сторон треугольника’);
readln(a,b,c);
p := (a + b + c)/2;
s := sqrt(p*(p - a)*(p - b)*(p - c));
writeln(’Площадь треугольника =’, s:5:2);
end.
Задача Дано целое трехзначное число А. Написать программу выделения количества сотен и
количества единиц этого числа.
program p3_3;
var
a, a1, c : integer;
begin
writeln(’Введите число’);
readln(a);
a1 := a mod 10;
c := a div 100;
writeln(’Количество единиц =’, a1);
writeln(’Количество сотен =’, с);
end.
Задача Вычислить площадь кольца, ширина которого равна А, а отношение радиусов окружностей равно В.
program p3_5;
var
{s - площадь кольца
a - ширина кольца
b - отношение радиусов
r - расстояние от центра кольца до наружной стороны кольца}
s, a, b, r : real;
begin
write('Введите ширину кольца и отношение радиусов:');
readln(a,b);
r := (-a*b)/(1 - b);
{Поскольку площадь кольца = разности площадей 2 кругов, радиусом
первого является r, а второго - r-a}
s := Pi*sqr(r) - Pi*sqr(r - a);
writeln(s);
readln
end.
Вопросы для закрепления
1. Назовите основные этапы разработки программы.
2. Какова структура Паскаль-программы?
3. Что такое алгоритм? Каковы основные свойства алгоритма? Какими способами можно записать алгоритм?
4. Запишите основные элементы блок-схем.
5. В каком году и кем был создан язык Паскаль?
6. Чем отличается алфавит языка Паскаль от естественных алфавитов?
7. Что такое лексема?
8. Какова структура Паскаль-программы?
9. Что в списке можно рассматривать как идентификаторы:FIO, ФИО, 22222, X, Y, >=, &, $,
Summa, _Result
10. Укажите идентификаторы, которые проще воспринимаются при чтении, объясните причину:
klass; Klass_1; summadoxoda;SummaDoxoda;nomerdoma;Nomer_Doma.
11. Сколько в следующем списке зарезервированных слов: X, Program, Y, Summa, MyMoney,
Произведение, Vova, begin, end, if, repeat, Read?
12. В каких случаях надо использовать переменные:
– если в программе используется какое-то число?
– если в вычислениях какой-то операнд постоянно меняет свое значение?
– если операнд в выражении хотя бы один раз меняет значение?
13. Какие заголовки программ правильны:program Zarplata?program Сумма?program Summa Nalogov?программа Teach_Kurs?program 12Kurs?program Summa_Elementov?
14. Какая структура программы правильна:
1) program MyProgram;
begin
Writeln(‘Привет’);
end.
2)Program MyFirst;
begin
X:=Y+100;
end.
15. Какой из перечисленных разделов обязателен в программе:
раздел var?
раздел const?
раздел type?
раздел begin....end.?
раздел label?
16. Какие из комментариев неправильны:
{Программа вычисляет логарифм введенного числа};
(*Это тоже комментарий*);
{{Комментарий в комментарии}};
(*{И это комментарий в комментарии}*);
{(*Еще один вариант*)};
(*(*Самый последний вариант*)*);
17. Есть ли причины к невыполнению следующей программы:
program Test;
begin
end.
18. Для чего используется слово uses?
1) такого слова нет в языке Турбо Паскаль;
2) это какой-то пользовательский идентификатор;
3) с его помощью подключают стандартные библиотеки;
4) это стандартная константа, равная 3,14;
5) это логическая операция.
19. В разделе процедур и функций описываются только стандартные процедуры?
1) да, только стандартные;
2) нет, только пользовательские;
3) и стандартные, и пользовательские;
4) такого раздела вообще не может быть в программе.
20. Наберите и откомпилируйте простейшую программу:
program Tutor;
begin
Writeln(5*6);
Writeln(‘Привет’);
end.
Каков будет результат ее выполнения?
Измените программу чтобы результат равнялся 35.
21. Где ошибки (их три) в следующей программе?
Program Ошибки1;
begin
Summa:=6+8;
end;
Исправьте программу и добейтесь компиляции без ошибок.
22. Где ошибки (их три) в следующей программе?
Program Ошибки2;
{{Программа с ошибками}}
begin
var x:integer;
x:=5*3;
Write(x);
end.
Исправьте программу и добейтесь компиляции без ошибок.
23. Где ошибка в следующей программе?
Program MyError;
ses
{(*Программа с ошибкой*)}
begin
end.
Исправьте программу и добейтесь компиляции без ошибок.
24. Напишите самую короткую программу.
25. Где ошибка в следующей программе?
Program Kvadr;
begin
Writeln(‘введите значение Х’);
Writeln(‘Х в квадрате=’, Х*Х);
end.
Var X:integer;
Исправьте программу и добейтесь компиляции без ошибок.
26. Где ошибка в следующей программе?
begin
Writeln(‘введите значение Х’);
Readln(X);
Writeln(‘введите значение Y’);
Readln(Y);
Сумма:=X+Y;
Writeln(Сумма);
end.
Задачи:
1. Длина сада Х метров, ширина в два раза больше. Мальчик оббежал сад за Т мин. Найти скорость мальчика в секунду, произвести расчеты для Х=689.67 Т=7.6 с точностью до 2 знаков
после запятой/
Y=x*2, p=2*(x+y), w=t*60, v=p/w
2. Найти длину окружности, описанной около квадрата со стороной Х см.
x – сторона, R 
x x
2
2
/ 2 , L=2**Rнайти чему равна длина окружности при Х=2.56789, и
Х=345.678 с точностью до 3 знаков после запятой.
3. Определите периметр правильного n-угольника, описанного около окружности радиуса r.
4. Вычислить объем цилиндра, вписанного в правильную шестиугольную призму, у которой
каждое ребро равно a.
5. Вычислить массу свинцовой трубы, длина которой L метров (плотность 11,4 г/см3), толщина
стенок А мм, а внутренний диаметр R мм.
6. Определить время, через которое встретятся два тела, равноускоренно движущиеся навстречу друг другу, если известны их начальные скорости, ускорения и начальное расстояние
между ними.
7. Три сопротивления R1, R2, R3, соединены параллельно. Найти общее сопротивление соединения.
8. Стальной вал, имеющий L мм длины и D метров в диаметре, обтачивается на токарном станке, причем диаметр уменьшается на S мм. Вычислить на сколько уменьшится масса вала.
(плотность стали - 7,4 г/см3)
9. Вычислить площадь кольца, ширина которого равна А, а отношение радиусов окружностей
равно В.
10. Определить силу притяжения между двумя телами массы М1 и М2, находящимися на расстоянии R друг от друга.
11. Найти площадь сектора, радиус которого равен R, а дуга содержит заданное число радиан А.
12. Даны v1, v2, t1, t2. Пусть смешано v1 литров воды температуры t1 с v2 литрами воды температуры t2. Вычислить объем и температуру образовавшейся смеси.
13. У квадрата ABCD на плоскости известны координаты двух противоположных вершин – точек А и С. Найти координаты двух остальных точек В и D.
14. Треугольник задан координатами своих вершин. Найдите сумму медиан треугольника.
15. Угол А задан в градусах, минутах и секундах. Найти его величину в радианах (с максимально возможной точностью).
16. Заданы моменты начала и конца некоторого периода времени в часах, минутах и секундах.
Найти продолжительность этого периода в том же виде (в пределах одних суток).
17. Известен объём шара V. Найдите диаметр данного шара.
Разветвляющиеся вычислительные процессы
До сих пор мы решали задачи, не учитывая области допустимости.
1. Например: при решения уравнения y=1/x, х не может быть равным 0, а в уравнении y  x ,
х не может быть <0.
2.
Для решения подобных задач необходимо выбрать одну из двух альтернатив.
Например, для того чтобы решить уравнения y=1/x, необходимо:
Ввести х
Если х=0 то вывести сообщение «решений нет»
иначе начать действия
посчитать чему будет равен y,
и вывести ответ
закончить действия
х
да
нет
Х=0
Y=1/x
Нет решений
Вывести Y
Общая форма записи
IF <Логическое выражение> THEN оператор 1 ELSE оператор 2;
Если условие равно значению истина, т.е. Логическое выражение=TRUE – выполняется оператор
1, если Логическое выражение =FALSE – оператор 2.
После слов THEN и ELSE разрешено выполнение одного оператора. В том случае, когда возникает
необходимость вставить несколько операторов, их необходимо заключить в операторные скобки
BEGIN … END.
Сложные условия расписываются с помощью логических операций.
Пример:
IF (x>=1) and (x<=5) then…
1  x  5 или x 1,5
2) x  [1,5]
IF (x<1) or (x>5) then…
Программа на языке Паскаль для уравнения у=1/х будет выглядеть так:
Var
x,y:real;
begin
Read (X);
If x=0 then write (‘решений нет’)
Else begin
Y=1/x;
Write (‘y=’,y:5:2);
End;
End.
2.Оператор выбора CASE
Если один оператор IF может обеспечить выбор из двух альтернатив, то оператор Case позволяет сделать выбор из произвольного числа имеющихся вариантов.
Он состоит из выражения, называемого селектором и списка параметров, каждому из которых соответствует один оператор или набор операторов.
Общая форма записи
Case <Выражение селектор> of
<параметр1>:<оператор1;>
<параметр2>:<оператор2;>
……
<параметрN>:<операторN;>
else <оператор;>
end;
В начале вычисляется выражение селектор, затем выполняется соответствующий этому значению
оператор. Селектор должен относится к одному из целочисленных типов (от –32768 .. 32767), булевскому, литерному или пользовательскому.
Например:
Case i of
1..10: Writeln (‘числа от 1 до 10’);
12,14,16,18,20: Writeln (‘четные числа от 12 до 20’);
end;
Задача:
По введенному номеру дня вывести его наименование (например: 1 – понедельник, 2 – вторник).
Var
I:integer;
Begin
Writeln(‘введи номер дня’);
Readln(i);
Case i of
1:writeln(‘понедельник’);
2:writeln(‘вторник’);
3:writeln(‘среда’);
4:writeln(‘четверг’);
5:writeln(‘пятница’);
6:writeln(‘суббота’);
7:writeln(‘воскресенье’);
else writeln(‘такого дня нет’);
end;
end.
Блок – схема CASE
Селектор
выражение
Да
(+)
1
2
3
Вопросы для закрепления:
1. Вычислить значение выражения:
a) A OR B
b) b) A OR B AND NOT A
c) c) x  [1;5]
2. Необходимо определить заштрихованную область в виде условия.
Y
1
0
X
2
3. Записать в виде условия, в котором значение переменной вычисляется по формуле:
a  b, если a  нечет.
Y 
a * b, если a  чет.
4. Записать в виде условия, в котором значение переменной вычисляется по формуле:

X 2 , если X  3

Y  X , если X при делении на 3 дает ост .  1

 x , иначе
 3
5. Записать приведенные ниже высказывания в виде выражений:
а) значение А не принадлежит интервалу (0,3);
б) значение А принадлежит отрезку [-2,0];
в) значение А принадлежит одному из отрезков: [-5, -4], [0,2], [3.2,7];
г) точка А с координатами (X, Y) лежит внутри круга с центром в начале координат и радиусом
2,3;
д) точка А с координатами (X, Y) лежит на границе или вне единичного круга с центром в начале координат.
Циклические вычислительные процессы
Циклические вычислительные процессы описываются с помощью операторов:
1. WHILE (цикл с предусловием)
2. REPEAT (цикл с постусловием)
1. FOR (цикл с параметром)
Первый и второй циклы могут использоваться и в том случае, когда заранее неизвестно количество
повторений цикла, а в третьем интервал задается в начале цикла.
Общая форма записи оператора цикла WHILE:
WHILE <Логическое выражение> DO
BEGIN
Тело цикла
END;
Начальные значения задаются до открытия цикла (до WHILE).
В логическом выражении происходит проверка по конечному значению, а в теле цикла обязательно
должен присутствовать оператор присваивания, в котором изменяется аргумент, проверяющийся в
условии.
Если условие в цикле while изначально невыполнимо, то тело цикла не выполняется ни разу.
Аргументом может быть переменная любого типа.
В начале до цикла вычисляется, задается или вводится выражение – условие, которое затем
проверяется и если условие истинно, то цикл выполняется, если условие ложно, то цикл прекращается.
While условие do begin
Операторы;
End;
Например: Найдем сумму чисел от 5 до 10 с шагом 1,8. Количество чисел и их значение не известны, поэтому применим цикл While
S:=0;X:=5;
S:=0;X:=5;
S:=0;X:=5;
S:=0;X:=5;
While x<10 do begin
While x<10 do begin
While x>10 do begin
While x>10 do begin
S:=s+x;
S:=s+x;
S:=s+x;
S:=s+x;
X:=x+1.8;
End;
X:=x+1.8;
X:=x-1.8;
END;
Write(‘s=’,s:5:2);
END;
END;
Write(‘s=’,s:5:2);
Write(‘s=’,s:5:2);
Write(‘s=’,s:5:2);
Сколько раз выполнится цикл? Какие значения примет переменная Х, S?
Общая форма записи REPEAT
REPEAT
тело цикла;
UNTIL Логическое выражение;
Тело цикла REPEAT выполняется до тех пор, пока условие не примет значение=TRUE.
При переходе от цикла WHILE к циклу REPEAT знак логического выражения меняется на обратно
противоположное.
Например, если в цикле WHILE условие было Х<=5, то в цикле REPEAT оно будет Х>5.
В начале до цикла вычисляется, задается или вводится выражение – условие. Затем выполняется
тело цикла один раз и только потом проверяется условие и если условие ложно, то цикл выполняется еще раз, если условие истинно, то цикл прекращается.
Например: Найдем сумму чисел от 5 до 10 с шагом 1,8. Количество чисел и их значение не известны, поэтому применим цикл Repeat
S:=0;X:=5;
S:=0;X:=5;
S:=0;X:=5;
S:=0;X:=5;
Repeat
Repeat
Repeat
Repeat
S:=s+x;
S:=s+x;
S:=s+x;
S:=s+x;
X:=x-1.8;
X:=x+1.8;
X:=x+1.8;
Until x>=10;
Until x>=10;
Until x<=10;
Until x>=10;
Write(‘s=’,s:5:2);
Write(‘s=’,s:5:2);
Write(‘s=’,s:5:2);
Write(‘s=’,s:5:2);
Сколько раз выполнится цикл? Какие значения примет переменная Х, S?
Отличия цикла WHILE от цикла REPEAT
WHILE
1. Цикл выполняется если Логическое выражение=TRUE
2. Тело цикла заключено в операторные скобки.
3. Если Логическое выражение.=FALSE изначально, то тело цикла не выполняется ни разу.
REPEAT
1. Цикл выполняется если Логическое выражение=FALSE
2. Операторных скобок нет
3. Если Логическое выражение =TRUE изначально, то тело цикла выполнится хотя бы 1
раз.
Операторы цикла могут быть вложены один в другой:
Если известно число повторений, то лучше применить цикл с параметром. Переменная цикла может
быть целой или символьной, меняется на единицу увеличиваясь или уменьшаясь.
Изменять значение переменной (т.е. присваивать ей какие-либо значения) в теле цикла нельзя.
Общая форма записи оператора цикла FOR
a) FOR имя переменной:= начальное значение TO конечное значение DO
BEGIN
Тело цикла;
END;
б) FOR имя переменной:= конечное значение DOWNTO начальное значение DO
BEGIN
Тело цикла;
END;
For i:=0 to 5 do оператор;
For i:=5 downto 1 do оператор;
Если в цикле необходимо выполнить не один оператор, а несколько, то применяют begin end
For i:=0 to 5 do begin
Оператор1;
Оператор2;
End;
1. Вычислить значение функции y=x+2; для х от 1 до 10.
Var
X,y:integer;
begin
For x:=1 to 10 do begin
Y:=x+2;
Writeln(‘x=’,x,’y=’,y)
End;
End.
2. Найти сумму всех двузначных чисел.
Var
X,S:integer;
Begin
S:=0;
For x:=10 to 99 do S:=s+x;
Writeln(‘x=’,x,’s=’,s)
End
3. Найти сумму всех двузначных чисел кратных 3.
Var
X,S:integer;
Begin
S:=0;
For x:=10 to 99 do If x mod 3=0 then S:=s+x;
Writeln(‘x=’,x,’s=’,s)
End.
4. Найти сумму всех двузначных чисел больших числа, введенного с клавиатуры.
Var
X,S,D:integer;
Begin
S:=0;
Write(‘введите число D’);
Read(d);
For x:=10 to 99 do If x >d then S:=s+x;
Writeln(‘x=’,x,’s=’,s)
End
5. Вывести таблицу стоимости от 1 до 10 булочек, если одна булочка стоит 1,35 руб.
Var
X:integer;
D,S:real;
Begin
d:=1,35;
For x:=1 to 10 do begin
S:=d*x;
Writeln(‘x=’,x,’s=’,s)
End;
End.
Отличие цикла FOR от WHILE и REPEAT.
FOR
1.Тип переменных:
integer, char
2. Шаг = 1 или -1
3. Количество повторений цикла может быть
только строго определено.
WHILE, REPEAT
Любые
Любой
Неизвестно
Массивы
Одномерные массивы
1йСпособ описания массива.
VAR имя массива: ARRAY [нач. знач. интервала .. конеч.знач. интер.] OF базовый тип;
Пример:
VAR A: ARRAY[1..10] OF INTEGER;
2йСпособ описания массива.
TYPE имя типа=ARRAY [нач. знач. интервала .. конеч.знач. интер.] OF базовый тип;
VAR имя массива: имя типа;
Пример:
TYPE MAS=ARRAY[1..10] OF REAL;
VAR A: MAS;
Ввод и вывод одномерного массива.
FOR I:=1 TO 10 DO
BEGIN
WRITE ('A[ ', I, ' ]=');
READLN (A[ I ]);
END;
Заполнение одномерного массива случайными числами:
BEGIN RANDOMIZE; {инициализация счетчика случайных чисел}
FOR I:=1 TO 10 DOA[ I ]:= RANDOM (10); {целые числа}
END.
Вывод элементов одномерного массива.
FOR I:=1 TO 10 DO WRITE (A[ I ], ' ');
Типовые алгоритмы обработки массивов.
Нахождение минимального (максимального) элемента массива.
MIN:= A[ 1 ]; {MAX:=A[ 1 ]}
FOR I:=2 TO 5 DO
IF MIN > A[ I ] {MAX < A[ I ]} THEN MIN:= A[ I ]; {MAX:= A[ I ]}
Массив – это упорядоченный набор однотипных элементов.
I,J
1
2
3
4
5
6
0
5
9
4
1
8
9
1
0
3
2
3
6
2
9
4
3
1. В разделе описания переменных двумерный массив описывается следующим образом:
Var
A, Mas: array [1..3,1..5] of integer;
2. Заполнить массив можно различными способами:
А) с клавиатуры
for i:=1 to 5 do
for J:=1 to 5 do read(a[i,j]);
B) случайными числами из интервала [a,b]. Например, числами от 10 до 39.
Randomize;
For i:=1 to 5 do
for J:=1 to 5 do a[i,j]:=random (30)+10;
С) по правилу. Например, элементы равны корню из произведения номеров строк и столбцов.
For i:=1 to 5 do
for J:=1 to 5 do a[i,j]:=2*sqrt(i*j);
3. Вывод элементов массива на экран.
For i:=1 to 5 do begin
for J:=1 to 5 do write(a[i,j]:2);
writeln;
end;
Дан массив размерностью nxm., заполненный случайными числами из интервала от –5 до 25. Найти
количество элементов массива больших 20. Найти сумму элементов меньших 10.
Var
I,n,k,s:integer;
A: array [1..100,1..100] of integer;
Begin
Writeln(‘введи размерность массива’); readln(n,m);
Randomize;
For i:=1 to n do
for J:=1 to m do a[i,j]:=random (30)-5;
For i:=1 to n do begin
for J:=1 to m do write(a[i,j]:2);
writeln;
end;
S:=0;k:=0;
For i:=1 to n do
For j:=1 to m do begin
If a[i,j]<10 then s:=s+a[i];
If a[i,j]>20 then k:=k+1;
End;
Writeln(‘сумма =’,s:2)
Writeln(‘количество =’,k:2)
End.
Найти минимальный (максимальный) элемент двумерного массива.
MIN:= A[ 1, 1 ]; {MAX:=A[ 1, 1 ]} STR:=1; STL:=1;
FOR I:=1 TO N DO
FOR J:=1 TO M DO IF MIN > A[ I, J ] {MAX < A[ I, J ]} THEN
BEGIN
MIN:= A[ I, J ]; STR:=I; STL:=J;
{MAX:= A[ I, J ]; STR:=I; STL:=J}
Вычислить сумму элементов главной диагонали квадратной матрицы.
SUM:=0;
FOR I:=1 TO N DO SUM:= SUM + A[ I, J ];
Процедуры и функции
Подпрограмма – это повторяющаяся группа операторов, оформленная в виде самостоятельной программной единицы, записывается однократно, а в соответствующих местах программы обеспечивается лишь обращение к ней по имени.
Использование подпрограмм позволяет:
1. Сократить объем программы.
2. Улучшить структуру (читаемость и наглядность).
3. уменьшить вероятность ошибок.
4. облегчить процесс отладки.
В Pascal механизм подпрограмм реализуется в виде процедур и функций.
Процедура – это самостоятельная программная единица, которая выполняется по команде из другой
программной единице (процедуре или функции).
Общий вид описания процедуры:
PROCEDURE имя (список формальных параметров);
Раздел описаний; (могут присутствовать все разделы описаний)
BEGIN
Операторная часть;
END;
Формальные параметры – это переменные фиктивно присутствующие в процедуре и определяющие
тип и место подстановки фактических параметров над которыми производятся действия.
Все формальные параметры делятся на два вида:
1. Параметры значения (входные).
2. параметры переменные (выходные).
Выходные параметры – это те параметры, перед которыми ставится служебное слово VAR, они передаются по ссылке тогда, когда необходимо передать некоторые новые значения в точку вызова
процедуры, т.е. когда необходимо что бы изменение в теле процедуры значений формальных параметров приводило к изменению фактических параметров, получающих новые значения.
Параметры значения – перед ними слово VAR не ставится, с помощью них идет передача по значению, т.е. передается только копия значения этих параметров и внутри процедуры с этими параметрами можно выполнять любые действия (допустимые для данного типа) при чем эти изменения не
влияют на фактические параметры в программе. Все переменные в программе делятся на локальные
и глобальные.
Глобальные переменные – это переменные, которые объявлены в описании основной части программы, а локальные – в процедуре, они существуют только тогда, когда работает процедура, появляются при ее вызове и исчезают при завершении работы.
Результат выполнения процедуры – это одно или несколько значений, которые передаются в основную программу, как значение ее параметра.
При вызове процедуры все формальные параметры заменяются фактическими.
!!! – число и тип формальных и фактических параметров должны совпадать с точностью до их следования.
Пример: Составить программу, которая будет находить AN, где A, N – целые числа, вводимые с
клавиатуры. Описать в виде процедуры.
PROCEDURE STEP (A, N: INTEGER; VAR Y: INTEGER);
VAR I: INTEGER; {локальная переменная}
BEGIN
Y:=1;
FOR I:=1 TO N DO Y:=Y*A;
END;
Передается три параметра A, N – параметры значения, Y – параметр переменной. Вызов этой процедуры в основной программе выглядит:
STEP (3, 5, d); или STEP (b, c, d1);
Функции
Функции предназначены для того, что бы вычислить одно значение, поэтому ее первое отличие от
процедуры состоит в том, что процедура может иметь новое значение у нескольких параметров, а
функция только одно (оно будет записано в имени функции), второе отличие заключается в заголовке, третье отличие: в теле функции обязательно должен использоваться оператор присваивания,
в левой части которого стоит имя функции, а в правой - ее значение.
Общая форма описания функции:
FUNCTION имя (формальные параметры {только входные}) : тип;
раздел описаний;
BEGIN
операторы функции;
END;
Входных параметров может быть несколько. Вызов функции в основной программе осуществляется
по ее имени с указанием фактических параметров, т.к. результат заносится в имя функции: ее можно использовать в выражениях на ряду со стандартными функциями. Фактическими параметрами
могут быть выражения. Порядок следования, тип и количество формальных и фактических параметров должны совпадать.
Вычисление выражений содержащих обращение функции происходит по следующему алгоритму:
1. Вычисляются выражения для аргументов функции.
2. Значения аргументов присваиваются параметру из заголовка описания.
3. Выполняется тело функции, и вычисляются ее значения.
4. Значение функции ставится в исходное выражение на место обращения функции.
Пример: Описать функцию, вычисляющую факториал.
N! =? (0! = 1).
FUNCTION FACT (N: INTEGER): INTEGER;
VAR I, P: INTEGER;
BEGIN
IF (N=0) OR (N=1) THEN FACT:=1
ELSE BEGIN
P:=1;
FOR I:=2 TO N DO P:=P*I;
FACT:= P; END; END;
D:=FACT(5);
либо
WRITELN ('Факториал 5 =', FACT(5));
Строковые переменные
Cтроковые константы – это последовательность символов заключенных в апострофы.
1. CONST S='Информатика'
2. TYPE STROKA:= STRING; (256 символов) или STRING [ n ], где n – число символов.
VAR A, B: STROKA;
3. VAR A, B: STRING [ n ];
К любому элементу строки можно обратиться по имени строки с указанием соответствующего индекса.
Стандартные процедуры и функции для работы со строковыми переменными
STR1, STR2, STR3 – строковые переменные.
1. Удаление и вставка
DELETE (STR1, n, m);
Процедура, которая удаляет из строки STR1, подстроку длинной m, начиная с позиции n.
STR1:='Мышечка';
DELETE (STR1, 4, 2);
- Нулевой индекс при обращении с элементом строки хранит информацию о длине строки.
2. INSERT (STR1, STR2, n);
Эта процедура вставляет в строку STR1, подстроку STR2, начиная с позиции n.
STR1:='Мышка'; STR2:='еч';
INSERT (STR1, STR2, 4);
или INSERT (STR1, 'еч', 4);
Функции:
1. LENGTH (STR1): INTEGER;
2. Копирование: COPY (STR1, n, m);
Функция, которая выделяет из строки STR1, подстроку длиной m, начиная с позиции n.
3. CONCAT (STR1, STR2);
Конкатация – сцепление (сложение, объединение).
=STR1 + STR2
К переменным строкового типа применимы операции сравнения (=,  , >, <, ...)
Сравнение строк идет по кодам их символов. Строки называются равными, если они совпадают по
фактической, а не по объявленной длине и состоят из одинаковых символов.
' abc ' < 'cba'
4. STR (<число>, <размер>:<количество>, <строка>); - процедура, которая для заданного
числа формирует представляющую его строку, указанного размера с заданным количеством
знаков в дробной части, строка должна быть задана, как имя переменой, параметры, размер и
количество могут отсутствовать.
Пример:
STR (19, 48: 5: 2, STR1);
Обратное преобразование осуществляется процедурой:
5. VAl (<строка>, <число>, <номер>);
Используя строку из цифр без пробелов, формируют число (машинное представление) или выдает
номер ошибочного знака в строке.
Пример:
STR1:='1011.01';
VAL (STR1, X, N);
Множеством значений CHAR являются символы, упорядоченные согласно таблице расширенного
кода. Коды с 0 по 31 – служебные. Если нужно по коду получить символ используют функцию
CHR:
CHR (<код>), или # код.
Пример:
а) CHR (98) = #98 = 'b'
б) операторы вывода:
WRITELN ('MOSCOW');
WRITELN ('MO', #115#99,'OW');
WRITELN (CHR(77), CHR(111), CHR(115), CHR(99), CHR(111), CHR(119));
WRITELN (#77#111#115#99#111#119);
Выдача звукового сигнала: WRITE(#7);
Обратное преобразование осуществляется с помощью функции ORD.
ORD (символ) =код;
Для целых чисел
ORD (5) = 5;
Функция UPCASE (<символ>); возвращает символ – латинскую букву в верхнем регистре или символ, если у него нет представления в верхнем регистре или букву кириллица.
Пример: a)Дана строка символов. Необходимо подсчитать общее количество символов + - *
PROGRAM PRIMER;
CONST N=10;
VAR S: STRING [ N ];
I, M: INTEGER;
BEGIN
READLN (S); M:=0; {Строковые константы вводятся и выводятся без апострофов}
FOR I:=1 TO LENGTH (S) DO
BEGIN
IF (S [ I ]='+') OR (S [ I ]='-') OR (S [ I ]='*') THEN M:=M+1 END;
WRITELN (M);
END.
б) Дано: строка символов, группы символов в данной строке разделены пробелами (одним или несколькими) – эти группы будем называть словами. Необходимо подсчитать количество слов.
PROGRAM PR1;
TYPE STROKA:= STRING;
VAR C: STROKA;
I, K: INTEGER;
BEGIN
READLN (C); K:=0;
FOR I:=1 TO LENGTH (C) DO
BEGIN
IF C [ I ] = ' ' THEN
IF C [ I-1 ] <> ' ' THEN K:=K+1;
END;
Вопросы для закрепления:
1) Определить значение символьной переменной d после выполнения следующих операторов:
а) c:= '+'; d:=c;
б) c:= '+'; d:='c';
2) Вычислить S-сумму порядковых номеров всех букв входящих в слово SUM.
3) Напечатать заданный непустой текст,удалив из него все цифры и удвоив знаки плюс и минус.
Множества
Наряду с численными типами множества являются фундаментальным понятием в математике (конечные, бесконечные, состоящие из разных (произвольных) элементов). В Pascal рассматриваются
только конечные множества, состоящие из небольшого числа элементов имеющие один и тот же
тип.
Множества в Pascal – это ограниченный, упорядоченный набор различных элементов одного базового типа.
Базовый тип – это совокупность значений из которых могут быть образованы множества. Всего
может быть не более 256 различных элементов. (Идет то же самое расширение, что и по строке.)
Значение переменной множественного типа может содержать любое количество элементов базового типа (от 0 до всех возможных значений базового типа) и в качестве базового может использоваться любой тип, кроме вещественного.
Постоянные множества и в Pascal и в математике задаются путем их перечисления.
Математика
Pascal
[]
0
{1, 2, 3}
{A, B, C, D}
[1, 2, 3]
['A', 'B', 'C', 'D']
{1, 2, …, N}
[1..N]
В квадратных скобках могут указываться не только константы, но и выражения типа элементов
множества.
Множества в Pascal описываются:
TYPE имя типа = SET OF базовый тип;
VAR имя переменной: имя типа;
или
VAR имя переменной: SET OF базовый тип;
или
CONST имя переменной = [элементы множества];
Пример:
VAR A: SET OF INTEGER;
B: SET OF 'A'..'Z';
C: SET OF CHAR;
В отличие от массивов к элементам множества нет прямого доступа, поэтому ввод и вывод элементов множества осуществляется:
1) Ввод с помощью операции сложения (объединения)
2) Вывод с помощью проверки принадлежности IF.
Формирование множеств
Если элементы множества идут подряд друг за другом, то можно использовать диапазон. Например,
множество описанное: VAR A: SET OF 1..5; может принимать значения:
A = [];
 [1], [2], [3], [4], [5]
A
 [1, 2], [1, 3], [1, 4], [1, 5]…
A
 [1, 2, 3]…
A
 [1, 2, 3, 4]…
A
 [1, 2, 3, 4, 5]
A
Отношения и операции над множествами
Отношения рассматриваются, как операции, вырабатывающие логическое выражение.
Математика
Pascal
XA
X IN A
X A
X A
X A
X A
XA
X A
В Pascal определены три операции над множествами:
1. Операция объединения.
Математика: A  B
A
B
Pascal: A  B
Объединением двух множеств называется множество элементов принадлежащих обоим множествам.
Пример:
['A', 'B'] + ['C', 'D'] = ['A', 'B', 'C', 'D']
2. Пересечение
Математика: A  B
A
C
B
Pascal: A * B
Пересечением двух данных множеств называется множество элементов принадлежащих одновременно и первому и второму множеству, общие элементы.
Пример:
['A', 'B']*['C', 'D'] = [];
A
B
3. Математика: A \ B
Pascal: A  B
Вычитанием двух множеств называется множество, состоящее из тех элементов первого множества,
которые не являются элементами второго множества.
Пример: 'A', 'B'] – ['C', 'D'] = ['A', 'B'];
Над элементами множества определены операции сравнения (=,  ,  ). Над элементами допустим
оператор присваивания.
Пример:
VAR A,B: SET OF 1..10;
BEGIN
A:=[1, 5, 7];
B:=A;
Оператор B:=A означает, что переменной B-типа множество присваивается текущее значение множества А и вместо А может использоваться выражение типа множество.
Ввод элементов во множество:
A:=[];
READ (C); {C  базовому типу}
WHILE C<>0 DO
BEGIN
A:=A+C;
READ (C); END;
Пример: Пусть дана строка символов с точкой в конце строки. Необходимо определить число различных букв входящих в эту строку.
PROGRAM MNO;
var m: set of char;
str: string;
c: char;
i,n: integer;
begin
m:=[ ]; n:=0;
readln (str);
for i:=1 to length (str) do
m:=m+str[ i ];
for c:='a' to 'я' do
if c in m then n:=n+1;
writeln (n);
end.
Список использованной литературы:
1. Паскаль и Дельфи. Самоучитель/В.Попов. – СПб.: Питер, 2003. – 544 с.: ил.
2. Андреева Е.В. Информатика. Основы алгоритмизации. Тетрадь с печатной основой. –
Саратов: «Лицей», 1999. – 80 с.
3. А. Епанешников, В. Епанешников Программирование в среде Turbo Pascal 7.0. – 3-е
изд.,– М.: «ДИАЛОГ-МИФИ», 1996. – 288 С.
4. Культин Н.Б. Turbo Pascal в задачах и примерах. СПб.: БХВ-Петербург, 2000. – 256 с.:
ил.
5. Немнюгин С., Перколаб Л. Изучаем Turbo Pascal. СПб.: Питер, 2002 – 320 с.: ил.
6. ГлинскийЯ.Н., Анохин В.Е., Ряжская В.А. Turbo Pascal. СПб.: ООО «ДиаСофтЮП»,
2001. – 208 с.
7. Молчанова С.И. Основы программирования. Турбо-Паскаль 7.0 для школьников и
абитуриентов. – М.: ЗАО «Премьера», ООО «Издательство АСТ», 2000. – 224 с.: ил.
8. Емелина Е. И. Основы программирования на языке Паскаль. – М.: Финансы и статистика, 1997. – 208.: ил.
9. Информатика в уроках и задачах: Приложение к журналу «Информатика и образование», 2001. – 128 с.
10. А.А. Кузнецов, Л. Е. Самовольнова, Н.Д. Угринович. Материалы для подготовки и
проведения итоговой аттестации по информатике. 11 кл. – М.: Дрофа, 2001. – 64 с.:ил.
11. Справочные материалы для программирования на языке Паскаль (Тематический контроль по информатике)/ Житкова О.А., Кудрявцева Е.К. – М., Интеллект-Центр, 2001
– 80 с.
Download