МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ КАЗАХСТАН

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ КАЗАХСТАН
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ имени ШАКАРИМА г. СЕМЕЙ
Документ СМК 3 уровня
УМКД
УМКД 042-39. 1.ХХ/03- 2013
УМКД
Учебно-методические материалы по
дисциплине
«Программирование 1»
Редакция №____от_____
УЧЕБНО-МЕТОДИЧЕСКИИ КОМПЛЕКС
ДИСЦИПЛИНЫ
«Программирование 1»
для специальности 5В011100 – «Информатика »
УЧЕБНО-МЕТОДИЧЕСКИЕ МАТЕРИАЛЫ
Семей, 2014
СОДЕРЖАНИЕ
1
2
3
4
Лекции
Практические и лабораторные занятия
Курсовая работа (проект)
Самостоятельная работа студента
ЛЕКЦИИ
Лекция 1.
Тема: ВВЕДЕНИЕ В ЯЗЫК ПРОГРАММИРОВАНИЯ ПАСКАЛЬ. ЗНАКОМСТВО
СО СРЕДОЙ ПРОГРАММИРОВАНИЯ ТУРБО ПАСКАЛЬ
Паскаль - язык профессионального программирования, который назван в честь
французского математика и философа Блеза Паскаля (1623-1662) и разработан в 19681971гг. Никлаусом Виртом. Первоначально был разработан для обучения, но вскоре стал
использоваться для разработки программных средств в профессиональном
программировании.
Паскаль популярен среди программистов по следующим причинам:
1. Прост для обучения.
2. Отражает фундаментальные идеи алгоритмов в легко воспринимаемой форме, что
предоставляет программисту средства, помогающие проектировать программы.
3. Позволяет четко реализовать идеи структурного программирования и структурной
организации данных.
4. Использование простых и гибких структур управления: ветвлений, циклов.
5. Надежность разрабатываемых программ.
Турбо Паскаль - это система программирования, созданная для повышения качества и
скорости разработки программ (80-е гг.). Слово Турбо в названии системы
программирования - это отражение торговой марки фирмы-разработчика Borland
International (США).
Систему программирования Турбо Паскаль называют интегрированной (integration объединение отдельных элементов в единое целое) средой программирования, т.к. она
включает в себя редактор, компилятор, отладчик, имеет сервисные возможности.
Основные файлы Турбо Паскаля:
Turbo.exe - исполняемый файл интегрированной среды программирования;
Turbo.hlp - файл, содержащий данные для помощи;
Turbo.tp - файл конфигурации системы;
Turbo.tpl - библиотека стандартных модулей, в которых содержатся встроенные
процедуры и функции (SYSTEM, CRT, DOS, PRINTER, GRAPH, TURBO3, GRAPH3).
Программы на языке Паскаль имеют блочную структуру:
1. Блок типа PROGRAM - имеет имя, состоящее только из латинских букв и цифр. Его
присутствие не обязательно, но рекомендуется записывать для быстрого распознавания
нужной программы среди других листингов.
2. Программный блок, состоящий в общем случае из 7 разделов:
 раздел описания модулей (uses);
 раздел описания меток (label);
 раздел описания констант (const);
 раздел описания типов данных (type);
 раздел описания переменных (var);
 раздел описания процедур и функций;
 раздел описания операторов.
Общая структура программы на языке Паскаль следующая:
Рrogram ИМЯ..; {заголовок программы}
Uses ...; {раздел описания модулей}
Var ..; {раздел объявления переменных}
...
Begin {начало исполнительной части программы}
... {последовательность
... операторов}
End. {конец программы}
Начнем знакомство с Паскалем с программы, которая складывает два числа и
выводит сумму на экран.
Откройте файл, в который Вы запишите эту программу. Для этого нажмите
клавишу F10, чтобы выйти в главное меню, затем клавишами перемещения курсора
выберите опцию File, а в выпавшем меню команду New.
Примечание. Обратите внимание на оформление текста программы.
Program Summa2;
{Задача. Вычислить сумму двух чисел и вывести на экран.
Решение. Иванов Петр, 10 А класс.}
Var
number1, {переменная для хранения первого числа}
number2, {переменная для хранения второго числа}
result {переменная для хранения результата вычисления}
: integer;
Begin {признак начала программы}
number1 := 3; {присваиваем переменной number1 значение 3}
number2 := 4; {присваиваем переменной number2 значение 4}
{складываем значения переменных number1 и number2 и результат присваиваем
переменной result }
result := number1 + number2;
Write (number1, '+', number2,'=',result); {вывод примера на экран}
End. {признак конца программы}
Имя этой программы Summa2. Заметим, что требования к имени выполняются: оно
отражает содержание программы, а также не содержит недопустимых символов.
Далее идет специально выделенный комментарий, в котором вы должны записать
подробно условие задачи и указать, кто написал эту программу и когда.
Из разделов описаний имеется лишь один - раздел переменных. Он начинается со
служебного слова Var. Мы описали три переменные: number1, number2, result. Все они
переменные целого типа. Поэтому мы перечислили их через запятую, поставили
двоеточие и указали тип переменных. Подобные объявления разделяются между собой
точкой с запятой.
После описательной части идет раздел операторов, начинающийся со служебного
слова Begin, после которого идут операторы языка.
Недостатком этой программы является то, что значения переменных постоянны. А
нам нужно научиться писать такие программы, которые решают поставленные задачи в
общем виде, т. е. для любых значений переменных. Для этого мы научимся запрашивать
значения у пользователя, анализировать их и выдавать соответствующий результат.
Лекция 2.
Тема: ОПЕРАТОР
ТИПЫ ДАННЫХ
ПРИСВАИВАНИЯ.
АРИФМЕТИЧЕСКИЕ
ВЫРАЖЕНИЯ.
Оператор присваивания
Оператор присваивания - основной оператор любого языка программирования.
Общая форма записи оператора:
имя величины := выражение
4
Например, V:=A; или V:=A+1;
При помощи оператора присваивания переменной могут присваиваться константы
и выражения, значения переменных любого типа.
Как только в программе встречается переменная, для неё в памяти отводится место.
Оператор присваивания помещает значение выражения в место, отведённое переменной.
Если в процессе выполнения программы встречается переприсваивание (т.е. та же
самая переменная принимает другое значение), то старое значение переменной стирается,
на свободное место записывается новое значение. Команда присваивания позволяет лучше
понять смысл слова переменная (т.е. меняющая своё значение по ходу программы).
Выражение может быть арифметическим, логическим или литерным. Важно, чтобы
тип величины был согласован с видом выражения.
Арифметические выражения
Арифметические выражения должны быть записаны в так называемой линейной
записи согласно следующим правилам:
 выражение должно быть записано в виде линейной цепочки символов;
 используемые операции приведены в таблице:
НАЗВАНИЕ ОПЕРАЦИИ ФОРМА ЗАПИСИ
сложение
x+y
вычитание
x-y
умножение
x*y
деление
x/y
 нельзя опускать знаки операций, например, писать 5b. Для записи произведения
чисел 5 и b надо писать 5*b;
 аргументы функций (sin, cos и др.) как и аргументы вспомогательных
алгоритмов, записываются в круглых скобках, например sin(x), cos(4*x).
Порядок выполнения операций при вычислении арифметических выражений
можно регулировать при помощи скобок по обычным правилам. Там, где скобки
отсутствуют, ЭВМ выполняет операции в следующем порядке:
 вычисляет значение всех алгоритмов-функций и стандартных функций;
 выполняет справа налево все операции возведения в степень;
 выполняет слева направо все операции умножения и деления;
 выполняет слева направо все операции сложения и вычитания.
