Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Практикум по программированию на PascalABC.NET

Покупка
Новинка
Артикул: 827044.01.99
Доступ онлайн
191 ₽
В корзину
PascalABC.NET — современная версия языка программирования Паскаль, предназначенного для обучения программированию. Настоящий практикум включает краткую справку по языку и собственно задания и упражнения для лабораторных и практических занятий по таким дисциплинам, как «Информатика и программирование», «Языки программирования» и ряду других. Задания разделены по темам, и в каждом разделе приведены решения наиболее типичных задач. В силу простоты и доступности, язык PascalABC.NET широко используется на начальных этапах обучения программированию. Настоящий практикум предназначен для обучения в системе СПО, он также может быть рекомендован преподавателям школ и вузов.
Савина, Е. В. Практикум по программированию на PascalABC.NET / Е. В. Савина. - Москва : Директ-Медиа, 2021. - 124 с. - ISBN 978-5-4499-1915-1. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2140754 (дата обращения: 28.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Е. В. Савина 

ПРАКТИКУМ  
ПО ПРОГРАММИРОВАНИЮ 
на PascalABC.NET 

Москва 
Берлин 
2021 
УДК 004.432(075)
ББК 32.973.22я723

   С13 

Рецензенты 

Кобзаренко Дмитрий Николаевич, доктор технических наук, 

 ведущий научный сотрудник Института проблем геотермии и возобновляемых  
энергоресурсов — Филиала Объединенного института высоких температур РАН; 

Мустафаев Арслан Гасанович, доктор технических наук, доцент кафедры 
 информационных технологий и информационной безопасности  
Дагестанского государственного университета народного хозяйства 

Савина, Е. В.  
С13   

ISBN  978-5-4499-1915-1

PascalABC.NET — современная версия языка программирования Паскаль, пред‐
назначенного для обучения программированию. Настоящий практикум включает 
краткую справку по языку и собственно задания и упражнения для лабораторных и 
практических занятий по таким дисциплинам, как «Информатика и программирова‐
ние», «Языки программирования» и ряду других. Задания разделены по темам, и в 
каждом разделе приведены решения наиболее типичных задач. 
В силу простоты и доступности, язык PascalABC.NET широко используется на 
начальных этапах обучения программированию. Настоящий практикум предназначен 
для обучения в системе СПО, он также может быть рекомендован преподавателям 
школ и вузов. 

УДК 004.432(075)
ББК 32.973.22я723

ISBN  978-5-4499-1915-1
© Савина Е. В., текст, 2021
© Издательство «Директ‐Медиа», оформление, 2021 

    Практикум по программированию на PascalABC.NET / Е. В. Савина. —   
Москва ; Берлин : Директ-Медиа, 2021. — 124 с.  
ОГЛАВЛЕНИЕ 

ОБ АВТОРЕ 
4 

Введение 
5 

I. Основные сведения о языке PascalABC.NET 
6 

II. Задачи и упражнения
13 

1. Алфавит языка PascalABC.NET. Оператор присваивания.
Ввод/вывод данных 
13 

2. Простые типы данных. Совместимость типов.
Преобразование типов 
17 

3. Реализация линейных и разветвляющихся алгоритмов
23 

4. Программирование циклических алгоритмов
28 

5. Массивы
36 

6. Записи, множества
44 

7. Обработка символов и строк
49 

8. Файлы
52 

9. Процедуры и функции
57 

10. Графика
60 

III. Комплексные задания по разным темам
63 

Ответы и комментарии 
74 

IV. Тестовые задания по темам
80 

Ответы к тестовым заданиям 
118 

Список рекомендуемой литературы 
121 
ОБ АВТОРЕ 

Савина Елена Владимировна, кандидат физико‐математических наук, 
доцент кафедры «Информационные технологии и информационная 
безопасность» Дагестанского государственного университета народно‐
го хозяйства (г. Махачкала). 
Введение 

Язык Паскаль, созданный Н. Виртом в начале 70-х годов прошлого века 
для обучения студентов программированию, до сих пор не утратил своей актуальности. 
Его современная версия — PascalABC для платформы NET (в настоящем 
Практикуме используется версия 3.6.3 от 09.06.2020) предоставляет 
пользователю мощные возможности для создания программ, поддерживая 
императивный, объектно-ориентированный и функциональный стили программирования. 
При этом язык прост в изучении и использовании и наилучшим 
образом подходит для выполнения своей основной задачи — обучения 
принципам программирования, методам реализации базовых алгоритмов. 
Структурно Практикум состоит из четырех частей. В первой части приведена 
краткая справочная информация о синтаксисе языка, во второй — задания 
для выполнения лабораторных и практических работ, разделенные по 
темам. В начале каждого раздела второй части приведены примеры решения 
наиболее типичных задач с комментариями.  
В третьей части содержатся комплексные задания с элементами теста, 
для выполнения которых необходимы знания из различных разделов курса. 
Задания третьей части предназначены для выполнения без компьютера, они 
направлены на развитие навыка чтения программного кода, что является 
чрезвычайно важным в обучении программированию. К заданиям третьей части 
приведены ответы и необходимые пояснения. 

Четвертая часть содержит порядка 200 тестовых заданий по разным разделам 
курса программирования на PascalABC.NET с ответами. Их удобно использовать 
для формирования тестов разного назначения (текущая проверка 
знаний, промежуточный и итоговый контроль, самоконтроль). 
Для эффективной работы с Практикумом необходимо изучение литературы 
с подробным описанием языка PascalABC.NET. Список рекомендуемой 
литературы и Интернет-источников приведен в конце издания. Кроме того, 
нельзя не отметить, что PascalABC.NET располагает превосходной справочной 
системой, включающей, помимо, собственно, справочника по языку, несколько 
обучающих блоков (задачник, модули «Робот» и «Чертежник» и т. д.).  
Практикум может быть использован для работы на практических и лабораторных 
занятиях, составления заданий для контрольных работ, карточек, 
самостоятельной подготовки студентов. 
I. Основные сведения о языке PascalABC.NET 

 
1. Алфавит языка PascalABC.NET (далее — PasABC) включает: 
1) буквы латинского алфавита от a до z и от A до Z и знак подчеркивания; 
2) цифры — арабские от 0 до 9; 
3) специальные символы     
  +  —  *  /  =  ,  .  ‘  :  ;  <  >  [  ]  (  )  {  }  ^  @  $  #, 
  пары символов 
       <>  <=  >=  :=  +=  –=  *=  /=  **  (* *)  (. .) и знак пробела; 
