2. Алгебра логики - Тольяттинский государственный университет

advertisement
Тольяттинский государственный университет
Автомеханический институт
Кафедра «Компьютерные технологии и обработка материалов давлением»
Ахмедханлы Д.М., Панюкова Е.В.
УЧЕБНО-МЕТОДИЧЕСКОЕ ПОСОБИЕ
по курсу «Информатика 1»
для студентов инженерных
специальностей очной формы обучения
Тольятти 2008
УДК 532.5 (533.6)
Содержание ГОС по дисциплине «Информатика» для инженерных специальностей:
№
1
2
3
4
5
6
7
Разделы ГОС
понятие информации, общая
характеристика процессов
сбора, передачи, обработки и
накопления информации;
технические и программные
средства реализации
информационных процессов;
компьютерный практикум;
программное обеспечение и
технологии
программирования;
общая характеристика
процессов сбора, передачи,
обработки и накопления
информации;
алгоритмизация и
программирование;
языки программирования
высокого уровня;
программное обеспечение и
технологии
программирования;
модели решения
функциональных и
вычислительных задач;
базы данных;
компьютерная графика
основы защиты информации и
сведений, составляющих
государственную тайну;
методы защиты информации;
локальные и глобальные сети
ЭВМ.
В рамках какого курса
изучается
Примечание
«Основы компьютерной
грамотности»
БФГ
«Информатика 1»
Модуль 1
«Информатика 1»
Модуль 2
«Информатика 2»
Модуль 3
«Информатика 2»
Модуль 4
«Информатика 2»
Модуль 4*
«Основы работы в Интернет»
БФГ
2
Учебно-методическое пособие содержит два Модуля.
В Модуле 1 изложены основы алгебры логики, принципы работы логических и
арифметических устройств ЭВМ, рассмотрены системы счисления и принципы перевода чисел
из одной системы счисления в другую.
В Модуле 2 изложены материалы по теме «Алгоритмические языки и программирование»,
приведены теоретические сведения, примеры программ и варианты индивидуальных заданий.
В начале каждого модуля указаны маршрутные карты, которые определяют
последовательность самостоятельного изучения теоретического материала, сроки выполнения
практических и индивидуальных заданий, сроки сдачи промежуточных и итоговых
тестирований.
Для самостоятельной проверки знаний необходимо пользоваться интерактивным
тренингом.
Электронный адрес сайта кафедры для прохождения тренинга:
http://inf.tltsu.ru/res/strogov/
Составители: Ахмедханлы Д.М., Панюкова Е.В.
© Тольяттинский государственный университет, 2008
3
Содержание
Маршрутная карта изучения дисциплины по Модулю 1 .............................................................................................. 7
1. Логические и арифметические основы ЭВМ.............................................................................................................. 8
1.1. Десятичная система счисления ........................................................................................................................... 9
1.2. Двоичная система счисления ............................................................................................................................. 10
1.3. Восьмеричная и шестнадцатеричная системы счисления .............................................................................. 11
1.4. Перевод чисел из любой системы счисления в десятичную .......................................................................... 11
1.5. Перевод чисел из десятичной системы счисления в любую другую ............................................................. 12
Вопросы для самоконтроля ...................................................................................................................................... 13
Методические указания для выполнения практического задания №1. «Системы счисления» .......................... 13
Приложение 1. Таблица вариантов заданий ................................................................................................................. 14
2. Алгебра логики ............................................................................................................................................................ 19
2.1. Логические операции ......................................................................................................................................... 21
Инверсия ............................................................................................................................................................... 23
Конъюнкция ......................................................................................................................................................... 23
Дизъюнкция .......................................................................................................................................................... 23
Эквиваленция (равнозначность) ......................................................................................................................... 23
Импликация .......................................................................................................................................................... 23
Антиконъюнкция ................................................................................................................................................. 23
Антидизъюнкция ................................................................................................................................................. 24
2.2. Нормальные формы ............................................................................................................................................ 25
Конъюнктивная нормальная форма ................................................................................................................... 25
Дизъюнктивная нормальная форма.................................................................................................................... 25
3. Применение средств алгебры логики для описания функционирования устройств компьютера ....................... 25
Логические схемы ..................................................................................................................................................... 27
Пример решение логических задач средствами алгебры логики .......................................................................... 28
Методические указания для выполнения практического задания №2. «Алгебра логики». Построение таблиц
истинности. ................................................................................................................................................................ 28
Пример построения логических схем ...................................................................................................................... 28
Методические указания для выполнения практического задания №3. «Алгебра логики». Построение
логических схем......................................................................................................................................................... 30
Приложение 2. Таблица вариантов заданий ................................................................................................................. 30
4. Индивидуальное задание. Модуль 1. «Построение логических схем по заданным булевым выражениям» ..... 32
Приложение 3. Таблица вариантов индивидуального задания ................................................................................... 32
Приложение 4. Титульный лист ИДЗ ............................................................................................................................ 35
Маршрутная карта изучения дисциплины по Модулю 2 ............................................................................................ 36
5. Введение в алгоритмизацию ...................................................................................................................................... 37
6. Знакомство со средой Турбо Паскаль ....................................................................................................................... 38
6.1. Общие сведения .................................................................................................................................................. 38
6.2. Запуск Турбо-Паскаля на выполнение ............................................................................................................. 38
6.3. Назначение функциональных клавиш системы Турбо-Паскаль .................................................................... 39
6.4. Работа с текстовым редактором Турбо-Паскаля ............................................................................................. 40
Клавиши перемещения курсора ......................................................................................................................... 40
Работа с блоками текста ...................................................................................................................................... 41
7. Основы алгоритмизации ............................................................................................................................................. 42
7.1. Алгоритм ............................................................................................................................................................. 42
7.2. Алгоритмические структуры ............................................................................................................................. 43
Самоконтроль ............................................................................................................................................................ 46
8. Программирование на языке Pascal ........................................................................................................................... 46
8.1. Алфавит языка .................................................................................................................................................... 47
4
8.2. Арифметические выражения и правила их записи .......................................................................................... 47
Знаки операций .................................................................................................................................................... 47
Операции div и mod ............................................................................................................................................. 47
8.3. Типы данных ....................................................................................................................................................... 48
Целые типы .......................................................................................................................................................... 48
Логический тип .................................................................................................................................................... 48
Символьный тип .................................................................................................................................................. 49
Строковый тип ..................................................................................................................................................... 49
Вещественный тип ............................................................................................................................................... 49
8.4. Стандартные функции........................................................................................................................................ 49
8.5. Структура программы на языке Паскаль ......................................................................................................... 51
8.6. Описательная часть программы ........................................................................................................................ 51
8.7. Исполнительная часть программы .................................................................................................................... 52
8.8. Оператор присваивания ..................................................................................................................................... 52
8.9. Операторы ввода-вывода ................................................................................................................................... 52
Оператор ввода .................................................................................................................................................... 52
Оператор вывода .................................................................................................................................................. 52
8.10. Комментарии в программе............................................................................................................................... 53
Пример программы линейной структуры ............................................................................................................... 54
Вопросы для самоконтроля ...................................................................................................................................... 54
8.11. Методические указания для выполнения практического задания №4. «Следования» .............................. 55
Приложение 5. Таблица вариантов заданий ................................................................................................................. 55
9. Ветвления ..................................................................................................................................................................... 57
9.1. Операторы условия и перехода ......................................................................................................................... 57
Логический оператор ........................................................................................................................................... 57
Операции отношения ........................................................................................................................................... 58
Логические операции .......................................................................................................................................... 58
9.2. Оператор выбора ................................................................................................................................................ 59
Пример программы разветвленной структуры ....................................................................................................... 60
Вопросы для самоконтроля ...................................................................................................................................... 60
9.3. Методические указания для выполнения практического задания №5. «Ветвления»................................... 61
Приложение 6. Таблица вариантов заданий ................................................................................................................. 61
10. Циклические вычислительные процессы................................................................................................................ 63
10.1. Оператор цикла с параметром ......................................................................................................................... 63
10.2. Оператор цикла с постусловием ..................................................................................................................... 63
10.3. Оператор цикла с предусловием ..................................................................................................................... 64
10.4. Вложенные циклы ............................................................................................................................................ 65
10.5. Оператор прерывания цикла ............................................................................................................................ 65
Пример программы циклической структуры .......................................................................................................... 65
Вопросы для самоконтроля ...................................................................................................................................... 67
10.6. Методические указания для выполнения практического задания №6. «Циклы» ....................................... 67
Приложение 7. Таблица вариантов заданий ................................................................................................................. 67
11. Операции с индексированными переменными ...................................................................................................... 70
11.1. Массивы одномерные ...................................................................................................................................... 70
11.2. Описание массивов ........................................................................................................................................... 70
Ввод элементов массива ...................................................................................................................................... 71
Вывод элементов массива ................................................................................................................................... 71
11.3. Обработка одномерных массивов ................................................................................................................... 71
Пример программы обработки одномерного массива ........................................................................................... 74
Вопросы для самоконтроля ...................................................................................................................................... 74
5
11.4. Методические указания для выполнения практического задания №7. «Операции с индексированными
переменными» ........................................................................................................................................................... 75
Приложение 8. Таблица вариантов заданий ................................................................................................................. 75
12. Двумерные массивы .................................................................................................................................................. 77
12.1. Матрицы ............................................................................................................................................................ 77
12.2. Описание двумерного массива ........................................................................................................................ 77
Ввод элементов двумерного массива ................................................................................................................. 78
Вывод элементов двумерного массива .............................................................................................................. 78
12.3. Обработка двумерных массивов ..................................................................................................................... 79
Пример программы обработки двумерного массива.............................................................................................. 83
Вопросы для самоконтроля ...................................................................................................................................... 84
12.4. Методические указания для выполнения практического задания №8. «Матрицы» .................................. 85
Приложение 9. Таблица вариантов заданий ................................................................................................................. 85
13. Подпрограммы .......................................................................................................................................................... 87
13.1. Функции и процедуры ...................................................................................................................................... 87
Структура программы, содержащей процедуру (функцию) ............................................................................ 87
13.2. Процедуры......................................................................................................................................................... 88
13.3. Вложенные процедуры .................................................................................................................................... 89
Директива forward ................................................................................................................................................ 89
13.4. Функции ............................................................................................................................................................ 90
Пример программы с использованием подпрограмм ............................................................................................. 91
Вопросы для самоконтроля ...................................................................................................................................... 92
Методические указания для выполнения практического задания №9. «Подпрограммы» ................................. 93
Приложение 10. Таблица вариантов заданий ............................................................................................................... 93
14. Обработка строк текста ............................................................................................................................................ 95
14.1. Символьные переменные ................................................................................................................................. 95
Фрагмент таблицы ASCII-кодов букв латинского алфавита ........................................................................... 96
Фрагмент таблицы ASCII-кодов букв русского алфавита ............................................................................... 96
14.2. Функции обработки символьных переменных .............................................................................................. 96
14.3. Строковые переменные .................................................................................................................................... 97
14.4. Функции обработки строковых переменных ................................................................................................. 98
14.5. Процедуры обработки строковых переменных ............................................................................................. 99
14.6. Примеры обработки строковых переменных ................................................................................................. 99
Вопросы для самоконтроля .................................................................................................................................... 101
15. Структурированные типы данных ......................................................................................................................... 101
Записи ....................................................................................................................................................................... 102
Пример программы использования массива записей ........................................................................................... 104
Вопросы для самоконтроля .................................................................................................................................... 105
Методические указания к выполнению индивидуального задания по Модулю 2. «Массивы записей» ......... 105
Приложение 11. Таблица вариантов индивидуального задания ............................................................................... 106
6
№ недели
Маршрутная карта изучения дисциплины по Модулю 1
1
1
2
2
3
3
4
5
5
6
6
Наименование
учеб. мероприятия
Тема учебного мероприятия
(под
руководством)
Консультация
Получение личных логинов и паролей. Знакомство с образоват.
порталом, маршрутной картой по Модулю 1.
(тьютор)
Подготовка к практическому занятию. Изучение теоретического
Самостоятельное
материала: Раздел 1. «Логические и арифметические основы
изучение
ЭВМ. Системы счисления». Ответить на вопросы самоконтроля в
материала
конце раздела.
Выполнить практическое задание №1 по теме «Системы
Практическое
счисления». Варианты заданий приведены в Приложении 1.
занятие
Выполненное задание предъявить преподавателю. Пройти
(преподаватель) тренинг по теме «Системы счисления»
(http://inf.tltsu.ru/res/strogov/).
Самостоятельное Подготовка к практическому занятию. Изучение теоретического
изучение
материала: Раздел 2. «Алгебра логики». Ответить на вопросы
материала
самоконтроля в конце раздела.
Выполнить практическое задание №2 по теме «Алгебра
Практическое
логики», построение таблиц истинности. Варианты заданий
занятие
приведены в Приложении 2. Выполненное задание предъявить
(преподаватель) преподавателю.
Подготовка к практическому занятию. Изучение теоретического
Самостоятельное
материала: Раздел 3. «Применение средств алгебры логики для
изучение
описания функционирования устройств компьютера» (стр. 27).
материала
Ответить на вопросы самоконтроля в конце раздела.
Выполнить практическое задание №3 по теме «Применение
Практическое
средств алгебры логики для описания функционирования
занятие
устройств компьютера», построение логических схем. Варианты
(преподаватель) заданий приведены в Приложении 2. Выполненное задание
предъявить преподавателю.
Выполнение ИДЗ №1 по теме «Логические и арифметические
Практическая
основы ЭВМ. Алгебра логики». Варианты заданий приведены в
работа
Приложении 3. Пример оформления титульного листа приведен в
Приложении 4.
Получение консультации у тьютора по выполнению ИДЗ №1.
Консультация
Подготовка к промежуточному тестированию по Модулю 1.
Пройти тренинг по теме «Битовые операции»
(тьютор)
( http://inf.tltsu.ru/res/strogov/).
Практическое
занятие
Сдать преподавателю ИДЗ №1.
(преподаватель)
Промежуточное
тестирование по Пройти промежуточное тестирование по Модулю 1 в центре
модулю №1 через тестирования.
ЦТ
7
1. Логические и арифметические основы ЭВМ
Термин информатика возник в 60-х гг. во Франции для названия области, занимающейся
автоматизированной обработкой информации с помощью электронных вычислительных
машин. Французский термин informatique (информатика) образован путем слияния слов
information (информация) и automatique (автоматика) и означает «информационная автоматика
или автоматизированная переработка информации». В англоязычных странах этому термину
соответствует синоним computer science (наука о компьютерной технике).
Выделение информатики как самостоятельной области человеческой деятельности в первую
очередь связано с развитием компьютерной техники. Причем основная заслуга в этом
принадлежит микропроцессорной технике, появление которой в середине 70-х гг. послужило
началом второй электронной революции. С этого времени элементной базой вычислительной
машины становятся интегральные схемы и микропроцессоры, а область, связанная с созданием
и использованием компьютеров, получила мощный импульс в своем развитии. Термин
«информатика» приобретает новое дыхание и используется не только для отображения
достижений компьютерной техники, но и связывается с процессами передачи и обработки
информации.
Информатика – это область человеческой деятельности, связанная с процессами
преобразования информации с помощью компьютеров и их взаимодействием со средой
применения.
Или более простое понятие:
Информатика – это наука, изучающая вопросы сбора, обработки, хранения и передачи
информации с помощью ЭВМ.
В вопросах организации обработки информации с помощью ЭВМ важное место занимают
системы счисления, формы представления данных и специальное кодирование чисел с
помощью набора бит (байт).
Информация в ЭВМ хранится и отрабатывается в определенном, закодированном виде.
ЭВМ оперируется числами, представленными в некоторой системе счисления.
Системой счисления называется способ представления чисел посредством цифровых
знаков.
Системы счисления принято делить на:
 Позиционные.
 Непозиционные.
 Символические.
В символических системах каждому числу ставится в соответствие свой символ. Эти
системы не находят широкого применения в силу естественной их ограниченности (алхимия,
кодированные сообщения) – бесчисленного множества символов, которое требуется для
изображения всех возможных чисел.
В позиционных системах счисления значимости числа зависит от позиции. Позиция –
некоторое место, в котором может быть представлен лишь один символ. Примером
позиционной системы счисления является десятичная система.
В таблице 1 показана система представления чисел в десятичной, двоичной, восьмеричной и
шестнадцатеричной системах счисления.
Всякая система счисления характеризуется основанием – количеством цифр, используемых
для изображения чисел.
8
Система представления чисел в различных системах счисления
Таблица 1
Десятичная
Двоичная
Восьмеричная
Шестнадцатеричная
0
0000
0
0
1
0001
1
1
2
0010
2
2
3
0011
3
3
4
0100
4
4
5
0101
5
5
6
0110
6
6
7
0111
7
7
8
1000
10
8
9
1001
11
9
10
1010
12
А
11
1011
13
B
12
1100
14
C
13
1101
15
D
14
1110
16
E
15
1111
17
F
16
10000
20
10
17
10001
21
11
18
10010
22
12
19
10011
23
13
20
10100
24
14
Наибольшее распространение для представления чисел в ЭВМ, получили двоичная,
восьмеричная и шестнадцатеричная системы счисления.
1.1. Десятичная система счисления
В этой системе число представляется в виде полинома n степени, а изображается
совокупностью некоторых символов, каждый из которых имеет различный вес в зависимости от
позиции, которую он занимает.
Всем позициям приписывается различный вес, который чаще всего выбирается как целая
степень основания системы.
Основание системы счисления – число, которое является мощностью множества различных
символов, допустимых в каждой позиции числа. Привычная для нас 10-я система счисления
использует для записи чисел 10 цифр: 0-9. Это позиционная система счисления, т.е. значение
цифры в числе зависит от положения (позиции) (в отличие от римской).
Пример 1. Число 55,5 можно представить:
55,5=5*101+5*100+5*10-1
десятки единицы десятые доли единицы
Если g принять за основание системы, то любое число можно представить как
an an 1...a0 , a1...a m  an  g n  an 1  g n 1...  a0  g 0  a1  g 1  ...  a m  g  m
9
В отличие от системы счета времени, десятичная система является однородной, т.е. одних и
тех же десятичных символов достаточно, чтобы изобразить любое число. В то время как в
смешанных системах нужно придумывать все новые и новые символы для того, чтобы
изобразить следующее по величине число.
Таким образом, однородность – одно из важных свойств позиционных систем.
1.2. Двоичная система счисления
В двоичной системе счисления для изображения чисел используют только две цифры 0 и 1.
С помощью двоичных кодов можно кодировать и хранить в памяти ЭВМ любую алфавитноцифровую информацию. Каждому символу присваивается свой код. С помощью кода,
состоящего из n разрядов, можно закодировать (представить) 2n различных символов.
Информация хранится в байтах. 1 байт = 8 бит, т.е. для кодирования используется
восьмиразрядный двоичный код.
Основанием двоичной системы является число 2.
Пример 2.
 101(2)=1*22+0*21+1*20=4+0+1=5(10).
 101(2)=>5(10).
(Любое число в 0-ой степени равно 1)
Арифметические операции в двоичной системе счисления
Таблица 2
Сложение
Вычитание
Умножение
0+0=0
0-0=0
0*0=0
1+0=1
1-0=1
1*0=0
0+1=1
0-1=1
0*1=0
1+1=10
1-1=0
1*1=1
При сложении двух чисел, равных 1, в данном разряде получается 0, а 1-ца переносится в
старший разряд.
Пример 3.
101
+ 11
1000 ,
где 101(2)=> 5(10), 11(2)=> 3(10), 1000(2) => 8(10).
Действительно: 5+3=8.
При вычитании из 0 единицы, занимается единица из старшего ближайшего разряда,
отличного от 0. При этом, единица занятая в старшем разряде, даёт 2 единицы в младшем
разряде и по единице во всех разрядах между старшим и младшим.
Пример 4.
101
- 11
10 ,
где 101(2)=>5(10), 11(2)=>3(10), 10(2)=>2(10).
Действительно: 5-3=2.
Операция умножения сводится к многократному сдвигу и сложению.
10
Пример 5.
11
* 10
00
11
110 ,
где 11(2)=>3(10), 10(2)=>2(10), 110(2)=>6(10).
Действительно: 3*2=6.
1.3. Восьмеричная и шестнадцатеричная системы счисления
Запись двоичных чисел достаточно длинна, операции над ними – утомительны. Для
краткости записи двоичной информации используются системы с большим основанием.
Главным требованием, предъявляемым к этим системам, является то, что перевод из этих
систем в двоичную и обратно, должен быть достаточно кратким, т.е. эти системы и двоичная
должны быть в некотором смысле эквивалентны. Таковыми являются восьмеричная и
шестнадцатеричная системы (см. таблицу 1).
В 8-ой системе для изображения чисел используют 8 цифр: 0-7. Основанием системы
являются число 8. Для перевода чисел из 2-ой системы счисления в восьмеричную, достаточно
разбить двоичное число на триады (по три) двигаясь влево и вправо от десятичной точки.
Пример 6: 11 110.001 01(2)=36.12(8).
К крайним группам добавляются нули для дополнения их до трех разрядов.
8=23 – отсюда триады.
В 16-й с/с для изображения чисел используется 16 символов: 10 цифр и 6 букв латинского
алфавита: А, B, C, D, E, F. Основание системы – число 16.
16=24 – для преобразования двоичного числа в 16-ричное, нужно разбить его на тетрады (по
четыре), двигаясь влево и вправо от десятичной точки. К крайним группам нули добавляются
до 4 разрядов.
Пример 7: 1111 0101.1000 111(2)=F5.8E(16).
и обратно:
6ЕА.4(16)=110 1110 1010.0100(2).
Использование 8-ой или 16-ой систем счисления позволяет уменьшить в 3 или 4 раза
количество разрядов для записи чисел.
1.4. Перевод чисел из любой системы счисления в десятичную
Для перевода числа из любой системы счисления в десятичную, необходимо разложить это
число по степеням основания этой системы.
Пример 8:
1101(2)  1  23  1  22  0  21  1  20  13(10)
15.1(8)  1  81  5  80  1  81  8  5 
1
 13.125(10)
8
A8.2(16)  A 161  8 160  2 161  10 161  8 1  2 
 160  8 
1
 168.125(10)
8
11
1

16
1.5. Перевод чисел из десятичной системы счисления в любую другую
Для перевода чисел из десятичной с/с в любую другую, необходимо делить десятичное
число на основание системы, в которую переводят, сохраняя при этом остатки от каждого
деления.
Результат формируется справа налево. Деление продолжается до тех пор, пока результат
деления не станет меньше делителя.
Пример 9. Перевести число 13 из десятичной системы счисления в двоичную систему:
13 2
12 6
1 6
0
2
3
2
1
2
1
13(10) => 1101(2).
Пример 10. Перевести число 13 из десятичной системы счисления в восьмеричную систему:
13 8
8 1
5
13(10) => 15(8).
Пример 11. Перевести число 638 из десятичной системы счисления в шестнадцатеричную
систему:
638 16
48 39
158 32
144 7
14
16
2
638(10) => 27E(16).
Остатки записываются в шестнадцатеричном виде (14 => Е).
Пример 12. Сложение двоичных чисел:
11011001(2)
+ 1011101(2)
100110110(2).
Для проверки результата сложения двоичное число нужно разбить на триады, перевести в
восьмеричную систему счисления согласно таблице 1, а затем перейти в десятичную систему и
осуществить сложение.
11 011 001(2)=331(8)=3*82+3*81+1*80=192+24+1=217(10).
1 011 101(2)=135(8)=1*82+3*81+5*80=64+24+5=93(10).
100 110 110(2)=466(8)=4*82+6*81+6*80=256+48+6=310(10).
Проверка:
217(10)+93(10)=310(10).
12
Пример 13. Сложение шестнадцатеричных чисел:
8E38C(16)
+ 5D35(16)
940C1(16).
Перед сложением необходимо перейти согласно таблице 1 в 10-ю систему счисления,
произвести сложение, затем опять вернуться к 16-ой системе счисления.
C(16)+5(16) => 12(10)+5(10)=17(10) => 11(16).
8(16)+3(16)+1(16)=12(10) => С(16).
3(16)+D(16)=3(10)+13(10)=16(10) => 10(16).
E(16)+5(16)+1(16)=14(10)+5(10)+1(10)=20(10) =>14(16).
8(16)+1=9(10) => 9(16).
Вопросы для самоконтроля
1. Что такое система счисления?
2. Чем характеризуется система счисления?
3. Виды систем счисления.
4. Десятичная система счисления. Основание. Представление чисел.
5. Двоичная система счисления. Основание.
6. Восьмеричная и шестнадцатеричная системы счисления.
7. Перевод чисел из любой системы счисления в десятичную.
8. Перевод чисел из десятичной в любую другую систему счисления.
9. Почему для машинной арифметики используется двоичная система счисления?
Методические указания для выполнения практического задания №1.
«Системы счисления»
Цель работы: Ознакомиться с системами счислений. Рассмотреть систему представления
чисел в памяти ЭВМ.
Задание:
1. В приложении 1 выбрать вариант задания.
2. Выполнить задание, пользуясь теоретическими сведениями.
3. Оформить выполненное задание в тетради для практических занятий.
4. Результат работы предъявить преподавателю.
5. Ответить на вопросы самоконтроля.
6. Защитить выполненную работу у преподавателя.
13
Приложение 1. Таблица вариантов заданий
Вариант
1
2
3
4
5
Задание
1. Выполнить действия в двоичной системе счисления:
 1100 – 0111
 11001*111
 1111 + 1011
2. Перевести из одной системы счисления в другую:
 число 42 из десятичной системы счисления в 2-ную
 число 100111 из двоичной системы счисления в 10-ную
 число FA2 из шестнадцатеричной системы счисления в 5-ную
1. Выполнить действия в двоичной системе счисления:
 1111 – 1101
 1001 * 110
 10111 + 111
2. Перевести из одной системы счисления в другую:
 число 39 из десятичной системы счисления в 2-ную
 число 11001100 из двоичной системы счисления в 10-ную
 число DBC из шестнадцатеричной системы счисления в 3-ную
1. Выполнить действия в двоичной системе счисления:
 1011 + 10111
 10111 – 1111
 1100101*101
2. Перевести из одной системы счисления в другую:
 число 89 из десятичной системы счисления в 2-ную
 число 110100101 из двоичной системы счисления в 10-ную
 число 110111 из двоичной системы счисления в 6-ную
1. Выполнить действия в двоичной системе счисления:
 10011 + 1101
 11000 – 1101
 1011*111
2. Перевести из одной системы счисления в другую:
 число 73 из десятичной системы счисления в 2-ную
 число 1110011 из двоичной системы счисления в 10-ную
 число 111101 из двоичной системы счисления в 7-ную
1. Выполнить действия в двоичной системе счисления:
 11001 – 10101
 10011 * 111
 11001 + 100011
2. Перевести из одной системы счисления в другую:
 число 64 из десятичной системы счисления в 2-ную
14
1.
6
2.
1.
7
8
2.



1.
2.
1.
9
2.
1.
10
2.
 число 111100101 из двоичной системы счисления в 10-ную
 число 100101 из двоичной системы счисления в 5-ную
Выполнить действия в двоичной системе счисления:
 11011 + 11111
 11101 – 1101
 1011*1001
Перевести из одной системы счисления в другую:
 число 71 из десятичной системы счисления в 2-ную
 число 101100101 из двоичной системы счисления в 10-ную
 число 111101 из двоичной системы счисления в 6-ную
Выполнить действия в двоичной системе счисления:
 10111 – 1101
 10011 * 1010
 11011 + 11111
Перевести из одной системы счисления в другую:
число 85 из десятичной системы счисления в 2-ную
число 110101 из двоичной системы счисления в 10-ную
число 63D из шестнадцатеричной системы счисления в 7-ную
Выполнить действия в двоичной системе счисления:
 110011 – 10001
 101101 * 1101
 111001 + 1101
Перевести из одной системы счисления в другую:
 число 42 из десятичной системы счисления в 2-ную
 число 111100001 из двоичной системы счисления в 10-ную
 число 4F9 из шестнадцатеричной системы счисления в 6-ную
Выполнить действия в двоичной системе счисления:
 11100+10011
 110101-11011
 1011*1001
Перевести из одной системы счисления в другую:
 число 69 из десятичной системы счисления в 2-ную
 число 111100011 из двоичной системы счисления в 10-ную
 число 110101 из двоичной системы счисления в 3-ную
Выполнить действия в двоичной системе счисления:
 110101+10011
 11101-1111
 1011*1001
Перевести из одной системы счисления в другую:
 число 75 из десятичной системы счисления в 2-ную
 число 111100111 из двоичной системы счисления в 10-ную
 число 423 из 5-ричной системы счисления в 7-ричную
15
11
12
13
14
15
16
1. Выполнить действия в двоичной системе счисления:
 10101+10011
 100111-11011
 1011*1001
2. Перевести из одной системы счисления в другую:
 число 312 из десятичной системы счисления в 2-ную
 число 111100110 из двоичной системы счисления в 10-ную
 число 621 из 7-ричной системы счисления в 5-ную
1. Выполнить действия в двоичной системе счисления:
 111101+10011
 11111-10111
 1011*1001
2. Перевести из одной системы счисления в другую:
 число 251 из десятичной системы счисления в 2-ную
 число 111100100 из двоичной системы счисления в 10-ную
 число 3FD из 16-ричной системы счисления в 4-ную
1. Выполнить действия в двоичной системе счисления:
 111001+10011
 110101-11101
 1011*1001
2. Перевести из одной системы счисления в другую:
 число 103 из десятичной системы счисления в 2-ную
 число 1111000001 из двоичной системы счисления в 10-ную
 число 565 из 7-ричной системы счисления в 3-ную
1. Выполнить действия в двоичной системе счисления:
 111001+10011
 111101-1101
 1011*1001
2. Перевести из одной системы счисления в другую:
 число 149 из десятичной системы счисления в 2-ную
 число 110110111 из двоичной системы счисления в 10-ную
 число 332 из 4-ной системы счисления в 6-ную
1. Выполнить действия в двоичной системе счисления:
 111001+10011
 11011-1001
 1011*1001
2. Перевести из одной системы счисления в другую:
 число 107 из десятичной системы счисления в 2-ную
 число 111010111 из двоичной системы счисления в 10-ную
 число 110101 из двоичной системы счисления в 7-ную
1. Выполнить действия в двоичной системе счисления:
 100101+10011
16
2.
1.
17
2.
1.
18
19
20
21
2.



1.
2.



1.
2.



1.
 111101-1111
 1011*1001
Перевести из одной системы счисления в другую:
 число 143 из десятичной системы счисления в 2-ную
 число 111110111 из двоичной системы счисления в 10-ную
 число 201 из 7-ричной системы счисления в 3-ную
Выполнить действия в двоичной системе счисления:
 100101+100011
 11101-1011
 1011*101
Перевести из одной системы счисления в другую:
 число 65 из десятичной системы счисления в 2-ную
 число 111111111 из двоичной системы счисления в 10-ную
 число 813 из 9-ричной системы счисления в 4-ную
Выполнить действия в двоичной системе счисления:
 110101+100011
 110001-1101
 1011*111
Перевести из одной системы счисления в другую:
число 98 из десятичной системы счисления в 2-ную
число 111110101 из двоичной системы счисления в 10-ную
число 110101 из двоичной системы счисления в 7-ную
Выполнить действия в двоичной системе счисления:
 111001+100011
 110001-11101
 111*101
Перевести из одной системы счисления в другую:
число 155 из десятичной системы счисления в 2-ную
число 111100010 из двоичной системы счисления в 10-ную
число 442 из 6-ричной системы счисления в 5-ную
Выполнить действия в двоичной системе счисления:
 111001+10011
 111101-10011
 1011*111
Перевести из одной системы счисления в другую:
число 91 из десятичной системы счисления в 2-ную
число 110100101 из двоичной системы счисления в 10-ную
число 648 из 9-ричной системы счисления в 5-ную
Выполнить действия в двоичной системе счисления:
 111001+10011
 100110-11011
 1111*1001
17
2.



1.
22
23
24
25
2.



1.
2.



1.
2.



1.
2.



1.
26
2.

Перевести из одной системы счисления в другую:
число 88 из десятичной системы счисления в 2-ную
число 100111101 из двоичной системы счисления в 10-ную
число 435 из 7-ной системы счисления в 9-ную
Выполнить действия в двоичной системе счисления:
 111001+10011
 101101-10110
 1011*101
Перевести из одной системы счисления в другую:
число 115 из десятичной системы счисления в 2-ную
число 1010101 из двоичной системы счисления в 10-ную
число 306 из 7-ной системы счисления в 3-ную
Выполнить действия в двоичной системе счисления:
 110101+10001
 100101-11001
 1111*1001
Перевести из одной системы счисления в другую:
число 106 из десятичной системы счисления в 2-ную
число 110101101 из двоичной системы счисления в 10-ную
число 110101 из двоичной системы счисления в 6-ную
Выполнить действия в двоичной системе счисления:
 100101+10011
 110001-10101
 111*1001
Перевести из одной системы счисления в другую:
число 59 из десятичной системы счисления в 2-ную
число 1101101 из двоичной системы счисления в 10-ную
число 340 из 7-ной системы счисления в 5-ную
Выполнить действия в двоичной системе счисления:
 110101+1001
 110011-10011
 1011*101
Перевести из одной системы счисления в другую:
число 157 из десятичной системы счисления в 2-ную
число 1001101011 из двоичной системы счисления в 16-ную
число 142 из 9-ной системы счисления в 7-ную
Выполнить действия в двоичной системе счисления:
 101101+10011
 110101 - 10111
 1111*101
Перевести из одной системы счисления в другую:
число 233 из десятичной системы счисления в 2-ную
18
27
28
29
30
 число 110100111 из двоичной системы счисления в 10-ную
 число 110101 из двоичной системы счисления в 5-ную
1. Выполнить действия в двоичной системе счисления:
 10001 + 11011
 110101 - 11101
 11101*11001
2. Перевести из одной системы счисления в другую:
 число 131 из десятичной системы счисления в 2-ную
 число 110101101 из двоичной системы счисления в 10-ную
 число 351 из 7-ной системы счисления в 5-ную
1. Выполнить действия в двоичной системе счисления:
 110101 + 10011
 11101 - 1011
 111 * 1001
2. Перевести из одной системы счисления в другую:
 число 253 из десятичной системы счисления в 2-ную
 число 1101101101 из двоичной системы счисления в 10-ную
 число 404 из 6-ной системы счисления в 7-ную
1. Выполнить действия в двоичной системе счисления:
 110101 - 10011
 101101 + 1111
 1011*101
2. Перевести из одной системы счисления в другую:
 число 141 из десятичной системы счисления в 2-ную
 число 110101111 из двоичной системы счисления в 10-ную
 число 511 из 7-ной системы счисления в 5-ную
1. Выполнить действия в двоичной системе счисления:
 1100 * 0111
 11001+1011
 111101 - 10011
2. Перевести из одной системы счисления в другую:
 число 147 из десятичной системы счисления в 2-ную
 число 110100101 из двоичной системы счисления в 10-ную
 число 1101010 из двоичной системы счисления в 9-ную
2. Алгебра логики
Логика – одна из древнейших наук. Ее основателем считается древнегреческий мыслитель
Аристотель (384 – 322 гг. до н. э.), который первым систематизировал формы и правила
мышления, обстоятельно исследовал категории понятие и суждение, подробно разработал
теорию умозаключений и доказательств, описал ряд логических операций, сформулировал
основные законы мышления. Он подвергал анализу человеческое мышление, его формы –
понятие, суждение, умозаключение, и рассмотрел со стороны строения, структуры. Логика
Аристотеля носит название формальной логики. Это название происходит из принципа:
19
правильность рассуждения определяется только его логической формой или структурой и не
зависит от конкретного содержания входящих в него высказываний.
Продолжение развития логики связано математической логикой. Основоположником
математической логики считается великий математик и философ Готфрид Вильгельм Лейбниц
(1646-1716). Он попытался построить первые логические исчисления: арифметические и
буквенно-алгебраические. Но Лейбниц высказал только идею, а развил её окончательно
англичанин Джордж Буль (1815-1864). Он вывел для логических построений особую алгебру
(алгебру логики). В отличие от обычной логики, в ней символами обозначаются не числа, а
высказывания. Алгебра логики (булева алгебра) изучает высказывания, рассматриваемые со
стороны их логических значений (истинности или ложности), и логические операции над ними.
Создание алгебры логики представляло собой попытку решать традиционные логические
задачи алгебраическими методами. С появлением теории множеств (70-е гг. 19 в.), поглотившей
часть первоначального предмета алгебры логики, и дальнейшим развитием математической
логики (последняя четверть 19 в. – 1-я половина 20 в.) предмет алгебр логики значительно
изменился. Основным предметом алгебры логики стали высказывания. Под высказыванием
понимается имеющее смысл языковое выражение, относительно которого можно утверждать,
что оно либо истинно, либо ложно.
Пример 1.
 «5 есть простое число». Это высказыванием является истинным.
 «4 + х = 6». Это уравнение не является высказыванием. Однако, придавая переменной х
определенное числовое значение, будет высказывание.
 «роза – цветок». Это высказывание является истинным.
 «все углы – прямые». Это высказывание является ложным.
 «3 + 5 = 9». Это высказывание является ложным.
Высказывание считается простым, если никакая его часть не является суждением.
Сложное высказывание характеризуется тем, что оно образованно из нескольких
высказываний с помощью определенных способов соединения.
Пример 2.
 «Париж – столица Франции». Это высказывание простое.
 «Неверно, что Париж – столица Англии». Это высказывание сложное.
Частные высказывания выражают конкретные факты. Общие высказывания характеризуют
свойства групп объектов или явлений.
Пример 3.
 «Луна - спутник Земли». Это частное высказывание.
 «Всякий человек – млекопитающее». Это общее высказывание.
Рассуждение - это цепочка взаимосвязанных высказываний, фактов и общих положений,
полученных из других высказываний по определенным правилам вывода.
Пример 4.
 «Если треугольник равносторонний, то у него все углы равны между собой».
 «Если король под шахом и ему некуда ходить, то – мат».
Умозаключение – прием мышления, посредством которого из исходного знания получается
новое знание; из одного или нескольких истинных высказываний, называемых предпосылками,
по определенным правилам вывода можно получить заключение.
Пример 5. «Все металлы – простые вещества». «Литий – металл». Следовательно «Литий –
простое вещество».
Любое правило вывода умозаключений состоит из двух высказываний (простых или
сложных). Одно из них называется предпосылкой или условием, а второе – следствием,
заключением или выводом.
20
Пример 6. «Если треугольник равносторонний, то у него все углы 60 градусов».
Высказывание «У него все углы равны 60 градусов» – это заключение, а высказывание
«Треугольник равносторонний» – это предпосылка.
Существуют умозаключения, осуществляемые по схемам аналогии, индукции и дедукции.
Умозаключение по аналогии – это правило полученное из рассмотрения какого-либо
объекта, переносимое на менее изученный, сходный по существенным свойствам и качествам
объекта.
Пример 7. Из высказывания «Солнечная система – это планеты, вращающиеся по орбитам, в
центре которых находится Солнце» можно получить умозаключение по аналогии: «Атом – это
электроны, вращающиеся по орбитам, в центре которых находится ядро».
Индукция – это правило вывода умозаключений при переходе от частных высказываний к
общим.
Пример 8. Высказывания: «кошки имеют хвост», «собаки имеют хвост», «обезьяны имеют
хвост», «кошки, собаки, обезьяна – млекопитающие». Следовательно, «все млекопитающие
имеют хвост». Это умозаключение ложно.
Индуктивный вывод умозаключений позволяет формулировать различные гипотезы,
догадки, но иногда он может приводить и к ошибочным умозаключениям.
Дедукция – это правило вывода умозаключений при переходе от общих суждений к
частным.
Пример 9. «Умные люди не делают ошибки». «Я – умный человек». Следовательно: «Я не
делаю ошибок».
В математической логике не рассматривается конкретное содержание высказывания, важно
только, истинно оно или ложно. Поэтому высказывания можно представить некоторой
переменной величиной, значением которой может быть только «0» или «1». Если высказывание
истинно, то его значение равно «1», если ложно, то равно «0».
Из уже заданных простых высказываний можно строить более сложные высказывания,
используя частицу «не», а также союзы «и», «или», «если..., то...», «тогда и только тогда, когда»
и т.п..
2.1. Логические операции
Истинностные значения новых высказываний определяются при этом только
истинностными значениями входящих в них высказываний. Построение из данных
высказываний (или из данного высказывания) нового высказывания называется логической
операцией. Знаки логических операций называются логическими связками. Логические связки
могут быть: одноместными (унарными), двухместными (бинарные), трехместными
(тернарными) и т.д.
Пример 10.
 Из высказываний «х > 2», «х < 3» при помощи связки «и» можно получить высказывание
«x > 2 и х < 3»;
 из высказываний «у > 10», «х < 3» при помощи связки «или» можно получить
высказывание «у > 10 или х < 3»;
 из высказываний «х > 2», «у < 3» при помощи связки «если..., то...» можно получить
высказывание «если x > 2, то у < 3».
Истинность или ложность получаемых таким образом высказываний зависит от истинности
и ложности исходных высказываний и соответствующей трактовки связок как операций над
высказываниями.
В алгебре логики логические операции чаще всего описываются при помощи таблиц
истинности. В таблице 1 представлена таблица истинности для операции «отрицание»
(«инверсия»).
21
Таблица истинности для операции «отрицания»
Таблица 1
А
не А
0
1
1
0
В таблице 2 приведены основные бинарные логические операции и связки.
Основные бинарные логические операции и связки
Таблица 2
Обозначение
логической
операции
А1  А2
Другие
обозначения
логической
операции
А1 & А2
А1  А2
А1А2
Название логической
операции и связки
Примечание
(читается)
конъюнкция,
логическое умножение,
логическое «и»
А1 и А2
А1 или А2
если А1, то А2;
А1 имплицирует А2;
А1 влечет А2
А1  А2
А1 + А2
дизъюнкция,
логическое сложение,
логическое «или»
А1  А2
А1  А2
А1  А2
импликация,
логическое следование
А1  А2
А1 + А2
А1  А2
А1  А2
А1 ~ А2
А1  А2
А1  А2
А1  А2
сумма по модулю 2,
разделительная
дизъюнкция,
разделительное «или»
эквиваленция,
эквивалентность,
равнозначность,
тождественность
А1 плюс А2;
либо А1, либо А2
А1 тогда и только тогда,
когда А2;
А1 эквивалентно А2
А1  А2
штрих Шеффера,
антиконъюнкция
неверно, что А1 и А2;
А1 штрих Шеффера А2
А1  А2
стрелка Пирса,
антидизъюнкция,
функция Вебба,
функция Даггера
ни А1, ни А2;
А1 стрелка Пирса А2
А1 А2
А1  А2
Примечание: А1 и А2 являются высказываниями.
Связки и частица «не» рассматриваются в алгебре логики как операции над величинами,
принимающими значения 0 (ложь/false) и 1 (истина/true), и результатом применения этих
операций также являются числа 0 или 1. В таблице 3 представлены все наборы значений
переменных А1 и А2 и значения функций на этих наборах.
22
Таблица истинности для основных бинарных логических операций
Таблица 3
А1
А2




~


0
0
0
0
1
0
1
1
1
0
1
0
1
1
1
0
1
0
1
0
0
1
0
1
0
1
0
1
1
1
1
1
0
1
0
0
Инверсия
Отрицание высказывания А (т.е. не А) обозначается А , или А , или ~ A и часто читается:
«отрицание А», «не А» или «А с чертой».
Пример 11. Высказывание А=<Киев-столица Франции>, тогда сложное высказывание НЕ А
означает: не верно, что А, т.е. не верно, что <Киев-столица Франции>.
Конъюнкция
Результатом операции конъюнкции для высказывания А  В будет истинна только тогда,
когда истинны одновременно оба высказывания.
Пример 12. Высказывания А= «Москва – столица России» и В= «Рим – столица Италии».
Сложное высказывание А  В (А & В) истинно, так как истинны оба высказывания.
Дизъюнкция
Результатом операции дизъюнкции для высказывания А  В будет истинна тогда, когда
истинно хотя бы одно высказывание, входящее в него.
Пример 13. Высказывания А = «2 + 3 = 5» и В = «3 + 3 = 5». Сложное высказывание: А  В
(А + В) истинно, так как истинно высказывание А.
Эквиваленция (равнозначность)
Результатом операции эквиваленции для высказывания А ~ В будет истинна тогда, когда
истинны или ложны одновременно оба высказывания. Отличие эквиваленции от конъюнкции
состоит в том, что вне зависимости от смысла, равнозначными являются как истинные, так и
ложные высказывания.
Пример 14. Высказывания А = «2 + 2 = 7» и В = «1 – 8 = 5». Сложное высказывание А  В (А
~ В) истинно, так как оба высказывания ложны.
Импликация
Результатом операции импликации для высказывания А  В будет ложь только тогда, когда
первое высказывание (А) истинно, а второе (В) ложно. При этом А – предпосылка, а В –
следствие.
Пример 15. Высказывания А = «2 + 2 = 4» и В = «1 – 8 = 5». Сложное высказывание А  В
(А  В) ложно, так как высказывание А истинно, а В – ложно.
Антиконъюнкция
Результатом операции антиконъюнкции для высказывания А  В будет ложь только тогда,
когда оба высказывания истинны.
23
Пример 16. Высказывания А= «Москва – столица России» и В= «Рим – столица Италии».
Сложное высказывание А  В ложно, так как истинны оба высказывания.
Антидизъюнкция
Результатом операции антидизъюнкции для высказывания А  В будет истинна только
тогда, когда оба высказывания ложны.
Пример 17. Высказывания А= «Рим – столица России» и В= «Москва – столица Италии».
Сложное высказывание А  В истинно, так как ложны оба высказывания.
Основными символами алгебры логики являются:
 пропозициональные переменные;
 унарная связка  и бинарные связки , , , ~;
 скобки ( ).
Переменная, значениями которой являются высказывания, называется пропозициональной
переменной.
Далее индуктивно вводится понятие формулы, являющееся формализацией понятия
«сложного» высказывания. К формуле алгебры логики относят:
 выражение, состоящее только из пропозициональной переменной (А1, В, с);
 выражения, состоящие из пропозициональных формул соединенных связками ( С, (А1
 А2), (Н1  Н2)).
Правила сокращения записей в пропозициональных формулах:
вместо  А пишут А ;
 вместо А1  А2 пишут А1А2;
 приоритет применения связок возрастает в следующем порядке
~
 внешние скобки опускаются.
Пример 18.


(( А1  А2 )  А3 )  ( А1  А2 ) А3

(( А1  А3 )  ( А1  А2 ))  А1 А3  А1 А2
2.
( А1 * А2 ) * А3  А1 * ( А2 * А3 )
;

.
Для преобразований формул в равные формулы важную роль в алгебре логики играют
следующие равенства:
1. А1 * А2  А2 * А1 (закон коммутативности).
(закон ассоциативности).
А1  ( А1  А2 )  А1
3. А1  ( А1  А2 )  А1 (закон поглощения).
А1  ( А2  А3 )  ( А1  А2 )  ( А1  А3 )
4. А1  ( А2  А3 )  ( А1  А2 )  ( А1  А3 )
(закон дистрибутивности).
А1  ( А1  А2 )  А1  А2
А1  ( А1  А2 )  А1  А2
А1  А2  А1  А2
А1  А2  А1 А2  А1 А2
5.
АА  0
(закон противоречия).
24
6. А  А  1 (закон исключенного третьего);
7. А  А (закон снятия двойного отрицания);
А1 А2  А1 А2  А1
8. ( А1  А2 )( А1  А2 )  А1 (закон склеивания);
А1  А2  А1  А2
9. А1  А2  А1  А2 (закон де Моргана);
10. А1  А1 А2  А1  А2 (закон свертки).
Эти равенства позволяют существенно упростить запись формул освобождением от лишних
скобок.
2.2. Нормальные формы
Элементарной конъюнкцией называется конъюнкция нескольких переменных, взятых с
отрицанием или без отрицания, причём среди переменных могут быть одинаковые.
Элементарной дизъюнкцией называется дизъюнкция нескольких переменных, взятых с
отрицанием или без отрицания, причём среди переменных могут быть одинаковые.
Конъюнктивная нормальная форма
Всякая конъюнкция элементарных дизъюнкций называется конъюнктивной нормальной
формой, то есть КНФ.
Совершенной КНФ (СКНФ) называется КНФ, в которой нет равных элементарных
дизъюнкций и все они содержат одни и те же переменные, причём каждую переменную только
один раз (возможно с отрицанием).
Дизъюнктивная нормальная форма
Всякая дизъюнкция элементарных конъюнкций называется дизъюнктивной нормальной
формой, то есть ДНФ.
Совершенной ДНФ (СДНФ) называется ДНФ, в которой нет равных элементарных
конъюнкций и все они содержат одни и те же переменные, причём каждую переменную только
один раз (возможно с отрицанием).
3. Применение средств алгебры логики для описания
функционирования устройств компьютера
Для описания того, как функционируют аппаратные средства компьютера очень удобен
математический аппарат алгебры логики, поскольку основной системой счисления в
компьютере является двоичная, в которой используются цифры «1» и «0».
Следовательно, одни и те же устройства компьютера могут применяться для обработки и
хранения как числовой информации, представленной в двоичной системе счисления, так и
логических переменных; на этапе конструирования аппаратных средств алгебра логики
позволяет значительно упростить логические функции, описывающие функционирование схем
компьютера, и, следовательно, уменьшить число элементарных логических элементов, из
десятков тысяч которых состоят основные узлы компьютера.
Данные и команды в памяти компьютера и в регистрах процессора представляются в виде
двоичных последовательностей различной структуры и длины.
Существуют различные физические способы кодирования двоичной информации, но чаще
всего единица кодируется более высоким уровнем напряжения, чем ноль.
25
В логической схеме компьютера выделяют логические элементы. Логический элемент
компьютера – это часть электронной логической схемы, которая реализует элементарную
логическую формулу.
Логическими элементами компьютеров являются электронные схемы «И», «ИЛИ», «НЕ»,
«И-НЕ», «ИЛИ-НЕ» и другие (называемые также вентилями), а также триггер. С помощью этих
схем можно реализовать любую логическую формулу, описывающую работу устройств
компьютера.
Каждый логический элемент имеет свое условное обозначение, которое выражает его
логическую формулу, но не указывает на то, какая именно электронная схема в нем
реализована. Это упрощает запись и понимание сложных логических схем.
Схема «И» реализует конъюнкцию двух или более логических значений. Условное
обозначение на структурных схемах схемы «И» с двумя входами представлено на рис. 5.
Рис. 5. Схема «И»
На выходе схемы «И» значение «1» будет тогда и только тогда, когда на всех входах будут
«1». Когда хотя бы на одном входе будет «0», на выходе также будет «0».
Операция конъюнкции на функциональных схемах обозначается знаком «&» (читается как
«амперсэнд»), являющимся сокращенной записью английского слова and.
Схема «ИЛИ» реализует дизъюнкцию двух или более логических значений. Условное
обозначение схемы «ИЛИ» представлено на рис. 6.
Рис. 6. Схема «ИЛИ»
Значение дизъюнкции равно «1», если сумма значений операндов больше или равна «1».
Когда хотя бы на одном входе схемы «ИЛИ» будет «1», на её выходе также будет «1».
Операция дизъюнкции на функциональных схемах обозначается знаком «1».
Схема «НЕ» (инвертор) реализует операцию отрицания. Условное обозначение схемы НЕ
представлено на рис. 7.
Рис. 7. Схема «НЕ»
Если на входе схемы – «0», то на выходе будет «1». Когда на входе – «1», на выходе будет
«0».
Схема «И-НЕ» состоит из элемента «И» и инвертора и осуществляет отрицание результата
схемы «И». Условное обозначение схемы «И-НЕ» представлено на рисунке 8. Таблица
истинности схемы «И-НЕ» – это таблица 5.
26
Рис. 8. Схема «И-НЕ»
Таблица истинности схемы «И-НЕ»
Таблица 5
х у
х
у
0
0
1
0
1
1
1
0
1
1
1
0
Схема «ИЛИ-НЕ» состоит из элемента «ИЛИ» и инвертора и осуществляет отрицание
результата схемы «ИЛИ». Условное обозначение схемы «ИЛИ-НЕ» представлено на рис. 9, а
таблица истинности схемы ИЛИ-НЕ – это табл. 6.
Рис. 9. Схема «ИЛИ-НЕ»
Таблица истинности схемы «ИЛИ-НЕ»
Таблица 6
х
у
х у
0
0
1
0
1
0
1
0
0
1
1
0
Логические схемы
Логическая схема – это схематическое изображение некоторого устройства, состоящего из
переключателей и соединяющих их проводников, а также из входов и выходов, на которые
подаётся и с которых снимается электрический сигнал.
Каждый переключатель имеет только два состояния: замкнутое и разомкнутое.
Переключателю Х поставим в соответствие логическую переменную х, которая принимает
значение 1 в том и только в том случае, когда переключатель Х замкнут и схема проводит ток;
если же переключатель разомкнут, то х равен нулю.
27
Две схемы называются равносильными, если через одну из них проходит ток тогда и только
тогда, когда он проходит через другую (при одном и том же входном сигнале).
Из двух равносильных схем более простой считается та схема, функция проводимости
которой содержит меньшее число логических операций или переключателей.
При рассмотрении переключательных схем возникают две основные задачи: синтез и
анализ схемы.
СИНТЕЗ СХЕМЫ по заданным условиям ее работы сводится к следующим трём этапам:
1. составлению функции проводимости по таблице истинности, отражающей эти условия;
2. упрощению этой функции;
3. построению соответствующей схемы.
АНАЛИЗ СХЕМЫ сводится к:
1. определению значений её функции проводимости при всех возможных наборах
входящих в эту функцию переменных.
2. получению упрощённой формулы.
Пример решение логических задач средствами алгебры логики
Задача: Составить таблицу истинности для данной формулы: (x ~ z) | ((x y) ~ (y z)).
Решение: В таблицу истинности данной формулы полезно включить таблицы истинности
промежуточных функций:
xyz
x~z
xy
yz
(x y) ~ (y z)
(x~ z)|((x y) ~ (yz)
000
001
1
0
0
0
0
0
1
1
0
1
010
1
0
0
1
0
011
100
101
110
111
0
0
1
0
1
0
0
0
1
1
1
0
0
0
1
0
1
1
0
1
1
1
0
1
0
Методические указания для выполнения практического задания №2.
«Алгебра логики». Построение таблиц истинности.
Цель работы: Ознакомиться с основными арифметическими операциями, базовыми
логическими элементами (И, И-НЕ, ИЛИ, ИЛИ-НЕ, исключающее ИЛИ) и изучить методы
построения на их основе таблиц истинности.
Задание:
1. В приложении 2 выбрать вариант задания и составить таблицу истинности.
2. Выполнить задание, используя пример решение логических задач средствами
алгебры логики.
3. Оформить работу в тетради для практических работ.
4. Результат работы предъявить преподавателю.
5. Защитить выполненную работу у преподавателя.
Пример построения логических схем
Задача:
Построить логическую схему по заданному булевому выражению:
F =BA + BA + CB.
28
Решение:
Как правило, построение и расчет любой схемы осуществляется начиная с ее выхода.
Первый этап: выполняется логическое сложение, логическую операцию ИЛИ, считая
входными переменными функцииB A, BA и CB:
B A
1
F
BA
CB
Второй этап: к входам элемента ИЛИ подключаются логические элементы И, входными
переменными которых являются уже A, B, C и их инверсии:
À

B
A
B A

BA
Â
À
C
1
F
CB

B
Третий этап: для получения инверсийA иB на соответствующих входах ставят
инверторы:
А

B
А
1
A
B A

В
BA
1
F
CB
В
1
B

С
С
Данное построение основано на следующей особенности, – поскольку значениями
логических функций могут быть только нули и единицы, то любые логические функции могут
29
быть представлены как аргументы других более сложных функций. Таким образом, построение
логической схемы осуществляется с выхода ко входу.
Методические указания для выполнения практического задания №3.
«Алгебра логики». Построение логических схем
Цель работы: Ознакомиться с основными арифметическими операциями, базовыми
логическими элементами (И, И-НЕ, ИЛИ, ИЛИ-НЕ, исключающее ИЛИ) и изучить методы
построения на их основе простейших логических схем.
Задание:
1. В приложении 2 выбрать вариант задания и построить логическую схему.
2. Выполнить задание, используя пример построения логических схем.
3. Оформить работу в тетради для практических работ.
4. Результат работы предъявить преподавателю.
5. Защитить выполненную работу у преподавателя.
Приложение 2. Таблица вариантов заданий
Составить таблицу истинности и логическую схему для данных операций
Вариант
Операции
( x  y ) | ( x ~ yz )
1

2
3
4
5
6
7
8
9
10
11

x( yz  xz )

(( x  y ) z )  (( x ~ z )  y )

(acd  dc ) * (ac  cd )

(( x ~ z )  y )  ( x | yz )

c d  (dc x )  d x

(( x  y ) z )  ( x  y )

yz ( yzx  yz )

x  ( z ~ ( y  xz ))

x y  xyz  ( x  zp)

( x  y ) z  (( x  y) | z )

( x  y )  yz  xyz

x  ( z ~ ( y  xz))

z ( xy  zy )

(( xy) | z )  ( x ~ y )

( xy  z)  ( x  y)  z

( xz  y ) | ( xy  xz)

xy * ( yz  xy)

( x  ( yz )) | ( xy)

x( zy  xy )

( x ~ ( y  z )) | ( xy)

a b * (ac  ab)
30
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

(( x  z )  y) | ( xy ~ xz)

ab(b ad  a b)

( x  y)  z  (( x  y) | z )

y ( xz  yz )

( x  yz )  ( z ~ ( y  ( x  z )))

xy( xyz  x y )

( y ( x | z ))  (( x ~ y ) | yz )

(a  b)(b  c)  a  c

(( x  z )  y ) | ( x  yz )

y ( zx  yx )

( x ~ y ) | ( x  ( yz  x ))

xy  ( xyz )  x z

( xy ) | ( x ~ yz )

xy ( xyz  x y )

(( x  y ) z )  (( x ~ z )  y)

x yz  yxz

(( x ~ z )  y )  ( x  yz )

zx ( zxy  z x)

(( x  y ) z )  ( x ~ y )

z ( yx  zx )

x  ( z ~ ( y  ( x  z )))

xz( xyz  xy )

( x  y ) z  (( x  y) | z )

( x ~ y) | ( x  y)

( x  z )  ( z ~ ( y  x))

a (b  c )  a b

(( x ~ y ) | z )  ( x  y )

( xy z  x y ) * ( zx  xy )

( xz  y ) | (( x ~ y )  xz )

x z | yz  ( x ~ yz )

(( x  z )  ( y  z )) | ( xy )

( x  y )  ( x ~ y)  z

(( x  y ) ~ z ) | (( x ~ z )  y )

x  y  ( x ~ y ) | ( x  y)
31
29
30

(( x  z ) y )  ( x | ( y ~ z ))

z ( yx  zx )  z x

( x  y ) z  ( x  ( y | z ))

x yz  yxz * xy
4. Индивидуальное задание. Модуль 1. «Построение
логических схем по заданным булевым выражениям»
Задания к ИДЗ:
1. В приложении 3 выбрать вариант индивидуального задания.
2. Выполнить задание, пользуясь теоретическими сведениями
3. Проверить логическую схему у тьютора.
4. Оформить ИДЗ в формате А4, титульный лист по образцу Приложение 4.
5. Результат работы предъявить преподавателю.
6. Защитить выполненную работу у преподавателя.
Приложение 3. Таблица вариантов индивидуального
задания
Варианты
1
2
3
4
5
6
7
8
9
10
Составить таблицу истинности и логическую схему по формулам

X  A  B  A B

Y  A C  BC

X  B  CD

Y  AB  C  D

X  A  B  A B
Y CAD

X  CA  ( A  B )

Y  X C  A

X  D  (C  D )

Y  X  B  ( XB )

X  ( A  B)( A  B)

Y  AB  A C  C

C  (X  Y)  Z

A  XY  ( X  YZ )

A  X  YZ  XY  Z

C  XY  X  YZ

A  ( XY  Z )  ( X  Y )

C  XY  ( XZ  XY )

Z  ( XA  B  XY )a

32
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

Y  A  X  A  BC

X  A  B  CY

Y  X  A  XB

X  B( D  A)  B  DC

Y  A( B  C )  A  B

X  ( AB  C )  BC

Y  AC  C  B

X  C  B Y  A C

Y  C B  AB

X  AA  B( AB  B )

Y  A  ( B( A  C ))

X  C  AB  ( AB  A)

Y  A (C  B A)

X  AB  ( A  B )

Y  AB  (C  B  D)  B

X  A( B  C )  A  A B

Y  ( A  C) A C  (B  C )

X  A  (B  C)  A B

Y  (C  AB )  A  B  C

X  A  ( BA  (C  A ))

Y  A  B  DC  A

X  C  AB  BC

Y  ( B  A  CA)  A B

X  B  CD  D( A  B)

Y  CD  ( A  AB)

X  AC  ( D  CB )  A

Y  B ( A  C )  AB

Y  (C  A  B )  AB  C

X  CD  AB  BC

X  CB  AB  C

Y  X  A  X C

X  B  C  ( A  B)

Y  AB  B  C  AC

X  A  B  A B
33
28
29
30

Y  AB  C  D

Y  A  C  B(C  A)

X  AB  CA  D  CA

X  C ( A  ( A  B ))  B C

Y  X  C  AB  C

X  A(C  B )  C  D

Y  B  (C  D )  AB
34
Приложение 4. Титульный лист ИДЗ
Министерство образования Российской
Федерации
Тольяттинский государственный университет
Кафедра «Компьютерные технологии и
обработка материалов давлением»
ИДЗ. Модуль №1.
по дисциплине «Информатика»
Выполнил:
Группа:
Проверил:
Тольятти - 2007
35
№ недели
Маршрутная карта изучения дисциплины по Модулю 2
7
7
Наименование
учебного
мероприятия
(под
руководством)
Лекция
(преподаватель)
Самостоятельное
изучение
материала
7
Косультация
(тьютор)
8
Лекция
(преподаватель)
8
8
9
9
10
10
10
11
Тема учебного мероприятия
Лекция №1. «Основные конструкции языка Паскаль».
Подготовка к практическим занятиям в интегрированной среде
Турбо-Паскаль. Изучение теоретического материала. Раздел 6.
«Знакомство со средой Турбо-Паскаль» (стр. 38).
Знакомство с маршрутной картой Модуля 2. Получение
консультации у тьютора по выполнению практических заданий.
Работа в интегрированной среде Турбо-Паскаль.
Лекция №2. «Типы вычислительных процессов».
Подготовка к практическому занятию. Изучение теоретического
Самостоятельное
материала: Разделы 5, 6, 7. «Основы алгоритмизации» (стр. 42).
изучение
Раздел 8. «Программирование на языке Паскаль» (стр. 47).
материала
Ответить на вопросы самоконтроля в конце каждой главы.
Выполнить практическое задание №4 по теме «Типы
вычислительных процессов. Следование». Варианты заданий
Практическое
приведены в Приложении 5. Пройти тренинг по теме
занятие
«Арифметические выражения», «Математические функции»
(преподаватель)
( http://inf.tltsu.ru/res/strogov/). Выполненное задание и
результаты тренинга предъявить преподавателю.
Самостоятельное Подготовка к практическому занятию. Изучение теоретического
изучение
материала: Раздел 9. «Ветвления» (стр. 58). Ответить на вопросы
материала
самоконтроля в конце главы.
Выполнить практическое задание №5 по теме «Типы
Практическое
вычислительных процессов. Ветвления». Варианты заданий
занятие
приведены в Приложении 6. Пройти тренинг по теме
(преподаватель) «Условный оператор»(http://inf.tltsu.ru/res/strogov/). Выполненное
задание и результаты тренинга предъявить преподавателю.
Самостоятельное Подготовка к практическому занятию. Изучение теоретического
изучение
материала: Раздел 10."Циклические вычислительные процессы"
материала
(стр. 64). Ответить на вопросы самоконтроля в конце главы.
Выполнить практическое задание №6 по теме «Типы
Практическое
вычислительных процессов. Циклы». Варианты заданий
занятие
приведены в Приложении 7. Пройти тренинг по теме «Циклы».
(преподаватель) ( http://inf.tltsu.ru/res/strogov/). Выполненное задание и
результаты тренинга предъявить преподавателю.
Лекция
Лекция №3. «Операции с индексированными переменными».
(преподаватель)
Подготовка к практическому занятию. Изучение теоретического
Самостоятельное
материала: Раздел 11. «Операции с индексированными
изучение
переменными. Одномерные массивы» (стр. 72). Ответить на
материала
вопросы самоконтроля в конце главы.
36
11
11
12
12
13
13
14
14
15
15
16
16
17
Практическое
занятие
(преподаватель)
Лекция
(преподаватель)
Самостоятельное
изучение
материала
Выполнить практическое задание №7 по теме «Операции с
индексированными переменными. Одномерные массивы».
Варианты заданий приведены в Приложении 8. Выполненное
задание предъявить преподавателю.
Лекция №4. «Подпрограммы. Функции и процедуры».
Подготовка к практическому занятию. Изучение теоретического
материала: Раздел 12. «Двумерные массивы. Матрицы» (стр. 80).
Ответить на вопросы самоконтроля в конце главы.
Выполнить практическое задание №8 по теме «Операции с
Практическое
индексированными переменными. Двумерные массивы.
занятие
Матрицы». Варианты заданий приведены в Приложении 9.
(преподаватель) Выполненное задание предъявить преподавателю.
Самостоятельное Подготовка к практическому занятию. Изучение теоретического
изучение
материала: Раздел 13. «Подпрограммы» (стр. 91). Ответить на
материала
вопросы самоконтроля в конце главы.
Выполнить практическое задание №9 по теме «Подпрограммы.
Практическое
Процедуры и функции». Варианты заданий приведены в
занятие
Приложении 10. Выполненное задание предъявить
(преподаватель) преподавателю.
Подготовка к ИДЗ №2. Изучение теоретического материала:
Самостоятельное Раздел 14. «Обработка строк текста. Символьные и строковые
переменные» (стр. 99).
изучение
материала
Раздел 15. «Структурированные типы данных» (стр. 106).
Ответить на вопросы самоконтроля в конце главы.
Консультация
Получение консультации у тьютора по выполнению ИДЗ №2.
Утвердить у тьютора структуру записей.
(тьютор)
Практическое
Выполнение ИДЗ №2 по теме «Массивы записей». Подготовка к
работа
сдаче ИДЗ.
Практическое
Сдача преподавателю невыполненных в срок практических
занятие
заданий
(преподаватель)
Практическое
занятие
Сдать преподавателю ИДЗ №2.
(преподаватель)
Промежуточное
тестирование по Пройти промежуточное тестирование по Модулю 2 в центре
модулю №2
тестирования.
через ЦТ
Итоговое
Итоговое тестирование по курсу через ЦТ (экзамен).
тестирование по
курсу через ЦТ Оценки в зачетную книжку выставляются по ведомости центра
тестирования в деканате.
(экзамен)
5. Введение в алгоритмизацию
Программирование – интересная, живая, быстро развивающаяся наука. Первые шаги при
обучении программированию для многих оказываются очень нелегкими. Главное качество
программиста – хорошее логическое мышление – развивается только в упорной и кропотливой
работе.
37
Алгоритмический язык Паскаль был разработан в 1973 г. швейцарским математиком
Никлаусом Виртом для обучения студентов структурному программированию. Язык получил
свое название в честь французского математика Блеза Паскаля (1623-1662 гг.). В 1984 г.
бывший студент Никлауса Вирта, французский математик Филип Кан, основал фирму Borland
International и начал продавать по почте разработанную им программу – среду
программирования Turbo Pascal для ПК. Предлагаемый им продукт был настолько удачен, что
только за первый месяц продаж поступили заказы общей стоимостью 150 000$. Турбо Паскаль
вскоре вывел фирму Borland в ряды основных производителей программного обеспечения.
Общеизвестна роль вычислительной техники в различных сферах человеческой
деятельности. Особенно популярны персональные компьютеры (ПК), обладающие высокой
производительностью и не требующие от пользователя глубокого знания процессов,
происходящих в компьютере во время вычислений. Без преувеличения можно сказать, что
появление ПК в середине 70-х годов и бурное их распространение в наше время открыло новую
эру в массовом использовании вычислительной техники людьми всех рангов и профессий.
Человечество заметно переходит от экономики, основанной на тяжелой промышленности, к
экономике с компьютеризированной технологией, средствами связи и услугами.
Выбор Паскаля для обучения программированию объясняется рядом его достоинств. В
частности, этот язык полно отражает идеи структурного программирования. Во-вторых,
Паскаль предоставляет гибкие возможности в отношении используемых структур данных.
Большое внимание в языке уделено вопросу повышения надежности программ: средства языка
позволяют осуществлять достаточно полный контроль правильности использования данных
различных типов и программных объектов, как на этапе трансляции программ, так и на этапе их
выполнения. Благодаря перечисленным возможностям, Паскаль широко применяется не только
в области обучения, но и в практической работе.
6. Знакомство со средой Турбо Паскаль
6.1. Общие сведения
Большую часть мирового парка ПК составляют компьютеры, у которых внутренний язык
микропроцессора совместим с набором команд первых персональных компьютеров фирмы IBM
(IBM PC), что позволять выполнять на них одни и те же программы. Такие компьютеры
называют IBM-совместимые. Их насчитывается сотни миллионов, и благодаря своей
массовости они стали стандартом ПК. Массовость IBM-совместимых ПК обусловило то, что
фирмы-разработчики программ стали ориентировать свою продукцию на эти компьютеры, и в
результате программное обеспечение, ориентированное для использования на IBMсовместимых ПК, также стало стандартом и используется во всем мире. Примером таких
программ, ставших мировым стандартом, является система программирования Турбо-Паскаль.
Поясним понятие «система программирования». Как известно, программа, написанная на
каком-либо алгоритмическом языке, перед выполнением на компьютере должна быть
транслирована в машинные коды, для чего используются программы-переводчики
(трансляторы). В середине 80-х годов разработчики программного обеспечения перешли от
создания чистых трансляторов к более удобным для пользователей системам
программирования, включавшим в себя, помимо транслятора, удобные средства написания,
редактирования и отладки программ. К наиболее известным системам программирования
относятся Turbo Pascal, Turbo C, Turbo Basic, Quick Basic и др. Система программирования
может рассматриваться как компилятор соответствующего языка, дополненный
инструментальной оболочкой для быстрой разработки программ.
6.2. Запуск Турбо-Паскаля на выполнение
Турбо-Паскаль – это многофайловая программа, состоящая из одного главного файла и
нескольких вспомогательных, подключаемых к работе по мере необходимости. Обычно все
файлы, относящиеся к Турбо-Паскалю, хранятся на диске в каталоге под произвольным
именем: Pascal, T_Pascal, TP55, TP70 и т.п. Файлы системы должны сохранять имена, данные
38
им фирмой-разработчиком. Основные файлы, обеспечивающие работу Турбо-Паскаля,
достаточно малы, что позволяет хранить их на одной дискете. Как минимум, требуются 2 файла
– Turbo.exe и Turbo.tpl. Это базовый набор для разработки программ, не использующих
графический режим. Для работы Турбо-Паскаля требуется не менее 512 Кбайт оперативной
памяти.
Главный файл, TURBO.EXE, хранит ядро системы Турбо-Паскаль. Вспомогательный файл
TURBO.TPL содержит резидентную библиотеку модулей.
Чтобы инициировать работу Турбо-Паскаля, надо запустить программу из файла Turbo.exe
на выполнение. Это можно сделать, либо введя с клавиатуры имя TURBO в командной строке
DOS, либо с помощью Norton Cоmmander'a. В последнем случае надо в текущем каталоге
поместить курсор на имя файла Turbo.exe и нажать клавишу «Enter». При запуске ТурбоПаскаля, на экране появляется следующее изображение:
Вид основного экрана Турбо-Паскаля
Экран Турбо-Паскаля содержит 4 основные части, сверху вниз:
 главное меню (File, Edit, Run, Compile, Options, Debug, Break/Watch);
 окно редактирования (Edit) со служебной информацией редактора вверху;
 окно просмотра (Watch) для отладки программ;
 строку подсказки о назначении функциональных клавиш (F1..F10).
6.3. Назначение функциональных клавиш системы Турбо-Паскаль
Функциональные клавиши, помеченные надписями F1...F10, занимают на клавиатуре
верхний ряд. С каждой из этих клавиш связана определенная команда, управляющая средой
(например, считывание информации с диска или запись ее на диск). Поскольку число
потребных команд может быть больше имеющегося количества функциональных клавиш,
назначение F-клавиш можно разнообразить при помощи двух специальных клавиш: Alt
(Alternative, дополнительная) и Ctrl (Control, управление). Клавиши Alt и Ctrl используются в
сочетании с функциональными клавишами подобно клавишам смены регистра: сначала нужно
нажать Alt или Ctrl, а затем, не отпуская ее, нажать нужную функциональную клавишу.
Функциональные клавиши имеют следующее назначение:
F1 – вызов подсказки (справочной программы);
F2 – запись текста редактируемой программы в текущий каталог, в файл под именем,
указанным в правом верхнем углу экрана редактора EDIT;
F3 – загрузка (считывание) текста программы с дискового файла в окно редактора;
F4 – выполнение программы от начала до строки, на которой расположен курсор;
39
F5 – окно редактора раскрывается на весь экран (повторное нажатие возвращает исходное
изображение);
F6 – меняет окно редактора EDIT на окно отладки WATCH;
F7 – трассировка программы – при каждом повторном нажатии этой клавиши выполняется
очередная строка программы; если в этой строке есть обращение к процедуре или функции, то
эта процедура или функция также будет выполнена строка за строкой по мере нажатия клавиши
(режим трассировки используется для отладки составляемых программ);
F8 – то же, что и F7, но при выполнении процедуры последняя будет выполняться за один
шаг, как строка;
F9 – компилировать программу, текст которой находится в окне редактирования, но не
выполнять ее;
F10 – переход из окна редактирования в меню Турбо-Паскаля (меню занимает верхнюю
строку экрана).
6.4. Работа с текстовым редактором Турбо-Паскаля
При запуске Турбо-Паскаля, окно редактирования EDIT может быть заполнено чьей-либо
программой или рекламной заставкой. Для очистки окна от заставки достаточно нажать любую
клавишу. Для очистки окна от текста чужой программы, надо:
 войти в меню, нажав F10;
 выбрать клавишами управления курсором пункт меню «File» и нажать клавишу «Enter»;
 в развернувшемся дополнительном меню выбрать клавишами управления курсором
пункт меню «New» и нажать «Enter»; окно EDIT очистится. Признак готовности
редактора к работе – мигающий курсор в верхнем левом углу окна Edit.
Окно редактора имитирует длинный широкий лист бумаги, фрагмент которого виден в окне.
Если курсор доходит до нижнего края окна, то лист «прокручивается» на строку вверх. Если
курсор достиг правой границы окна, окно по мере ввода последующих символов будет
смещаться вправо. В текстовом редакторе Турбо-Паскаля можно набирать текст строками не
длиннее 245 символов.
Вертикальный размер листа с набираемым текстом ограничивается лишь общим
количеством символов в тексте, которое должно быть не более 65535. Следует помнить, что
компилятор Турбо-Паскаля воспринимает строки не длиннее 126 символов, поэтому при
написании программы бессмысленно набирать строки длиной более 126 символов – все лишнее
будет игнорироваться.
Текст можно набирать русскими либо латинскими буквами, в виде цифр и других символов,
доступных на клавиатуре. Курсор указывает место на экране, куда будет помещен очередной
символ. Для удаления предыдущего введенного символа используется клавиша «←»
(Backspace). Если требуется удалить символ, расположенный над курсором, надо нажать
клавишу «Delete» или «Del». Наряду с видимыми символами, в текст программы вставляются
невидимые символы: пробел и EOL (End Of Line – признак окончания строки, находится в
конце каждой строки). Невидимые символы, как и видимые, можно стирать или забивать
другими символами. При стирании EOL соседние строки сливаются в одну. При вставке
символа EOL в какую-либо строку, она делится на две строки. Невидимый символ EOL
помещается в текст нажатием клавиши Enter.
Редактируя текст, можно полностью удалить строку, на которой находится курсор, нажав
сочетание клавиш «Ctrl» и «Y». Восстановить только что измененную строку можно, нажав
сочетание клавиш «Ctrl», «Q» и «L».
Клавиши перемещения курсора



переместить курсор на символ влево – клавиша «стрелка влево»;
на символ вправо – «стрелка вправо»;
на строку вверх – «стрелка вверх»;
40







на строку вниз – «стрелка вниз»;
в начало строки – клавиша «Home»;
в конец строки – клавиша «End»;
на страницу вверх – клавиша «Page Up»;
на страницу вниз – клавиша «Page Down»;
в начало текста – сочетание клавиш «Ctrl» и «Page Up»;
в конец текста – сочетание клавиш «Ctrl» и «Page Down».
Работа с блоками текста
Редактор Турбо-Паскаля позволяет оперировать кусками (блоками) текста: копировать,
удалять их, перемещать и т.п. Прежде чем манипулировать с блоком, его сначала надо
выделить. Блок выделяется:
 курсор помещается в начало выделяемого участка текста, затем нажимается сочетание
клавиш «Ctrl», «K», «B»;
 затем курсор помещается в конец выделяемого текста и нажимается сочетание клавиш
«Ctrl», «K».
Намеченный участок текста будет выделен инверсным изображением (темные буквы на
светлом фоне). Чтобы отменить выделение блока, следует нажать «Ctrl», «K», «H». После того,
как блок выделен, с ним можно выполнять ряд операций:
1. Копирование блока
Поместить курсор туда, куда следует скопировать блок, нажать «Ctrl», «K», «C».
2. Перемещение блока
Поместить курсор в то место программы, куда следует перенести блок, нажать «Ctrl», «K»,
«V».
3. Удаление блока
Независимо от местоположения курсора, для удаления выделенного блока надо нажать
«Ctrl», «K», «Y».
Поместить курсор в нужное место текста, нажать «Ctrl», «K», «R», после чего последует
запрос об имени файла; когда имя будет указано, содержимое файла поместится в то место
программы, где стоял курсор.
Основные клавиши работы с Турбо-Паскалем:
F10 – начать работу с главным меню;
ESC – выйти из меню обратно в окно EDIT;
F2 – записать текст программы из окна EDIT в дисковый файл;
F3 – загрузить текст из дискового файла в окно редактора;
Ctrl/F9 (то есть одновременное нажатие клавиш «Ctrl» и «F9») – компилировать программу в
оперативной памяти, после чего запустить программу на выполнение;
Alt/X – завершить работу с Турбо-Паскалем, выйти в DOS;
Alt/F5 – переход в окно пользователя, повторное нажатие этих клавиш вернет окно EDIT.
Окно пользователя (User Screen) – окно, в котором выполняется составленная
пользователем программа. По завершению программы, на экране моментально высвечивается
окно EDIT, которое закрывает собой User Screen с выведенными на него результатами расчета.
Чтобы иметь возможность детально ознакомиться с результатами работы программы,
нажимаем Alt/F5. После этого окно EDIT с текстом программы исчезнет, его заменит
изображение экрана с результатами расчета. Повторное нажатие Alt/F5 вернет на экран текст
программы.
41
7. Основы алгоритмизации
7.1. Алгоритм
Понятие алгоритма такое же основополагающее для информатики, как и понятие
информации. Название "алгоритм" произошло от латинской формы имени величайшего
среднеазиатского математика Мухаммеда ибн Муса ал-Хорезми (Alhorithmi), жившего в 783—
850 гг. В своей книге "Об индийском счете" он изложил правила записи натуральных чисел с
помощью арабских цифр и правила действий над ними "столбиком", знакомые теперь каждому
школьнику. В XII веке эта книга была переведена на латынь и получила широкое
распространение в Европе.
Алгоритм – подробное описание последовательности действий, позволяющих решить
конкретную задачу. Элементарные действия, на которые разбивается алгоритм, называются
инструкциями или командами.
Основными свойствами алгоритма являются:
 дискретность — представление алгоритма в виде последовательности шагов;
 массовость — применимость алгоритма к некоторому множеству исходных данных;
 определенность — за конечное число шагов либо должен быть получен результат, либо
доказано его отсутствие;
 однозначность — при повторном применении алгоритма к тем же исходным данным
должен быть получен тот же результат.
На практике наиболее распространены следующие формы представления алгоритмов:
 словесная (запись на естественном языке);
 графическая (изображения из графических символов);
 псевдокоды ( описания алгоритмов на условном алгоритмическом языке, включающие в
себя как элементы языка программирования, так и фразы естественного языка,
общепринятые математические обозначения и др.);
 программная (тексты на языках программирования).
При графическом представлении алгоритм изображается в виде последовательности
связанных между собой функциональных блоков, каждый из которых соответствует
выполнению одного или нескольких действий.
Такое графическое представление называется схемой алгоритма или блок-схемой. В блоксхеме каждому типу действий (вводу исходных данных, вычислению значений выражений,
проверке условий, управлению повторением действий, окончанию обработки и т.п.)
соответствует геометрическая фигура. Блоки соединяются линиями переходов, определяющими
очередность выполнения действий. В таблице приведены основные блоки.
Блок
Назначение
Начало, конец алгоритма
Ввод значений переменных с
клавиатуры
Блок действий, присвоение переменным
вычислительных значений
Проверка условия и выбор одного из
двух возможных путей дальнейшего
решения
42
Блок цикла
Обращение к подпрограмме
Вывод результатов на печать
Алгоритмы можно представлять как некоторые структуры, состоящие из отдельных блоков.
Логическая структура любого алгоритма может быть представлена комбинацией трех базовых
структур: следование, ветвление, цикл. Характерной особенностью базовых структур является
наличие в них одного входа и одного выхода. При разработке блок-схемы допускается делать
любые записи внутри блоков, однако эти записи должны содержать достаточно информации
для выполнения очередных действий.
7.2. Алгоритмические структуры
Следование – действия выполняются строго в том порядке, в котором записаны. Образуется
последовательностью действий, следующих одно за другим.
Задача.
Вычислить и вывести
клавиатуры.
2
значение функции y  4 cos (ax) . Исходные данные x и а ввести с
начало
а,х
y:=4*cos2(a**x)
у
конец
Ветвления – в зависимости от справедливости проверяемого условия (да или нет), алгоритм
может пойти по одной из двух возможных ветвей. Происходит выбор одного из
альтернативных путей работы алгоритма. Каждый из путей ведет к общему выходу, так что
работа алгоритма будет продолжаться независимо от того, какой путь будет выбран.
Задача.
Даны два действительных числа. Заменить первое число нулем, если оно меньше или равно
второму, и удвоить числа в противном случае.
43
начало
a,b
да
a<=b
нет
a:=0
a:=a*2
b:=b*2
a,b
конец
Циклы – действия повторяются многократно по одним и тем же математическим
зависимостям. Обеспечивает многократное выполнение некоторой совокупности действий,
которая называется телом цикла.
Циклические структуры бывают трех типов:
с параметром цикла - выполнять тело цикла для всех значений некоторой переменной
(параметра цикла) в заданном диапазоне;
с предусловием - выполнять тело цикла до тех пор, пока выполняется условие;
с постусловием - выполнять тело цикла до тех пор, пока не выполнится условие.
Задача.
Составить программу расчета значений функции y  х cos( 2x) на интервале [a;b] в n
равностоящих точках. Границы интервала и количество точек ввести с клавиатуры.
Представлены три блок-схемы:
а) с параметром цикла;
начало
a,b,n
dx:=(b-a)/(n-1)
x:=a
i:=1 to n
y:=x*sin(2*pi*x)
x,y
x:=x+dx
конец
44
б) с предусловием;
начало
a,b,n
dx:=(b-a)/(n-1)
x:=a
нет
x<=b
да
y:=x*sin(2*pi*x))
x,y
x:=x+dx
конец
в) с постусловием;
начало
a,b,n
dx:=(b-a)/(n-1)
x:=a
y:=x*sin(2*pi*x)
x,y
x:=x+dx
нет
x>b
да
конец
Циклические вычислительные процессы могут быть вложенной структуры, когда один цикл
(внешний) содержит внутри себя еще один (внутренний). Во вложенных структурах
соблюдается следующее правило – параметр внешнего цикла меняется медленнее параметра
внутреннего. При одном значении параметра внешнего цикла параметр внутреннего пробегает
все свои возможные значения.
45
Задача.
Вывести на экран таблицу умножения.
начало
i:=1 to 9
j:=1 to 9
i*j
конец
Самоконтроль
1. Что понимают под алгоритмом?
2. Каковы способы записи алгоритмов?
3. В чем заключаются основные свойства алгоритма?
4. Перечислите основные алгоритмические структуры и опишите их.
5. Каковы основные принципы разработки алгоритмов?
6. Назовите основные этапы составления алгоритмов.
8. Программирование на языке Pascal
Программа – это запись алгоритма на языке программирования, приводящая к конечному
результату за конечное число шагов.
Этапы создания программного продукта:
 постановка задачи;
 разработка алгоритма;
 запись алгоритма на языке программирования;
 отладка и тестирование программы.
Программа — это детальное и законченное описание алгоритма средствами языка
программирования. Исполнителем программы является компьютер. Для выполнения
компьютером программа должна быть представлена в машинном коде — последовательности
чисел, понимаемых процессором. Написать программу в машинных кодах вручную достаточно
сложно. Поэтому сегодня практически все программы создаются с помощью языков
программирования, которые по своему синтаксису и семантике приближены к естественному
человеческому языку. Это снижает трудоемкость программирования. Однако, текст программы,
записанный с помощью языка программирования, должен быть преобразован в машинный код.
Эта операция выполняется автоматически с помощью специальной служебной программы,
называемой транслятором.
Алгоритмический язык Паскаль был разработан швейцарским ученым Никлаусом Виртом в
начале 70-х годов специально для целей обучения.
46
Основные элементы программирования:
 ввод информации;
 хранение информации;
 команды обработки (операции);
 вывод данных;
 проверка условий;
 повторные выполнения (циклы);
 подпрограммы (процедуры).
8.1. Алфавит языка
Программа на Паскале записывается в виде последовательности символов, образующих
алфавит языка. Алфавит включает:
 заглавные и прописные латинские буквы;
 арабские цифры;
 знаки препинания ( : ; , . );
 знаки операций;
 некоторые спецсимволы.
8.2. Арифметические выражения и правила их записи
Арифметические выражения строятся из простых операндов связанных знаками
арифметических операций:
y = a + b*2
Знаки операций
div – деление нацело;
mod – остаток от деления;
* – умножение;
/ – деление;
- – вычитание;
+ – сложение.
Операции div и mod
Целочисленное деление div отличается от обычной операции деления тем, что возвращает
целую часть частного, а дробная часть отбрасывается.
Например:
17 div 3 = 5
8 div 2 = 4
1 div 5 = 0
Взятие остатка от деления mod вычисляет остаток, полученный при выполнении
целочисленного деления.
Например:
17 mod 3 = 2
8 mod 2 = 0
1 mod 5 = 1
При выполнении арифметических операций соблюдаются следующие правила:
1. два знака не могут следовать один за другим;
47
2. при выполнении арифметических операций соблюдается следующая иерархия (приоритет
выполнения):
 стандартные функции;
 div, mod;
 *, /
 +, 3. изменить иерархию можно с помощью скобок.
8.3. Типы данных
Переменные на языке Паскаль задаются своими именами (63 символа).
Имена переменных могут содержать малые и большие буквы латинского алфавита, арабские
цифры и знак подчеркивания. Переменные, используемые в программе, обязательно должны
быть описаны. При описании переменных задаются имена и типы переменных. Тип –
определяет объем оперативной памяти, выделяемой под хранение переменной. Для описания
стандартных типов переменных используют зарезервированные английские слова. Помимо
стандартных типов, можно строить и пользовательские типы данных, которые базируются
только на стандартных типах.
Паскаль производит предварительную, инициализацию переменных. Все переменные,
описанные в программе, обнуляются.
Целые типы
Название целого типа
Диапазон значений
Память
(байт)
Shortint
-128  127
1
(короткие целые)
Longint
-231  231-1
4
(удвоенные целые)
Integer
-32768  32767
2
(обычные целые)
word
0  65535
2
(целые положительные)
Byte
0  255
2
(целые короткие положител.)
Верхнее граничное значение целочисленных переменных задано в Паскале как константа и
имеет соответствующее имя:
Maxint = 32767 (215-1)
Maxlongint = 231-1
Логический тип
boolean - логические переменные занимают 1 байт памяти, могут принимать 2 значения:
 True (истина)
 False (ложь)
Логические переменные могут использоваться только в логических выражениях.
Над данными логического типа нельзя выполнять обычные арифметические операции, для
них определены логические операции и операции сравнения.
Для идентификаторов имеет место:
True> False
48
Над логическими переменными возможны следующие логические операции:
and (и)
or (или)
not (не)
Символьный тип
Char – символьные переменные, служат для хранения одного символа (буква, цифра, знаки
препинания, специальные символы, непосредственно код) и занимают 1 байт памяти.
Строковый тип
String – строковые переменные, служат для хранения любой цепочки символов и занимают
255 байт памяти.
Вещественный тип
real – вещественные переменные, занимают 6 байт памяти (11 знаков после запятой).
Вещественные числа могут быть заданы в форме:
 с фиксированной точкой
0.5 +5.0 -133.15
 с плавающей точкой
3.5Е2 0.45Е-3
Форма с плавающей точкой используется для изображения очень больших или очень
маленьких чисел.
8.4. Стандартные функции
Имя функции
sin (x)
cos (x)
arctan(x)
exp (x)
ln (x)
pi
abs (x)
sqr (x)
Математическая запись
sin x
cos x
аrctgx
ex
ln x
3.14
│x│
x2
Тип результата
вещ.
вещ.
вещ.
вещ.
вещ.
вещ.
вещ.
вещ.
sqrt (x)
x
вещ.
trunc (x)
int (x)
целая часть числа
целая часть числа
ближайшее целое число
(математическое округление)
дробная часть числа
генератор случайных чисел от 0 до
x; если x отсутствует – диапазон
чисел 0  1
возвращает TRUE, если x – число
нечетное
Цел.
вещ.
round (x)
frac (x)
random (x)
odd (x)
Например:
trunс(3.7) = 3
trunc(3.1) = 3
49
цел.
вещ.
вещ.
лог.
trunc(-3.7) = -4
int (3.4) = 3
int (3.7) = 3
int (-3.4) = -3
round (3.14) = 3
round (3.74) = 4
round (-3.14) = -3
Аргументом стандартной функции может быть переменная, константа, выражение, стоящее
справа от имени в скобках. Для тригонометрических функций аргумент задается в радианах.
При написании формул в программе на Паскале необходимо учитывать все правила записи
арифметических выражений.
Например:
 b  b 2  4ac
x
2a
.
Данное выражение в программе на языке Паскаль будет выглядеть:
x:= ( -b + sqrt(sqr(b)–4*a*c) )/( 2*a ).
Паскаль не допускает смешенных выражений. Допустимы выражения, в которых слева от
знака присваивания – вещественная переменная, справа – целое выражение.
Если в выражении есть хотя бы одна вещественная переменная, все выражение будет
вещественным.
Некоторые полезные формулы
1. Формула возведения числа в любую степень:
ax=ex*ln (a)=exp(x*ln(a)).
2. Формула перевода числа из градусов в радианы:
x = x * pi/180.
3. Тригонометрические функции:
tg x = sin x/cos x; ctg x = cos x/ sin x.
4. Логарифмические функции:
ln x
log a x 
.
ln a
5. Обратные тригонометрические функции:
 x
arcsin x  arctg 
2
 1 x



;
 1  x2
arccos x  arctg 
 x




;
1
arcctg(x)  arctg  
 x .
6. Гиперболические функции:
ch x 
e x  e x
e x  ex
shx
chx
th x 
cth x 
sh x 
chx ;
shx .
2
2
;
;
50
8.5. Структура программы на языке Паскаль
Программа – это последовательность инструкций компьютеру приводящих к конечному
результату за конечное число шагов.
Программа, написанная на алгоритмическом языке, переводится на язык машинных команд:
program <имя>;
<описательная часть>;
<раздел функций и процедур>;
begin
<исполнительная часть>;
end.
Зарезервированные слова:
 program <имя> – необязательная строка;
 begin – начало;
 end – конец.
<имя> – присваивается составителем программы (строится по правилам составления
переменных).
8.6. Описательная часть программы
Все переменные, используемые в программе, должны быть описаны.
Описание начинается со служебного слова var.
program ff;
var
i,n: integer;
x,y,z: real;
begin;
...
Список переменных от типа отделяется «:», одно описание от другого – «;», список
переменных перечисляется через «,». Если в программе используются метки, то они
описываются с помощью служебного слова label. Метки могут быть числовые и символьные.
В программах на Паскале можно использовать константы, которые описываются с помощью
служебного слова const.
const
n=100;
…
Переменная-константа (n) более в программе не описывается, её тип определяется
присвоенным ей числовым значением.
Для определения пользовательского типа данных используют служебное слово – type.
type
in=integer;
var
a,b: in;
…
С помощью служебного слова uses можно подключать к программе стандартные
библиотечные модули. Стандартные модули объединяют функции определенного назначения и,
в случае необходимости, подключаются к программе.
51
Например, для использования функции очистки экрана (clrscr), к программе подключают
стандартный модуль crt.
uses
crt;
…
8.7. Исполнительная часть программы
Выполнение программы начинается именно с исполнительной части.
Отдельные инструкции, входящие в программу, называются операторами. Операторы
отделяются один от другого – «;».
Операторы бывают трех типов:
пустой оператор;
простой оператор;
составной оператор.
Структура составного оператора:
begin
<оператор 1>; <оператор 2>; …<оператор N>;
end;
8.8. Оператор присваивания
<переменная> := <выражения>;
где «:=» – знак присваивания.
Следующие выражения читаются одинаково
x:=2; x:= 2;
y:=d+beta; y:=d+Beta;
Заглавные и прописные буквы в программе интерпретируются одинаково.
8.9. Операторы ввода-вывода
Оператор ввода
readln (<список ввода>);
где readln – имя оператора ввода;
<список ввода> – список имен переменных, разделенных запятыми.
Например:
readln (a,b,c);
По данному оператору с клавиатуры необходимо ввести значения переменных a, b и c.
readln;
По этому оператору компьютер ожидает нажатия любой клавиши. Используется как
последний в программе, чтобы успеть записать результаты вычислений.
Оператор вывода
writeln (<список вывода>);
где writeln – имя оператора вывода;
<список вывода> – список переменных вывода, разделенных запятыми.
writeln;
Оператор writeln без списка вывода можно использовать для пропуска пустых строк при
оформлении вывода результатов.
В операторе writeln можно использовать формат вывода значений переменных.
52
Например:
writeln ( ’ a = ’, a:8:3, ’ b = ’ , b:4);
Первая цифра (8) после имени переменной вещественного типа определяет количество
позиций, выделенных под число, включая знак и десятичную точку, а вторая цифра (3)
определяет количество позиций выделенных под дробную часть числа. Цифра, стоящая после
имени переменной целого типа, определяет количество позиций, отводимых под число,
включая знак.
При a =341.154, b = 2 результат на экране будет выглядеть:
a = _341.154 b = ___2
При a = 1.3 , b = 144 результат на экране будет выглядеть:
a = ___1.300 b = _144
8.10. Комментарии в программе
В любом месте программы можно записать пояснительный текст – комментарий. Он не
обрабатывается во время выполнения программы. Текст комментария ограничен символами { }.
…
{ Пояснения к программе – комментарии }
…
Комментарии удобно использовать в программе при отладке для временного исключения
группы операторов, заключив их в фигурные скобки.
Задача.
Даны два целых числа. Найти их полусумму и произведение.
рrogram primer;
uses
crt;
var
a, b, p: integer;
s: real;
begin
сlrscr; {функция очистки экрана}
{вывод сообщения на экран}
writeln (’ введите a, b ’);
{ввод данных с клавиатуры}
readln ( a, b);
s: = (a + b)/2;
p: = a*b;
{вывод результатов}
writeln (’ s = ’, x:8:3, ’ ’, ’p = ’, y:4);
readln;
end.
Ключевые слова горят ярче, чем остальной текст программы.
53
Пример программы линейной структуры
Задача.
Математическая формулировка задачи: Вычислить и вывести на печать значение функции y.
Исходные данные x, a и b ввести с клавиатуры.
y  ( a  2b )  b  2 a 
1. Таблица идентификаторов.
№
Наименование переменной
1
Функция
2
Аргумент
3
Переменная 1
4
Переменная 2
2. Листинг программы.
рrogram lab1;
uses
crt;
var
a, b: integer;
y,x: real;
begin
{оператор очистки экрана}
сlrscr;
{вывод сообщения на экран}
writeln (’ введите x,a, b ’);
{ввод данных с клавиатуры }
readln ( x,a, b);
y:=(a+2*b)*sqrt(a+2*b)*(1/cos(x));
{вывод результатов вычисления}
writeln (’ y=’, y:8:3);
readln;
end.
1
cos x
Обозначения в программе
y
x
a
b
Вопросы для самоконтроля
1. Что такое программа?
2. Какие символы могут содержать имена переменных?
3. Какие типы стандартные переменных допустимы на языке Паскаль?
4. Сколько байт памяти занимают переменные типа real ?
5. Из каких частей состоит структура программы на Паскале.
6. Что определяет объем памяти, отводимой под каждую переменную?
7. Что такое оператор?
54
8. Какие типы операторов допустимы на Паскале?
9. Как операторы отделяются друг от друга?
10. Для чего используются комментарии в программе?
8.11. Методические указания для выполнения практического задания №4.
«Следования»
Цель работы: Ознакомиться со структурой программы на языке Паскаль, основными
операторами, алгоритмами линейной структуры..
Задание:
1. В приложении 5 выбрать вариант задания.
2. Выполнить практическое задание №4, используя пример программы линейной
структуры.
3. Составить блок-схему алгоритма.
4. Написать программу и отладить ее по заранее подготовленному тесту.
5. Оформить работу в тетради для практических работ.
6. Результат выполнения программы предъявить преподавателю.
7. Ответить на вопросы самоконтроля.
8. Защитить выполненную работу у преподавателя.
Приложение 5. Таблица вариантов заданий
Вычислить и вывести на печать значение функции Y. Исходные
данные x, a и b ввести с клавиатуры.
1
 1

y
 a  ab  b
 sin x

2
y  (a  tgx)  (b  ln a )  eb
3
4
y  e a  (a 
y  ln b  (a 
1
1
)  b
sin( x ) e
y  (a  b)  ab1  tgx
5
y  tgx 
6
7
1
) a b
sin( x )
y
( a  b)
b
1
 ln( b  a )  ( a  b)
cos( x )
1
 eb  ln( a  b)
sin( x )
8
y
9
y  tgx  a( b1)  ln( a  b)
10
y  (b 
a
)  a  b  eb
cos( x )
55
12
1
 ln b
sin x
y  (a  1)  (b  2)  tgx  eb
13
y  (a  tgx)  (b  ln a )  eb
11
14
y  ( a  b) 
y  ( a  2b )  b  2 a 
y  ( a  b)  tgx 
15
y
16
1
cos x
1
e
a
sin 2x
( a  x )b
17
y  (1  e ab)  sin( 4x )
18
y  b  e2 a  sin 2 2x
19
y  b(1  e0.5a )  cos(2x)
20
y  (1  sin 2x)  cos(2x)  eab
21
y  4  e0.5b  cos2 (ax)
y
22
23
24
25
sin 2x
1  ab
y  (a  tgx)  (b  ln a )  eb
y  e a  (a 
y
1
) a b
sin( x )
1
 eb  ln( a  b)
sin( x )
y  tgx 
26
( a  b)
b
27
y  (a  1)  (b  2)  tgx  eb
28
y  tgx  a( b1)  ln( a  b)
29
30
y
1
 ln( b  a )  ( a  b)
cos( x )
y  (a  b)  ab1  tgx
56
9. Ветвления
Очень часто встречаются ситуации, когда требуется выбрать между двумя или более
вариантами действий в зависимости от заданного условия. Такая алгоритмическая конструкция
называется ветвлением.
9.1. Операторы условия и перехода
Строки программы на Паскале не нумеруются. Отдельные строки в программе могут иметь
метки, к которым можно переходить.
Метки должны быть описаны в программы с помощью ключевого слова
label
N1, N2 …;
где N1, N2, … – метки.
Метками могут быть идентификаторы или целые числа (положительные) в диапазоне

0 9999.
Оператор перехода по метке:
goto N;
где N – метка.
Фрагмент программы с использованием меток:
program pr;
label 3;
var
x, y: real;
begin
3: readln (x, y);
...
goto 3;
...
end.
Логический оператор
if < условия > then P1 [else P2 ];
(если) (то) (иначе)
[ else P2 ] – необязательная часть оператора.
Где <условие> – логическое выражение;
P1, P2 – простые или составные операторы.
По этому оператору:
если <условие> – «истинно» (true), то выполняется P1, если – «ложно» (false), то
выполняется P2. Перед структурой else «;» не ставится.
Если else отсутствует и <условие> «ложно», то управление передается следующему
оператору.
Приведем примеры использования оператора:
1. наибольшее из значений двух переменных вывести на печать:
if a>b then writeln(‘a=’,a) else writeln(‘ b=’,b);
2. в зависимости от значения переменной, вычислить значение функции по одной из
формул:
If x>=0 then y:= sin(x) else y:= -sin(x);
57
3. в зависимости от значения переменной, выполнить определенные действия:
if a<0 then
begin
b:=2*a;
writeln(b);
end
else
begin
b:=a/2;
goto 3;
end;
Операции отношения
Операция
=
<>
>
<
>=
<=
Название
Равно
Не равно
Больше
Меньше
Больше или равно
Меньше или равно
Логические операции
Операция
Название
and
И
or
Или
В операторе if можно одновременно проверять несколько условий.
Например:
if (a>b)and(a>c) then writeln(’a – max’);
При проверке нескольких условий в одном операторе, каждое условие записывается в
скобках.
Паскаль допускает вложенность операторов if.
Например:
if n>0 then
if (m div n)>n then m:= m - n
else m:= m + n;
Структура else всегда относится к ближайшему оператору if.
Если n>0 и (m div n)>n будет выполнено m:= m-n.
Если n>0, но (m div n)≤n будет выполнено m:= m + n.
Если n≤0 – переход к следующему оператору.
Задача.
Найти максимальное число из трех вещественных чисел.
program max;
var
a, b, c: real;
begin
58
writeln (’введите a, b, c’); readln (a, b, c);
if a>=b then
if a>=c then writeln (’max - a’)
else writeln (’max - c’)
else
if b<=c then writeln (’max - b’)
else writeln (’max - c’) ;
readln;
end.
Второй способ решения этой задачи:
program max_1;
var
a, b, c: real;
begin
writeln (’введите a, b, c’);
readln (a, b, c);
if (a>=b) and (a>=c) then writeln (’max-a’);
if (b>=a) and (b>=c) then writeln (’max-b’);
if (c>=a) and (c>=b) then writeln (’max-c’);
readln;
end.
Если a=b=c - то все три оператора if будут выполнены.
9.2. Оператор выбора
Этот оператор предназначен для замены конструкций из вложенных if.
Структура:
case N of
N1: P1;
N2: P2;
NN: PN;
[else P;]
end;
[else P;] – необязательная часть оператора.
где N – целочисленная переменная, или выражение целого типа;
N1, N2 , … NN – возможные значения переменной N;
P, P1, P2, … PN – простые или составные операторы.
По этому оператору:
если значение N = N1, то выполняется P1 (после чего управление передается оператору,
следующему за оператором case...of);
если значение N = N2, то выполняется P2, (после чего управление передается оператору,
следующему за оператором case...of);
…
если N не принимает ни одного из перечисленных значений, управление передается
оператору P;
59
если структура else отсутствует и N не принимает ни одного из перечисленных значений,
управление передается следующему за case...of оператору.
Например:
case N of
1, 2, 5: writeln (’a’);
7 .. 10: writeln (’b’);
end;
1, 2, 5 – перечисляемые значения разделяются « , » .
7 .. 10 – интервал задается начальными и конечными значениями через «..».
Пример программы разветвленной структуры
Задача.
1. Вычислить значение функции:
sin x,0  x  90

0, x  0
y= 
.
Значение аргумента х в градусах ввести с клавиатуры.
2. Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
1
Функция
y
2
Аргумент
x
3. Листинг программы.
program lab2;
uses
crt;
var
x, y: real;
begin
clrscr;
writeln (’Введите x’);
readln (x);
if x>90 then writeln(’функция не определена’)
else
{составной оператор}
begin
if x<0 then y: = 0
else y: = sin (x*pi/180);
writeln (’y = ’,y:8:3);
end;
readln;
end.
Вопросы для самоконтроля
1. Какие алгоритмические конструкции называются ветвлениями?
2. Для чего используют оператор goto?
60
3. Почему при использовании нескольких условий в одном операторе if … then … else,
каждое условие заключается в круглые скобки?
4. Перечислите основные логические операции.
5. Перечислите основные операции отношения.
6. В каких случаях прибегают к использованию оператора case … of ?
9.3. Методические указания для выполнения практического задания №5.
«Ветвления»
Цель работы: Ознакомиться с алгоритмами разветвленной структуры, логическим
оператором, оператором выбора.
Задание:
1. В приложении 6 выбрать свой вариант задания.
2. Выполнить практическое задание №5, используя пример программы разветвленной
структуры.
3. Составить блок-схему алгоритма.
4. Написать программу и отладить ее по заранее подготовленному тесту.
5. Оформить задание в тетради для практических занятий.
6. Результат выполнения программы предъявить преподавателю.
7. Ответить на вопросы самоконтроля.
8. Защитить выполненную работу у преподавателя.
Приложение 6. Таблица вариантов заданий
Вариант
1
2
3
4
6
7
8
9
10
11
Задание
Переменной k присвоить номер четверти плоскости, в которой
находится точка с координатами x и y (xy=0).
Если сумма трех попарно различных действительных чисел x, y, z
меньше единицы, то заменить меньшее из x и y полусуммой двух
других, в противном случае уменьшить все числа в 5 раз.
Даны три действительных числа. Выбрать из них те, которые
принадлежат интервалу (1, 3).
Написать программу, которая выбирает наименьшее из четырех
заданных чисел.
Даны три действительных числа. Возвести в квадрат те из них,
значения которых неотрицательны.
Даны действительные числа х, у, и z. Вычислить max (x + y + z, xyz).
Поменять местами значения переменных a, b, c не равных между
собой таким образом, чтобы а > b > c.
Меньшее из двух значений переменных вещественного типа
заменить нулем, а в случае их равенства – заменить нулями оба.
Если сумма двух попарно различных действительных чисел x, y, z
меньше единицы, то наименьшее из этих трех чисел заменить
полусуммой двух других, в противном случае возвести все числа в
квадрат.
Наибольшее из трех различных значений переменных целого типа х,
у и z уменьшить на 3.
Даны два действительных числа, не равных между собой. Меньшее
из них заменить их полусуммой.
61
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Если значение  не равно 0 и при этом котангенс от  меньше 0.5,
тогда поменять знак у , а если значение равно 0, тогда присвоить 
значение 1.
Даны действительные числа х, у и z. Получить min (x,y,z).
Две точки плоскости заданы своими координатами. Определить,
лежат ли они в одной или разных координатных плоскостях.
Даны действительные числа х, у, и z. Вычислить min2 (x + y + z / 2,
xyz) +1.
Даны действительные числа a, b, c. Удвоить эти числа, если a > b > c,
и заменить их абсолютными значениями, если это не так.
Известно, что из четырех чисел одно отлично от трех других, равных
между собой. Присвоить номер этого числа переменной n.
Написать программу, которая выбирает наибольшее из четырех
заданных чисел.
Даны действительные числа x и y. если x и y отрицательны, то
каждое значение заменить его модулем; если отрицательно только
одно из них, то оба значения увеличить на 0.5, в противном случае
извлечь из каждого квадратный корень.
Две точки плоскости заданы своими координатами. Определить,
лежат ли они в одной (распечатать ее номер) или разных
координатных четвертях.
Даны два действительных числа. Заменить первое число нулем, если
оно меньше или равно второму, и удвоить оба числа в противном
случае.
Даны действительные числа a, b, c, d. Если a < b < c < d, то каждое
число заменить небольшим из них; если a > b > c > d, то числа
оставить без изменения; в противном случае все числа заменить их
квадратами.
Даны действительные числа х, у и z. Получить min (x,y,z).
Даны три действительных числа. Выбрать из них те, которые
принадлежат интервалу (1, 3).
Меньшее из двух значений переменных вещественного типа
заменить нулем, а в случае их равенства – заменить нулями оба.
Даны действительные числа х, у и z. Обнулить отрицательные числа.
Известно, что из трех целых чисел одно отлично от трех других,
равных между собой. Присвоить номер этого числа переменной n.
Наименьшее из трех различных значений переменных целого типа х,
у и z увеличить на 3.
Если сумма трех попарно различных действительных чисел x, y, z
больше единицы, то наибольшее из этих трех чисел заменить
полусуммой двух других, в противном случае возвести все числа в
квадрат.
Даны два действительных числа, не равных между собой.
Наибольшее из них заменить их полусуммой.
62
10. Циклические вычислительные процессы
10.1. Оператор цикла с параметром
Процессы, в которых ряд действий повторяются многократно по одним и тем же
математическим зависимостям, называются циклическими.
При организации циклов необходимо:
 определить параметр цикла и его начальное значение;
 изменять значение параметра цикла на каждом шаге итерации;
 организовать проверку на выход из цикла.
for i:=N to K do P;
(для) (до) (выполнять)
где i – параметр цикла;
N, K – его начальное и конечное значение;
P – простой или составной оператор;
i,N,K – переменные или константы целого типа.
Шаг изменения i равен 1.
Если K<N, т.е. имеем дело с циклом с отрицательным шагом: (-1)
for i:=N downto K do P;
Оператор цикла с параметром автоматически устанавливает начальное значение параметра
цикла, изменяет значение параметра на шаг (+1 или -1), организовывает проверку на выход из
цикла.
Задача.
Вычислить сумму ряда
S= 1+1/2+1/3+ … +1/50
Выделим переменную для накапливания суммы – sum. Значение этой переменной
необходимо предварительно обнулить.
program cikl;
var
i: integer;
sum: real;
begin
sum: =0;
for i: = 1 to 50 do
sum: = sum + 1/i;
Writeln (' сумма = ', sum);
end.
Оператор for применяют в тех случаях, когда значения параметра цикла целые и меняются с
шагом +1, -1.
10.2. Оператор цикла с постусловием
repeat
p1;p2 ;…pn ;
until <условие>;
где p1; p2 ; … pn; – любые операторы, образующие тело цикла.
По этому оператору выполняется «тело цикла», а затем проверяется <условие>, если оно не
выполнилось, цикл повторяется. И так до тех пор, пока <условие> не будет выполнено.
63
Необходимо помнить: если <условие> выполнилось c первого раза, цикл будет пройден один
раз.
Задача.
Вычислить значение функции:
y = a sin(x) , При x = 0.1 , с шагом x =0.2.
program cikl_1;
var
y,a,x:real;
begin
writeln(‘Введите а’);
read(a);
x:=0; repeat
y:=a*sin (x); writeln (‘y=’,y:8:3,’ x=’,x:8:3); x:=x+0.2;
until x>1;
end.
Действия, которые подчеркнуты, необходимы для организации цикла. Для организации
цикла необходимо выполнить три действия:
 восстановить начальное значение параметра цикла;
 сформировать текущее значение параметра цикла;
 организовать проверку на выход из цикла.
В операторе for … to … do перечисленные действия выполняются автоматически. В
остальных операторах цикла эти действия необходимо организовать составителю программы.
10.3. Оператор цикла с предусловием
while <условие> do P;
где P – простой или составной оператор.
По этому оператору проверяется <условие> и, если оно выполняется, то выполняется - P,
после чего опять проверяется <условие> и т.д.
Итак, P выполняется до тех пор, пока выполняется <условие>.
Если условие ни разу не выполнилось, P игнорируется, управление передается следующему
оператору.
Задача.
Вычислить сумму ряда:
sin x sin 2 x sin 3 x
sin nx
y


 ...  (1n 1 )
,
1!
2!
3!
n!
где n! = 1*2*…*n.
Значение аргумента х и количество итераций n ввести с клавиатуры.
Введем дополнительную переменную для вычисления n! – f.
program cikl_2;
uses
crt; var x,y : real; i,n,f : integer;
begin writeln (' введите x, n '); read (x, n);
y: =0; f: =1; i:=1;
while i<=n do
{ составной оператор }
64
begin
f:=f*I;
y:=y+sin(i*x)/f;
i:=i+1;
end;
writeln (' y = ', y:8:3);
readln;
end.
10.4. Вложенные циклы
В теле любого оператора цикла могут находиться другие операторы цикла. При этом цикл,
содержащий в себе другой, называется внешним, а цикл, находящийся в теле первого, называется внутренним (вложенным). Правила организации внешнего и внутреннего циклов
такие же, как и для простых циклов.
Рассмотрим задачу вывода на экран таблицы умножения, решение которой предполагает
использование вложенных циклов.
var
i,j : byte;
begin
writeln(‘ Таблица умножения ’);
for i:=1 to 9 do
begin
for j:=1 to 9 do
writeln( i , ‘ * ‘ , j ,‘ = ’, i*j );
writeln;
end;
readln;
end.
При организации вложенных циклов необходимо помнить, что параметр внешнего цикла
меняется медленнее, чем параметр внутреннего. При одном значении параметра внешнего
цикла параметр внутреннего – пробегает все свои возможные значения.
10.5. Оператор прерывания цикла
Для досрочного прерывания цикла можно использовать оператор goto или стандартную
процедуру break.
Рассмотрим фрагмент:
…
for i:=1 to n do begin
p:=p* i;
if p>100 then break ;
writeln(‘p=’, p);
end;
…
Цикл будет прерван при достижении условия p>100 по процедуре break.
Пример программы циклической структуры
Задача.
65
1. Формулировка задачи:
Составить программу расчета таблицы значений функции f(x) на интервале a<=x<=b в n
равностоящих точках. Границы интервала a, b и количество точек n ввести с клавиатуры.
Результаты вывести на печать.
f ( x )  (1  e x )  sin( 4x )
Найти сумму положительных значений функции f(x) на заданном интервале. Формула для
расчета шага изменения аргумента:
dx = (b-a)/(n-1)
2. Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
1
Функция
y
2
Аргумент
x
3
Количество точек
n
4
Начальное значение x
a
5
Конечное значение x
b
6
Шаг изменения аргумента
dx
7
Сумма
s
3. Листинг программы
program cikl_3;
uses
crt;
var
y,x,a,b,dx,s : real;
I,n : integer;
begin
clrscr;
writeln(‘Введите a,b,n’);
readln(a,b,n);
{шаг изменения аргумента}
dx:=(b-a)/(n-1);
s:=0;
x:=a;
for i:=1 to n do
begin
y:=(1-exp(-x)) * sin(4*pi*x);
writeln(‘y=’,y:8:3);
x:=x+dx;
if y>0 then s:=s+y;
end;
writeln(‘Сумма положительных значений s=’,s:8:3);
readln;
end.
66
Вопросы для самоконтроля
1. Что такое цикл?
2. Какие циклы можно организовать на языке Паскаль?
3. В каких случаях предпочтительней использовать оператор for …to … do для
организации циклов?
4. Какой тип должна иметь переменная, которая является параметром цикла в операторе for
…to … do ?
5. Сколько циклов будет пройдено, если в операторе while … do условие не выполнилось с
первого раза?
6. Сколько циклов будет пройдено, если в операторе repeat … until условие выполнилось с
первого раза?
7. Что такое вложенные циклы?
8. Как можно досрочно прервать цикл?
10.6. Методические указания для выполнения практического задания №6.
«Циклы»
Цель работы: Ознакомиться с алгоритмами циклической структуры, операторами цикла с
параметром, с предусловием, с постусловием.
Задание:
1. В приложении 7 выбрать вариант задания.
2. Выполнить практическое задание, используя пример программы циклической
структуры.
3. Составить блок-схему алгоритма.
4. Написать программу и отладить ее по заранее подготовленному тесту.
5. Оформить задание в тетради для практических заданий.
6. Результат выполнения программы предъявить преподавателю.
7. Ответить на вопросы самоконтроля.
8. Защитить выполненную работу у преподавателя.
Приложение 7. Таблица вариантов заданий
Выбрать функцию по варианту из таблицы.
Составить программу расчета таблицы значений функции f(x) на
интервале a<=x<=b в n равностоящих точках. Границы интервала a, b
и количество точек n ввести с клавиатуры. Результаты вывести на
печать.
Вариант
Функция
f ( x )  5  (1  e0.5 x )  cos(2x )
1
Найти сумму всех положительных значений функции f(x) в
расчетных точках.
f ( x)  4  e0.5 x  cos(x)
2
Найти сумму всех отрицательных значений функции f(x) в
заданном интервале.
f ( x )  5  e0.5 x  sin( x )
3
Найти произведение вычисленных значений функции f(x),
целая часть которых кратна 2.
67
f ( x )  (1  e x )  sin( 4x )
4
Найти среднее арифметическое положительных значений
функции f(x).
f ( x )  1  sin( 2x )
5
Найти количество положительных значений функции f(x) на
заданном интервале.
f ( x)  4  e0.5 x  cos(x)
6
Найти произведение всех отрицательных значений функции
f(x) на заданном интервале.
f ( x )  5  (1  e0.5 x )  cos(2x )
7
Найти произведение всех положительных значений функции
f(x) на заданном интервале.
f ( x )  (1  e x )  sin( 4x )
8
Найти сумму вычисленных значений функции f(x), целая
часть которых кратна 2.
f ( x)  1 
9
sin 2x
1 x
Найти среднее арифметическое отрицательных значений
функции f(x).
f ( x) 
10
11
cos( 4x )
1  x2
Найти сумму вычисленных значений функции f(x), дробная
часть которых > 0.5 .
f ( x )  1  sin( 2x )
Найти количество положительных значений функции f(x).
f ( x) 
12
cos( 4x )
1  x2
Найти сумму вычисленных значений функции f(x), дробная
часть которых < 0.5
f ( x)  5  (1  e0.5 x )  cos(2x)
13
14
15
Найти произведение вычисленных значений функции f(x),
абсолютные значения которых > 1.
f ( x )  5  (1  e0.5 x )  cos(2x )
Найти сумму вычисленных значений функции f(x).
f ( x) 
sin 4x
1  x2
Найти произведение вычисленных значений функции f(x).
16
f ( x) 
sin 2x
1 x
Найти произведение вычисленных значений функции f(x),
68
дробная часть которых < 0.5
f ( x) 
17
cos 4x
1  x2
Найти сумму вычисленных значений функции f(x), дробная
часть которых > 0.5
f ( x)  e0.5 x  cos2 (x)
18
Найти количество положительных значений функции f(x),
на заданном интервале.
f ( x)  e0.5 x  cos2 (x)
19
Найти количество значений функции f(x), абсолютная
величина целой части которых > 1.
f ( x)  e2 x  sin( 2x)
20
21
Найти наибольшее значение функции f(x), на заданном
интервале.
f ( x )  x  sin( 2x )
Найти среднее значение функции f(x).
f ( x )  sin( x )  cos(x )
22
Найти сумму значений функции f(x), абсолютная величина
целой части которых < 1.
f ( x)  (1  e0.5 x)  cos( 2x)
23
Найти произведение вычисленных значений функции f(x),
абсолютные значения которых >1.
f ( x )  5  e0.5 x  sin( x )
24
Найти произведение вычисленных значений функции f(x),
целая часть которых кратна 2.
f ( x )  (1  e x )  sin( 4x )
25
Найти наименьшее значений функции f(x) на заданном
интервале.
f ( x) 
26
sin 2x
1 x
Найти произведение значений функции в расчетных точках
с четными номерами.
f ( x)  5  (1  e0.5 x )  cos(2x)
27
Найти сумму значений функции в расчетных точках с
нечетными номерами.
f ( x )  1  sin( 2x )
28
29
Найти наименьшее значений функции f(x) на заданном
интервале в расчетных точках с четными номерами.
f ( x )  (1  e x )  sin( 4x )
69
Подсчитать количество отрицательных значений функции
на заданном интервале.
f ( x)  4  e0.5 x  cos(x)
30
Вычислить произведение положительных значений функции
в расчетных точках с нечетными номерами.
11. Операции с индексированными переменными
11.1. Массивы одномерные
Массив – это поименованный набор однотипной информации.
Массив объединяет элементы одного типа данных. Всему набору данных присваивают
общее имя – имя массива. Каждый элемент массива определяется с помощью индекса,
определяющего место этого элемента в общем наборе.
Данные в массиве сохраняются, как и в случае использования обычных неиндексированных
переменных, только до конца работы программы.
Характеристики массива:
тип – общий тип всех элементов массива;
размерность (ранг) – количество индексов массива;
диапазон изменения индексов – определяет количество элементов в массиве.
Вектор (одномерный массив) – это массив, в котором элементы нумеруются одним
индексом.
11.2. Описание массивов
Для одномерного массива:
var
a: array[1…n] of <тип>;
где a – имя массива;
n – максимальное количество элементов массива;
<тип> – тип элементов массива.
Например:
var
mas: array [1…10] of real;
begin
...
Описан массив mas, содержащий 10 элементов вещественного типа.
Каждый элемент массива определяется с помощью индекса, стоящего справа от имени в
квадратных скобках.
a [i], a [i+2], a [9]
Индекс может быть переменной, константой, арифметическим выражением целого типа.
Размер массива должен быть задан в явном виде (как в предыдущем фрагменте), или через
const.
Например:
const
n = 10;
var
mas: array [1…n] of real;
70
begin
…
Ввод элементов массива
…
for i:=1 to n do
readln( a[ i ] );
…
Каждое прохождение через цикл соответствует вводу одного элемента массива.
Вывод элементов массива
…
for i:=1 to n do
writeln( a[ i ] );
…
Каждое прохождение через цикл соответствует выводу одного элемента массива.
11.3. Обработка одномерных массивов
Рассмотрим типовые задачи обработки одномерных массивов.
Задача.
Составить программу подсчета суммы и произведения элементов одномерного массива
вещественных чисел.
Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
1
Имя массива
a
2
Размер массива
n
3
Индекс массива
i
4
Сумма элементов
S
5
Произведение элементов
p
program mas_1;
uses
crt;
var
a : array [1..100] of real;
n, I : integer;
p, s : real;
begin
clrscr;
{подготовить переменные для суммы и произведения}
s: = 0; p: =1;
writeln ('введите размер массива n<=100');
readln (n);
writeln ('введите элемент массива');
for i:=1 to nk do
readln (a[i] );
for i:=1 to nk do
71
begin
s:= s + a[ i ];
p:= p * a[ i ];
end;
writeln ('Сумма = ',s:8:3,'Произведение =',p:8:3);
readln;
end.
При накапливании суммы переменную необходимо обнулить, а при накапливании
произведения – присвоить 1.
Задача.
Дан массив a(n). Найти максимальный элемент массива и определить его номер.
Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
1
Имя массива
a
2
Размер массива
n
3
Индекс массива
i
4
Максимальный элемент
max
5
Номер максимального элемента
nmax
program mas_2;
var
a: array [1..100] of real;
i,n,nmax: integer;
max: real;
begin
writeln ('введите размер массива n<=100');
readln (n);
writeln ('введите элементы массива');
for i:=1 to n do
readln (a[ i ] );
{за максимальный принимается первый элемент массива}
max:=a[1]; nmax:=1;
for i:=1 to n do
If a[i]>max then
begin
max:=a[i];
nmax:=i;
end;
writeln ('max =', max, ' N=', nmax);
readln;
end.
Задача.
Задан массив целых чисел. Отсортировать элементы одномерного массива по возрастанию.
Существует много способов сортировки элементов массива
Таблица идентификаторов
72
№
Наименование переменной
1
2
3
4
Имя массива
Размер массива
Индекс массива
Флажок
Дополнительная переменная для обмена
местами соседних элементов
5
Обозначения в
программе
a
n
i
flag
p
program mas_3;
uses
crt;
var
a: array [1..100] of integer;
f, n, i, p : integer;
begin
clrscr;
writeln ('введите размер массива n<=100');
readln (n);
writeln ('введите элементы массива');
for i:=1 to n do
readln (a[i]);
repeat
f:=0;
for i:=1 to n-1 do
if a[ i ]>a[i+1] then
begin
p:=a[ i ];
a[ i ]:=a[i+1];
a[i+1]:=p; f:=1;
end;
until f=0;
for i:=1 to n do writeln (a[ i ]);
readln;
end.
В данном алгоритме используются вложенные циклы.
Внутренний цикл (for…to…do) – позволяет один раз пройтись по массиву, сравнивая
соседние элементы. В случае, если предыдущий элемент (a[ i ]) окажется больше последующего
(a[i+1]), элементы меняются местами через дополнительную переменную p.
Внешний цикл(repeat…until) – повторяется до тех пор, пока массив не будет упорядочен.
В программе применяется переменная – флажок.
f =1 – признак того, что два соседних элемента менялись местами, массив еще не
упорядочен.
f =0 – признак того, что массив упорядочен.
73
Пример программы обработки одномерного массива
Задача.
1. Формулировка задачи:
Задан одномерный массив целых чисел. Найти количество нечётных чисел среди элементов
массива.
2. Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
1
Имя массива
a
2
Размер массива
n
3
Индекс массива
i
4
Количество нечетных чисел
kol
3. Листинг программы
program lab5;
uses
crt;
var
a: array [1..100] of integer;
n, i,kol : integer;
begin
clrscr;
writeln ('Введите размер массива n<=100');
readln (n);
writeln ('Введите элементы массива');
for i:=1 to n do
readln (a[ i ]);
kol:=0;
for i:=1 to n do
if odd(a[ i ]) then kol:=kol+1;
writeln(‘Количество нечетных = ’, kol);
readln;
end.
Вопросы для самоконтроля
1. Что такое массив?
2. Будут ли сохранены данные массива в памяти компьютера после окончания работы
программы?
3. Что такое индекс массива?
4. Какого типа должны быть переменные, являющиеся индексами массива?
5. Как можно задавать размер массива?
6. Может ли реальное количество элементов в массиве быть меньше, чем указано при
описании?
7. Может ли реальное количество элементов в массиве быть больше, чем указано при
описании?
74
11.4. Методические указания для выполнения практического задания №7.
«Операции с индексированными переменными»
Цель работы: Ознакомиться со способом хранения однотипной информации в
поименованном наборе, массиве,
Задание:
1. В приложении 8 выбрать вариант задания.
2. Выполнить практическое задание №7, используя пример программы обработки
одномерного массива.
3. Составить блок-схему алгоритма.
4. Написать программу и отладить ее по заранее подготовленному тесту.
5. Оформить задание в тетради для практических работ.
6. Результат выполнения программы предъявить преподавателю.
7. Ответить на вопросы самоконтроля.
8. Защитить выполненную работу у преподавателя.
Приложение 8. Таблица вариантов заданий
Вариант
1
2
3
4
5
6
7
8
9
Задание
Даны натуральное n, целые числа а1, … , аn, каждое из которых
отлично от нуля. Если в массиве отрицательные и положительные
элементы чередуются ( +, - ,+ , - … или -, +, -, +, …), то ответом
должен служить исходный массив. Иначе получить все
отрицательные элементы массива, сохранив порядок их следования.
Даны натуральное n и действительные числа a1, … , an (n - четное).
Получить max (a1+ an, a2+ an-1, … , an/2+ a(n/2)+1).
Даны натуральное число n, действительные числа a1, … , an. Найти
максимальный среди отрицательных элементов имеющих четные
индексы.
Даны натуральное n, действительные числа a1, … , an. Получить
числа в1, в2, … , вn, где вi – среднее арифметическое всех элементов
массива а1, … , аn, кроме аi (i = 1, 2, … , n).
Даны натуральное n, действительные числа a1, … , an. Если в
результате замены отрицательных элементов массива a1, … , an их
квадратами элементы будут образовывать неубывающую
последовательность, то получить сумму элементов исходного
массива; в противном случае получить их произведение.
Даны натуральное n, m, целые числа a1, … , an, b1, … , bm. Найти
сумму тех элементов массива a1, … , an, индексы которых совпадают
со значением элементов массива b1, … , bm.
Даны натуральное n, действительные числа a1, … , an (все числа
попарно различны). Поменять в этом массиве местами наибольший и
наименьший элементы.
Даны натуральное n, действительные числа a1, … , an. Получить
преобразованный массив, заменяя a i нулями, если  ai  не равно max
(a1, … , an), и заменяя a i единицей в противном случае (i = 1, 2, … ,
n).
Даны натуральное n, действительные числа a1, … , an (все числа
попарно различны). Поменять в этом массиве местами наименьший
и последний элементы.
75
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Даны натуральное n, действительные числа a1, … , an, b1, … , bn.
Получить новый массив с1, … , сn, каждый элемент которого сi =
max (ai, bi), i = 1, 2, … , n.
Даны натуральное n, действительные числа a1, … , an, b1, … , bn.
Преобразовать b1, … , bn по правилу: если ai < 0, то bi увеличить в
10 раз. Иначе bi заменить нулем, i = 1, 2, … , n.
Даны натуральное n, действительные числа a1, … , an. Требуется
умножить элементы массива a1, … , an на квадрат ее наименьшего
элемента, если ai  0. И на квадрат ее наибольшего члена, если ai < 0.
Даны натуральное n, действительные числа a1, … , an. Вычислить
сумму тех элементов массива, индексы которых являются степенями
двойки:
(1, 2, 4, 8, 16, …).
Даны натуральные n, m, действительные числа
a1, … , an, b1, … , bm. Элементы каждого из массивов упорядочены
по не убыванию. Объединить элементы этих двух массивов в один
массив с1, … , сn + m так, чтобы они снова оказались упорядочены
по не убыванию.
Даны натуральные n, m, действительные числа
a1, … , an и b1, … , bm. Найти наименьший среди элементов a1, … ,
an, который не входит в b1, … , bm.
Даны натуральные n, целые числа a1, … , an. Найти сумму
неповторяющихся элементов массива.
Даны натуральные n, целые числа a1, … , an. Наименьший элемент
массива a1, … , an заменить целой частью среднего арифметического
всех элементов, остальные элементы оставить без изменения. Если в
массиве несколько элементов со значением min (a1, … , an), то
заменить последний по порядку.
Даны натуральные n, целые числа a1, … , an. Преобразовать массив
по правилу: все отрицательные элементы перенести в его начало, а
все остальные в конец, сохраняя исходное взаимное расположение
как среди отрицательных, так и среди остальных элементов.
Даны натуральные n, действительные числа a1, … , an (n – чётное).
Получить min (a1 * an, a2 * an-1, … , a[n/2] * a[n/2]+1).
Даны натуральные n, действительные числа a1, … , an.
Преобразовать массив, расположив элементы в обратном порядке.
Даны натуральное n, действительные числа a1, … , an. Все элементы
массива с четными номерами, предшествующие первому по порядку
элементу со значением max (a1, … , an), умножить на max (a1, … ,
an).
Даны натуральное n, целые числа a1, … , an. Найти сумму квадратов
тех элементов массива, которые по модулю больше максимального
элемента.
Даны натуральное n, действительные числа a1, … , an. Если в
результате замены отрицательных элементов массива a1, … , an их
квадратами элементы будут образовывать неубывающую
последовательность, то получить сумму элементов исходного
массива; в противном случае получить их произведение.
Даны натуральное n, действительные числа a1, … , an. Найти
76
25
26
27
28
29
30
максимальный элемент массива среди отрицательных элементов,
имеющих четные индексы.
Даны натуральное n, действительные числа a1, … , an. Получить
преобразованный массив, заменяя ai нулями, если  ai  не равно max
(a1, … , an), и заменяя ai единицей в противном случае.
Даны натуральное n, действительные числа a1, … , an (все числа
попарно различны). Поменять в этом массиве местами наименьший
и наибольший элементы.
Даны натуральное n, действительные числа a1, … , an. Вычислить
сумму тех элементов массива, индексы которых являются степенями
тройки (1, 3, 9, 27, …).
Даны натуральное n, действительные числа a1, … , an. Если в
результате замены отрицательных элементов массива a1, … , an их
квадратами элементы будут образовывать невозрастающую
последовательность, то получить произведение элементов исходного
массива; в противном случае получить их сумму.
Даны натуральное число n, действительные числа a1, … , an. Найти
максимальный элемент среди отрицательных элементов имеющих
нечетные индексы.
Даны натуральное n, действительные числа a1, … , an. Найти
произведение индексов отрицательных элементов массива.
12. Двумерные массивы
12.1. Матрицы
Если в массиве хранится таблица значений, то такой массив называют двумерным, а его
элементы нумеруются двумя индексами – номером строки и номером столбца, на пересечении
которых находится данный элемент.
В памяти компьютера все элементы массива занимают одну непрерывную область.
Двумерный массив располагается в памяти по строкам.
Двумерный массив можно представить в виде матрицы:
 a11 a12

 a 21 a 22
a
 31 a32
12.2. Описание двумерного массива
Для двумерных массивов:
var
a : array[1..n ,1..m] of <тип>;
Где a – имя массива;
n, m – количество строк и столбцов в массиве;
<тип> – тип элементов массива.
Количество элементов в массиве - n  m.
Например:
var
mas: array [1…10,1..10] of real;
begin
77
a13 

a 23 
a33 
.
…
Описан массив mas, содержащий 100 элементов вещественного типа (10 строк и 10
столбцов).
Размер массива должен быть задан в явном виде (как в предыдущем фрагменте), или через
const.
Например:
const
n = 5, m=5;
var
mas: array[1…n,1..m] of real;
begin
…
Описан массив mas, содержащий 25 элементов целого типа (5 строк и 5 столбцов).
Каждый элемент массива определяется с помощью двух индексов, стоящих справа от имени
в квадратных скобках.
a[i, j] – элемент стоящий на пересечении i-ой строки и j-го столбца.
a[i, i] – элементы главной диагонали.
a[i, 2] – элементы второго столбца.
Индекс может быть переменной, константой, арифметическим выражением целого типа.
Если количество строк равно количеству столбцов, матрица называется квадратной.
Обработка двумерных массивов производится при изменении индексов элементов.
Все элементы главной диагонали удовлетворяют условию:
i=j
(номер строки равен номеру столбца).
Все элементы побочной диагонали удовлетворяют условию:
i+j=n+1
(n – количество строк и столбцов).
Элементы, расположенные над главной диагональю удовлетворяют условию:
i<j
(номер строки строго меньше номера столбца).
Элементы, расположенные под главной диагональю удовлетворяют условию:
i>j
(номер строки строго больше номера столбца).
Ввод элементов двумерного массива
…
for i:=1 to n do
for j:=1 to m do
readln(a[i]);
…
Данный фрагмент позволит ввести элементы массива по строкам.
Для ввода элементов массива по столбцам, достаточно в предыдущем фрагменте поменять
местами внутренний и внешний циклы.
Вывод элементов двумерного массива
…
78
for i:=1 to n do
begin
for j:=1 to n do
write(a[I,j],‘ ‘);
writeln;
end;
…
Данный фрагмент позволит вывести элементы массива в виде матрицы.
12.3. Обработка двумерных массивов
Рассмотрим типовые задачи обработки двумерных массивов с использованием вложенных
циклов.
Задача.
Составить программу подсчета суммы и произведения элементов двумерного массива
вещественных чисел.
Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
1
Имя массива
a
2
Количество строк
n
3
Количество столбцов
m
4
Индексы массива
I,j
5
Сумма элементов
s
6
Произведение элементов
p
program matr;
uses
crt;
var
a:array [1...10, 1...10] of real;
i, j, n, m: integer;
s,p :real;
begin
clrscr;
writeln(‘ Введите n<=10 , m<=10 ’);
readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to m do
readln(a[i, j]);
s:=0; p:=1;
{ поиск суммы и произведения }
for i:=1 to n do
for j:=1 to m do
begin
s:=s + a[i,j];
p:=p * a[i,j];
79
end;
writeln(‘ Сумма элементов s=’,s:8:3);
writeln(‘ Произведение элементов p=’,p:8:3);
readln;
end.
Задача.
Задана квадратная матрица целых чисел. Составить программу подсчета суммы элементов,
расположенных над главной диагональю.
Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
1
Имя массива
a
2
Количество строк и столбцов
n
3
Индексы массива
I,j
4
Сумма элементов над главной
s
диагональю
program matr_1;
uses
crt;
var
a:array [1..10, 1..10] of real;
i, j, n, m : integer;
s,p : real;
begin
clrscr;
writeln(‘ Введите n<=10 , m<=10 ’);
readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to m do
readln(a[i,j]);
for i:=1 to 3 do
for j:=i +1 to 3 do
s:=s+a[i,j];
writeln('Сумма элементов s=', s);
readln;
end.
Для ввода элементов массива используются вложенные циклы с указанием номера
вводимого элемента.
Для поиска суммы элементов над главной диагональю во внутреннем цикле задан закон
изменения параметра внутреннего цикла:
j:=i+1.
Задача.
Задана целочисленная квадратная матрица. Определить является ли она симметричной
относительно главной диагонали.
Таблица идентификаторов
80
№
Наименование переменной
Обозначения в программе
1
Имя массива
a
2
Количество строк и столбцов
n
3
Индексы массива
I,j
4
Флажок
f
program matr_2;
uses
crt;
var
a : array [1..10, 1..10] of integer;
i, j, n, f : integer;
begin
clrscr;
writeln(‘ Введите n<=10 ’);
readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to n do
readln(a[i,j]);
f:=0
for i:=1 to n do
for j:=i to n do
if a[i,j]<>a[j,i] then f:=1;
if f=0 then writeln(‘ матрица симметрична’)
else writeln (‘матрица не симметрична’);
readln;
end.
При решении этой задачи сравниваются элементы расположенные над главной диагональю (
a[ i,j ] ) с элементами, расположенными под главной диагональю ( a[ j,i ] ) .
Задача.
Задана матрица вещественных чисел. Образовать одномерный массив, где каждый j – й
элемент равен произведению элементов j-ого столбца двумерного массива.
Таблица идентификаторов
№
Наименование переменной
1
Имя двумерного массива
2
Имя одномерного массива
3
Количество строк
4
Количество столбцов
5
Индексы массива
Обозначения в программе
a
b
n
m
I,j
program matr_3;
uses crt;
var
81
a: array [1...10, 1...10] of integer;
b: array [ 1..10 ] of integer;
i, j, n, f : integer;
begin
clrscr;
writeln(‘ Введите n<=10 , m<=10 ’); readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to m do
readln (a[i, j]);
writeln(‘ Исходная матрица ’);
for i:=1 to n do
begin
for j:= 1 to n do
write( a[I,j] , ‘ ‘);
writeln;
end;
writeln(‘ Образованный одномерный массив ’);
for j:=1 to m do
begin
b[ j ]:=1;
{ накапливается произведение элементов j столбца }
for i:=1 to n do
b[ j ]:= b[ j ] * a[ i, j ];
write( b[ j] , ‘ ‘);
end;
readln;
end.
Задача.
Задана целочисленная матрица a(m*n). Упорядочить элементы каждой строки по
возрастанию.
Таблица идентификаторов
№
Наименование переменной
1
Имя двумерного массива
2
Количество строк, столбцов
3
Индексы массива
4
Флажок
5
Дополнительная переменная для
обмена соседних элементов
program mart_4;
uses crt;
var
82
Обозначения в программе
a
n, m
I,j
f
p
a: array[1...10, 1...10] of integer;
i,j,n,f : integer;
begin clrscr;
writeln(‘ Введите n<=10 , m<=10 ’); readln (n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to m do
readln(a[i, j]);
writeln(‘ Исходная матрица ’);
for i:=1 to n do
begin
for j:=1 to n do
write(a[I,j],‘ ‘);
writeln;
end;
{ переход от строки к строке }
for i:=1 to n do
{ сортировка i-ой строки }
repeat
f:=0;
for j:=1to m-1 do
if a[i,j]>a[i,j+1] then
begin p:=a[i,j]; a[i,j]=a[i,j+1]; a[i,j+1]:=p; f:=1; end;
until f=0;
writeln(‘ Преобразованная матрица ’);
for i:=1 to n do
begin
for j:= 1 to n do
write( a[I,j] , ‘ ‘);
writeln;
end;
readln;
end.
f =0 – признак того, что все элементы данной строки упорядочены.
Пример программы обработки двумерного массива
Задача.
Составить программу нахождения максимального среди элементов двумерного массива
вещественных чисел. Определить номер строки и номер столбца, на пересечении которых был
найден максимальный элемент.
Таблица идентификаторов.
№
Наименование переменной
Обозначения в программе
1
Имя двумерного массива
a
2
Количество строк
n
3
Количество столбцов
m
83
Индексы массива
Значение максимального элемента
Номер строки, где найден
максимальный элемент
7
Номер столбца, где найден
максимальный элемент
Листинг программы.
program lab6;
uses
crt;
var
a: array [1...10, 1...10] of real;
i, j, n, m , kmax , lmax: integer;
max :real;
begin
clrscr;
writeln(‘ Введите n<=10 , m<=10 ’);
readln(n,m);
writeln(‘ Введите элементы массива по строкам ’);
for i:=1 to n do
for j:=1 to m do
readln(a[i,j]);
{за максимальный принимается элемент a11 }
max:=a[1,1];
kmax:=1;
lmax:=1;
for i:=1 to n do
for j:=1 to m do
if a[i,j]>max then
begin
max:=a[i,j];
kmax:=i;
lmax:=j;
end;
writeln(‘max=’, max:8:3);
writeln(‘строка - ‘, kmax,’ столбец - ’,lmax);
readln;
end.
4
5
6
I,j
max
kmax
lmax
Вопросы для самоконтроля
1. В чем состоит разница между одномерными и двумерными массивами?
2. В каких случаях целесообразно создавать двумерные массивы?
3. Как расположены элементы двумерного массива в памяти компьютера?
4. Как определить количество элементов в двумерном массиве?
5. Как определить размер памяти в байтах, выделенной под хранение двумерного массива?
84
6. Какая матрица называется квадратной?
7. Что характеризует элементы, расположенные на главной диагонали, над и под главной
диагональю?
12.4. Методические указания для выполнения практического задания №8.
«Матрицы»
Цель работы: Ознакомиться со способом хранения информации в двумерном массиве,
матрице.
Задание:
1. В приложении 9 выбрать свой вариант задания.
2. Выполнить практическое задание, используя пример программы обработки
одвумерного массива.
3. Составить блок-схему алгоритма.
4. Написать программу и отладить ее по заранее подготовленному тесту.
5. Оформить задание в тетради для практических работ.
6. Результат выполнения программы предъявить преподавателю.
7. Ответить на вопросы самоконтроля.
8. Защитить выполненную работу у преподавателя.
Приложение 9. Таблица вариантов заданий
Вариант
Задание
1
В данной действительной матрице размером nm поменять местами
строку, содержащую элемент с наибольшим значением, со строкой,
содержащей элемент с наименьшим значением. Предполагается, что
эти элементы единственны.
2
Дана действительная матрица размером nm, все элементы которой
различны. В каждой строке выбирается элемент с наибольшим
значением, затем среди этих чисел выбирается наибольшее. Указать
индексы элемента с найденным значением.
3
Дана целочисленная матрица размером nm. Написать программу,
формирующую двумерный массив по следующему правилу:
элементы первой строки – в порядке возрастания индексов столбцов,
элементы второй строки – в порядке убывания индексов столбцов и
т. д.
4
Дана действительная матрица размером nm. Найти среднее
арифметическое каждого из столбцов, имеющих четные номера.
5
Дана действительная матрица размером nm. Все элементы с
наибольшим значением заменить нулями (таких элементов может
быть несколько).
6
Дана целочисленная матрица размером nm. Написать программу,
позволяющую находить сумму наибольших значений элементов ее
строк.
7
Дана целочисленная квадратная матрица размером nm. Написать
программу, формирующую два одномерных массива. В один
переслать по строкам верхний треугольник матрицы, включая
элементы главной диагонали, в другой – нижний треугольник.
Полученные массивы распечатать.
85
8
Дана целочисленная квадратная матрица размером nm. Написать
программу, позволяющую исключать из нее столбец, в котором
расположен минимальный элемент главной диагонали.
9
Дана целочисленная квадратная матрица размером nm. Написать
программу, позволяющую поменять местами элементы,
расположенные в верхней и нижней четвертях, ограниченные
главной и побочной диагоналями (за исключением элементов,
расположенных на диагоналях)
10
Задана действительная матрица размером nm. Написать программу,
позволяющую заменить все элементы, наименьшие в строке, на
нули.
11
Задана целочисленная матрица размером nm. Написать программу,
позволяющую находить строки с наименьшей и наибольшей суммой
и выводить их на печать.
12
Задана целочисленная квадратная матрица размером nn. Написать
программу, преобразующую исходную матрицу по правилу:
начетные столбцы разделить на среднее значение диагональных
элементов матрицы, а четные оставить без изменения.
13
Задана действительная квадратная матрица размером nn.
Вычислить сумму тех из ее элементов, расположенных на главной
диагонали и выше ее, которые превосходят по величине все
элементы, расположенные ниже главной диагонали. Если таких
элементов нет, то ответом должно служить сообщение об этом.
14
Задана целочисленная квадратная матрица размером nn (n - четное).
Написать программу, позволяющую менять местами элементы
первой и второй строк, элементы третьей и четвертой строк и т. д.
15
Даны две действительные квадратные матрицы размером nn.
Получить новую матрицу, прибавлением к элементам каждого
столбца первой матрицы, произведения элементов соответствующих
строк второй матрицы.
16
Даны две действительные квадратные матрицы размером nn.
Получить новую матрицу умножением элементов каждой строки
первой матрицы на наибольшее из значений элементов
соответствующей строки второй матрицы.
17
18
Дана целочисленная квадратная матрица размером nn. Найти
номера строк, все элементы которых – нули.
Задан массив из целых чисел размером n и число L. Написать
программу, формирующую из него матрицу, содержащую по L
элементов в строке. Недостающие элементы заполнить нулями.
19
Дана целочисленная матрица размером nm (m - четное). Написать
программу, позволяющую менять местами элементы первого и
последнего столбцов, элементы второго и (n-1)-го столбцов и т. д. до
среднего столбца (n - нечетно)
20
Дана действительная квадратная матрица размером nn (n - четное),
все элементы которой различны. Найти наибольший элемент среди
стоящих на главной и побочной диагоналях и поменять его местами
с элементом, стоящим на пересечении с этими диагоналями.
21
Дана целочисленная матрица размером nm. Найти максимальный
по модулю элемент среди отрицательных элементов нечетных
86
столбцов.
22
Дана целочисленная матрица размером nm и число K. Написать
программу, переставляющую строки и столбцы таким образом,
чтобы максимальный по модулю элемент был расположен на
пересечении K–ой строки и K–го столбца.
23
Дана действительная матрица размером nm. Все элементы с
наибольшим значением заменить нулями (таких элементов может
быть несколько).
24
Дана целочисленная матрица размером nm. Написать программу,
формирующую двумерный массив по следующему правилу:
элементы первой строки – в порядке возрастания индексов столбцов,
элементы второй строки – в порядке убывания индексов столбцов и
т. д.
25
Дана целочисленная квадратная матрица размером nn. Написать
программу, позволяющую исключать из нее столбец, в котором
расположен минимальный элемент главной диагонали.
26
В данной действительной матрице размером nm обнулить все
отрицательные элементы. Подсчитать, количество обнуленных
элементов.
27
Дана целочисленная квадратная матрица размером nn. Найти
номера строк, все элементы которых отрицательны.
28
Задана целочисленная квадратная матрица размером nn (n - четное).
Написать программу, позволяющую менять местами элементы
первой и последней строк, второй и предпоследней строк и т. д.
29
Задана целочисленная матрица размером nm. Написать программу,
позволяющую находить строки с наименьшим и наибольшим
произведением элементов. Вывести на печать номера этих строк.
30
Даны две действительные квадратные матрицы размером nn.
Получить новую матрицу умножением элементов каждой строки
первой матрицы на наименьшее из значений элементов
соответствующей строки второй матрицы.
13. Подпрограммы
Если в программе имеется несколько одинаковых фрагментов, то возникает вопрос: нельзя
ли оформить повторяющийся фрагмент в виде отдельного блока, а затем обращаться к нему
несколько раз. Аналогичная идея возникает при отладке больших программ – если разбить
программу на отдельные блоки, то отладить ее по частям будет проще. На языке Паскаль
подпрограммы реализуются в виде функций или процедур.
13.1. Функции и процедуры
Функции и процедуры реализуют принципы структурного программирования.
К функциям и процедурам обращаются если необходимо:
разбить большую задачу на несколько меньших по объему и сложности задач;
уменьшить объем программы за счет выделения типовых программных действий в функции
или процедуре;
создание программных модулей, которые могут быть использованы и в других программах.
Структура программы, содержащей процедуру (функцию)
program <имя>;
87
<описательная часть основной прогаммы>;
procedure <имя процедуры>;
(function <имя функции>;)
<описательная часть процедуры/функции>;
begin
<исполнительная часть процедуры/функции>;
end;
begin
<исполнительная часть основной программы>;
end.
Процедуры (функции) могут содержать любые операторы языка Паскаль и повторяют
структуру основной программы, только текст процедуры (функции) заканчивается «;».
13.2. Процедуры
Процедура – это независимая именованная часть программы, которую после однократного
описания можно многократно вызывать по имени.
Первая строка любой процедуры:
procedure <имя>(<список формальных параметров>);
<имя> – уникальный идентификатор, строится по правилам составления имен простых
переменных;
<список формальных параметров> – список имен переменных с указанием их типа,
передающих информацию в процедуру и возвращающих результаты в основную программу.
Обращение к процедуре из основной программы:
<имя> (<список формальных параметров>);
<список фактических параметров> – список переменных или констант, разделенных
запятыми.
Например:
procedure prim(x:real; var s:integer; z,y:integer);
Описан заголовок процедуры где:
x, z, y передают информацию в процедуру;
s передаёт информацию в процедуру и возвращает результат (можно сказать процедура
изменяет значение s, хотя значение s в основной программе может быть до процедуры и не
определено).
Чтобы формальный параметр возвращал результат, его необходимо описать с
использованием служебного слова var.
Обращение к процедуре:
prim (x, s, z, y); (имена фактических параметров x, s, z,y совпадают с именами формальных)
или
prim (a, s1, b, 5); (имена фактических параметров a, s1, b не совпадают с именами
формальных, а последний фактический параметр является числовой константой)
Формальные и фактические параметры должны совпадать по типу, количеству и порядку
следования. Фактические параметры должны быть описаны в основной программе. Они
называются глобальными переменными и доступны как в основной программе, так и в
процедуре. Формальные параметры отдельно в процедуре не описываются. Время
существования глобальных переменных – от начала и до конца работы программы.
Промежуточные переменные, которые используются только в процедуре, описываются в
процедуре и называются локальными. Локальные переменные не доступны в основной
88
программе. Время существования локальных переменных – от начала и до конца работы
процедуры, в которой они описаны.
13.3. Вложенные процедуры
Директива forward
Если одна подпрограмма использует другую, а та, в свою очередь, использует первую,
возникает проблема размещения этих процедур в программе. Какую из них поместить в
программе первой? В этих случаях прибегают к директиве forward.
Например:
procedure pp1(a,b:integer):forward;
procedure pp2(c: real); {Вторая процедура}
var x,y:integer;
begin
…
pp1(x, y);
end;
procedure pp1; {Первая процедура}
var z:real;
begin
…
pp2 (z);
end;
…
Задача.
Задан одномерный массив вещественных чисел. Найти максимальный элемент массива и
определить его номер.
Составим программу с использованием двух процедур:
процедура ввода элементов массива;
процедура поиска максимального элемента и определение его номера.
Для передачи массива в процедуру введем пользовательский тип mas.
program PP;
type
mas=array[1..100] of integer; {пользовательский тип}
var { глобальные переменные }
a:mas;
max:real;
n,max,kmax:integer;
procedure input_mas(n:integer ; var a:mas );
var i:integer; {локальная переменная}
begin
for i:=1 to n do readln(a[ i ]);
end;
procedure max_m(n:integer; a:mas; var max,kmax:integer );
var i:integer;
begin
89
max:=a[1];kmax:=1;
for i:=1 to n do
if a[i]>max then
begin max:=a[i]; kmax:=i; end;
end;
begin
writeln(‘ Введите n<=100’) ; readln( n );
writeln (‘ Введите элементы массива ‘);
input_mas(n,a);
max_m(n,a,max,kmax );
writeln(‘max=’,max,‘kmax=’,kmax);
readln;
end.
13.4. Функции
Если результатом подпрограммы является только одно значение, то имеет смысл оформить
такую подпрограмму в виде функции.
Первая строка любой функции:
function <имя >(<список формальных параметров> ):<тип>;
<список формальных параметров> – список имен переменных с указанием их типа,
передающих информацию в функцию;
<имя> возвращает результат в основную программу;
<тип> – тип возвращаемого результата.
Обращение из основной программы к функции возможно в структуре какого-либо
оператора, например оператора присваивания:
<переменная>:= <имя> (список фактических параметров);
Функция возвращает в основную программу только один результат через переменную,
являющуюся именем функции. Эта переменная не должна быть описана в основной программе.
В описательной части функции этой переменной должно быть присвоено какое-либо значение,
иначе функция не возвращает никакого значения.
Задача.
Составить программу вычисления n! с использованием функции.
n! = 1* 2 * 3 * …* n
program factorial;
{описательная часть основной программы}
var
n,k:integer;
function fun(k:integer):integer;
{описательная часть подпрограммы}
var
p,i:integer;
begin
{исполнительная часть подпрограммы}
p:=1;
for i:=1 to k do
p:=p*i;
90
fun:=p;
end;
{исполнительная часть основной программы}
begin
writeln('введите n');
readln(n);
for k: = 1 to n do
writeln(fun(k));
end.
n, k – глобальные переменные.
p, i – локальные переменные.
fun – имя функции, возвращает результат в основную программу.
Имя функции в теле функции в операторах присваивания может стоять только слева от знака
«:=», поэтому использована дополнительная переменная p для подсчета произведения.
Пример программы с использованием подпрограмм
Задача.
Задан двумерный массив целых чисел. Определить количество четных чисел в массиве.
Составим процедуру ввода элементов массива;
функцию подсчета количества четных чисел;
процедуру вывода двумерного массива в виде матрицы.
1. Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
1
Имя массива
a
2
Количество строк
n
3
Количество столбцов
m
4
Индексы массива
I,j
2. Листинг программы.
program pp_1;
type
mas=array[1..10,1..10] of integer;
var
a:mas; n,m,i,j:integer ;
{ Процедура ввода массива }
procedure input_mas(n,m:integer; var a:mas);
begin
for i:=1 to n do
for j:=1 to n do readln(a[i,j]);
end;
{Функция подсчета количества нечетных чисел}
function kol( n,m:integer; a:mas ):integer;
var
k:integer ;
begin
kol:=0;
91
for i:=1 to n do
for j:=1 to n do
if not odd( a[ i,j ] ) then k:=k+1;
kol:=k;
end;
{Процедура вывода матрицы}
procedure print_mas(n,m:integer; a:mas);
begin
for i:=1 to n do
begin
for j:=1 to n do write( a[i,j],‘ ‘);
writeln;
end;
end;
{Исполнительная часть основной программы}
begin
writeln(‘Введите n<=10 , m<=10’);
readln (n,m);
writeln(‘Введите элементы массива по строкам’);
input_mas(n,m,a);
writeln(‘Исходная матрица’);
print_mas(n,m,a);
writeln(‘Количество нечетных чисел =’,kol(n,m,a));
readln;
end.
Вопросы для самоконтроля
1. В каких случаях прибегают к построению подпрограмм?
2. В каком месте программы располагаются функции или процедуры?
3. Что такое процедура?
4. Какова структура процедуры?
5. Как передается информация в процедуру?
6. Каким образом возвращаются результаты работы процедуры в основную программу?
7. Какое соответствие должно быть между формальными и фактическими параметрами?
8. Какие переменные называются глобальными? Время существования глобальных
переменных?
9. Какие переменные называются локальными? Время существования локальных
переменных?
10. Когда используют директиву forward?
11. В каких случаях целесообразно прибегать к построению функций?
12. Как передается информация в функцию?
13. Каким образом возвращается результат работы функции в основную программу?
92
Методические указания для выполнения практического задания №9.
«Подпрограммы»
Цель работы: Ознакомиться со структурой программы, содержащей процедуру или
функцию, использовать глобальные и локальные переменные, применять формальные и
фактические параметры.
Задание:
1. В приложении 10 выбрать свой вариант задания.
2. Выполнить практическое задание №9, используя пример программы с
использованием подпрограмм
3. Составить блок-схему алгоритма.
4. Написать программу и отладить ее по заранее подготовленному тесту.
5. Оформить задание в тетради для практических работ.
6. Результат выполнения программы предъявить преподавателю.
7. Ответить на вопросы самоконтроля.
8. Защитить выполненную работу у преподавателя.
Приложение 10. Таблица вариантов заданий
Составить программу с использованием процедуры и функции
Вариант
Задание
1
В данной действительной матрице размером nm поменять местами
строку, содержащую элемент с наибольшим значением, со строкой,
содержащей элемент с наименьшим значением. Предполагается, что
эти элементы единственны.
2
Дана действительная матрица размером nm, все элементы которой
различны. В каждой строке выбирается элемент с наибольшим
значением, затем среди этих чисел выбирается наибольшее. Указать
индексы элемента с найденным значением.
3
Дана целочисленная матрица размером nm. Написать программу,
формирующую двумерный массив по следующему правилу:
элементы первой строки – в порядке возрастания индексов столбцов,
элементы второй строки – в порядке убывания индексов столбцов и
т. д.
4
Дана действительная матрица размером nm. Найти среднее
арифметическое каждого из столбцов, имеющих четные номера.
5
Дана действительная матрица размером nm. Все элементы с
наибольшим значением заменить нулями (таких элементов может
быть несколько).
6
Дана целочисленная матрица размером nm. Написать программу,
позволяющую находить сумму наибольших значений элементов ее
строк.
7
Дана целочисленная квадратная матрица размером nm. Написать
программу, формирующую два одномерных массива. В один
переслать по строкам верхний треугольник матрицы, включая
элементы главной диагонали, в другой – нижний треугольник.
Полученные массивы распечатать.
93
8
Дана целочисленная квадратная матрица размером nm. Написать
программу, позволяющую исключать из нее столбец, в котором
расположен минимальный элемент главной диагонали.
9
Дана целочисленная квадратная матрица размером nm. Написать
программу, позволяющую поменять местами элементы,
расположенные в верхней и нижней четвертях, ограниченные
главной и побочной диагоналями (за исключением элементов,
расположенных на диагоналях).
10
Задана действительная матрица размером nm. Написать программу,
позволяющую заменить все элементы, наименьшие в строке, на
нули.
11
Задана целочисленная матрица размером nm. Написать программу,
позволяющую находить строки с наименьшей и наибольшей суммой
и выводить их на печать.
12
Задана целочисленная квадратная матрица размером nn. Написать
программу, преобразующую исходную матрицу по правилу:
начетные столбцы разделить на среднее значение диагональных
элементов матрицы, а четные оставить без изменения.
13
Задана действительная квадратная матрица размером nn.
Вычислить сумму тех из ее элементов, расположенных на главной
диагонали и выше ее, которые превосходят по величине все
элементы, расположенные ниже главной диагонали. Если таких
элементов нет, то ответом должно служить сообщение об этом.
14
Задана целочисленная квадратная матрица размером nn (n –
чётное). Написать программу, позволяющую менять местами
элементы первой и второй строк, элементы третьей и четвертой
строк и т.д.
15
Даны две действительные квадратные матрицы размером nn.
Получить новую матрицу, прибавлением к элементам каждого
столбца первой матрицы, произведения элементов соответствующих
строк второй матрицы.
16
Даны две действительные квадратные матрицы размером nn.
Получить новую матрицу умножением элементов каждой строки
первой матрицы на наибольшее из значений элементов
соответствующей строки второй матрицы.
17
18
Дана целочисленная квадратная матрица размером nn. Найти
номера строк, все элементы которых – нули.
Задан массив из целых чисел размером n и число L. Написать
программу, формирующую из него матрицу, содержащую по L
элементов в строке. Недостающие элементы заполнить нулями.
19
Дана целочисленная матрица размером nm (m – чётное). Написать
программу, позволяющую менять местами элементы первого и
последнего столбцов, элементы второго и (n-1)-го столбцов и т. д. до
среднего столбца (n – нечётно).
20
Дана действительная квадратная матрица размером nn (n – чётное),
все элементы которой различны. Найти наибольший элемент среди
стоящих на главной и побочной диагоналях и поменять его местами
с элементом, стоящим на пересечении с этими диагоналями.
21
Дана целочисленная матрица размером nm. Найти максимальный
94
по модулю элемент среди отрицательных элементов нечетных
столбцов.
22
Дана целочисленная матрица размером nm и число K. Написать
программу, переставляющую строки и столбцы таким образом,
чтобы максимальный по модулю элемент был расположен на
пересечении K-ой строки и K-го столбца.
23
Дана действительная матрица размером nm. Все элементы с
наибольшим значением заменить нулями (таких элементов может
быть несколько).
24
Дана целочисленная матрица размером nm. Написать программу,
формирующую двумерный массив по следующему правилу:
элементы первой строки – в порядке возрастания индексов столбцов,
элементы второй строки – в порядке убывания индексов столбцов и
т. д.
25
Дана целочисленная квадратная матрица размером nn. Написать
программу, позволяющую исключать из нее столбец, в котором
расположен минимальный элемент главной диагонали.
26
В данной действительной матрице размером nm обнулить все
отрицательные элементы. Подсчитать, количество обнуленных
элементов.
27
Дана целочисленная квадратная матрица размером nn. Найти
номера строк, все элементы которых отрицательны.
28
Задана целочисленная квадратная матрица размером nn (n - четное).
Написать программу, позволяющую менять местами элементы
первой и последней строк, второй и предпоследней строк и т. д.
29
Задана целочисленная матрица размером nm. Написать программу,
позволяющую находить строки с наименьшим и наибольшим
произведением элементов. Вывести на печать номера этих строк.
30
Даны две действительные квадратные матрицы размером nn.
Получить новую матрицу умножением элементов каждой строки
первой матрицы на наименьшее из значений элементов
соответствующей строки второй матрицы.
14. Обработка строк текста
14.1. Символьные переменные
Значением переменных символьного типа является один символ. Каждому символу
соответствует код символа – целое число в диапазоне то 0 до 255. Существует международная
таблица ASCII-кодов.
Для описания символьных переменных используют слово char и они занимают 1 байт
памяти.
var
c:char;
Над символьными переменными допустимы только две операции: присвоение и сравнение.
При сравнении символов сравниваются их коды.
Символьные константы задаются в апострофах:
c:=‘A’;
95
Фрагмент таблицы ASCII-кодов букв латинского алфавита
A
B
…
Z
65
66
…
90
a
b
…
z
97
98
…
122
Коды малых букв от
заглавных отличаются на 32.
Фрагмент таблицы ASCII-кодов букв русского алфавита
A
B
…
П
P
…
Я
Е
128
129
…
143
144
…
159
240
а
б
…
п
р
…
я
е
160
161
…
175
224
…
239
241
Коды малых букв от
заглавных отличаются на 32.
Коды малых букв от
заглавных отличаются на 80.
14.2. Функции обработки символьных переменных
chr(x:byte):char - возвращает символ, соответствующему коду x.
Например:
writeln(chr(65));
Результат на экране:
заглавная буква A латинского алфавита.
ord(c:char):byte
возвращает число, соответствующее коду символа c.
Например:
writeln(ord(‘A’));
Результат на экране:
число 65 – код заглавной буквы A латинского алфавита.
upcase (c:char):char –
преобразует малые буквы латинского алфавита в заглавные.
Например:
writeln( upcase(‘a’) );
Результат на экране:
заглавная буква A латинского алфавита.
Если аргументом этой функции окажется не малая буква латинского алфавита, то эта
функция никаких действий не выполнит.
pred(c:char):char –
возвращает предшествующий символ.
Например:
writeln( pred('B') );
Результат на экране:
заглавная буква A латинского алфавита, код которой на 1 меньше кода буквы B.
succ(c:char):char –
возвращает последующий символ.
Например:
96
writeln( succ(‘A’) );
Результат на экране:
заглавная буква B латинского алфавита, код которой на 1 больше кода буквы A.
Задача.
Вывести на экран таблицу ASCII-кодов.
program ASCII;
var
i: byte;
begin
for i:=1 to 255 do
writeln (chr(i),'=',i);
end.
Тип char в программах на Паскале часто используют для хранения вводимых с клавиатуры
ответов на запросы меню.
Для этого используют функцию readkey. Работу этой функции обеспечивает модуль Crt.
Приведем пример использования:
Program char;
uses
crt;
begin
repeat
…
ch:= readkey
until (ch='n') or (ch='N');
end.
Цикл действий продолжается до тех пор, пока не будет введено с клавиатуры 'n' или 'N'.
14.3. Строковые переменные
Строковые переменные используются для хранения любой цепочки символов и занимают
255 байт памяти. Для описания строковых переменных используют служебное слово string.
а) var
s:string;
b) var
t:string[20];
По умолчанию под строковую переменную s будет отведено 255 байт памяти (вариант а), а
под строковую переменную t будет отведено 20 байт (вариант b).
Строковые константы задаются в апострофах:
S:=’Москва’;
Ввод строковых переменных осуществляется с помощью оператора – readln, а вывод –
writeln.
var
S:string;
begin
readln(s);
97
…
Ввод цепочки символов завершается нажатием Enter. Если количество введенных символов
превышает 255, то «хвост» отбрасывается, и в переменную попадают только первые 255
символов.
Над строковыми переменными допустимы три операции: присвоение, сравнение и
«слияние».
Существует два способа обработки строковых переменных:
обработка всей строки как единого целого;
строковые переменные можно рассматривать как одномерный массив символов (элементов
типа char) и применять к ним функции символьных переменных.
Операция слияния:
d:= 'Москва – столица';
a:= 'России';
d + a 'Москва – столица России'
14.4. Функции обработки строковых переменных
length(s:string):byte - подсчитывается фактическая длина строки, включая пробелы и знаки
препинания.
Например:
…
s:=’Москва’;
wrtiteln(length(s));
Результат на экране:
Число 6, количество символов в сломе Москва.
copy(s:string,i,n):string –
копируется фрагмент строки s.
Где s – переменная, из которой копируется фрагмент;
i – позиция, с которой копируется;
n – количество копируемых символов.
Если i и n – вне пределов строки, сообщения об ошибке не будет.
Если i>length(s) результат – строка нулевой длины.
Если n >length(s ) результат – фрагмент от i до конца строки.
Например:
…
s:='электрификация';
b:=copy(s,8,3)+copy(s,12,3);
writeln(s);
…
Результат на экране:
фикция
pos(t:string,s:string):byte –
осуществляет поиск подстроки t в строке s.
Результатом этой функции является позиция вхождения t в s. Если подстрока не найден результат 0.
Например:
98
…
t:='ритм'; s:='алгоритм';
k:=pos(t,s);
wrieln(‘k=’,k);
Результат на экране:
k=5
14.5. Процедуры обработки строковых переменных
insert(t,s,i);
– вставить подстроку t в строку s начиная, начиная с позиции i.
Например:
…
s:='ритм';
insert(‘алго’,s,1);
wrieln(s);
…
Результат на экране:
алгоритм
delete(s,i,n);
– удалить из строки s с позиции i n символов.
Например:
…
s:='алгоритм';
delete(s,1,4);
writeln(s);
…
Результат на экране:
ритм
i,n – в процедурах insert и delete обязательно должны присутствовать в строке s. Иначе –
сообщениие об ошибке.
14.6. Примеры обработки строковых переменных
Задача.
В произвольном тексте заменить все сочетания «чя» на «ча».
Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
1
Текст
Text
2
Индекс массива
i
Program word_text;
Uses crt;
var
text:string;
i:integer;
begin
clrscr;
99
writeln(‘Введите текст’);
readln(text);
for i:=1 to length(text)-1 do
if copy(text,i,2)=‘чя’ then
begin
delete (text,i+1,1);
insert (‘a’,text,i+1);
end;
writeln(‘Преобразованный текст’);
writeln(text);
readln;
end.
Задача.
В произвольном тексте (text) в слове word заменить первую букву на заглавную и
подсчитать количество замен (текст латинский).
Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
1
Текст
text
2
Слово
word
3
Индекс массива
i
4
Количество замен
s
Program word_text1;
Uses crt;
var
text,word:string;
s,i:integer;
begin
writeln(‘Введите текст’);
readln(text);
s:=0;
writeln(‘Введите слово’);
readln(word);
for i:=1 to length(text)-lenght(word)+1 do
if copy(text,i,length(word))=word then
begin
s:=s+1;
text[i]:=upcase(text[i]);
end;
writeln (s);
readln;
end.
Задача.
Заменить в произвольном тексте все слова word1 на слово word2.
Таблица идентификаторов
100
№
Наименование переменной
1
Текст
2
Слова первое
3
Слова второе
4
Индекс
Program word_text2;
var
text,word1,word2:string;
i:integer;
begin
writeln(‘Введите исходный текст’);
readln text);
writeln(‘Введите первое слово’);
readln(word1);
writeln(‘Введите второе слово’);
readln(word2);
repeat
i:=pos(word1,text)
if i<>0 then
begin
delete(text,i,length(word1));
insert(word2,text,i);
end;
until i=0;
writeln(‘Преобразованный текст’);
writeln(text);
readln;
end.
Обозначения в программе
text
word1
word2
i
Вопросы для самоконтроля
1. Какие типы данных используются для обработки текста?
2. Сколько байт памяти занимает символьная переменная?
3. Какие операции допустимы над символьными переменными?
4. Перечислите функции обработки символьных переменных?
5. Что такое строка?
6. Сколько байт памяти занимает строковая переменная?
7. Какие операции допустимы над строковыми переменными?
8. Перечислите функции и процедуры обработки строковых переменных?
9. Как можно обратиться к отдельным символам строки?
15. Структурированные типы данных
При решении задач обработки большого количества данных используют массивы. Но при
работе с массивами основное ограничение заключается в том, что все элементы массива
должны быть одного типа. Для работы с комбинированными типами данных применяют
записи.
101
Записи
Записи – это структурированный тип данных, позволяющих хранить вместе различные типы
данных.
Запись состоит из нескольких полей, для каждого из которых при объявлении (описании)
указывается имя и тип.
Например:
type
student = record; {запись}
surname : string[20];
year : integer;
bal : real;
end; {завершает список полей}
var
st:student;
Сформирован пользовательский тип данных – student, он базируется на стандартных типах
(string, integer,real).
Переменная st - имеет тип student (запись), состоит из 3-х полей:
surname – фамилия студента;
year – год рождения;
bal – средний бал.
Каждое поле хранит информацию разного типа. При обращении к отдельным полям
указывается имя всей записи и имя отдельного поля через точку.
st.surname:='Иванов';
st.year:=1905;
st.bal:=4.5;
Для уменьшения записи обращения к отдельным полям используют оператор with … do
Например:
with st do
begin
surname:='Иванов';
year:= 1905;
bal:=4.5;
end;
Для обработки большого объема информации комбинированного типа целесообразно
строить массивы записей, где каждый элемент массива – запись, состоящая из нескольких
полей разного типа.
Например, чтобы сохранить информацию о студентах группы в 25 человек, можно создать
следующий массив записей:
type
student = record; {запись}
surname : string[20];
year : integer;
bal : real;
end;
var
102
st:array[ 1..25 ] of student;
st – массив записей. Каждый элемент массива(St[i])содержит информацию об одном
студенте:
St[i].surname – фамилия;
St[i].year – год рождения;
St[i].bal – средний бал.
Задача.
Создать массив записей, содержащий информацию о студентах группы. Каждая запись
содержит поля – фамилия, год рождения, пол. Подсчитать средний возраст студентов мужского
пола группы.
Таблица идентификаторов
№
Наименование переменной
Обозначения в программе
1
Имя массива
st
2
Количество студентов
n
3
Индекс массива
i
4
Средний возраст
p
5
Количество мужчин
k
6
Текущий год
t
program rec;
uses crt;
type
student = record; {запись}
surname : string[20];
year : integer;
pol : char;
end;
var
st:array[ 1..30 ] of student;
i,n,t:integer; p:real;
begin
clrscr;
writeln(‘Введите текущий год’);
readln(t)
writeln(‘Введите количество студентов’);
readln(n)
for i:=1 to n do
with st[i] do
begin
writeln(‘Сведения о ’,i,‘ студенте’);
writeln(‘Введите фамилию’); readln(surname);
writeln(‘Введите год рождения’); readln(year);
writeln(‘Введите средний бал’); readln(bal);
end;
p:=0;
103
for i:=1 to n do
begin
if st[i].pol=’m’ then
begin
p:=p+(t-st[i].year);
k:=k+1;
end;
writeln(‘Средний возраст мужчин =’,(p/k):8:3 );
readln;
end.
Пример программы использования массива записей
Задача:
Создать массив записей, содержащий сведения о сотрудниках фирмы. Каждая запись
содержит поля – фамилия сотрудника, наименование отдела, оклад, трудовой стаж. Написать
программу, выдающую следующую информацию:
 список сотрудников отдела Х с указанием оклада и трудового стажа;
 подсчитать среднюю заработную плату сотрудников отдела Х.