Основные определения
Познакомимся с основными понятиями языка.
Алгоритм - четкая последовательность действий, необходимая для решения
задачи.
Программа - алгоритм, записанный на языке программирования.
Алфавит языка - набор элементарных символов, используемый для составления
программ. Алфавит содержит:
 52 буквы латинского алфавита (строчные и заглавные);
 арабские цифры (0-9);
 специальные символы;
 знаки математических действий (+ - * / );
 знаки пунктуации (. : , ; " ` );
 скобки ( [ ] ( ) { } );
 знак пробела;
 знаки отношений (< > =).
Идентификатор (имя) – имя какого-либо элемента программы, которое должно
удовлетворять следующим требованиям:
 длина имени не должна превышать 63 символов;
5
 идентификатор может состоять из букв, цифр и символов подчеркивания
(значение ASCII $5F);
 идентификатор должен начинаться с буквы или с символа подчеркивания;
 буквы русского алфавита и пробелы не могут входить в идентификатор в Turbo
Pascal;
 имя не должно совпадать с зарезервированным (служебным) словом;
 прописные и строчные буквы воспринимаются одинаково.
Правильно выбранные идентификаторы значительно облегчают чтение и
понимание программы, а также уменьшают вероятность появления ошибок при
модификации программ. Например, значение даты удобнее обозначить идентификатором
Date, чем просто буквой D или любым другим символом.
Зарезервированные (служебные) слова - это слова, использующиеся только по
своему прямому назначению. Их нельзя использовать в качестве имен переменных, так
как они выполняют определенную смысловую нагрузку.
Примеры зарезервированных слов: AND, GOTO, PROGRAM, ELSE, IF, RECORD,
NOT, ARRAY, REPEAT, UNTIL, BEGIN, IN, SET, END, CASE, CONST, USES,
INTERFACE, STRING, LABEL, THEN, OF, DIV, TO, VAR, DO, TYPE, WHILE, DOWNTO,
FILE, FUNCTION, PROCEDURE и другие.
Переменные (Var) - вид данных, который может изменять свое значение в ходе
программы, описывают переменные после зарезервированного слова Var.
Константы (Const) - вид данных, который является постоянным на всем
протяжении выполнения программы, описывают константы после зарезервированного
слова Const.
Комментарии - некоторая запись, служащая для пояснения программы, которая
записывается в фигурных скобках.
Лекция 3.
Тема: ТИПЫ ДАННЫХ
Для временного хранения информации в операторах памяти машины в языке
Паскаль используются константы и переменные. Они могут быть различных типов:

целых чисел (см. ниже);

действительных чисел (real);

символьный тип (char);

строковый (string);

логический (boolean);

сложные (комбинированный (record), множественный (set) и другие).
Целые типы:
Название Длина в байтах Диапазон значений
Byte
1
0 ... 255
ShortInt
1
-128 ... 127
Word
2
0 ... 65535
Integer
2
-32768 ... 32767
LongInt
4
-2147483648 ... 2147483647
Над целыми типами определены такие операции:
1.
"+" - сложение;
2.
" * " - умножение;
3.
" - " вычитание;
4.
div - целочисленное деление;
5.
mod - получение остатка от целочисленного деления.
6
Вещественные типы:
Вещественные типы представляются с некоторой точностью, которая зависит от
компьютера. Вам необходимо знать, что вещественный тип разделяется на несколько
типов, но использовать мы будем вещественные данные только типа Real, которые
занимают 6 байт, имеют диапазон возможных значений модуля от 2.9Е-39 до 1.7Е+38 и
точность представления данных - 11...12 значащих цифр.
Примечание. Несмотря на то, что в Turbo Pascal имеется широкий выбор
вещественных типов, доступ к некоторым из них (single, double, extended) возможен при
особых режимах компиляции. Особое положение в Turbo Pascal занимает тип comp,
трактующийся как вещественное число без экспоненциальной и дробной частей. Он
сохраняет 19 - 20 значащих цифр и знак числа. В то же время comp полностью совместим
с любыми другими вещественными типами.
В языке Паскаль числа могут быть представлены в двух видах: с фиксированной
точкой и плавающей точкой.
Числа с фиксированной точкой изображаются десятичным числом с дробной
частью, которая может быть и нулевой. Например, 27.9, 5.00
Такие большие числа, как 137.000.000, можно записать в формате с десятичным
порядком: 1.37·108. В Turbo Pascal для подобных чисел принята форма записи mEp, где m
- мантисса; E - признак записи числа с десятичным порядком; p - показатель степени
числа 10. Такое представление чисел и называется форматом с плавающей точкой. Число
1.37·108 в этом формате запишется так: 1.37Е+8. Рассмотрим еще несколько примеров:
Математическая запись Запись на Паскале
4·10-4
4E -4
5
0,62·10
0.62E+5
12
-10,88·10
-10.88E12
По умолчанию, действительные числа выводятся в виде чисел с плавающей точкой.
Такое представление чисел не очень нравится пользователям. Поэтому мы будем
“заставлять” компьютер выдавать действительные числа в более привычном варианте
следующим образом:
R:m:n, где R – действительное число, m – общее количество позиций, отводимых
числа, n – количество позиций, отводимых для дробной части.
Например, если мы хотим вывести на экран число Chislo с фиксированной точкой,
причем знаем, что для вывода этого числа достаточно 7 мест, а вывод дробной части
ограничим сотыми, то мы запишем вывод так:
Write (Chislo:7:2) ;
Символьный тип (char):
Значением величины данного типа является символ из множество всех символов
компьютера: русская или латинская большая или маленькая буква, цифра, знак
препинания, специальный знак (например, "+", "-", "*", "/", "", "=" и др.) или пробел " ".
Каждый из символов имеет уникальный номер от 0 до 255, т. е. внутренний код, который
возвращает функция ORD. Символьная константа – любой символ языка, заключённый в
одинарные кавычки. Например,
Var
Simvol : char;
Строковый тип (string):
7
Значением строковой величины является строка переменной длины (быть может,
пустая). Строковая константа представляет собой произвольную последовательность
символов, заключенную в одинарные кавычки. Например,
Var
Stroka : string;
Логический тип (boolean):
Логический тип данных часто называют булевым по имени английского
математика Д. Буля, создателя математической логики. В языке Паскаль имеются две
логические константы TRUE и FALSE. Логическая переменная принимает одно из этих
значений и имеет тип Boolean. Для сравнения данных предусмотрены следующие
операции отношения: <, <=, =, <>, >, >= Результат операции отношения имеет логический
тип, т.е. результат операции может быть истинным или ложным, например, 3>5 – ложь.
Над величинами этого типа можно выполнять специфические логические операции
OR - или; AND - и; NOT - не.
Более подробно этот тип данных мы рассмотрим при изучении условного
оператора.
Сложные типы:
К сложным или структурированным типам относятся массивы, записи, множества,
которые требуют специального изучения и здесь рассматриваться не будут.
Задание. Откройте новый файл. Создадим программу, в которой опишем
несколько переменных разного типа, введем в них значения и выведем на экран.
Program TipDann;
Uses Crt
Var
Chislo1 : Integer;
Chislo2 : Real;
Simvol : Char;
Stroka : String;
Logika : Boolean;
Begin
ClrScr;
Chislo1:=12;
Chislo2:=Chislo1*2;
Chislo2:=Chislo2/5;
Simvol:='d';
Stroka:='Строчка';
Logika:= Chislo1> Chislo2;
WriteLn ('Вывод значений:');
WriteLn ('Значение переменной Chislo1 : ',Chislo1);
WriteLn ('Значение переменной Chislo2 : ',Chislo2:5:2);
WriteLn ('Значение переменной Simvol : ',Simvol);
WriteLn ('Значение переменной Stroka : ',Stroka);
WriteLn ('Значение переменной Logika : ',Logika);
End.
Внимательно рассмотрите каждую строчку программы. Обратите особое внимание
на описание переменных: Chislo1 - переменная целого типа, Chislo2 - действительного,
Simvol - символьного, Stroka - строкового, Logika - логического. Далее в основной
программе идет присвоение переменной Chislo1 целого числа 12, переменной Chislo2 8
целого числа 24. Обратим внимание, что переменной действительного типа Chislo2
присвоено целое число; никакой ошибки нет, т. к. множество целых чисел является
подмножеством множества действительных чисел. Следующая строчка еще более
интересная: переменной Chislo2 присваивается значение той же переменной, только
деленной на 5.
Такое присваивание используют в программах, если предыдущее значение этой
переменной уже не понадобится и для более рационального использования описанных
переменных. Для того чтобы переменной символьного типа присвоить какой-либо символ
(например, d), надо этот символ записать в одинарных кавычках (знак «’»). Аналогично
поступают с переменными строкового типа (смотри следующую строку программы). А
про переменные логического типа мы знаем, что им можно присваивать только два
значения: True и False. В этой программе мы присвоим значение результата сравнения
двух переменных, здесь оно будет равно True. А теперь выведем присвоенные значения на
экран.
Задание. Измените значения переменных и проанализируйте результаты
выполнения программы.
Лекция 4.
Тема: СТАНДАРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ. ПРИМЕНЕНИЕ В
ПРОСТЕЙШИХ ЛИНЕЙНЫХ ПРОГРАММАХ.
Ввод - вывод. Операторы Read (Readln), Write (Writeln).
Решим задачу, прокомментировав каждое свое действие в фигурных скобках.
Напомним, что комментарий не воспринимается компьютером, а нам он нужен для того,
чтобы лучше понять, как работает программа.
Задача. Напишите программу, которая бы очищала экран и вычисляла произведение двух
чисел, вводимых пользователем.
Program Proizv2;
Uses
Crt;{Подключаем модуль Crt}
Var
number1, {переменная, в которой будет содержаться первое число}
number2, {переменная, в которой будет содержаться второе число}
result {переменная, в которой будет содержаться результат}
: integer;
Begin
ClrScr;{Используем процедуру очистки экрана из модуля Crt}
Write ('Введите первое число ');
{Выводим на экран символы, записанные между апострофами}
Readln (number1);
{Введенное пользователем число считываем в переменную number1}
Write ('Введите второе число ');
{Выводим на экран символы, записанные между апострофами}
Readln (number2);
{Введенное пользователем число считываем в переменную number2}
result := number1 * number2;
{Находим произведение введенных чисел и присваиваем переменной result}
Write ('Произведение чисел ', number1, ' и ', number2, ' равно ', result);
{Выводим на экран строчку, содержащую ответ задачи}
9
Readln;{Процедура задержки экрана}
End.
Задание. Измените программу так, чтобы она запрашивала у пользователя еще одну
переменную и выводила результат произведения трех чисел.
1.
Операторы Write и Writeln
Мы уже использовали операторы Write и WriteLn, но нам необходимо подробнее
остановиться на правилах применения этих операторов.
Write (англ. писать) - оператор, который используется для вывода информации на экран.
Оператор WriteLn выполняет то же самое действие, но так как у него есть еще окончание
Ln (line - англ. линия, строка), то после вывода на экран нужного сообщения, он
дополнительно переводит курсор в начало следующей строки.
Общий вид:
Write (список выражений);
WriteLn (список выражений).
Процедуры Write и WriteLn используются не только для вывода результата, но и для
вывода различных сообщений или запросов. Это позволяет вести диалог с пользователем,
сообщать ему, когда ему нужно ввести значения, когда он получает результат, когда он
ошибся и др.
Например, при выполнении процедуры WriteLn(‘Найденное число ‘, а), будет напечатана
строчка, заключенная в апострофы, а затем выведено значение переменной а.
Оператор WriteLn можно применить и без параметров. В этом случае курсор просто будет
переведен в начало следующей строки. Это иногда нам нужно для лучшего восприятия
ввода данных.
2.
Операторы Read и Readln
Вспомним, что основное назначение ЭВМ - сэкономить человеческий труд. Поэтому
необходимо обеспечить возможность, однажды написав программу, многократно ее
использовать, вводя каждый раз другие данные. Такая гибкость в языке обеспечивается
операторами Read и ReadLn. Этими операторами вводится информация с клавиатуры.
Общий вид:
Read(переменная, переменная...)
ReadLn(переменная, переменная...)
При выполнении процедуры Read ожидается ввод перечисленных в скобках
значений. Вводимые данные нужно отделить друг от друга пробелами. Присваивание
значений идет по очереди.
Например, если вводятся значения 53 и Х, то при выполнении оператора Read(a,b)
переменной а будет присвоено число 53, а переменной b - буква Х. Причем, отметим,
чтобы не было аварийной ситуации, нужно правильно определить тип данных в разделе
Var; в нашем случае а:integer, а b:char.
Особых различий при чтении и записи в использовании операторов Read и ReadLn
нет. Часто процедуру ReadLn без параметров применяют в конце программы для
задержки: до нажатия на клавишу <Enter> результат выполнения программы остается на
экране. Это очень полезно делать для анализа результатов.
Для решения задач нам понадобятся стандартные функции и процедуры.
10
Функция - это такая организация преобразования переданного ей значения, при
которой это измененное значение передается обратно.
Процедура - это такая организация преобразования переданного ей значения
параметра, при которой изменяется значение этого параметра, и, в отличие от функции, не
возвращается никакого значения.
Познакомимся с основными, наиболее часто используемыми процедурами и
функциями.
Арифметические функции:
1. Abs(x), где аргумент и результат являются переменными целого или вещественного
типа - вычисляет модуль (абсолютную величину) числа х;
2. Cos(x), где аргумент и результат являются переменными вещественного типа вычисляет косинус х;
3. Sin(x), где аргумент и результат являются переменными вещественного типа вычисляет синус х;
4. Frac(x), где аргумент и результат являются переменными вещественного типа выделяет дробную часть числа х;
5. Int(x), где аргумент и результат являются переменными вещественного типа выделяет целую часть числа х;
6. Pi, где результат является переменной вещественного типа - вычисляет значение π;
7. Random(x), где аргумент и результат являются переменными целого типа генерирует случайное число в пределах от 0 до х включительно. Если параметр х не задан,
то формируется вещественное число от 0 до 1. Перед использованием данной функции
нужно инициализировать генератор случайных чисел при помощи процедуры Randomize
(см. ниже);
8. Sqr(x), где аргумент и результат являются переменными целого или вещественного
типа - вычисляет x2;
9. Sqrt(x), где аргумент и результат являются переменными целого или
вещественного типа - вычисляет √x.
Функции преобразования типов:
1. Chr(x), где аргумент типа Byte, а результат типа Char- возвращает символ, у
которого код в таблице ASCII равен х;
2. Ord(x), где аргумент может быть любого порядкового типа, а результат типа
LongInt - возвращает порядковый номер значения х при начале нумерации с нуля;
3. Round(x), где аргумент вещественного типа, результат типа LongInt - округляет
число х до ближайшего целого;
4. Trunc(x), где аргумент вещественного типа, результат типа LongInt - выделяет
целую часть числа х.
Функции для порядковых типов:
1. Odd(x), где аргумент типа LongInt, а результат логического типа - определяет,
является ли число четным (результат false) или нечетным (результат true);
2. Pred(x), где аргумент и результат любого порядкового типа - получает
предшествующее значение;
3. Succ(x), где аргумент и результат любого порядкового типа - получает
последующее значение;
4. Upcase(x), где аргумент и результат типа Char - преобразует букву латинского
алфавита в соответствующую ей заглавную (буква х может быть как строчной, так
и заглавной).
Процедуры для порядковых типов:
11
1. Dec(x), где аргумент любого порядкового типа - уменьшает значение переменной х
на 1;
2. Dec(x,n), где х любого порядкового типа, а n типа LongInt - уменьшает значение
переменной х на n;
3. Inc(x), где аргумент любого порядкового типа - увеличивает значение переменной
х на 1;
4. Inc(x,n), где х любого порядкового типа, а n типа LongInt - увеличивает значение
переменной х на n;
5. Randomize - инициализирует генератор случайных чисел.
Правила применения функций:
 чтобы воспользоваться функцией, нужно указать ее в правой части оператора
присваивания;
 при обращении к функции необходимо в круглых скобках указать ее аргументы;
 в разделе описания переменных правильно указывайте типы переменных, которые
хотите употребить в качестве аргумента или результата функции;
 в одном выражении можно обратиться к нескольким функциям.
Правила применения процедур:
 для выполнения процедуры ее надо вызвать в программе в виде оператора;
 в разделе описания переменных правильно указывайте тип переменной, которую
хотите употребить в качестве аргумента процедуры.
Лекция 5.
Тема: ОПЕРАТОРЫ ЯЗЫКА
Составной оператор и пустой оператор
Составной оператор - это последовательность произвольных операторов
программы, заключенная в операторные скобки - зарезервированные слова begin … end.
Составные операторы – важный инструмент ТР, дающий возможность писать программы
по современной технологии структурного программирования.
Язык ТР не накладывает никаких ограничений на характер операторов, входящих в
составной оператор. Среди них могут быть другие составные операторы, допускается
произвольная глубина их вложенности.
Фактически весь раздел операторов, обрамленный словами begin … end,
представляет собой один составной оператор. Слово end является закрывающейся
скобкой составного оператора и одновременно указывает на конец предыдущего
оператора, поэтому «;» перед словом end необязательна. Если же «;» в этом случае стоит,
то это означает наличие пустого оператора. Пустой оператор не содержит никаких
действий, просто в программу добавляется лишняя точка с запятой. В основном пустой
оператор используется для передачи управления в конец составного оператора.
Условный оператор
Условный оператор позволяет проверить некоторое условие и в зависимости от
результатов проверки выполнить то или иное действие. Таким образом, условный
оператор – это средство ветвления вычислительного процесса.
Структура условного оператора имеет следующий вид:
IF <условие> THEN <оператор1> ELSE <оператор2>,
где IF, THEN, ELSE – зарезервированные слова (если, то, иначе);
<условие> - произвольное выражение логического типа;
<оператор1>, <оператор2> - любые операторы языка Паскаль.
12
Условный оператор работает по следующему алгоритму. Вначале вычисляется
условное выражение <условие>. Если результат есть TRUE (истина), то выполняется
<оператор1>, а <оператор2> пропускается; если результат есть FALSE (ложь), наоборот
<оператор1> пропускается, а выполняется <оператор2>.
Например:
Var
X, y, max: integer;
Begin
……………….
If x > max then
Y := max
Else
Y := X;
Часть Else <оператор2> условного оператора может быть опущена. Тогда при
значении TRUE условного выражения выполняется <оператор1>, в противном случае этот
оператор пропускается:
Var
X, y, max: integer;
Begin
……………….
If x > max then
Max := x;
Y := x;
В этом примере переменная Y всегда будет иметь значение переменной x, а в Max
запоминается максимальное значение x. Поскольку в условном операторе может быть
несколько вложенных условных операторов,
Лекция 6-7.
Тема: ОПЕРАТОР ВЕТВЛЕНИЯ (FOR, WHILE, REPEAT.. UNTIL)
Циклы
В большинстве задач, встречающихся на практике, необходимо производить
многократное выполнение некоторого действия. Такой многократно повторяющийся
участок вычислительного процесса называется циклом.
Если заранее известно количество необходимых повторений, то цикл называется
арифметическим. Если же количество повторений заранее неизвестно, то говорят об
итерационном цикле.
В итерационных циклах производится проверка некоторого условия, и в
зависимости от результата этой проверки происходит либо выход из цикла, либо
повторение выполнения тела цикла. Если проверка условия производится перед
выполнением блока операторов, то такой итерационный цикл называется циклом с
предусловием (цикл "пока"), а если проверка производится после выполнения тела цикла,
то это цикл с постусловием (цикл "до").
Особенность этих циклов заключается в том, что тело цикла с постусловием всегда
выполняется хотя бы один раз, а тело цикла с предусловием может ни разу не
выполниться. В зависимости от решаемой задачи необходимо использовать тот или иной
вид итерационных циклов.
13
Арифметические циклы
Формат:
for переменная := значение 1 to значение 2 do оператор
или
for переменная := значение 1 downto значение 2 do оператор
Оператор for вызывает оператор, находящийся после слова do, по одному разу для
каждого значения в диапазоне от значения 1 до значения 2.
Переменная цикла, начальное и конечное значения должны иметь порядковый тип.
Со словом to, значение переменной цикла увеличивается на 1 при каждой итерации
цикла. Со словом downto, значение переменной цикла уменьшается на 1 при каждой
итерации цикла. Не следует самостоятельно изменять значение управляющей переменной
внутри цикла.
Как и в случае использования оператора условного прехода, следует помнить, что
синтаксис языка допускает запись только одного оператора после ключевого слова do,
поэтому, если вы хотите в цикле выполнить группу операторов, обязательно надо
объединить их в составной оператор (окаймить операторными скобками begin ... end). В
противном случае будет сделана логическая ошибка программы.
Пример 1. Квадраты чисел от 2-х до 10-и.
for x:=2 to 10 do WriteLn(x*x);
Пример 2. Латинский алфавит.
for ch:='A' to 'Z' do Writeln(ch);
Пример 3. Использование цикла с downto.
for i:=10 downto 1 do WriteLn(i);
Пример 4. Использование составного оператора.
for x:=1 to 10 do begin
y:=2*x+3;
WriteLn('f(',x,')=',y);
end;
Итерационные циклы с предусловием
Формат:
while выражение do оператор;
Оператор после do будет выполняться до тех пор, пока логическое выражение принимает
истинное значение (True). Логическое выражение является условием возобновления
цикла. Его истинность проверяется каждый раз перед очередным повторением оператора
цикла, который будет выполняться лишь до тех пор, пока логическое выражение истинно.
Как только логическое выражение принимает значение ложь (False), осуществляется
переход к оператору, следующему за while.
Выражение оценивается до выполнения оператора, так что если оно с самого начала
было ложным (False), то оператор не будет выполнен ни разу.
Здесь также следует помнить, что позволяется использовать только один оператор после
ключевого слова do. Если необходимо выполнить группу операторов, то стоит
использовать составной оператор.
Пример.
eps:=0.001;
while x > eps do x:=x/2;
Итерационные циклы с постусловием
Формат:
repeat
оператор;
оператор;
14
...
оператор
until выражение;
Операторы между словами repeat и until повторяются, пока логическое выражение
является ложным (False). Как только логическое выражение становится истинным (True),
происходит выход из цикла.
Так как выражение оценивается после выполнения операторов, то в любом случае
операторы выполнятся хотя бы один раз.
Пример.
repeat
WriteLn('Введите положительное число');
ReadLn(x);
until x>0;
Лекция 8.
Тема: ОПЕРАТОР ВЫБОРА
Оператор выбора позволяет выбрать одно из нескольких возможных продолжений
программы. Параметром, по которому осуществляется выбор, служит ключ выбора –
выражение любого порядкового типа (любого и рассмотренных, кроме типов REAL и
STRING). Структура оператора выбора такова:
CASE <ключ_выбора> OF <список-выбора> [ELSE <операторы>] END;
Здесь CASE, OF, ELSE, END – зарезервированные слова (случай, из, иначе,
конец).
<ключ_выбора> - ключ выбора;
<список-выбора> - один или более конструкций вида:
<константа-выбора> : <оператор>;
<константа-выбора> - константа того же типа, что и выражение
<ключ_выбора>;
<операторы> - произвольные операторы Турбо Паскаля.
Оператор выбора работает следующим образом. Вначале вычисляется значение
выражения <ключ_выбора>, а затем в последовательности операторов <список-выбора>
отыскивается такой, которому предшествует константа, равная вычисленному значению.
Найденный оператор выполняется, после чего оператор выбора завершает свою работу.
Если в списке выбора не будет найдена константа, соответствующая вычисленному
значению ключа выбора, управление передается операторам, стоящим за словом ELSE.
Часть ELSE <оператор>можно опускать. Тогда при оотсутсвии в списке выбора нужной
константы ничего не произойдет и оператор выбора просто завершит свою работу.
Составим программу, имитирующую работу микрокалькулятора. Программа
вводит две строки: первая содержит два произвольных числа, разделенных пробелом,
вторая – символ арифметического действия, например
2 3
*
или
13.78 0.93
/
Над введенными числами осуществляется соответствующее действие, и результат
выводится на экран. Признаком конца работы программы служит ввод любого символа,
отличного от +, -, *, /.
15
Program calc;
Var
Operation : char; {знак операции}
X, y, z : real; {операнды и результат}
Stop : Boolean; {признак ошибочной операции и останова}
Begin
Stop := false;
Repeat
Writeln;{пустая строка-разделитель}
Write (‘x, y=’);
Readln (x, y);
Write (‘операция: ’);
Readln (operation);
Case operation of
‘+’: z := x + y;
‘-’ : z := x – y;
‘*’ : z := x * y;
‘/’ : z := x / y
else
Stop := true;
end;
if not stop then
Writeln (‘
результат = ’, z)
until stop
end.
Любому из операторов списка выбора может предшествовать не одна, а несколько
констант выбора, разделенных запятыми. Например, следующая программа при вводе
одного из символов: y или Y выведет на экран слово «Да», а при вводе n или N – слово
«Нет»:
Var
Ch: char;
Begin
Readln (ch);
Case ch of
‘n’, ‘N’: writeln (‘Нет’);
‘y’, ‘Y’ : writeln (‘Да’)
end
End.
Лекция 9.
Тема: МАССИВЫ
Рассмотренные выше простые типы данных позволяют использовать в программе
одиночные объекты – числа, символы, строки и т.д. В Турбо Паскале могут
использоваться также объекты, содержащие множество однотипных элементов. Это
массивы – формальное объединение нескольких однотипных объектов (чисел, символов,
строк и т.п.), рассматриваемое как единое целое. К необходимости применения массивов
мы приходим всякий раз, когда требуется связать и использовать целый ряд родственных
величин.
16
Например, результаты многократных замеров температуры воздуха в течение года
удобно рассматривать как совокупность вещественных числе, объединенных в один
сложный объект – массив измерений.
При описании массива необходимо указать общее число входящих в массив
элементов и тип этих элементов. Например:
Var
a: array [1..10] of real;
b: array [0..50] of char;
c: array [-3..4] of Boolean;
Как видим, при описании используются зарезервированные слова array и of
(массив, из). За словом array в квадратных скобках указывается тип – диапазон, с
помощью которого компилятор определяет общее число элементов массива. Тип-диапазон
задается левой и правой границами изменения индекса массива, так что массив А состоит
из 10 элементов, массив В – из 51, а массив С – из 8 элементов. За словом OF указывается
тип элементов, образующих массив.
Доступ к каждому элементу массива в программе осуществляется с помощью
индекса – целого числа (точнее, выражения порядкового типа), служащего своеобразным
именем
элемента
в
массиве
(если
левая
граница
типа-диапазона равна 1, индекс элемента совпадает с его порядковым номером). При
упоминании в программе любого элемента массива сразу за именем должен следовать
индекс элемента в квадратных скобках, например:
Var
a: array [1..10] of integer;
b: array [0..40] of char;
c: array [-2..2] of Boolean;
begin
b[17] :=’F’;
c[-2] := a[1] > a[2];
for k := 1 to 10 do
a[k] := 0;
…
End.
В правильно написанной программе индекс не должен выходить за пределы,
определенные типом-диапазоном. Нельзя, например, обращаться к элементам b[42] или
c[9].
Лекция 10-11.
Тема: СТРОКИ
Строка – это последовательность символов кодовой таблицы компьютера. При
использовании в выражениях строка заключается в апострофы.
Количество символов в строке (длина строки) может динамически изменяться от 0
до 255. Для определения данных строкового типа используется идентификатор String, за
которым следует заключенное в квадратные скобки значение максимально допустимой
длины строки данного типа. Если это значение не указывается, то по умолчанию длина
строки равна 255 байт.
17
Переменную строкового типа можно определить через описание типа в разделе
типов или непосредственно в разделе описания переменных. Строковые данные могут
использоваться в программе также в качестве констант. Недопустимо применение
строковых переменных в качестве селектора в операторе Case.
Определение строкового типа устанавливает максимальное количество символов,
которое может содержать строка.
Формат
Type <имя типа> = string [максимальная длина строки];
Var <идентификатор> : < имя типа >;
Переменную типа string можно задать и без описания типа
Var <идентификатор, … > : string [максимальная длина строки];
Пример
Const
Adres =’ул. Ауэзова, 5’; {строковая константа}
Type
Flot = string [125];
Var
Fstr : Flot; {описание с заданием типа}
St1 : String; {по умолчанию длина строки = 255}
St2, St3 : String [50];
Nazv : string [280]; {ошибка, длина строки Nazv превышает 255}
Для определения объема памяти в байтах, требуемой для размещения строки, к
значению ее максимальной длины прибавляется 1. Например, для размещения в памяти
переменных Fstr, St1 и St2 требуется соответственно 126, 256 и 51 байт. Дополнительный
байт расположен в самом начале строки (имеет нулевой номер) и содержит значение
текущей длины строки.
Рассмотрим структуру размещения строки в памяти на следующем примере. Пусть
М - максимальная длина строки, L – текущая длина, A – ячейка памяти. Тогда
А – содержит величину текущей длины;
А+1 – первый символ;
…
А+L – последний значащий символ;
– не занятые ячейки памяти
А
А+1
…
А+L
A+L+1 …
A+M
не занятые ячейки
Строковые выражения
Определение. Выражения, в которых операндами служат строковые данные,
называются строковыми. Они состоят из строковых констант, переменных, указателей
функций и знаков операций. Над строковыми данными допустимы операция сцепления и
операции отношения.
18
Операция сцепления (+) применяется для сцепления нескольких строк в одну
результирующую строку:
Выражение
‘E’+’C’+’ 18’+’40’
Результат
‘EC 1840’
‘A’+’B’+’C’+’D’+’E’
‘ABCDE’
Длина результирующей строки не должна превышать 255.
Операции отношения (=, <, >, < >, >=, <=) проводят сравнение двух строковых
операндов и имеют приоритет более низкий, чем операции сцепления, т.е. вначале всегда
выполняются все операции сцепления, если они присутствуют, и лишь потом реализуются
операции отношения. Сравнение строк производится слева направо до первого
несовпадающего символа, и та строка считается больше, в которой первый
несовпадающий символ имеет больший номер в стандартной таблице обмена
информацией. Результат выполнения операций отношения над строковыми операндами
всегда имеет булевский тип и принимает значение TRUE, если выражение истинно, и
FALSE, если выражение ложно.
Выражение
‘DOS 4.0’< ‘Dos4.0’
Результат
TRUE
‘akkord’>‘AKKORD’
TRUE
Если строки имеют различную длину, но в общей части символы совпадают,
считается, что более короткая строка меньше, чем более длинная. Строки считаются
равными, если они полностью совпадают по длине и содержат одни и те же символы.
Выражение
‘Принтер_’> ‘Принтер’
‘ххххххх’>‘ххххх’
'office' = 'office'
Результат
TRUE
TRUE
TRUE
Для присваивания строковой переменной результата строкового выражения
используется оператор присваивания (:=).
Пример
St1 := 'Группа студентов';
St2 := St1 + '_первого курса';
Fio := ‘Аманбаев К.Н.’
Если значение переменной после выполнения оператора присваивания превышает
по длине максимально допустимую при описании величину, все лишние символы справа
отбрасываются.
Описание А
A: string [6]
A: string [8]
A: string [2]
Выражение
A:= ‘группа_1’
A:= ‘группа_1’
A:= ‘группа_1’
Значение А
‘группа’
‘группа_1’
‘гр’
Допускается смешение в одном выражении операндов строкового и литерного
типа. Если при этом литерной переменной присваивается значение строкового типа, длина
строки должна быть равна единице, иначе возникнет ошибка выполнения.
19
К отдельным символам строки можно обратиться по номеру (индексу) данного
символа в строке. Индекс определяется выражением целочисленного типа, которое
записывается в квадратных скобках сразу за идентификатором строковой переменной или
константой.
Процедуры при работе со строками
1) Insert (subs, s, start) - вставляет в строку s подстроку subs, начиная с позиции start.
2) Str (x, s) - преобразует числовое значение x в строку s, при этом для x может быть
задан формат, как в процедурах вывода write и writeln.
Например:
x := 123;
s := str(x:6,s);
Результат: s = ' 123'.
3) Val (s, x, errcode) преобразует строку s в значение числовой переменной x, при этом
строка s должна содержать символьное представление числа. В случае успешного
преобразования переменная errcode равна нулю. Если же обнаружена ошибка, то errcode
будет содержать номер позиции первого ошибочного символа, а значение x не
определено.
Функции при работе со строками
1) Copy (St, Poz, N) – выделяет из St подстроку длиной N символов, начиная с позиции
Poz. Если Poz > длины строки, то результатом будет пробел; если Poz >255, возникает
ошибка при выполнении. Poz, N – целочисленные выражения.
Значение St
Выражение
Результат
‘ABCDEFG’
Copy (St, 2, 3)
‘BCD’
‘ABCDEFG’
Copy (St, 4, 10)
‘DEFG’
2) Concat (St1, St2, …, StN) – выполняет сцепление строк St1, St2, …, StN в том порядке, в
каком они указаны в списке параметров. Сумма символов всех сцепленных строк не
должна превышать 255.
Выражение
Результат
Concat (‘AA’, ’XX’, ‘Y’)
‘AAXXY’
Concat (‘Индекс ’, ‘050060’)
‘Индекс 050060’
3) Length (St) – вычисляет текущую длину в символах строки St. Результат имеет
целочисленный тип.
Значение St
Выражение
Результат
‘123456789’
Length (St)
9
‘Toyota Avensis’
Length (St)
14
4) Pos (Str1, Str2) – обнаруживает первое появление в строке Str2 подстроки Str1.
Результат имеет целочисленный тип и равен номеру той позиции, где находится первый
символ подстроки Str1. Если в Str2 подстроки Str1 не найдено, результат равен 0.
Значение Str1
‘abcdef’
‘Toyota Avensis’
Выражение
Pos (‘de’, Str1)
Pos (‘r’, Str1)
Результат
4
0
5) UpCase (Ch) – преобразует строчную букву в прописную. Параметр и результат имеют
литерный тип. Обрабатывает буквы только латинского алфавита.
20
Значение St
‘a’
Выражение
UpCase (Ch)
Результат
‘A’
Лекция 12.
Тема: ПРОЦЕДУРЫ И ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ
Процедура пользователя представляет собой именованную группу операторов,
реализующих определенную часть общей задачи и вызываемых при необходимости для
выполнения по имени из любой позиции раздела операторов. Описание процедуры
включает заголовок (имя) и тело процедуры. Заголовок состоит из зарезервированного
слова Procedure, идентификатора (имени) процедуры и необязательного заключенного в
круглые скобки списка формальных параметров с указанием типа каждого параметра.
Формат
Procedure <имя> {(формальные параметры)};
Пример
Procedure Korrect; {не требует формальных параметров}
Procedure Sort (A: byte); {A – формальный параметр}
Имя процедуры – идентификатор, уникальный в пределах программы. Тело процедуры
представляет собой локальный блок, по структуре аналогичный программе:
Procedure <имя> {(формальные параметры)};
<разделы описаний>;
Begin
<раздел операторов>
End;
Для обращения к процедуре используется оператор вызова процедуры. Он состоит
из идентификатора (имени) процедуры и списка фактических параметров, отделенных
друг от друга запятыми и заключенных в круглые скобки. Список параметров может
отсутствовать, если процедуре не передается никаких значений.
Формат
<идентификатор процедуры> {(фактические параметры)};
Пример
Sort (A1, B1); {параметры-значения переменных}
Kvadr (14, 25, True);{параметры – непосредственно значения}
SumVed; {Фактические параметры не указаны, т.к. в вызываемой процедуре нет
формальных параметров}
Параметры обеспечивают механизм замены, который позволяет выполнять
процедуру с различными начальными данными. Между фактическими параметрами в
операторе вызова процедуры и формальными параметрами в заголовке описания
процедуры устанавливается взаимно-однозначное соответствие в результате их перебора
слева направо. Количество и тип формальных параметров равно количеству и типу
фактических параметров.
21
Если процедура возвращает в программу какие-то значения, соответствующие
переменные должны быть описаны как параметры-переменные с использованием слова
Var.
Функции пользователя
Функция, определенная пользователем, состоит из заголовка и тела функции.
Заголовок содержит зарезервированное слово FUNCTION, идентификатор (имя)
функции, заключенный в круглые скобки, необязательный список формальных
параметров и тип возвращаемого функцией значения.
Формат
Function <имя> {(формальные параметры)}: <тип результата>;
Пример 1
Function Prov (x, y, T: integer): real;
Function Logic: Boolean;
Имя функции – уникальный в пределах блока идентификатор. Возвращаемый
результат может иметь любой скалярный тип, тип String и тип «указатель».
Тело функции представляет собой локальный блок, по структуре аналогичный
программе:
Function <имя> {(формальные
результата>;
<разделы описаний>
begin
<раздел операторов>
End;
параметры)}:
<тип
Пример 2.
Function F (x: real): real;
Const a=0.8; b=0.5;
Begin
F := a*x – b*sqr(x);
End;
В разделе операторов должен находиться, по крайней мере, один оператор,
присваивающий идентификатору функции значение. Если таких присваиваний несколько,
то результатом выполнения функции будет значение последнего оператора присваивания.
Обращение к функции осуществляется по имени с обязательным указанием списка
аргументов. Каждый аргумент должен соответствовать формальным параметрам,
указанным в заголовке, и иметь тот же тип.
Формат
<Идентификатор функции> {(фактические параметры)};
Пример 3
Write (MinZn(M)); {параметр – значение переменной}
Centre (9, 67); {Параметры – непосредственно значения}
SumVed; {Фактические параметры не указаны, т.к. в вызываемой функции
нет формальных параметров}
22
Функции могут возвращать значения целочисленных, вещественных, булевских,
литерных, строковых, ссылочных, перечислимых пользовательских типов.
Параметры
Параметры могут иметь любой тип, включая структурированный. Существуют
три типа параметров: значения, переменная и нетипизированная переменная.
Группа параметров, перед которыми отсутствует зарезервированное слово Var и за
которыми следует тип, называется параметрами-значениями. Например, в описании
параметры-значения. Формальный параметр-значение обрабатывается, как локальная по
отношению к процедуре или функции переменная. Изменения формальных параметровзначений не влияют на значение соответствующих фактических параметров. В качестве
параметра-значения запрещен файловый тип (!). Фактический параметр должен иметь тип,
совместимый по присваиванию с типом формального параметра-значения.
Если в качестве параметра используется переменная строкового типа, то
формальный параметр будет иметь длину 255 байт.
Группа параметров, перед которыми стоит ключевое слово Var и за которыми
следует тип, называются параметрами-переменными. Например, в описании
Procedure Obr (var A, B: integer);
A и B - параметры-переменные.
Параметр-переменная используется в том случае, если значение должно быть
передано из процедуры в вызывающий блок.
Глобальные константы, типы, переменные – это те, которые объявлены в
программе вне процедур и функций.
Наоборот, локальные – это константы, типы и переменные, существующие только
внутри процедур или функций, и объявленные либо в списке параметров (только
переменные), либо в разделах const, type, var внутри процедуры или функции.
Лекция 13.
Тема: КОМБИНИРОВАННЫЕ ТИПЫ (ЗАПИСИ)
Значение комбинированного типа состоит из нескольких компонент, но в отличие
от массива, эти компоненты могут иметь разные типы, и доступ к ним осуществляется не
по индексам (номерам), а по именам.
Значение комбинированного типа обычно называют записью.
Определение. Запись – это структурированный тип данных, состоящий из
фиксированного числа компонентов одного или нескольких типов. Определение типа
записи начинается идентификатором record и заканчивается зарезервированным словом
end. Между ними заключен список компонентов, называемых полями, с указанием
идентификаторов полей и типа каждого поля.
Формат
Type <Имя типа> = record
<Идентификатор поля> : <тип компонента>;
...
<Идентификатор поля> : <тип компонента>;
end;
Var <Идентификатор, . . .> : <имя типа>;
23
Пример
Type
Mashina = record
Nomer : integer;
Marka : string [20];
FIO : string [40];
Adres : string [60];
End;
{номер машины}
{марка автомобиля}
{фамилия, инициалы владельца}
{адрес владельца}
Var
M, N : Mashina;
Идентификатор поля должен быть уникален только в пределах записи, однако во
избежание ошибок лучше делать его уникальным в пределах всей программы. Объем
памяти, необходимый для записи, складывается из длин полей.
Знакомство с комбинированным типом дает возможность еще больше расширить
синтаксическое определение переменной. Если А есть переменная комбинированного
типа, то значением переменной –имени А является вся запись. Если В есть имя какого-то
поля в этой записи, то значение этого поля есть значение переменной поля А.В. Заметим,
что в ТР нет какого-либо ограничения на типы полей в записи. Так что, если поле В
записи А есть в свою очередь записью, то по отношению к этому полю переменная А.В
является полной переменной; если в этой записи есть поле с именем С, то для ссылки на
это поле используется обычный прием: к переменой А.В, обозначающей эту запись, через
точку добавляется имя интересующего нас поля: А.В.С. Если поле С имеет в свою
очередь, например, регулярный тип (т.е. его значением является массив), то для ссылки на
компоненты этого массива используется переменная с индексом вида А.В.С[i] и т.д.
Таким образом, в Паскале возможны следующее переменные:
A
A.B
F[i+1].D
F[i+1].D.E
G[2].P[k].M
Такие комбинации называются составным именем.
Составное имя можно использовать везде, где допустимо применение типа поля.
Для присвоения полям значений используется оператор присваивания.
Пример
M.Nomer := 345;
M.Marka := ‘Toyota Avalon’;
M.FIO := ‘Иманбаев А.К.’;
M.adres := ‘Ул. Пушкина, 12, кВ. 31’;
Составные имена можно использовать, в частности, в операторах ввода-вывода:
Read (m.nomer, m.marka, m.fio, m.adres);
Write (m.nomer:4, m.marka:7, m.FIO:12, m.Adres:25);
Допускается применение оператора присваивания и к записи в целом, если они
имеют один и тот же тип. Например, V := M;. После выполнения этого оператора
значения полей записи V станут равны значениям соответствующих полей записи M.
В ряде случаев удобно пользоваться массивами из записей.
Type
Person = record
Fio : string [20];
Age : 1.. 99;
24
Prof : string [30];
End;
Var List : array[1 .. 50] of Person;
Обращение к полям записи имеет несколько громоздкий вид, что особенно
неудобно при использовании мнемонических идентификаторов длиной более 5 символов.
Для решения этой проблемы в языке Паскаль предназначен оператор with, который имеет
следующий формат:
With <переменная типа запись> do <оператор>;
Один раз указав переменную типа запись в операторе with, можно работать с именами
полей, как с обычными переменными, т.е. без указания перед идентификатором поля
имени переменной, определяющей запись.
Пример. Присвоить значения полям записи Mashina с помощью оператора with.
With M do
Begin
Nomer := 345;
Marka :=’Toyota Avalon’;
Fio := ‘Иманбаев Л.К.’;
Adres := ‘ул. Новая, 5’;
end;
ТР допускает вложение записей друг в друга (т.е. поле в записи может быть в свою
очередь тоже записью), соответственно оператор With тоже может быть вложенным:
With RV1 do
With RV2 do
With RVn do …,
что эквивалентно записи With RV1, RV2, …, RVn do…
должен превышать 9.
- уровень вложения не
Лекция № 14-15.
Тема: ТИП «МНОЖЕСТВО» (SET). ОПЕРАЦИИ С МНОЖЕСТВАМИ
Турбо Паскаль поддерживает все основные операции с множествами. Множество,
если оно не является пустым, всегда содержит что-то, и говоря «множество», необходимо
указывать «чего?». В Паскале множества определяются как наборы значений из
некоторого скалярного (перечислимого) типа. Скалярного типа – Byte и Char вводятся
языком, они – перечислимые (их элементы можно поштучно назвать) и могут служить
основой для построения множеств.
Определение. Множество – это структурированный тип данных, представляющий набор
взаимосвязанных по какому-либо признаку или группе признаков объектов, которые
можно рассматривать как единое целое. Каждый объект в множестве называется
элементом множества.
Все элементы множества должны принадлежать одному из скалярных типов, кроме
вещественного. Этот тип называется базовым. Базовый тип задается диапазоном или
25
перечислением. Область значений типа множество – набор всевозможных подмножеств,
составленных из элементов базового типа.
В описании множества как типа используются конструкция Set of и следующее за
ней указание базового типа, т.е. того скалярного типа, из элементов которого составлено
множество. Способ задания множеств несколько:
Type
SetOfChar = Set of char; {Множество из символов}
SetOfByte = Set of byte; { Множество из чисел}
SetOfVideo = Set of videoAdapterType; {Множество из названий
видеоадаптеров}
SetOfDigit = Set of 0..9; {Множество из чисел от 0 до 9}
SetOfDChar = Set of ‘0’..’9’; {Множество из символов ‘0’, ‘1’, ‘ 2’, …’9’}
SetOfVA = Set of CGA .. VGA; { Подмножество названий видеоадаптеров}
Как видно из примеров, можно в задании типа множества «урезать» базовый тип,
задавая поддиапазон его значений. В итоге множество сможет состоять только из
элементов, вошедших в диапазон.
Если перечислимый тип вводится только для подстановки его имени в Set of, то
можно на нем сэкономить и перечислить значения сразу в конструкции Set of. Не
забудьте круглые скобки!
Пример
Type
SetOfVideo = Set of (MDA, Hercules, AGA, CGA, MCGA, EGA, VGA, Other,
NotDetected);
SetOfGlasn = Set of (‘А’, ‘И’, ‘О’,’У’,’Э’,’Ю’);
Можно опустить фазу описания типа в разделе и сразу задавать его в разделе
описания переменных:
Var
V1: Set of ..
В ТР разрешено определять множества, состоящие более чем из 256 элементов.
Столько же элементов содержат типы Byte и Char, и это же число является ограничением
количества элементов в любом другом перечислимом базовом типе множества,
задаваемым программистом. Каждый элемент множества имеет сопоставимый номер. Для
типа Byte номер равен значению числа, в типе Char номером символа является его код в
таблице символов. Всегда нумерация идет от 0 до 255. По этой причине не является
базовым для множества типа ShortInt, Word, Integer, LongInt.
Множества имеют весьма компактное машинное представление: один элемент
расходует 1 бит. Поэтому для хранения 256 элементов достаточно 32 байта (для меньшего
диапазона значение множеств цифра будет еще меньше).
Переменная, описанная как множество, подчиняется определенному синтаксису.
Элементы множества должны заключаться в квадратные скобки:
SByte:=[1, 2, 3, 4, 10, 20, 30, 40];
SChar:= [‘a’, ‘b’, ‘c’];
SChar:=[‘2’];
SVideo:= [CGA, VGA, MCGA];
SDiap:= [1..4]; {то же самое, что и [1, 2, 3, 4]}
SComp:= [1..4, 5, 7, 10..20 ];
SCharS:= [‘а .. п’, ‘р .. я’];
26
Empty:= []; {Пустое множество записывается как []}.
Порядок следования элементов внутри скобок не имеет значения так же, как не
имеет значения число повторений. Например, многократное включение элемента в
множество
SetVar := [‘a’, ‘b’, ‘a’, ‘a’];
эквивалентно однократному его упоминанию.
В качестве элементов множеств в квадратные скобки могут включаться константы
и переменные соответствующих базовых типов. Более того, можно вместо элементов
подставлять выражения, если тип их результата совпадает с базовым типом множества:
Пример
Var
X: byte;
S: Set of byte;
…
X:=3;
S:= [1, 2, x];
S := S+[x+1]; …
Таблица. Операции, применяемые к множествам.
Знак
Название
Форма
Комментарий
=
Проверка
на S1 = S2
Результатом будет логическое заключение, равное
равенство
TRUE, если S1 и S2 состоят из одинаковых
элементов независимо от порядка следования, и
< > Проверка
на S1 < > Результатом будет логическое заключение, равное
неравенство
S2
TRUE, если S1 и S2 отличаются хотя бы одним
элементом, FALSE в противном случае.
<=
Проверка
на S1<=S2 Результатом будет логическое заключение, равное
подмножество
TRUE, если все элементы S1 содержатся
() и в S2 независимо от их порядка следования, и
равно FALSE в противном случае.
>=
Проверка
на S1>=S2 Результатом будет логическое заключение, равное
надмножество
TRUE, если все элементы S2 содержатся в S1, и
FALSE в противном случае
In
Проверка
E in […] Результатом будет логическое заключение, равное
вхождения
или
TRUE, если значение E принадлежит базовому типу
элемента
в E in S1
множества и входит в множество […] (S1). Если
множество
множество не содержит в себе значение E, то
результатом будет FALSE.
+
Объединение
S1+ S2
Результатом объединения будет множество,
множеств
полученное слиянием элементов этих множеств и
исключением дублированных элементов.
Разность
S1 – S2
Результатом взятия разности S1 – S2 будет
множеств
множество, составленное из элементов, входящих в
S1, но не входящих в S2.
*
Пересечение
S1 * S2
Результатом
пересечения
будет
множество,
множеств
состоящее только из тех элементов S1 и S2, которые
одновременно содержатся и в S1 и в S2.
Как видно
ОПЕРАЦИИ НАД МНОЖЕСТВАМИ
27
и ОПЕРАЦИИ
те, и другие
будут работать лишь в том случае, когдаОПЕРАЦИИ,
их операнды
сопоставимы. Это
СОПОСТАВЛЕНИЯ
СОЗДАЮЩИЕ
означает, что
в
операциях
могут
участвовать
только
те
множества,
которые
построены на
МНОЖЕСТВ
ПРОИЗВОДНЫЕ МНОЖЕСТВА
одном базовом типе (так, несопоставимы множества значений типа Byte и типа Char).
Операции сопоставления всегда двухместные. Результатом операции сопоставления будет
логическое значение TRUE или FALSE. В этом смысле они близки операциям сравнения.
Рассмотрим некоторые примеры сопоставлений (в них Х – обозначение переменной
базового типа множества, а S – обозначение некоего непустого сопоставимого
множества).
TRUE (истинно)
[1, 2, 3] = [3, 1, 2]
[5, x] = [x, 5]
[]=[]
[1, 2] < > [1]
[5, x]< > [5, x+1]
[‘a’, ‘b’]<= [‘a’..’z’]
[ ] <= S
[x, x+1] >= [x+1]
5 in [0 .. 5]
[ ] in [0 .. 5]
FALSE (ложно)
[1, 2] = [1]
[5, x] = [5, x+1]
[ ] = [1]
[1, 2, 3] < > [3, 1, 2]
[5, x] < > [x, 5]
[‘0’, ‘9’]<= [‘a’..’z’]
[ ] >= S
[1 .. 3] >= [0 .. 4]
x in [x-1, x-2]
x in [ ]
Примеры
Операция
[1, 2, 3, 4, 4] + [3, 4, 4, 5, 6]
[‘1’, ‘2’] + [‘8’, ‘9’]
[x] + [ ]
[x] + [x+1] + [x+2]
[1, 2, 3, 4, 4] - [3, 4, 4, 5, 6]
[‘1’, ‘2’] - [‘8’, ‘9’]
[x] - [ ]
[ ] - [x]
[1, 2, 3, 4, 4] * [3, 4, 4, 5, 6]
[‘1’, ‘2’] * [‘8’, ‘9’]
[x] * [ ]
[A] * [A, B] * [A, B, C]
Результат
[1, 2, 3, 4, 5, 6] ([1 .. 6])
[‘1’, ‘2’, ‘8’, ‘9’]
[x]
[x .. x+2]
[1, 2]
[‘1’, ‘2’]
[x]
[]
[3, 4]
[]
[]
[A]
Недостатки множеств – это обратная сторона их достоинств. За компактность
представления приходится платить невозможностью вывода множества на экран, хотя
отладчик это проделывает. Причем, эта проблема трудноразрешима, так как отсутствует
механизм изъятия элемента из множества. Ввод множеств возможен только по элементам.
Пример:
Var
S : Set of char;
C : char;
Begin
{Переменная множество}
{Элемент множества}
28
S := [ ];C := #0;
{«обнуление» значений}
While C< >’.’ do begin
{Цикл до ввода ‘.’:}
Readln (C);
{Чтение символа в С и }
S := S+ [C]
{добавление его к S}
End; {while}
S := S – [‘.’]
{Можно выбросить точку}
…
End.
Две процедуры, применяемые к множествам
INCLUDE – включает новый элемент в множество. Обращение к процедуре
INCLUDE (S, I)
S – множество, состоящее из элементов базового типа;
I – элемент, принадлежащий базовому типу, который необходимо включить в множество.
EXCLUDE – исключает элемент из множества. Обращение к процедуре:
EXCLUDE (S, I)
Параметры те же, что и в процедуре INCLUDE.
В отличие от операций + и -, реализующх аналогичные действия над двумя
множествами, процедура оптимизирована для работы с одиночными элементами
множества и поэтому отличаются высокой скоростью выполнения.
29
ЗАДАНИЯ ДЛЯ ПРОВЕДЕНИЯ СРСП
СРСП № 1.
Тема: Арифметические выражения.
Задача. Найти среднее значение трех чисел.
Примечание. Чтобы найти среднее значение нескольких чисел, нужно сложить эти числа
и сумму разделить на количество этих чисел.
Program Srednee;
Uses
Crt;
Var
First, Second, Third : integer;
Sum : real;
Begin
ClrScr;
Write ('Введите первое число ');
ReadLn(First);
Write ('Введите второе и третье числа через пробел ');
ReadLn(Second, Third);
Sum := First + Second + Third;
Sum := Sum/3;
Write ('Среднее значение ', First, ', ',Second, ' и ', Third, ' равно ', Sum:5:2);
ReadLn;
End.
Наберите текст задачи и внимательно рассмотрите каждую строчку. Имя
программы Srednee отражает содержание задачи. Кстати, договоримся о том, чтобы имя
программы и имя файла, который содержит эту программу, совпадали. Далее идет
подключение модуля Crt. В разделе Var описаны First, Second, Third как переменные
целого типа, а Sum - действительного типа. Раздел операторов начинается со стандартной
процедуры очистки экрана ClrScr (Clear Screen), которая находится в модуле Crt. Далее
оператором Write мы выводим на экран сообщение ‘Введите первое число ‘, получив
которое пользователь должен ввести число.
Теперь компьютер должен считать введенные символы и занести их в переменную
First, это произойдет при выполнении следующего оператора ReadLn(First). Затем с
помощью оператора Write запрашиваем значения еще двух чисел и считываем их в
переменные Second и Third. Затем вычисляем их сумму и присваиваем полученное число
переменной Sum. Чтобы найти среднее, нужно теперь полученное число разделить на 3 и
сохранить результат в какой-либо переменной.
Совсем не обязательно описывать еще одну переменную для сохранения
результата. Можно, как в нашей программе, значение переменной Sum разделить на 3 и
результат опять присвоить той же переменной Sum. Теперь можно вывести результат
вычислений на экран с помощью процедуры Write. И, наконец, последняя процедура
ReadLn задержит наш вывод на экране до нажатия на клавишу.
Нажмите клавиши <Ctrl>+<F9>. Введите значения переменных 5, 7 и 12, на экране
увидите следующее:
Среднее значение 5, 7 и 12 равно 8.00
Просмотрите внимательно эту строчку и сравните со строчкой вывода результата в
нашей программе. Протестируйте программу еще несколько раз для других значений
переменных.
30
СРСП № 2
Тема: Стандартные функции и процедуры. Их применение при решении простейших
задач.
Задача. Найти значения выражений:
a) (1+x)2
b)
c) |a+ bx|
Прежде чем приступить к составлению программы, необходимо перевести данные
выражения с математического языка на язык Паскаль.
a) (1+x)2 → sqr(1+x)
b)
→ sqrt((1+A)*5)
c) |A+ bx| → abs(A+b*x)
Теперь уже можно переходить к составлению программы.
Program Primer;
Uses
Crt;
Var
A : word; {так как подкоренное выражение должно быть положительно}
b, x, result : real;
Begin
ClrScr;
Writeln('Введите значения переменных (A-положительно)');
Write('A=');
Readln(A);
Write('b=');
Readln(b);
Write('x=');
Readln(x);
Result := sqr(1+x);
Writeln ('sqr(1+x)=', result);
Result := sqrt((1+A)*5);
Writeln ('sqrt((1+A)*5)=', result);
Result := abs(A+b*x);
Writeln ('abs(A+b*x)=', result);
Readln;
End.
Задание. Наберите программу, протестируйте, добавьте комментарий, сохраните файл и
распечатайте листинг.
СРСП № 3
Тема: Условный оператор. Полная и краткая форма условного оператора.
СРСП № 4
Тема: Различные виды оператора ветвления.
СРСП № 5
Тема: задачи min-max (на нахождение минимального и максимального элемента массива).
31
Дан массив, состоящий из действительных чисел. Среди элементов массива найти
наибольший и наименьший.
Program min_max;
Const n=10;
Var m:array [1..n] of real;
Min, max: real;
I:integer;
Begin
Writeln (‘Заполните массив m:’);
For i:=1 to n do
Readln (m[i]);
Min:=m[1]; max:=m[1];
For i:=2 to n do
Begin
If m[i]>max then max:=m[i];
If m[i]<min then min:=m[i];
End;
Writeln (‘min=’,min:7:2,’ max=’,max:7:2);
Readln;
End.
СРСП № 6
Тема: Сортировки массивов (метод пузырька, перестановок, вставками)
Упорядочить массив х по неубыванию (т.е. переставить его элементы так, чтобы
для всех к выполнялось неравенство xk<=xk+1), используя следующий алгоритм
сортировки (упорядочения).
Сортировка выбором: отыскивается максимальный элемент и переносится в
конец массива; затем этот метод применяется ко всем элементам кроме последнего (он
уже находится на своем месте) и т.д.
Program sort1;
Const n=100;
Var x: array[1..n] of real;
I,k,m : integer; r: real;
Begin
Writeln (‘Заполните массив х:’);
For i:=1 to n do
Readln (x[i]);
For k:=n to 2 do
begin {m max x[1..k]:}
M:=1;
For i:=2 to k do
If x[i]>x[m] then m:=I;
{x[m] x[k]:}
R:=x[k];
x[k]:=x[m];
x[m]:=r;
end;
32
for i:=1 to n do
write (x[i]);
readln;
end.
Сортировка обменом (метод пузырька): последовательно сравниваются пары
соседних элементов xk и xk+1 (к = 1, 2, 3, …, n-1) и, если
xk > xk+1, то они переставляются; тем самым наибольший элемент окажется на своем
месте в конце массива. Затем этот метод применяется ко всем элементам кроме
последнего и т.д. Например, как показано на рисунке:
7
2
5
3
4
1
0
Program sort2;
Const n=100;
Var x: array[1..n] of real;
R:real; I,k,j: integer;
Begin
Writeln(‘заполните массив x:’);
For i:=1 to n do
Read (x[i]);
For k:=n downto 2 do
For i:=1 to k-1 do
If x[i+1]<x[i] then
Begin
r:=x[i];
x[i]:=x[i+1];
x[i+1]:=r;
End;
For i:=1 to n do
Write (x[i]);
Readln;
End.
Сортировка вставками: пусть первые к элементов массива уже упорядочены по
неубыванию; берется (к+1)-й элемент и размещается среди первых элементов так, чтобы
упорядоченными оказались уже к+1 первых элементов; этот метод применяется при к от 1
до n-1. Например, как показано на рисунке:
1
6
12
к
18
5
7
…
к+1
Program sort2;
Const n=100;
Var x: array[1..n] of real;
33
R:real; I,k,j: integer;
Begin
Writeln(‘заполните массив x:’);
For i:=1 to n do
Read (x[i]);
For k:=1 to n-1 do
For i:=1 to k do
If x[k+1]< x[i] then
Begin
r:=x[k+1];
for j:=k downto i do
x[j+1]:=x[j];
x[i]:=r;
End;
For i:=1 to n do
Write (x[i]);
Readln;
End.
СРСП № 7
Тема: Операции отношения для строковых типов. Процедуры и функции, применяемые
для обработки данных строкового типа.
Пример 1. Вставить в заданную позицию строки другую строку.
Описание переменных: s1, s2 – строки; i – позиция вставки.
Алгоритм решения задачи:
1. Определить значения s1, s2 и i.
2. С помощью процедуры insert() вставить s2 в s1, начиная с позиции i.
var
s1,s2: string;
i: byte;
begin
write('Input string 1: ');
readln(s1);
write('Input string 2: ');
readln(s2);
write('Input position: ');
readln(i);
insert(s2,s1,i);
writeln(s1);
readln
end.
Пример 2. Найти в строке определенную последовательность символов и заменить ее
другой.
Описание переменных: s, s_old, s_new – исходная строка, заменяемая подстрока,
вставляемая подстрока;
i – номер символа строки, с которого начинается подстрока;
l_old – длина заменяемой подстроки.
Алгоритм решения задачи:
34
1. Ввести строку, подстроку, которую требуется заменить, и подстроку, которую
требуется вставить на место прежней.
2. Найти место вхождения подстроки в строку с помощью функции pos().
3. Удалить старую подстроку с помощью процедуры delete().
4. Вставить новую подстроку, используя процедуру insert().
var
s,s_old,s_new: string;
i,l_old: byte;
begin
write('Insert string: ');
readln(s);
write('What change? ');
readln(s_old);
l_old := length(s_old);
write('What to replace? ');
readln(s_new);
i := pos(s_old,s);
delete(s,i,l_old);
insert(s_new,s,i);
writeln(s);
readln
end.
Пример 3. Скопировать часть строки с определенной позиции и определенной длины в
другую строку.
Описание переменных:
s1, s2 – первая и вторая строка;
n – позиция, с которой будет копироваться строка;
len – длина копируемой части строки.
Алгоритм решения задачи:
1. Записать в переменную s1 исходную строку.
2. Узнать начало второй строки и ее длину.
3. Присвоить s2 результат выполнения функции copy().
var
s1,s2: string;
n,len: byte;
begin
write('Input string: ');
readln(s1);
write('Place of start of copy: ');
read(n);
write('Length of copy: ');
readln(len);
s2 := copy(s1,n,len);
writeln('Your copy: ',s2);
readln
end.
Пример 4. Определить длину строки, введенной пользователем.
35
Описание переменных: s – строка; len – ее длина.
Алгоритм решения задачи:
1. Введенная пользователем строка записывается в переменную s.
2. Результат выполнения функции length(s) сохраняется в переменной len и, затем,
выводится на экран.
var
s: string;
len: byte;
begin
write('Input string: ');
readln(s);
len := length(s);
writeln('Its lenght is ', len,' characters.');
readln
end.
СРСП № 8
Тема: Процедуры и функции пользователя.
Пример программы с использованием процедуры пользователя. Даны отрезки a, b,
c, d. Для каждой тройки этих отрезков, из которых можно построить треугольник,
напечатать площадь данного треугольника. (Определить процедуру печплощ(x, y, z),
печатающую площадь треугольника со сторонами x, y, z, если такой треугольник
существует).
Program ploshad;
Var a,b, c, d: real;
Procedure pechplosh(x, y, z: real);
Var p: real;
Begin
If (x+y>z) and (y+z>x) and (z+x>y) then
Begin
P:=(x+y+z)/2;
Writeln(sqrt (p*(p-x)*(p-y)*(p-z)));
End;
End;
Begin
Read (a, b, c, d); {a, b, c, d>0}
Pechplosh (a, b, c);
Pechplosh (a, b, d);
Pechplosh (a, c, d);
Pechplosh (b, c, d);
Readln;
End.
Пример программы на параметры
Program demo_param;
Uses crt;
Var A,B : byte;
36
K,N: integer;
I1, i2, j1, j2: integer;
Procedure ww1;
Begin {процедура использует глобальные переменные; после выполнения
процедуры их значение может измениться}
A:=A+4; {изменение значения глобальной переменной А}
End;
Procedure ww2 (var R, T: integer);
{Процедура передает в основную программу значения R и T; если не указать var
значения не передадутся}
Begin
R:=555; T:=666;
End;
Procedure ww3 (R1, R2: integer, {R1, R2 - принимает}
Var x1, x2: integer); {x1, x2 - передает}
Begin
X1:= R1+R2;
X2:= R1*R2;
End;
Begin
A:= 9;
Writeln (A: 5);
Ww1;
Writeln (A: 5);
Ww2 (K, N); {В K и N (соответствуют R иT) содержатся результаты работы
процедуры ww2}
Writeln (K:5, N:5);
I1:= 2;
I2:= 5;
Ww3 (i1,i2,j1,j2); {значения I1, I2 (соответствуют R1 и R2) передаются в
процедуру; значения J1 и J2 (соответствуют x1 и x2) принимаются из процедуры}
Writeln (j1:5, j2:5);
End.
СРСП № 9
Тема: Записи.
Пример. Составить программу на Паскале, предназначенную для вычисления U = x
+ y; W = x – y; V = x * y, где x, y, u w, v - комплексные переменные. При этом будем
считать, что заданы значения x.re, x.im, y.re, y.im.
Program comple_chislo;
Type compl = record
Re, im : real;
End;
Var x,y, u, w,v: compl;
Begin
{ввод исходных данных}
Read (x.re, x.im, y.re, y.im);
{вывод исходных данных}
37
Writeln (‘x.re = ’, x.re, ‘ x.im =’, x.im, ‘ y.re = ’, y.re, ‘ y.im = ’, y.im);
{u=x+y}
u.re := x.re + y.re;
u.im := x.im + y.im;
{w = x - y}
w.re := x.re – y.re;
w.im :=x.im - y.im;
{v=x*y}
v.re := x.re*y.re – x.im*y.im ;
v.im := x.re*y.im + x.im*y.re;
{вывод результатов}
Writeln (‘x+y = ’, u.re, ‘+’,u.im,’*i’);
Writeln (‘x-y =’, w.re, ‘+’,w.im,’*i’);
Writeln (‘x*y =’, v.re, ‘+’,v.im,’*i’);
Readln;
End.
Отдельные поля записи не обязательно должны иметь один и тот же тип.
Например, можно дать следующее описание комбинированного типа с именем дата.
Пример
Type
Data = record
Day : 1 .. 31;
Month : (jan, febr, march, april, may,…,decem);
Year : integer;
End;
Var d:data;
Begin
d.day := 13;
d.month := march;
d.year := 1952;
СРСП № 10
Тема: Операции с множествами.
В предлагаемом примере, иллюстрирующем приемы работы с множествами,
реализуется алгоритм выделения из первой сотни натуральных чисел всех простых числе.
В его основе лежит прием, известный под названием «решето Эратосфена». В
соответствии с этим алгоритмом вначале формируется множество BeginSet, состоящее из
всех целых числе в диапазоне от 2 до N. В множество PrimerSet (оно будет содержать
искомые простые числа) помещается 1. Затем циклически повторяются следующие
действия:
 Взять из BeginSet первое входящее в него число NEXT и поместить его в