4) зарезервированные слова и директивы. 
Зарезервированные слова используются для описания операторов, данных, 
модулей, процедур и функций и т. д.  
2. Идентификаторы в PascalABC.NET — имена переменных, констант, типов, 
меток, подпрограмм (процедур и функций), программ, модулей, объектов 
и полей в записях. Идентификатор должен начинаться с буквы или знака подчеркивания 
и включать только буквы, цифры и знак подчеркивания.  
PascalABC.NET нечувствителен к регистру (прописные и строчные буквы 
эквивалентны). 
3. В качестве констант могут использоваться целые и вещественные числа, 
логические константы (false или true), символы, строки символов, конструкторы 
множеств и неопределенный указатель nil. 
4. Выражение представляет собой комбинацию переменных, констант и 
обращений к функциям (операндов), соединенных знаками операций. 
5. В PascalABC.NET определены следующие операции: 
унарные not, @; 
бинарные:  
1) мультипликативные  *, /, div, mod, and; 
2) аддитивные +, -, or, xor; 
3) операции отношения  =,  <>,  <,  >,  <=,  >=,  in. 
Операции приведены в порядке убывания приоритета. Порядок выполнения 
операций можно изменять с помощью круглых скобок. 
6. Структура программы в PascalABC.NET имеет следующий вид: 
program <имя программы>;  // строка заголовка 
{ Раздел описаний } 
begin 
{ Раздел исполняемых операторов } 
end. 
Строка заголовка является необязательной. В разделе описаний должны 
быть описаны все константы, типы данных (если они определяются пользователем) 
и метки, используемые в программе. Раздел описания типов начинается 
с зарезервированного слова type, констант — const, меток — label. 
Разделы описания типов, констант, меток могут следовать в любом порядке и 
встречаться любое количество раз. 
В разделе описаний также могут быть описаны глобальные переменные, 
которые должны быть доступны во всех частях программы. Однако описание 
переменной, которое начинается с зарезервированного слова var, в Pas-