Название отдела Х вводится по запросу с клавиатуры.
1. Таблица идентификаторов
Обозначения в
№
Наименование переменной
Тип переменной
программе
record
1
Имя массива
f
(запись)
2
Количество сотрудников
n
integer
3
Поле фамилия
surname
string
4
Поле отдел
otdel
string
5
Поле оклад
oklad
real
6
Поле стаж
Stag
integer
7
Средняя зарплата
Sred
real
8
Отдел поиска Х
X
string
Количество сотрудников в отделе
9
K
integer
Х
10 Индексы массива
i
integer
2. Листинг программы
program rec_1;
uses crt;
type
firma = record; {запись}
surname : string[20];
otdel : string[20];
oklad : real;
Stag : integer;
end;
var
104
f:array[ 1..30 ] of firma; {массив записей}
X:string[20];
i,n,k:integer;
sred:real;
begin
clrscr;
writeln(‘Введите n’); readln(n);
writeln(‘Введите информацию о сотрудниках’);
for i:=1 to n do
with f[i] do
begin
writeln(‘Введите фамилию ’); readln(surname);
writeln(‘Введите отдел ’); readln(otdel);
writeln(‘Введите оклад ’); readln(oklad);
writeln(‘Введите стаж ’); readln(Stag);
end;
writeln(‘Введите название отдела’); readln(X);
sred:=0; k:=0;
writeln(‘Список сотрудников отдела ’,X);
for i:=1 to n do
if f[i].otdel=X then
begin
writeln(f[i].surname,’ ‘,f[i].oklad:8:3);
sred:=sred+f[i].oklad;
k:=k+1;
end;
writeln(‘Средняя зарплата отдела=’,(sred/k):8:3);
readln;
end.
Вопросы для самоконтроля
1. В чем состоит основное преимущество записи?
2. Почему записи называют комбинированным типом записи?
3. Чем записи отличаются от массивов?
4. Что называется полем записи?
5. Какие требования предъявляются к идентификаторам поля записи?
6. Как определить объем памяти, требуемый для размещения записи?
7. С какой целью при обращении к полю записи используется оператор with … do?
Методические указания к выполнению индивидуального задания по
Модулю 2. «Массивы записей»
Цель работы: Ознакомиться с пользовательскими типами данных, записями. Научиться
организовывать массивы записей.
Задание:
1. В приложении 11 выбрать вариант задания.
105
2. Выполнить индивидуальное задание по Модулю 2 , на примере программы
использования массива записей.
3. Составить блок-схему алгоритма.
4. Утвердить блок-схему у тьютора.
5. Написать программу и отладить ее по заранее подготовленному тесту.
6. Результат выполнения программы предъявить преподавателю.
7. Оформить ИДЗ в формате А4, титульный лист по образцу Приложение 4
8. Защитить выполненную работу у преподавателя.
Приложение 11. Таблица вариантов индивидуального
задания
Вариант
1
2
3
4
5
Задание
Создать массив записей, содержащий сведения о месячной заработной
плате рабочих завода.
Каждая запись содержит поля – фамилия рабочего, наименование
цеха, размер заработной платы за месяц. Необходимо:
- отсортировать массив записей по полю заработная плата;
- подсчитать общую сумму выплат за месяц по цеху Х. Наименование
цеха Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения об участниках
конференции. Каждая запись содержит поля – фамилия участника,
возраст, город, из которого прибыл участник.
Написать программу, выдающую следующую информацию:
- список участников, приехавших из города Х с указанием возраста;
- средний возраст участников конференции.
Название города Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий информацию о сотрудниках
частной клиники. Каждая запись содержит поля – фамилия врача,
специализация, стаж работы.
Написать программу, выдающую следующую информацию:
- список врачей по специализации Х с указанием стажа работы;
- средний стаж сотрудников клиники.
Специализация Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения об абонентах
телефонной компании. Каждая запись содержит поля – фамилия
абонента, год установки телефона, номер телефона. Написать
программу, выдающую следующую информацию:
- список абонентов, отсортированный по полю год установки;
- по вводимой фамилии Х выдается номер телефона абонента.
Фамилия Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения об ассортименте
игрушек в магазине. Каждая запись содержит поля – название
106
6
7
8
9
10
11
игрушки, цена, количество. Написать программу, выдающую
следующую информацию:
- стоимость самой дорогой игрушки и ее наименование;
- общую стоимость всех игрушек в магазине.
Создать массив записей, содержащий сведения об экспортируемых
товарах. Каждая запись содержит поля – наименование товара, страна,
импортирующая товар, объем поставляемой партии в штуках.
Написать программу, выдающую следующую информацию:
- список стран, в которые экспортируется товар Х и объем его
экспорта;
- средний объем экспорта товара Х.
Наименование товара Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения о студентах группы.
Каждая запись содержит поля – фамилия студента, год рождения и
оценки по трем экзаменам. Написать программу, выдающую
следующую информацию:
- список студентов, отсортированный по полю год рождения с
указанием полученных оценок;
- количество студентов, получивших неудовлетворительные оценки
хотя бы по одной дисциплине.
Создать массив записей, содержащий сведения о городской
библиотеке. Каждая запись содержит поля – шифр книги, автор,
название, год издания и стоимость. Написать программу, выдающую
следующую информацию:
- список книг автора Х с указанием названия и года издания книги;
- стоимость самой дорогой книги автора Х;
Фамилия автора Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения о наличии билетов и
рейсах Аэрофлота. Каждая запись содержит поля – номер рейса, пункт
назначения, время вылета, стоимость билетов. Написать программу,
выдающую следующую информацию:
- список рейсов самолетов в город Х, с указанием времени вылета и
стоимости билетов;
- номер рейса в город Х, с минимальной стоимостью билета.
Наименование города Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения об ассортименте
товаров в магазине. Каждая запись содержит поля – артикул,
наименование, стоимость единицы товара, количество. Написать
программу, выдающую следующую информацию:
- список товаров, отсортированный по полю стоимость товара;
- общую стоимость всех товаров в магазине.
Создать массив записей, содержащий сведения о сессии. Каждая
запись содержит поля – индекс группы (например ЭС-101), фамилия
студента, оценки по трем экзаменам. Написать программу, выдающую
следующую информацию:
- фамилии неуспевающих студентов группы Х, с указанием количества
задолженностей;
- количество неуспевающих студентов группы Х.
107
12
13
14
15
16
17
Наименование группы Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения об отправлении
поездов дальнего следования. Каждая запись содержит поля – номер
поезда, станция назначения, время отправления, стоимость билетов.
Написать программу, выдающую следующую информацию:
- время отправления поездов в город Х с указанием стоимости
билетов;
- номер поезда в город Х с минимальной стоимостью билета.
Наименование города Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения о сотрудниках
института. Каждая запись содержит поля – фамилия, пол, название
отдела, год рождения, стаж. Написать программу, выдающую
следующую информацию:
- список сотрудников мужского пола отдела Х призывного возраста
(старше 18 и младше 30 лет), с указанием стажа работы;
- средний возраст сотрудников мужского пола отдела Х.
Наименование отдела Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения о телефонах абонентов.
Каждая запись содержит поля – фамилия абонента, адрес, номер
телефона. Написать программу, выдающую следующую информацию:
- по вводимой фамилии абонента Х и адресу Y выдается номер
телефона.
Фамилию абонента Х и адрес Y вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения о товарах некоторого
склада. Каждая запись содержит поля – наименование, цена единицы
товара, количество. Написать программу, выдающую следующую
информацию:
- список товаров, стоимость которых не превышает Х рублей с
указанием количества;
- общее количество товаров, стоимость которых не превышает Х.
Стоимость Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения о товарах автосалона.
Каждая запись содержит поля – модель автомобиля, цвет, номер
двигателя, стоимость. Написать программу, выдающую следующую
информацию:
- список автомобилей модели Х с указанием цены, цвета и номера
двигателя;
- самый дорогой автомобиль модели Х.
Модель автомобиля Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения о туристической
фирме. Каждая запись содержит поля – наименование страны,
наименование города, стоимость тура. Написать программу,
выдающую следующую информацию:
- список туров в страну Х с указанием наименования города и
стоимости тура;
- самый дорогой тур в страну Х.
Название страны Х вводится по запросу с клавиатуры.
108
18
19
20
21
22
23
Создать массив записей, содержащий сведения о студентах группы.
Каждая запись содержит поля – фамилия студента, индекс группы
(например, ЭС-101) и оценки по трём экзаменам. Написать программу,
выдающую следующую информацию:
- список отличников группы Х;
- процент отличников по отношения к общему количеству студентов
группы Х.
Индекс группы Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения об абонентах
телефонной компании. Каждая запись содержит поля – фамилия
абонента, год установки телефона, номер телефона. Написать
программу, выдающую следующую информацию:
- список абонентов, отсортированный по полю год установки;
- количество установленных телефонов с Х года.
Значение Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий информацию о количестве
изделий, собранных рабочими за месяц. Каждая запись содержит поля
– фамилия сборщика, наименование цеха, количество изделий,
собранных рабочим за месяц. Считая заданными значение расценок по
сборке единицы изделия Х, выдать следующую информацию:
- ведомость заработной платы рабочих цеха;
- общую сумму выплат по цеху.
Стоимость сборки единицы изделия Х вводится по запросу с
клавиатуры.
Создать массив записей, содержащий сведения о сотрудниках
таксомоторного парка. Каждая запись содержит поля – фамилия
водителя, номер автомобиля, количество выездов за месяц.
Написать программу, выдающую следующую информацию:
- подсчитать общее количество выездов за месяц;
- фамилию водителя, с наибольшим количеством выездов.
Создать массив записей, содержащий сведения об услугах частной
клиники. Каждая запись содержит поля – название операции,
стоимость операции, возрастные ограничения на каждую операцию.
Написать программу, выдающую следующую информацию:
- список услуг клиники, отсортированный по полю название операции;
- по введенному названию операции Х распечатать стоимость и
возрастные ограничения.
Название операции Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения о сотрудниках
института. Каждая запись содержит поля – фамилия сотрудника,
оклад, стаж работы. Написать программу, которая должна:
- начислить премию сотрудникам в размере оклада, стаж которых
превышает Х лет:
- распечатать список сотрудников, получивших премию с указанием
размера премии.
Величина Х вводится по запросу с клавиатуры.
109
24
25
26
27
28
29
30
Создать массив записей, содержащий сведения о товарах магазина.
Каждая запись содержит поля – наименование товара, стоимость,
количество.
Написать программу, которая;
- уменьшит стоимость товаров, количество которых не превышает Х,
на 50%;
- распечатать список новых цен.
Количество Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий информацию о количестве
изделий, собранных рабочими цеха. Каждая запись содержит поля –
фамилия рабочего, наименование цеха, количество собранных им
изделий за месяц. Написать программу, выдающую следующую
информацию:
- список рабочих цеха, отсортированный по полю фамилия;
- общее количество изделий, собранных рабочими цеха за месяц.
Создать массив записей, содержащий сведения о сотрудниках
таксомоторного парка. Каждая запись содержит поля – фамилия
водителя, номер автомобиля, количество выездов за месяц, оплата за
каждый выезд.
Написать программу, выдающую следующую информацию:
- подсчитать общее количество выездов за месяц;
- фамилию водителя, с наибольшей суммой оплат за выезды.
Создать массив записей, содержащий сведения о туристической
фирме. Каждая запись содержит поля – наименование страны, цель
поездки (например: экскурсионная, отдых), стоимость тура. Написать
программу, выдающую следующую информацию:
- список туров с целью поездки Х с указанием наименования города и
стоимости тура;
- самый дешёвый тур с целью поездки Х.
Цель поездки Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения о товарах автосалона.
Каждая запись содержит поля – модель автомобиля, цвет, номер
двигателя, стоимость. Написать программу, выдающую следующую
информацию:
- список автомобилей модели Х с указанием цены, цвета и номера
двигателя;
- самый дешевый автомобиль модели Х.
Модель автомобиля Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения о сотрудниках
института. Каждая запись содержит поля – фамилия, пол, название
отдела, год рождения, стаж. Написать программу, выдающую
следующую информацию:
-список сотрудников женского пола в возрасте от 18 и до 55 лет, с
указанием стажа работы;
-средний возраст сотрудников женского пола отдела Х.
Наименование отдела Х вводится по запросу с клавиатуры.
Создать массив записей, содержащий сведения о товарах некоторого
110
склада. Каждая запись содержит поля – наименование, цена единицы
товара, количество. Написать программу, выдающую следующую
информацию:
-список товаров, стоимость которых превышает Х рублей с указанием
количества;
-общую стоимость товаров на складе.
Стоимость Х вводится по запросу с клавиатуры.
111
Download