PrimerSet.
 Удалить из BeginSet число NEXT и все другие числа, кратные ему, т.е. 2* NEXT,
3* NEXT и т.д.
Цикл повторяется до тех пор, пока множество BeginSet не станет пустым. Эту
программу нельзя использовать для произвольного N, т.к. в любом множестве
может быть более 256 элементов.
38
Program prostoe;
{Выделение всех простых чисел из первых N целых}
Const N=255;
{ Количество элементов исходного множества}
Type SetOfNumber = set of 1 .. N;
Var
N1, next, I : word;
{Вспомогательные переменные}
BeginSet,
{Исходное множество}
PrimerSet: SetOfNumber; {Множество простых чисел}
Begin
BeginSet := [2 .. N];
{Создаем иcходное множество }
PrimerSet := [1];
{Первое простое число}
Next := 2;
{Следующее простое число}
While BeginSet < > [ ] do
{Начало основного цикла}
Begin
N1 := next;
{n1- число, кратное очередному простому (next)}
{Цикл удаления из множества непростых чисел}
While n1 < = N do
Begin
Exclude (BeginSet, n1);
N1:=n1 + next;
{следующее кратное}
End;
{конец цикла удаления}
Include (PrimerSet, next);
{получаем следующее простое, которое есть первое не вычеркнутое из исходного
множества}
Repeat
Inc (next);
Until (next in BeginSet) or (next > =N)
End;
{конец основного цикла}
{Выводим результаты}
For i:= 1 to n do
If I in PrimerSet then write (I : 8);
Writeln;
Readln;
End.
1.
2.
3.
4.
ЗАДАНИЯ ДЛЯ ПРОВЕДЕНИЯ СРС
Типы данных.
Метки и операторы перехода.
Совместимость и преобразование типов.
Записи с вариантами.
39
ТЕМАТИКА И КРАТКОЕ ОПИСАНИЕ ЛАБОРАТОРНЫХ РАБОТ
Лабораторная работа № 1. (2 ч)
Тема: Знакомство со средой программирования Турбо Паскаль.
Запуск интегрированной среды программирования
Для запуска интегрированной среды программирования нужно установить
текущим каталог с Турбо Паскалем (TP7\BIN) и ввести команду: turbo.exe.
Задание. Запустите среду программирования и рассмотрите экран. Перед вами полоса
меню, область окна и строка статуса. Нажмите клавишу F10 - теперь вам доступны все
опции меню. Используя клавиши управления курсором, рассмотрите меню. С командами
меню мы будем знакомиться постепенно. Нажмите клавишу Esc (вы вышли из меню).
Перемещая курсор в окне, следите за строкой статуса. Какая информация отражается в
этой строке?
Почти все, что вы видите и делаете в среде Турбо Паскаль, происходит в окнах.
Окно - это область экрана, которую можно перемещать, изменять в размере,
перекрывать, закрывать и открывать.
Интегрированная среда программирования Турбо Паскаль позволяет иметь любое
количество открытых окон, но в любой момент времени активным может быть только
одно.
Активное окно – это окно, с которым вы в настоящий момент работаете.
Общие горячие клавиши:
F1 - выводит окно подсказки;
F2 - сохраняет файл активного окна;
F3 - появление диалогового окна и возможность открыть файл;
F4 - запускает программу до строки, на которой стоит курсор;
F5 - масштабирует диалоговое окно;
F6 - переходит к следующему открытому окну;
F7 - запускает программу в режиме отладки с заходом внутрь процедур;
F8 - запускает программу в режиме отладки, минуя вызов процедур;
F9 - компилирование программы в текущем окне;
F10 - возвращение в меню.
Мы начнем изучение меню с наиболее важных и необходимых режимов.
Как войти в меню? Всего есть три возможности:
 с помощью "мышки";
 с помощью клавиши F10;
 с помощью комбинации Alt+<выделенная буква>. О том, что мы в меню