6 
calABC.NET рекомендуется располагать в разделе операторов непосредственно 
перед первым использованием этой переменной. PascalABC.NET допускает 
также определение типа переменной по инициализации. 
Примеры: 
var a: real; 
var a := 1;    // переменной а будет присвоен тип integer. 
7. В таблице 1 приведены некоторые стандартные функции, определенные 
в PascalABC.NET. Заметим, что в предыдущих версиях языка Паскаль не 
было функции возведения в степень. В PascalABC.NET для этого предназначена 
операция, обозначаемая сдвоенным символом **, а также функция двух переменных 
power(x, y). Кроме того, в PascalABC.NET определена функция 
swap(x, y), которая меняет местами значения переменных x и y. 
 
Таблица 1 

Функция 

(процедура)

Тип аргумента
Тип 

результата

Действие

abs(x)
вещественный, 
целый

совпадает с x
модуль x

ArcTan(x)
- * -
real
арктангенс (в радианах)

ArcSin(x)
- * -
real

ArcCos(x)
- * -
real

cos(x)
- * -
real
косинус, аргумент в радианах


sin(x)
- * -
real
синус, аргумент в радианах

tan(x)
- * -
real

exp(x)
- * -
real
экспонента (𝑒𝑥)

ln(x)
- * -
real
натуральный логарифм

sqr(x)
- * -
real
квадрат аргумента

sqrt(x)
- * -
real
квадратный корень

int(x)
вещественный
real
целая часть числа

frac(x)
вещественный
real
дробная часть числа

round(x)
вещественный
integer
ближайшее целое

trunc(x)
вещественный
integer
отсечение дробной части

dec(x [,i])
целый
совпадает с x
уменьшает значение x на i, 
если i отсутствует, то на 1

inc(x [,i])
целый
совпадает с x
увеличивает значение x на 
i, если i отсутствует, то на 
1

Hi(i)
byte
возвращает старший байт 
аргумента

Lo(i)
byte
возвращает младший байт 
аргумента

odd(x)
целый
boolean
true, если аргумент — нечетное 
число, иначе false

random(x)
word
word
возвращает псевдослучайное 
число из диапазона 
0..(x — 1)

 

7 
Продолжение табл. 1

Функция 

(процедура)

Тип аргумента
Тип 

результата

Действие

chr(x)
byte
char
по коду символа х возвращает 
символ

upcase(x)
char
char
если х — строчная латинская 
буква, 
возвращает 
пропис-

ную, иначе — символ х

high(x)
диапазон
базовый порядковый


максимальное значение типа-
диапазона

low(x)
диапазон
базовый порядковый


минимальное значение типа-
диапазона

pred(x)
порядковый
совпадает с x
предыдущее значение х

succ(x)
порядковый
совпадает с x
следующее значение х

ord(x)
порядковый
целый
если х — целое, возвращает х, 
если символ — его код

 
9. Операторы 
Операторы в языке PascalABC.NET делятся на простые и структуриро-

ванные. 

Простые операторы не содержат в себе других операторов. К простым 

операторам относятся: 

 
оператор безусловного перехода; 

 
оператор присваивания; 

 
оператор обращения к процедуре. 

1) Оператор безусловного перехода goto<метка> позволяет изменять 
порядок выполнения операторов, использовать не рекомендуется. 
2) Оператор присваивания 
<имя_переменной> := <выражение>; 
a := 3.14; b := sqrt(a*a — 1); d := a/(a + b). 
PascalABC.NET допускает использование сокращенных операторов присваивания  
+=  -=  *=  /= 

Запись a += 2 эквивалентна a := a + 2, запись b *= 3 эквивалентна  
b := b*3 и т. д. 
3) Процедуры ввода данных: 
read(x1, x2, …, xn); 
readln(x1, x2, …, xn); 
x1, x2, …, xn — список вводимых переменных, процедура readln после 
считывания последнего значения переводит курсор на новую строку. Процедура 
readln без параметров останавливает выполнение программы до нажатия 
клавиши Enter.  
Кроме этого, в PascalABC.NET есть обширный набор функций ввода, которые 
позволяют одним оператором выполнять описание типа переменной и 
присваивание ей значения, вводимого с клавиатуры, например: 
var a := ReadInteger; 
а также множественный ввод данных, например: 
var (a, b, c) := ReadReal3; 

8 
Функции ввода данных в PascalABC.NET: ReadReal, ReadInteger, 
ReadChar, ReadBoolean, ReadString, а также ReadReal2, ReadReal3, …, 
ReadInteger2, ReadInteger3, …, ReadString2 и т. д. 
4) Процедуры вывода данных: 
write(x1, x2, …, xn); 
writeln(x1, x2, …, xn); 
print(x1, x2, …, xn); 
println(x1, x2, …, xn); 
x1, x2, …, xn — список выводимых переменных, констант, выражений, 
процедуры writeln, println после вывода информации переводят курсор на 
новую строку. Процедуры writeln, println без параметров переводят курсор 
в начало новой строки. 
Отличие: процедуры writeln, write позволяют выполнить форматный 
вывод данных, т. е. задать ширину поля вывода, количество десятичных знаков 
после запятой; процедуры print, println автоматически добавляют 
пробелы между выводимыми данными. 

К структурированным операторам относятся: 
 
составной оператор; 

 
операторы ветвления — условный оператор и оператор выбора; 

 
5 операторов цикла: оператор цикла с параметром for, операто-

ры цикла loop и foreach и 2 оператора цикла с условием (с предусловием и с постусловием). 


5) Составной оператор — группа операторов, заключенных в операторные 
скобки begin … end, которые рассматриваются как один оператор: 
begin 
  a1 *= 4;  // иначе:  a1 := 4*a1; 
  a2 += a1  // иначе:  a2 := a1 + a2 
end; 
6) Условный оператор, полная форма: 
if <условие> then <оператор_1> else <оператор_2>; 
неполная форма: 
if <условие> then <оператор>; 
условие — выражение логического типа, оператор_1, оператор_2, оператор — 
любые операторы языка Паскаль (возможно, составные). 
7). Оператор выбора: 
case <ключ_выбора> of 
  <список_1>: <оператор_1>; 
  <список_2>: <оператор_2>; 
  … 
  <список_n>: <оператор_n> 
else <оператор_n+1> 
end; 
Ключ_выбора — параметр, по которому происходит выбор варианта  
продолжения 
программы, 
выражение 
любого 
порядкового 
типа,  
список_1...список_n — 
наборы 
значений 
ключа 
выбора;  
оператор_1...оператор_n+1 — 
любые 
операторы 
языка 
Паскаль; 
часть else <оператор_n+1> является необязательной. 