свидетельствует курсор - прямоугольник зеленого цвета.
С помощью клавиш управления курсором подсветите слово FILE и нажмите клавишу
"Enter". Что вы видите?
Появилась вертикальная таблица со списком команд, называемая выпадающим меню.
Познакомимся с ним.
Open-F3 - открыть существующий файл (при активизации этой опции появляется окно со
списком файлов, где можно выбрать необходимый),
New - создать новый файл (очищает память редактора и переводит в режим создания
нового файла, которому присваивается имя Noname.pas; имя можно изменить при записи
файла на диск),
Save-F2 - сохранить файл (переписывает файл из памяти редактора на диск),
Save as - сохранить с новым именем,
40
Save all - сохранить все в окнах (записывает содержимое всех окон редактора в
соответствующие файлы),
Change dir - смена каталога (позволяет изменить установленный по умолчанию диск или
каталог),
Print - печать файла,
Get info - выдача информации о текущем состоянии программы и используемой памяти,
DOS Shell - выход в DOS без выгрузки из памяти (для возврата ввести команду exit),
Exit - выход и выгрузка из памяти.
Лабораторная работа № 2. (4 ч)
Тема: Оператор присваивания. Арифметические выражения.
В нашем случае
Program summa;
Var number1, number2, result: real;
Begin
number1:=3;
number2:=4;
result:= number1 + number2;
Write (‘result=’, result);
End.
сначала переменной number1 присваивается значение равное 3 и переменной number2
присваивается значение равное 4, затем вычисляется значение выражения (number1 +
number2) и оно присваивается переменной result.
Сумма чисел посчитана.
Теперь надо вывести ее значение на экран. Для этого используют оператор Write записать (вывести) на экран значение переменной, записанной в скобках. В нашем случае
значение переменной number1, затем символ + , далее значение переменной number2,
символ = и, наконец, значение результата result.
И, наконец, в конце раздела операторов стоит служебное слово End, после которого
стоит точка.
Задание1. Наберите текст программы на компьютере и выполните ее (для запуска
программы воспользуйтесь комбинацией клавиш Ctrl и F9).
Внимание! Не забывайте о порядке на внешнем носителе и в файле:
 имя программы должно соответствовать ее содержанию,
 имя файла должно быть таким же, как и имя программы,
 файлы, содержащие программы, относящиеся к одной теме, должны находиться
в одном каталоге,
 название этого каталога должно отражать его содержание.
Задание2. Измените программу так, чтобы она подсчитывала сумму четырех чисел.
Задание 3.
Даны x, y, z . Вычислить a, b, если:
1.
41
2.
3.
4.
5.
6.
7.
8.
9.
10.
Лабораторная работа № 3. (4 ч.)
42
Тема: Составной оператор. Пустой оператор. Условный оператор (Оператор ветвления).
1. Составить программу для вычисления функции:
2. Найти max (a, b).
3. Дана точка М(x, y). Присвоить z = 1, если точка внутри эллипса
0, если точка вне эллипса.
4. Вычислить y(x), если y = x2 при x > 1 и y = x при x <= 1.
5. Вычислить:
иz=
6. Даны два отрезка [a, b], [c, d] на прямой. Установить, имеют ли они общие точки
или нет.
7. Дана точка М(x, y). Присвоить z = 1, если точка принадлежит окружности с
радиусом R и центром в точке (a, b) и z = 0 в противном случае.
8. Вычислить функцию f(x), если f(x) = e-x при х >= 0 и f(x) = cos x при х < 0.
9. Составить программу для вычисления y = t2 - t -1, где t =
10. Составить программу решения уравнения
.
Лабораторная работа № 4.(4 ч.)
Тема: Оператор цикла или повтора (for, while, repeat.. until).
Задание 1 (while ... do, repeat ... until).
1. Дана последовательность
последовательности
и eps>0. Найти первый член
для которого
2. При a > 0 задана последовательность
eps.
3. Найти произведение
eps>0.
.
. Найти при eps >0 такое n, что an <
Сомножители брать с точностью
4. Найти сумму бесконечного ряда
пока члены ряда не станут меньше заданного eps>0.
Суммировать до тех пор,
5. Найти сумму бесконечного ряда
тех про, пока члены ряда не станут меньше заданного eps>0.
6. Среди чисел
А>0.
Суммировать до
найти первое число, которое больше данного числа
43
7. Дана последовательность
. Найти сумму членов
последовательности хn, начиная с х0 и до последнего хn.
8. Найти сумму натуральных чисел, предшествующих заданному числу а.
9. Найти сумму
, меньшую заданного числа А.
10. Вычислить с точностью eps>0
Задание 2 (for ... to).
1. Дано 100 вещественных чисел. Вычислить разность между максимальным и
минимальным из них.
2. Дана непустая последовательность различных чисел. Определить порядковый
номер наименьшего из них.
3. Даны целое n>0 и последовательность из n вещественных чисел, среди которых
есть хотя бы одно отрицательное число. Найти наибольшее среди отрицательных
чисел.
4. Дана последовательность a1, a2, ..., an вещественных чисел. Найти сумму всех
элементов, больших заданного числа b.
5. Дана таблица целых чисел a1, a2, ..., an. Найти тройки чисел аi-1, ai, ai+1,
удовлетворяющие условию:
6. Дана таблица целых чисел a1, a2, ..., an. Упорядочить эту таблицу.
7. Дана таблица целых чисел a1, a2, ..., an. Найти сумму S= a1an+a2an-1+...+ana1.
8. Дана таблица целых чисел a1, a2, ..., an. Найти количество чисел, принадлежащих
отрезку [p, q].
9. Дана таблица целых чисел a1, a2, ..., an и число с. Найти минимальное значение
индекса р, при котором a1 + a2+ ...+ ap < c.
10. Дана таблица целых чисел a1, a2, ..., an. Подсчитать количество различных чисел.
Составьте новую таблицу, состоящую из различных элементов данной, входящих в
нее в такой же последовательности.
Лабораторная работа № 5.(2 ч.)
Тема: Оператор выбора.
Составить программу вычисления площадей различных геометрических фигур
44
1. Составить программу вычисления площадей различных геометрических фигур
2. Составить программу вычисления значения функции
3. Составить программу вычисления значения функции
4. Найти остаток от деления целой части значения функции z = ln(x2+ab) на 7 и, в
зависимости от его величины, напечатать сообщение об одном из дней недели,
пронумеровав их от 0 до 6.
5. Даны три числа а, b, с, удовлетворяющие аксиоме треугольника и число р.
Выполнить следующие действия: если р=1 - найти периметр треугольника; если
р=2 - найти площадь треугольника; если р=3 - найти угол а. Иначе напечатать
слово "треугольник".
6. Найти остаток от деления целого выражения а=(с+d)(2k-m) на 5 и вывести
сообщение о величине остатка. Если остаток равен 0, присвоить а значение целой
части выражения. При нечетном остатке напечатать "нечетное число", при четном "четное число"
7. Написать программу, которая по номеру машины выводит фамилию студента,
сидящего за ней.
8. Найти остаток от деления целой части выражения z = cos(x2+1) на 4 и, и
зависимости от его величины, напечатать сообщение об одном из времен года,
пронумеровав их от 0 до 3.
9. Найти остаток от деления целого выражения c = k(a+b) на 4 и вывести сообщение о
величине остатка. Если остаток равен 0, то значение переменной оставить без
изменения, если 1 или 3 - уменьшить на величину остатка, если 2 - увеличить на
величину остатка.
10. По номеру дня недели (1,2,3,4,5,6,7) указать название этого дня. Указать рабочие и
выходные дни.
11. Найти остаток от деления целой части выражения sin(a+b)0.5c на 4 и вывести на
экран сообщение о величине остатка. Если остаток равен 0, то значение выражения
заменить на его целую часть. Если остаток равен 1, значение выражения заменить
на его дробную часть. В остальных случаях оставить без изменения.
45
12. В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду
"тепло", "жарко", "холодно", "очень холодно".
Лабораторная работа № 6.(2 ч.)
Тема: Массивы. Одномерные массивы. Ввод-вывод массивов.
1. Даны m векторов x1=(x11, x21, x31), ..., xm=(x1m, x2m, x3m). Написать программу
нахождения суммы этих векторов.
2. Даны векторы а=(a1, a2, a3) и b=(b1, b2, b3). Написать программу вычисления
скалярного и векторного произведений этих векторов
3. Даны три вектора а=(a1, a2, a3), b=(b1, b2, b3) и c=(c1, c2, c3). Написать программу
вычисления смешанного произведения этих векторов.
4. Даны два вектора а=(a1, a2, a3) и b=(b1, b2, b3). Написать программу, которая
находит угол между этими векторами.
5. Даны векторы а=(a1, a2, a3), b=(b1, b2, b3), c=(c1, c2, c3) и d=(d1, d2, d3). Написать
программу, вычисляющую скалярное произведение (ахb)*(cxd).
6. Даны две точки в n-мерном пространстве X=(х1, х2, ..., хn), Y=(y1, y2, ...,yn).
Написать программу нахождения расстояния между этими точками и вектора XY.
7. Дан n-мерный вектор х=(х1, х2, ...,хn). Написать программу, которая может
находить вектор y=(xn, xn-1, xn-2, ..., x2, x1) и скалярное произведение x*y.
8. Дан вектор а=(a1, a2, a3) и плоскость, заданная уравнением Ах+Ву+Сz=0. Написать
программу нахождения угла между вектором и плоскостью.
9. Даны векторы в n-мерном пространстве х=(х1, х2, ...,хn), у=(у1, у2, ...,уn), z=(z1, z2,
...,zn). Написать программу, которая определяет, можно ли из этих векторов
построить треугольник и, если можно, найти его площадь.
10. Даны два вектора х=(х1, х2, ..., хn), у=(у1, у2, ..., уn). Написать программу,
проверяющую являются ли х и у линейно зависимыми.
Лабораторная работа № 7.(2 ч.)
Тема: Многомерные массивы.
1. Дана матрица C(nxn) и вектор а = (a1, a2, ..., an). Написать программу вычисления
вектора b = C*a.
2. Дана матрица А(nxn). Построить n-мерный вектор по правилу: если в строке
матрицы с номером i есть отрицательные элементы, то bi = 0, в противном случае bi
= 1.
3. Даны две матрицы А(nxn) и B(nxn). Написать программу нахождения
произведения этих матриц D = A*B.
4. Дана матрица А(nxn). Написать программу, которая меняет k-ю и m-ю строки
матрицы, а затем транспонирует матрицу.
5. Дана матрица А(nxn) и вектор х = (х1, х2, ...,хn). Написать программу нахождения
скалярного произведения (х*Ах).
6. Дана матрица А(nxn). Написать программу нахождения матрицы АтА, где Ат транспонированная матрица.
7. Даны две матрицы А(nxn) и B(nxn). Написать программу нахождения матрицы,
равной (А-В)т.
8. Даны два вектора b = (b1, b2, ..., bn), x = (x1,x2, ..., xn) и матрица А(nxn). Написать
программу вычисления длины вектора Ах - b.
9. Дана матрица А(nxm). Написать программу, которая вычеркивает столбец с
номером р и переставляет остальные так, чтобы получилась матрица nx(m-1).
10. Даны две матрицы А(nxn) и B(nxn), а также два вектора х = (x1, x2,..., xn) и y = (y1,
y2, ..., yn). Написать программу нахождения скалярного произведения (Ах)*(Ву).
46
Лабораторная работа № 8. (2ч.)
Тема: Строки. Строковые выражения.
В качестве примера использования строк приведем текст программы, содержащей один из
вариантов алгоритма «бегущая строка».
Program Demo_String_Go;
{пример бегущей строки}
Uses Crt;
Type stroka = string [160];
Var vhod,is1,InSt: stroka; st1: string;
Procedure GoString (X, Y: byte; InSt: Stroka);
{ X, Y – координаты бегущей строки}
Var I: byte;
Procedure S;
{Процедура звукового сопровождения бегущей строки}
Begin
Sound (1000); Delay (5); Nosound;
End;
Begin
St1:='';
ClrScr;
St1:=St1+InSt;
For i:=1 to length (St1) do
Begin
Delete (St1,1,1);
GotoXY (x,y);
Write (St1); S;
Delay (90); Delline ;
End;
End;
Begin
is1:= 'Включите принтер!!!' ;
GoString (10,10,is1);
Vhod := 'Установите бумагу!!!';
GoString (10,14, vhod);
End.
1. Напишите программу подсчета суммарного числа букв 'а' и букв 'b' в данной
строковой переменной. Вывести на экран каких букв больше.
2. Задано предложение y, состоящее из слов-строк. Проверить, встречается ли данное
слово х в предложении у.
3. Предложение содержит буквы латинского и русского алфавитов. Написать
программу, которая выводит буквы только латинского алфавита в порядке их
следования в предложении.
4. Дано предложение-строка. Подсчитать количество слов, начинающихся с буквы 'а'.
5. Написать программу, подсчитывающую, сколько раз в данном слове х встречается
(в качестве его части) слово у.
6. Написать программу, которая каждый встречающийся в строке заданный символ
заменяет на заданную последовательность символов, расширяя при этом строку.
47
7. Задано предложение-строка. Написать программу, которая находит самое длинное
слово, встречающееся в предложении.
8. Написать программу, вычеркивающую из данного текста все буквы 'а'.
9. Написать программу, которая проверяет в строке баланс открывающихся и
закрывающихся круглых скобок (строка содержит арифметическое выражение).
10. Написать программу, которая каждую встреченную букву 'б' заменяет сочетанием
'ку'.
Лабораторная работа № 9. (2 ч.)
Тема: Процедуры пользователя. Описание и вызов процедуры.
1. Заданы два вектора х = (x1, x2, x3, x4), y = (y1, y2, y3, y4). Определить угол a между
векторами x и y по формуле:
Вычисление скалярного
произведения оформить в виде процедуры.
2. Четыре точки заданы своими координатами X(x1, x2), Y(y1, y2), Z(z1, z2), P(p1, p2).
Выяснить, какие из них находятся на максимальном расстоянии друг от друга и
вывести на печать значение этого расстояния. Вычисление расстояния между
двумя точками оформить в виде процедуры.
3. Четыре точки заданы своими координатами X(x1, x2, x3), Y(y1, y2, y3), Z(z1, z2, z3),
T(t1,t2, t3). Выяснить, какие из них находятся на минимальном расстоянии друг от
друга и вывести на печать значение этого расстояния. Вычисление расстояния
между двумя точками оформить в виде процедуры.
4. Три точки заданы своими координатами X(x1, x2), Y(y1, y2) и Z(z1, z2). Найти и
напечатать координаты точки, для которой угол между осью абсцисс и лучом,
соединяющим начало координат с точкой, минимальный. Вычисления оформить в
виде процедуры.
5. Задана окружность (x-a)2 + (y-b)2 = R2 и точки Р(р1, р2), F(f1, f1), L(l1,l2). Выяснить
и напечатать, сколько точек лежит внутри окружности. Проверку, лежит ли точка
внутри окружности, оформить в виде процедуры.
6. Заданы три матрицы А(первого порядка), В(второго порядка) и С(третьего
порядка). Выяснить и напечатать, сколько из них являются симметрическими.
(Матрица называется симметрической, если транспонированная матрица равна
исходной). Транспонирование матрицы оформить в виде процедуры.
7. Заданы матрицы А и В третьего порядка. Переменной S присвоить -1, если
максимальный элемент матрицы А больше максимального элемента матрицы В; 0
если максимальные элементы матрицы равны; 1, если максимальный элемент
матрицы А меньше максимального элемента матрицы В. Поиск максимального
элемента оформить в виде процедуры.
8. Заданы два вектора X(x1,x2,x3), Y(y1,y2,y3) и матрица А третьего порядка. Найти
сумму двух векторов c и d, где вектор с есть произведение вектора x на матрицу А,
а вектор d - произведение вектора на матрицу А. Вычисление произведения
вектора на матрицу оформить в виде процедуры.
9. Заданы три матрицы А (третьего порядка), В (второго порядка) и С (третьего
порядка). Найти максимальное из трех чисел x, y, z, где x - след матрицы А, у - след
матрицы В, z - след матрицы С. (Следом матрицы называется сумма элементов
главной диагонали). Вычисление следа матрицы оформить в виде процедуры.
10. Даны отрезки а, b, c и d. Для каждой тройки этих отрезков, из которой можно
построить треугольник, вывести на экран площадь данного треугольника.
Проверку существования треугольника оформить в виде процедуры.
Тема: Функции пользователя. Описание и вызов функции. Глобальные и локальные
параметры.
48
1. Даны действительные числа a, b, c. Получить:
2. Даны действительные числа a, b. Получить u = min(a, b-a), y = min(ab, a+b),
k = min(u+v2, 3.14).
3. Даны натуральные числа a, b, c. Определить функцию bin(x), переводящую число х
из десятичной системы счисления в двоичную. Найти bin(a + b), bin(ab + c).
4. Даны действительные числа s, t. Получить: g(1.2, s)+g(t, s)-g(2s - 1.5t), |g(ln(s, t+1))g(t, s)|, где
5. Даны действительные числа x, y. Получить: f(x, -2y, 1.17)+f(2.2, x, x-y),
tg(f(x+y, xy, y-x)+f(3.1, 1.4, y-sinx)), где
6. Даны натуральные числа a, b, c. Найти НОД(a, b, c), используя формулу:
НОД(a, b, c) = НОД((a, b), c).
7. Даны неотрицательные целые числа a, b. Найти F(a, b), где
(Определить вспомогательную функцию, вычисляющую
факториал).
8. Даны две квадратные матрицы A, B 3-го порядка. Построить таблицу функции y =
cx2 + d при х меняющемся от 0 до 1 с шагом 0.1, где с = sp(A), d = sp(B). (sp(A) след матрицы А - сумма элементов главной диагонали).
9. Даны два натуральных числа a, b. Найти разность и произведение суммы цифр
этих чисел. Вычисление суммы цифр числа оформить в виде функции.
10. Даны два натуральных числа a, b. Вычислить
Функция х!! Определяется следующим образом:
х!! = 1*3*5*...*х, если х нечетно,
х!! = 2*4*6*...*х, если х четно.
Лабораторная работа № 11. (2 ч.)
Тема: Записи.
1. Составить программу, выводящую на экран меню детского кафе (наименование
изделия, вес, стоимость).
2. Составить программу, выводящую на экран студенческую ведомость (Ф. И. О.,
оценки за три экзамена, средний балл).
3. Составить программу, выводящую на экран расписание движения поездов (станция
отправления, станция прибытия, время прибытия, время в пути).
4. Составить программу, выводящую на экран меню ресторана "Дракон"
(наименование изделия, вес, стоимость).
5. Составить программу, выводящую на экран анкетные данные учеников (Ф. И. О.,
год рождения, адрес, сведения о родителях).
6. Составить программу, выводящую на экран список книг домашней библиотеки
(автор, название книги, издательство, год издания, стоимость).
7. Составить программу, выводящую на экран расписание экзаменов и зачетов
(предмет, вид отчетности, число, преподаватель).
8. Составить программу, выводящую на экран сведения о студентах (Ф. И. О., курс,
группа, номер зачетки, средний балл).
49
9. Составить программу, выводящую на экран сведения о периодических изданиях
(наименование издания, тираж, годовая стоимость).
10. Составить программу, выводящую на экран расписание учителя (номер урока,
время начала урока, класс, предмет, номер кабинета).
Лабораторная работа № 12. (4 ч.)
Тема: Множества.
1. Дан текст-строка из латинских букв и других знаков. Подсчитать сколько букв,
сколько знаков.
2. Дан текст из цифр и строчных латинских букв. Определить, каких букв - гласных
(a, e, i, o, u) или согласных больше в этом тексте.
3. Дана строка, состоящая из букв и цифр. Получить две новые строки, одна из
которых содержит только буквы, другая только цифры.
4. Дан текст из строчных латинских букв и других знаков. Вычеркнуть из текста все
гласные буквы.
5. Дан текст из букв и знаков. Подсчитать общее количество цифр и знаков '+','-','*',
входящих в текст.
6. Дано 30 целых чисел от 1 до 20. Подсчитать, сколько среди них чисел, делящихся
на 3.
7. Дано 30 целых чисел от 1 до 30. Определить, сколько среди них четных чисел.
8. Дан текст-строка, состоящая из строчных латинских букв, цифр и знаков. Получить
новый текст, состоящий только из букв.
9. Дано 30 целых чисел от 1 до 50. Определить, сколько среди них чисел, первая
цифра которых 2.
10. Дана срока, состоящая из букв и цифр, и строка из цифр и других знаков. Получить
новую строку из символов первой строки, которых нет во второй.
50
ЗАДАНИЯ ДЛЯ САМОПРОВЕРКИ И ПОДГОТОВКИ К ЭКЗАМЕНУ
1. Среда программирования Турбо Паскаль.
2. Оператор присваивания.
3. Арифметические выражения.
4. Типы данных.
5. Стандартные функции и процедуры. Применение в простейших линейных программах.
6. Составной оператор. Пустой оператор.
7. Условный оператор.
8. Метки и операторы перехода.
9. Оператор ветвления for.
10. Оператор ветвления while.
11. Оператор ветвления repeat.. until.
12. Оператор выбора Case.
13. Массивы. Одномерные и многомерные массивы.
14. Задача нахождения минимального элемента массива.
15. Задача нахождения максимального элемента массива.
16. Сортировка массива методом пузырька.
17. Сортировка массива методом перестановок.
18. Сортировка массива методом вставок.
19. Порядковые типы (перечислимые типы).
20. Строки.
21. Структура размещения строки в памяти.
22. Строковые выражения. Операции отношения для строковых типов.
23. Процедуры, применяемые для обработки данных строкового типа.
24. Функции, применяемые для обработки данных строкового типа.
25. Процедуры пользователя. Описание и вызов процедуры.
26. Функции пользователя. Описание и вызов функции.
27. Глобальные и локальные параметры.
28. Множества. Операции сравнения множеств.
29. Операции создания новых множеств.
30. Записи.
31. Записи с вариантами.
32. Совместимость и преобразование типов.
51
Билеты к экзамену по дисциплине «Языки программирования»
Билет № 1
1. Этапы решения задач на компьютере.
2. Функции пользователя. Описание и вызов функции.
3. Задача.
Билет № 2
1. Среда программирования Турбо Паскаль.
2. Глобальные и локальные параметры.
3. Задача.
Билет № 3
1. Оператор присваивания.
2. Множества. Операции сравнения множеств.
3. Задача.
Билет № 4
1. Арифметические выражения.
2. Операции создания новых множеств.
3. Задача.
Билет № 5
1. Типы данных.
2. Записи.
3. Задача.
Билет № 6
1. Стандартные математические функции.
2. Записи с вариантами.
3. Задача.
Билет № 7
1. Составной оператор. Пустой оператор.
2. Нахождение минимального элемента массива.
3. Задача.
Билет № 8
1. Условный оператор.
2. Оператор повтора repeat …until.
3. Задача.
Билет № 9
1. Метки и операторы перехода.
2. Нахождение максимального элемента массива.
3. Задача.
Билет № 10
1. Оператор ветвления for. Пример.
2. Стандартные математические функции.
3. Задача.
52
Билет № 11
1. Оператор ветвления while. Пример.
2. Структурированные переменные.
3. Задача.
Билет № 12
1. Оператор ветвления repeat.. until. Пример.
2. Переменные типа Char.
3. Задача.
Билет № 13
1. Оператор выбора Case.
2. Переменные целочисленного типа и действительного типа.
3. Задача.
Билет № 14
1. Массивы. Одномерные и многомерные массивы.
2. Константы и переменные.
3. Задача.
Билет № 15
1. Задача нахождения минимального элемента массива.
2. Оператор выбора Case.
3. Задача.
Билет № 16
1. Задача нахождения максимального элемента массива.
2. Записи с вариантами.
3. Задача.
Билет № 17
1. Сортировка массива методом пузырька.
2. Записи.
3. Задача.
Билет № 18
1. Сортировка массива методом перестановок.
2. Операции создания новых множеств.
3. Задача.
Билет № 19
1. Сортировка массива методом вставок.
2. Множества. Операции сравнения множеств.
3. Задача.
Билет № 20
1. Перечислимые типы.
2. Глобальные и локальные параметры.
3. Задача.
Билет № 21
1. Строки.
2. Функции пользователя. Описание и вызов функции.
3. Задача.
53
Билет № 22
1. Структура размещения строки в памяти.
2. Процедуры пользователя. Описание и вызов процедуры.
3. Задача.
Билет № 23
1. Строковые выражения. Операции отношения для строковых типов.
2. Оператор ветвления while. Пример.
3. Задача.
Билет № 24
1. Процедуры, применяемые для обработки данных строкового типа.
2. Оператор ветвления repeat.. until. Пример.
3. Задача.
Билет № 25
1. Функции, применяемые для обработки данных строкового типа.
2. Оператор ветвления for. Пример.
3. Задача.
54
Download