9 
8) Оператор цикла с параметром for: 
for 
var 
<параметр_цикла>:= 
<начальное_значение> 
to 
<конеч-
ное_значение> do <тело_цикла> 
Параметр_цикла — переменная целого типа, тело_цикла — любой оператор 
языка Паскаль (в том числе составной). Параметр цикла описывается 
внутри оператора цикла (например, так: for var i := 1 to n do…) и область 
его видимости ограничена только этим оператором. 
9) Оператор цикла loop: 
loop <выражение> do <оператор>; 
Выражение должно иметь целый тип данных, оно указывает количество 
повторений тела цикла. Если значение выражения меньше или равно нулю, то 
тело цикла не выполняется ни разу. Цикл loop используется в простых ситуациях, 
когда тело цикла не зависит от номера итерации цикла. 
10) Оператор цикла foreach имеет одну из следующих форм: 
foreach <переменная> in <контейнер> do <оператор> 
или 
foreach <переменная>: <тип> in <контейнер> do <оператор> 
или 
foreach var <переменная> in <контейнер> do <оператор> 
Контейнером может быть динамический или статический массив, строка, 
множество и т. д. Переменная цикла должна иметь тип, совпадающий с типом 
элементов контейнера. Переменная цикла пробегает все значения элементов 
контейнера и для каждого значения переменной цикла выполняется тело цикла. 
Изменение переменной цикла внутри тела цикла не меняет элементы контейнера, 
т. е. они доступны только для чтения. 
11) Оператор цикла с предусловием: 
while <условие> do <тело_цикла>; 
Условие — выражение логического типа, тело_цикла — любой оператор 
языка Паскаль. Тело_цикла выполняется, пока условие имеет значение true. Если 
тело_цикла является составным оператором, его следует заключить в операторные 
скобки. 
12) Оператор цикла с постусловием: 
repeat <тело_цикла> until <условие>; 
Тело_цикла выполняется, пока условие имеет значение false. Если те-
ло_цикла является составным оператором, операторные скобки не нужны. 
 
10. Типы данных 
Тип данных определяет: 
 
множество допустимых значений, которое может принимать пе-

ременная или константа; 

 
набор допустимых операций, применимых к ней; 

 
формат внутреннего представления данных в памяти компьютера 

Типы данных делятся на простые и структурированные. 
Простые типы данных делятся на порядковые и вещественные. 
Порядковые типы обладают свойствами упорядоченности и дискретно-

сти. К ним относятся: целые, логический, символьный, перечисляемый и тип-
диапазон. 

10 
1) Целые типы byte, shortint, smallint, word, longword (cardinal), integer 
(longint), int64, uint64, BigInteger. Целые типы отличаются один от другого 
наличием или отсутствием знака и диапазоном значений, причем тип BigInte-
ger имеет неограниченный диапазон (в предыдущих версиях Паскаля отсутствует).  

2) Логический тип boolean, принимает два значения true (истина) и false 
(ложь). Обычно переменная логического типа является результатом проверки 
истинности некоторого условия.  
3) Символьный тип char, значениями являются любые символы компьютера, 
закодированные целыми числами диапазона 0..255. К типу char применимы 
встроенные функции и операции отношения. 
4) Перечисляемый тип задается перечислением значений, которые он 
может принимать. 
5) Тип-диапазон — подмножество некоторого базового порядкового типа, 
задается границами значений внутри базового типа. 
6) Вещественные типы: single, real, double, decimal. Все вещественные типы 
в PascalABC.NET являются знаковыми и отличаются диапазонами значений 
и точностью (количеством значащих цифр). 

Структурированные типы данных 
К структурированным типам относятся массив, запись, множество, 

файл, строка. 

7) Массив — именованный упорядоченный набор элементов, принадлежащих 
к одному типу данных (простому или структурированному). В Pas-
calABC.NET 
рассматриваются 
массивы 
двух 
видов — 
статические 
и 
динамические. Массив описывается либо как переменная с помощью зарезервированного 
слова array с указанием типа составляющих его элементов, 
например, 
var mas: array[1..20] of real;  // статический массив 
var mas: array of real;         // динамический массив 
либо через описание типа: 
type mas = array[1..20] of real; 
var m1: mas; 
8) Запись — структура данных, состоящая из фиксированного количества 
компонентов, называемых полями записи. Поля могут принадлежать к 
разным типам данных. Запись объявляется в разделе описания типов, например: 

type 
  auto = record 
    mark, color: string; 
    number: integer 
  end; 
var ter1, ter2: auto; 
Доступ к полям записи осуществляется по составному имени: 
auto.mark:= Ford; 
или с помощью оператора присоединения with: 
with auto do 
begin 

11 
Доступ онлайн
191 ₽
В корзину