Программирование на языке Pascal
Система Турбо Паскаль для компьютеров. Транслятор, редактор, различные сервисные функции для работы с файлами, библиотеки. Структура программы в Паскале, вод и вывод данных, линейные программы. Условный оператор в программах на Паскале, обработка таблиц.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | методичка |
Язык | русский |
Дата добавления | 06.11.2015 |
Размер файла | 740,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РК
Методическое пособие
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ PASCAL
АЛМАТЫ
2004
Содержание
- Введение
- 1. Немного о работе в системе Турбо Паскаль
- 2. Переменная. Числа. Инструкция присваивания
- 3. Структура программы в Паскале. Ввод и вывод данных. Линейные программы
- 3.1 Условный оператор в программах на Паскале
- 3.2 Организация циклов
- 3.3 Массивы
- 4. Обработка таблиц. (двумерных массивов)
- 5. Оператор варианта. (выбора)
- 6. Подпрограммы
- 7. Рекурсия
- 8. Обработка строк в Паскале
- 9. Компьютерная графика
- 10. Записи. Обработка записей
- 11. Файлы. Работа с файлами в Паскале
- Литература
- Введение
- Ш Краткие теоретические сведения
- Ш Примеры программ
- Ш Задачи для самостоятельного решения
- Ш Вопросы для защиты лабораторных работ
Чтобы научиться программированию, надо писать программы, решать конкретные задачи. Изучать приведенные решения. Вводите их в свой компьютер. Не бойтесь экспериментировать - вносите изменения в программы. Чем больше работы вы проделаете самостоятельно, тем больше научитесь. Писать программы сначала лучше на бумаге, а уже затем вносить в компьютер. Задача считается решенной, если программа работает так, как сказано в условии задачи.
Задачи сгруппированы по темам и относятся практически ко всем разделам программирования: от объявления переменных и программ с линейной структурой до работы с графикой и файлами. Приведены решения наиболее часто встречающихся, а также интересных и трудных задач.
Приведенные примеры можно рассматривать как образцы оформления решения задач. Правильно оформленную программу легче отлаживать, кроме того, она производит хорошее впечатление. Для правильного оформления предполагается использовать: осмысленные имена переменных, констант, функций и процедур; отступы при записи инструкций; комментарии.
Цель методических указаний - помочь овладеть приемами программирования. Контрольные вопросы позволяют оценить уровень теоретических и практических умений.
- 1. Немного о работе в системе Турбо Паскаль
Система Турбо Паскаль разработана фирмой Borland для компьютеров IBM PC. Она включает в себя транслятор, редактор, различные сервисные функции для работы с файлами, библиотеки, позволяющие использовать в программе средства ввода-вывода операционной системы MS-DOS, построения изображений.
Создание программы. Каталог с библиотеками Турбо Паскаль, как правило, называется ТР, после этих букв указывается версия системы, например 5. В этом каталоге надо найти файл с именем turbo.еxе, подвести к нему курсор и нажать <Enter>. При запуске системы появляется окно редактора текстов программ (этот редактор можно использовать и как просто редактор текстов). Для входа в меню служит клавиша <F10>. Строка меню расположена вверху экрана, передвижение по ней производится клавишами управления курсором. Если экран пуст, то можно сразу набирать текст программы, делая такие же отступы, какие имеются в тексте книги. Эти отступы облегчают чтение текста и поиск ошибок. Если на экране после запуска системы находится ненужная программа, то следует войти в пункт меню File и выполнить команду New. Экран очищается, вверху появляется имя программного файла noname.pas (безымянная программа). Набор каждой строки программы завершается нажатием клавиши <Enter>. По уже имеющемуся тексту можно перемещаться с помощью клавиш управления курсором. В начало строки можно перейти с помощью клавиши <Ноme>, в конец строки -- клавишей <End>. Убрать ненужную строку можно нажатием комбинации клавиш <Ctrl> + <Y>, вставить -- нажатием <Enter> (курсор при этом должен находиться в конце строки, после которой производится вставка). Если произошел случайный разрыв строки (нажатием клавиши <Enter> в середине строки), то надо подвести курсор к концу верхней строки и нажать <Delete>. Нижняя строка при этом расположится на верхней строке. Нажимая <Delete> еще несколько раз, можно ликвидировать разрыв полностью.
Запуск программы. Для выполнения программы надо выйти в меню и в пункте Run выполнить команду Run. Система сначала запускает транслятор, который переводит программу с Паскаля на язык машинных кодов и ищет синтаксические ошибки в программе. Если они найдены, то программа не будет выполняться, произойдет возврат в редактор. Поверх текста программы появляется красное окно с сообщением типа ошибки. После нажатия клавиши <Esc> окно исчезает, курсор устанавливается в строку с ошибкой. Для получения подробной информации об ошибке надо нажать <Ctrl> + <F1>.
Когда все ошибки исправлены, программа начинает выполняться. Если в системе уже имеется программа с именем noname.pas, то выдается окно, где об этом сообщается. Чтобы имя осталось без изменений, нажимается <Enter> и появляется еще одно окно, в котором спрашивается, будет ли программа с таким именем записана поверх уже имеющейся. Если пользователь с этим соглашается, то он нажимает <Y> (yes -- да). Чтобы изменить имя программы, новое имя надо ввести в первом появившемся окне, стерев noname.pas и записав новое имя. После этого программа начинает выполняться.
Программу можно модифицировать и выполнять сколько угодно, раз. Для помещения в окно редактора программы, находящейся на диске, необходимо выполнить команду Load из пункта меню File (или нажать <F3>). При этом появляется окно, в котором или набирается имя файла, или нажимается <Enter>. В последнем случае появляется список файлов с расширением .pas и производится выбор файла.
Лабораторная работа №1
- 2. Переменная. Числа. Инструкция присваивания
- Цель работы: научиться записывать инструкции присваивания; особое внимание уделить понятию переменной, очень важного в программировании.
- Краткие теоретические сведения
В настоящее время в компьютерном мире существует множество языков программирования. Программу, выполняющую одни и те же действия, можно записать на разных языках. Но одним из наиболее популярных сегодня языков программирования является язык Паскаль. Он позволяет составлять программы для решения математических задач, обработки текстов, построения изображений на экране дисплея (позволяет использовать практически все возможности персонального компьютера). Создатель Паскаля -- Никлаус Вирт.
Как каждый язык, Паскаль имеет свой алфавит. В него входят латинские буквы, цифры от 0 до 9, специальные знаки (+, -, круглые, квадратные и фигурные скобки, точка, запятая и др.), а также служебные слова (из английского языка: (begin, end, for, while и др.). При написании программы для переменных величин вводятся обозначения, точно так же, как это делается для обозначения переменных в курсе алгебры. Такое обозначение в языках программирования называют именем величины. Имя в Паскале -- слово из букв, цифр и знаков подчеркивания, начинающееся с буквы. В качестве имени нельзя использовать служебные слова. Каждое имя соответствует некоторой ячейке памяти, куда записывается значение переменной величины. Поскольку в ячейку можно записать одно за другим сколько угодно данных, имя также называют переменной или именем переменной. Ячейка -- понятие условное, это последовательность разного количества байтов памяти для разных данных. Для целых чисел в Паскале требуется два байта, для действительных -- шесть. Любой символ клавиатуры занимает один байт. Поэтому для каждой переменной надо указать ее тип, чтобы транслятор знал, сколько места в памяти она будет занимать.
Числа в Паскале различаются как целые и действительные (вещественные). Целое число по внешнему виду такое же, как обычно: знак "+" можно не указывать. Вещественные числа, несмотря на одинаковое представление в памяти компьютера, могут иметь вид с фиксированной и с плавающей точкой. Числа с фиксированной точкой похожи на десятичные, только целая часть от дробной отделяется не запятой, а точкой: -7.23; 897.5.
При выполнении действий с числами с фиксированной точкой может получиться результат, целая часть которого содержит больше разрядов, чем объем ячейки памяти. Происходит, как принято говорить, переполнение ячейки памяти. Чтобы этого избежать, используют представление вещественных чисел с плавающей точкой. В этом случае число представляется в виде мантиссы и порядка. Мантисса -- это последовательность цифр, изображающих число, а порядок определяет положение точки в этой последовательности.
Например, десятичное число 243,7 может быть Представлено в виде:
243,7 = 2,437 * 102, или 243700 * 10-3 , или 0,002437 * 105 и т. д.
В этом примере 2437 -- мантисса числа, а цифры 2, - 3 или 5 - порядок (нетрудно увидеть, что это степень числа 10, которая меняется в зависимости от различных видов записи числа 243,7). В машинной записи число 243,7 будет выглядеть как 2.4376000000 Е+02,
Числа с плавающей точкой имеют громоздкий вид, они выводятся как результат работы программы. Однако их можно заменить на числа с фиксированной точкой. Если программа выдала вещественное число - 4.9876543234Е-02, то это тоже самое, что - 0,049876543234, т. е. десятичную точку надо сдвинуть влево на две позиции. Направление сдвига указано после буквы Е в записи числа: вправо, если после Е плюс, и влево, если минус.
Дли работы с числами используются шесть операций: "+" -- сложение, "-" -- вычитание, "/" -- деление, "*" -- умножение, mod -- нахождение остатка от деления и div -- деление нацело. Находить остаток от деления и делить нацело можно только целые числа.
Из имен, чисел, знаков арифметических действий и математических функций конструируются арифметические выражения. Для указания порядка действий используются только круглые скобки, их может быть несколько, главное, чтобы количество открывающих скобок равнялось количеству закрывающих. Математические функции Паскаля во многом совпадают с общепринятыми: sin(x), cos(x), ln(x). Для возведения аргумента в квадрат используется обозначение sqr(x), для извлечения квадратного корня sqrt(x), а модуль обозначается abs(x). В качестве аргумента каждой функции может быть арифметическое выражение. Пример арифметического выражения:
x/(1+sqr(x)/(5+x*sqr(x)))
математическая запись запись на Паскале
Оператор присваивания. Алгоритм преобразования данных на Паскале состоит из операторов -- укрупненных команд. Каждый оператор преобразуется специальной программой-транслятором в последовательность машинных команд. Основное преобразование данных, выполняемое компьютером, -- присваивание переменной нового значения. Общий вид оператора присваивания:
имя переменной: = арифметическое выражение;
В дальнейшем будет показано, что справа может стоять и выражение другого типа. Знак ":=" читается "присвоить". Точка с запятой в конце записи оператора является обязательной. При выполнении оператора присваивания рассматривается арифметическое выражение, из ячеек оперативной памяти, соответствующих стоящим там именам, вносятся в процессор значения и выполняются указанные действия над данными. Полученный результат записывается в ячейку памяти, имя которой указано слева от знака присваивания.
Примеры оператора присваивания:
х:= 3.14; {переменной x присвоить значение 3.14}
а:= b + с; {из ячеек b и с считываются заранее помещенные туда данные, вычисляется сумма, результат записывается в ячейку а}
i:= i + 1; {значение переменной увеличивается на единицу}
Для типов переменной слева и арифметического выражения справа от знака присваивания существуют ограничения:
1) если переменная слева вещественного типа, то арифметическое выражение может быть как целого, так и вещественного типа, т. е. содержать либо целые переменные и допустимые для них операции, либо вещественные, либо и те, и другие (тогда выражение преобразуется к вещественному типу);
2) если переменная слева целого типа, то арифметическое выражение только целочисленное.
Это означает, что можно, например, вещественной переменной присвоить целое значение. В памяти компьютера оно будет преобразовано к вещественному типу. В фигурных скобках рядом с оператором помещается комментарий его действий.
Методические указания по работе и задания
№ |
Условие задачи |
|
1 |
Объявить переменные для вычисления значений функции y=x2. |
|
2 |
Объявить переменные и записать в виде инструкции формулу для пересчета сопротивления электрической цепи из омов в килоомы. |
|
3 |
Объявить переменные и записать в виде инструкции формулу для вычисления объема цилиндра. |
|
4 |
Объявить переменные и записать в виде инструкции формулу для вычисления объема конуса. |
|
5 |
Объявить переменные и записать в виде инструкции формулу для пересчета веса из фунтов в килограммы (1 фунт = 409,5г.) |
|
6 |
Объявить переменные и записать в виде инструкции формулу для вычисления треугольника (привести разные способы) |
|
7 |
Объявить переменные и записать в виде инструкций формулу, для вычисления объёма полого цилиндра. |
|
8 |
Объявить переменные и записать в виде инструкции формулу для вычисления площади круга. |
|
9 |
Объявить переменные и записать в виде инструкции формулу для вычисления площади трапеции. |
|
10 |
Объявить переменные и записать в виде инструкции формулу для вычисления объема параллелепипеда. |
|
11 |
Объявить переменные и записать в виде инструкции формулу для вычисления площади прямоугольника. |
|
12 |
Объявить переменные и записать в виде инструкции формулу для вычисления функции y=-2,7x3+0,23x2-1,4. |
|
13 |
Объявить переменные и записать в виде инструкции формулу для вычисления площади поверхности шара. |
|
14 |
Объявить переменные и записать в виде инструкции формулу для пересчета расстояния из миль в метры. |
|
15 |
Объявить переменные и записать в виде инструкции формулу для вычисления стоимости покупки из нескольких тетрадей, карандашей и линейки |
|
16 |
Объявить переменные и записать в виде инструкции формулу для вычисления четырехугольника(привести разные способы) |
|
17 |
Объявить переменные и записать в виде инструкции формулу для вычисления площади четырехугольника. |
|
18 |
Объявить переменные для вычисления значений функции y=[x2]. |
|
19 |
Объявить переменные для вычисления значений функции y=x2*2tg2 |
|
20 |
Объявить переменные и записать в виде инструкции формулу для вычисления функции y=-6,5x9+0,32x3-5,4. |
|
21 |
Объявить переменные и записать в виде инструкции формулу для вычисления стоимости покупки из нескольких тетрадей, карандашей и линейки и ручек |
|
22 |
Объявить переменные и записать в виде инструкции формулу для пересчета расстояния из кг в гр. |
ВОПРОСЫ К ЗАЩИТЕ ЛАБОРАТОРНОЙ РАБОТЫ
1. Что входит в состав алфавита Паскаля?
2. Почему Паскаль различает целые и вещественные числа?
3. Что такое арифметическое выражение, из чего оно может состоять?
4. Как работает оператор присваивания?
5. Какие ограничения накладывает Паскаль на типы данных при присваивании?
6. Что понимают под понятием переменной в программировании?
7. Что такое транслятор?
8. Запишите на Паскале tg х, х4.
Лабораторная работа №2
- 3. Структура программы в Паскале. Ввод и вывод данных. Линейные программы
- Цель работы: усвоить назначения и использование операторов ввода данных и вывода результата, оформления программы на Паскале, освоение программы с линейной структурой, используемых, как правило, для реализации обычных вычислений по формулам.
- Краткие теоретические сведения
Программа на Паскале состоит из двух частей: описания используемых данных и операторов по их преобразованию. Вторая часть также называется программным блоком. Общий вид программы:
program (имя программы);
label (список меток);
const (список постоянных значений);
type (описания сложных типов данных);
var (описания данных программы);
begin (начало программного блока)
(алгоритм)
end. (конец программы)
Имя программы состоит не более чем из 8 знаков, начинается с буквы и содержит буквы, цифры и знаки подчеркивания. Программа начинается со слова program и заканчивается, словом end с точкой. Операторы, разделы и описания разделов заканчиваются точкой с запятой.
Описательная часть программы состоит из четырех разделов. Раздел меток label, раздел констант const и раздел типов type. Их использование будет рассмотрено в дальнейшем, по мере необходимости. Основным является раздел переменных var. В нем указываются имена переменных, используемых в программе, и их тип. Для числовых данных применяются основные описатели типов integer (целый) и real (вещественный). Например, в программе используются две целочисленные переменные и одна вещественная. Раздел переменных может иметь вид: var i,j: integer; x: real;
Имена переменных одного типа перечисляются через запятую, затем после двоеточия указывается их тип. Описание каждого типа заканчивается точкой с запятой. Когда при переводе на язык машинных кодов транслятор встречает описание переменной, он отводит для этой переменной ячейку памяти и ставит в соответствие имени переменной номер первого байта ячейки. Программный блок содержит операторы, описывающие алгоритм решения задачи.
Для сообщения данных компьютеру служат операторы ввода и вывода. Оператор ввода помещает вводимое значение переменной в отведенную для нее ячейку. Оператор ввода: read (список имен); . Оператор read (читать) останавливает работу программы и ждет; пока пользователь наберет на клавиатуре число и нажмет <Enter>. Введенное число помещается в оперативную память, в отведенную ячейку. Если список ввода содержит несколько имен, то для каждого надо ввести свое значение. Числа вводятся или через пробел, или через запятую, или нажатием клавиши <Enter>. Например: read (i, j); требует ввода двух целых чисел. После работы этого оператора курсор располагается за последним числом, но не переводится на новую строку. Для перевода курсора на новую строку экрана дисплея после ввода данных надо использовать оператор readln (список имен);
Для вывода результатов работы программы на экран дисплея служит оператор write (список вывода);. Оператор write (писать) выводит данные на экран дисплея. Список вывода -- перечисленные через запятую имена результатов или арифметические выражения, являющиеся результатом работы программы. Также в список вывода, для пояснения, входят заключенные в апострофы тексты. Например: write (x=``, x);. Этот оператор напечатает на экране, начиная с той позиции, где находится курсор, текст, заключенный между апострофами, и значение переменной х из оперативной памяти. Значение будет выведено в форме вещественного числа с плавающей точкой. Чтобы число было выведено в форме с фиксированной точкой, надо после имени соответствующей переменной указать два целых числа, отделив каждое двоеточием. Первое из этих чисел показывает, сколько позиций занимает число (включая десятичную точку и знак числа). Второе равно количеству цифр дробной части числа. Например, для печати числа --23.57 как значения переменной x, оператор печати примет вид: write (`x= `, x:6:2);.На экран будет выдано x=-23.57. Перевод курсора на новую строку осуществляется оператором пустого вывода writeln;. Если надо перевести курсор после печати, то применяется writeln (список вывода);
После вывода результатов работы программы на экран в Турбо Паскаль система так быстро возвращается в редактор текстов программы, что пользователь не успевает увидеть эти результате. Чтобы задержать изображение, в конце программы следует ставить оператор пустого ввода readln;
Например: Пусть требуется найти сумму, произведение и разность двух данных чисел. Для каждого из чисел надо придумать имя переменной и указать ее тип. Затем ввести эти числа в отведенные ячейки и, используя возможность оператора вывода содержать арифметическое выражение, напечатать результаты. program P1;
var a,b: real;
begin
write (`введите два числа через пробел, затем нажмите <Enter>`);
readln (a, b);
write (` a + b = `, a + b, `a*b = `, a*b, `a - b = `, a- b);
readln
end.
Служебные слова Паскаля, выделенные жирным шрифтом, при наборе текста программы на клавиатуре никак не выделяются, их различает транслятор (синоним -- компилятор). Поэтому служебные слова нельзя использовать в качестве имен. Первый оператор программного блока выводит на экран подсказку для пользователя -- что он должен сделать. Для ввода данных рекомендуется создавать подобные подсказки.
При решении задач имена присваиваются не только исходным данным, но и результатам, а также получаемым промежуточным значениям. Поскольку в рассматриваемом примере надо получить три результата, введем для них переменные x, у, z.. В программе этим переменным будут присвоены значения суммы, произведения и разности двух вводимых чисел.
program P2;
var a, b, x, y, z: real;
begin
write (`введите два числа через пробел, затем нажмите <Enter>`);
readln(а, b);
x = а + b;
y = а - b;
z = а - b;
write (`a + b = `, x, ` а * b = `, у, ` а - b = `, z);
readln
end.
Методические указания и задания к работе
№ |
Условие задачи |
|
1 |
Написать программу вычисления площади параллелограмма (площади поверхности параллелепипеда, площади поверхности цилиндра). |
|
2 |
Напишите программу вычисления площади треугольника, если известны координаты его вершин (формула Герона). |
|
3 |
Напишите программу возведения числа в седьмую степень за четыре операции. |
|
4 |
Написать программу вычисления объема куба (объема цилиндра, объема параллелепипеда). |
|
5 |
Напишите программу определения времени встречи двух автомобилей, если известно расстояние между двумя пунктами, откуда они вышли навстречу друг другу одновременно, а также их скорости. |
|
6 |
Написать программу пересчета расстояния из верст в километры (1верста=1066,8м), веса из фунтов в килограммы (1фунт=409,5 г). |
|
7 |
Написать программу вычисления сопротивления электрической цепи, состоящей из параллельно (последовательно) соединенных сопротивлений. |
|
8 |
Напишите программу вычисления площади круга, если известна длина окружности. |
|
9 |
Напишите программу вычисления площади и гипотенузы прямоугольного треугольника, если известны его катеты. |
|
10 |
Напишите программу вычисления суммы арифметической прогрессии, если известен ее начальный член и разность, а также количество ее членов. |
|
11 |
Напишите программу вычисления площади боковой поверхности куба. |
|
12 |
Напишите программу вычисления расстояния между двумя точками плоскости. |
|
13 |
Напишите программу вычисления среднего арифметического двух чисел. |
|
14 |
Напишите программу пересчета величины временного интервала, заданного в минутах, в величину, выраженную в часах и минутах. |
|
15 |
Напишите программу вычисления суммы модулей трех вещественных чисел. |
|
16 |
Напишите программу вычисления среднего арифметического трех чисел. |
ВОПРОСЫ К ЗАЩИТЕ ЛАБОРАТОРНОЙ РАБОТЫ
1. Для чего необходимо описывать данные в программе?
2. Как описать переменные одного типа, например вещественного?
3. Какой оператор используется для ввода данных? Как он работает?
4. Куда попадают введенные с клавиатуры числа при работе оператора ввода?
5. Как перевести курсор на новую строку после ввода данных?
6. Как вывести результаты работы программы на экран дисплея?
7. Как сделать, чтобы данные выводились с новой строки?
8. Как увидеть результаты вывода на экране дисплея, если уже сработал write?
9. Можно ли получить результат вычислений без использования оператора присваивания?
Лабораторная работа №3
- 3.1 Условный оператор в программах на Паскале
- Цель работы: приобрести навыки в решении задач с помощью условного оператора, усвоить назначение и правила его применения.
- Краткие теоретические сведения
Очень часто ход решения задачи в практике зависит от выполнения какого-либо условия.
Например: Требуется построить алгоритм вычисления значения функции
y=|x|. Она задается соотношением:
При решении этой задачи требуется выполнить следующие:
1) проверить больше или равен нулю x;
2) если x больше или равен 0, то присвоить y значение x (y:= x),
если x меньше 0, то присвоить у значение -x (у:=-x).
Коротко алгоритм решения этой задачи может быть записан так:
если x 0,
то у: = x,
иначе у: = -x
Эти команды называются командами ветвления (условным оператором)
Условный оператор может иметь две формы (структуры), представленные на рисунках 1 и 2. На рисунке 1 показана неполная форма условного оператора: действие выполняется только тогда, когда выполняется записанное в ромбе условие. В случае невыполнения условия происходит переход к следующему оператору (выход из структуры). На рисунке 2 изображена полная форма условного оператора: в случае выполнения условия (выход "+" из ромба) выполняется одно действие, в случае невыполнения (выход "--") -- другое действие. Каждая структура имеет один вход и один выход. Программу рекомендуется строить из последовательных, логически завершенных блоков, не допуская передачи управления из одного блока в другой. Такая программа содержит меньше ошибок при разработке, легче проверяется на правильность выполнения. Неполный условный оператор имеет вид:
IF условие THEN оператор;
Полный условный оператор:
IF условие THEN оператор_1 ELSE оператор_2;
Рис 1. Неполная форма условного оператора
Рис 2. Полная форма условного оператора
Если перевести на русский язык английские слова IF, THEN и ELSE, то вид условного оператора - ЕСЛИ условие, ТО оператор 1, ИНАЧЕ оператор 2;
В различных случаях после слов THEN и ELSE надо выполнить не один оператор, а несколько. Тогда эти операторы заключаются в так называемые операторные скобки, открывающая скобка которых -- слово BEGIN, а закрывающая -- слово END: begin
(операторы)
end;
Перед словом ELSE точка с запятой не ставится. В операторных скобках рекомендуется каждую пару BEGIN -- END записывать в одном столбце: так легче проверить соответствие каждой открывающей скобке закрывающую.
Примеры условного оператора:
if a < b then у: = х;
if х < 0 then х: = -х; {изменение знака переменной х}
if a + b < с then begin
z: = х; {обмен значениями переменными х и у}
х: = у;
у: = z
end;
В качестве выполняемого в условном операторе действия может быть другой условный оператор. Например:
if sqr (х) + sqr (у) > 1 then
if х > у then z: = 0
else z: = 1;
При такой форме записи, использующей сдвиг вправо для каждого внутреннего действия, легко понять, к какому из двух слов IF относится слово ELSE. Если этот оператор записать в одну строку, то ответ будет неоднозначным. Транслятор поступает следующим образом. Встретив сложную конструкцию из вложенных условных операторов, он анализирует ее с конца, приписывая последнее найденное ELSE первому встреченному при просмотре справа налево IF.
Пример программы: Пусть для двух целых чисел надо определить, являются они четными или нет. Для проверки четности используем условие: остаток от деления на 2 четного числа равен 0.
program P3;
var a, b: integer;
begin
writeln (`введите два целых числа'):
readln(a, b);
if a mod 2=0 then writeln (`a -- четное')
else writeln (`a -- нечетное');
if b mod 2=0 then writeln (`b -- четное')
else writeln (`b -- нечетное')
end.
Логические выражения. Алгоритм решения квадратного уравнения содержит проверку условия d < 0. Два значения, d и 0, связаны отношением < -- меньше. Если условие выполняется, то говорят, что соответствующее выражение истинно, если не выполняется -- выражение ложно. Речь идет о логическом выражении. Для построения сложных условий в Паскале имеются логические операции and (и), or (или) и not (не). Обозначив истинное значение через 1 и ложное через 0, построим таблицы истинности для этих операций.
X |
Y |
X and Y |
X |
Y |
X or Y |
X |
not X |
|
1 1 0 0 |
1 0 1 0 |
1 0 0 0 |
1 1 0 0 |
1 0 1 0 |
1 1 1 0 |
1 0 |
0 1 |
|
Рассмотрим примеры построения сложных логических выражений.
1. Пусть требуется определить, принадлежит ли точка с координатой х отрезку [а; b]. Если записать это условие двойным неравенством, то читать его надо так: х меньше либо равен b и больше либо равен a (а х b). Отношение "меньше либо равно" в Паскале записывается двумя знаками. Аналогично записывается и "больше либо равно". Однако в Паскале нельзя записывать двойное неравенство. Используя логическую операцию and (и), запишем:
(х a) and (х b)
Рис. 3
Отношения, между которыми стоит логическая операция, заключаются в круглые скобки.
2. Имеется прямоугольное отверстие со сторонами a и b и кирпич с ребрами х, у, z. Требуется составить условие прохождения кирпича в отверстие (рис. 3).
Кирпич пройдет в прямоугольное отверстие, если выполнится сложное условие: (а х) and (b y) or
(а у) and (b x) or
(а х) and (b z) or
(a z) and (b x) or
(a y) and (b z) or
(a z) and (b y)
Для трех граней шесть условий получается потому, что можно каждую грань повернуть на 90° и проверить для каждой грани два случая.
3. Определить принадлежность точки фигуре. Пусть фигура задана ограничивающими ее прямыми (рис.4). Для каждой прямой определим полуплоскость, в которой находится фигура - треугольник АВС. Полуплоскость задается неравенством.
Полуплоскость, находящаяся выше оси х определяется неравенством у > 0.
Полуплоскость, находящаяся справа от прямой, соединяющей точки (--1,0) и (0,2), задается неравенством у -- 2х -- 2 < 0.
Полуплоскость, находящаяся слева от прямой, соединяющей точки (1,0) и (0,2), задается неравенством у + 1х -- 2 < 0.
Условие принадлежности точки (х, у) фигуре:
(Y > 0) and (Y - 2*X - 2 < 0) and (Y + 2*X - 2 < 0)
4. Приведем пример программы определения существования треугольника со сторонами a, b и с. Условие существования треугольника известно из геометрии: сумма двух любых сторон должна быть больше третьей. Следовательно, для всех сторон условие "сумма двух больше третьей" должно выполняться.
program Р4;
var a, b, с: real;
begin
writeln (`введите длины трех сторон треугольника `);
readln(a. b, с);
write (`треугольник со сторонами `, а, b, с);
if (a + b > с) and (b + с > a) and (a + с > b)
then write (`существует')
else write (`не существует');
readln
end.
Методические указания по работе и задания
№ |
Условие задачи |
|
1 |
Проверьте, есть ли среди трех заданных чисел равные (вывести ответ "Да" или "Нет") |
|
2 |
В компьютер вводятся длины трех отрезков. Компьютер должен ответить на вопрос, существует или нет треугольник с такими сторонами. |
|
3 |
Даны три действительных числа. Выберите те из них, которые принадлежат отрезку [1;3]. |
|
4 |
Написать программу решения квадратного уравнения. Программа должна проверять правильность исходных данных. |
|
5 |
Вводятся значения двух переменных x и y, если значения обоих переменных положительные, то они заменяются значениями квадратного корня из них, иначе оба числа остаются прежними. |
|
6 |
Вычислите площадь кольца. Программа должна проверять правильность исходных данных. |
|
7 |
Даны действительные числа а, b и с. Удвойте эти числа, если они являются упорядоченными по возрастанию. |
|
8 |
Найдите решение уравнения ах + b = 0, если оно существует |
|
9 |
Если данное число х меньше нуля, то z присвойте значение большего из двух чисел х и у, иначе z присвойте значение полусуммы этих чисел. |
|
10 |
Выясните, попадает ли точка М(x, y) в круг радиусом r с центром в точке (x0,y0). |
|
11 |
Определить в каком квадранте находится точка с координатами x и y, и отпечатать номер квадрата. |
|
12 |
Даны три действительных числа. Найдите наибольшее значение из их суммы и произведения. |
|
13 |
Даны три числа а, b и с. Выясните, верно ли а < b < с. Ответ получите в текстовой форме: верно или неверно. |
|
14 |
Написать программу, которая вычисляет оптимальный вес пользователя, сравнивает его с реальным и выдает необходимые рекомендации поправиться или похудеть (оптимальный вес вычисляется по формуле: рост (в сантиметрах)100). |
|
15 |
Написать программу определения стоимости разговора по телефону с учетом скидки 20%, предоставляемой по субботам и воскресеньям (исходные данные длительность разговора - целое число минут, номер дня недели). |
|
16 |
Даны 4 действительных числа. Найдите наибольшее значение из их суммы и произведения. |
|
17 |
Даны 5 действительных числа. Найдите наибольшее значение из их суммы и произведения. |
|
18 |
Даны 6 действительных числа. Найдите наибольшее значение из их суммы и произведения. |
|
19 |
Если данное число х меньше нуля, то z присвойте значение большего из двух чисел х и у, иначе z присвойте значение полусуммы этих чисел. |
|
20 |
Даны действительные числа а, b и с,d. Удвойте эти числа, если они являются упорядоченными по возрастанию. |
|
21 |
Даны действительные числа а, b и с. Удвойте эти числа, если они являются упорядоченными по убыванию. |
|
22 |
Даны действительные числа а, b и с,d. Удвойте эти числа, если они являются упорядоченными по убыванию. |
ВОПРОСЫ К ЗАЩИТЕ ЛАБОРАТОРНОЙ РАБОТЫ
1. Как транслятор анализирует вложенные условные операторы?
2. Какие формы условного оператора вы знаете? Чем они отличаются?
3. Как работает неполный условный оператор?
4. Зачем при отладке программы нужно тестировать все ветви алгоритма?
5. Как проверить, является ли целое число нечетным?
6. Как выполняются логические операции и, или, не?
Лабораторная работа №4
- 3.2 Организация циклов
- Цель работы: приобрести навыки в составлении циклических программ, изучить назначение и правила использования операторов цикла.
- Краткие теоретические сведения
- В своей практической деятельности человек постоянно сталкивается с задачами, при решении которых требуется многократно повторять одни и те же действия, для решения таких задач используется команды повторения (цикла).
- Например. Пусть требуется определить остаток от деления числа М на число N (М и N -- произвольные натуральные числа). Самый простой способ решения этой задачи заключается в следующем: проверяем, не меньше ли М, чем N (если М < N, то М и есть остаток от деления М на N); если М N, то уменьшаем значение М на значение N (т.е. вычитаем из М число N и дальнейшие действия осуществляем с результатом этой операции, который для удобства мы снова обозначим М); снова проверяем, не стало ли М меньше N, если не стало, то еще раз уменьшаем значение М на величину значения N и т. д.
- Эти две операции (сравнения и вычитания) повторяются до тех пор, пока очередное значение М не станет меньше значения N. Значение М в этот момент и будет остатком от деления заданных вначале чисел.
- Как видно, в этом примере несколько раз повторяется одна и та же последовательность действий.
- Компьютер может заданное число раз выполнить одни и те же действия с разными данными. Повторяющиеся действия в программировании называются циклом. Если изобразить цикл в виде блок-схемы, то получатся две разные структуры (рис. 5). Цикл не может выполняться вечно, в этом случае нарушается свойство алгоритма решить задачу за конечное число шагов. Цикл заканчивается по какому-либо условию. Проверка этого условия может производиться в начале каждого повторяющегося шага, в этом случае цикл называется пока. При проверке условия в конце каждого шага цикл называется до. Разновидностью цикла до является цикл пересчет.
- Рис. 5. Циклические структуры
- В цикле пока сначала проверяется условие, и если оно выполняется, т. е. логическое выражение истинно, то выполняется оператор и снова проверяется условие. Записанное в цикле пока условие является условием продолжения цикла. Как только оно перестанет выполняться, цикл завершится. На рисунке 5 выход из ромба "+" (или да) означает выполнение условия цикла, "--" (или нет) -- невыполнение. Цикл пока не выполнится ни разу, если условие при входе в структуру оказалось ложным. Как правило, цикл пока содержит условие повторения, а цикл до -- условие окончания работы цикла. Обе структуры имеют один вход и один выход. Однако цикл до всегда выполняется хотя бы один раз, потому что условие проверяется после выполнения действия. Это затрудняет проверку правильности программы, поэтому лучше использовать цикл пока. Оператор в цикле может быть простым или составным, заключенным в операторные скобки. В этом случае в цикле могут повторяться несколько операторов, а не один. Повторяющиеся в цикле операторы называются телом цикла. Циклы можно организовывать, используя различные средства Паскаля.
- Оператор безусловного перехода. Этот оператор позволяет перейти без проверки условия либо на один из предыдущих операторов, либо на один из последующих, т. е. изменить порядок выполнения команд.
- Общий вид оператора: goto n;
- где п -- целое число, не более чем из четырех цифр, называемое меткой. Метка появляется в программе три раза: 1) в описательной части в разделе Label; 2) в операторе goto; 3) перед оператором, на который осуществляется безусловный переход, в этом случае метка от оператора отделяется двоеточием.
- Организация циклов с помощью операторов условного и безусловного переходов. Пусть требуется вычислить наибольший общий делитель двух натуральных чисел А и В. Воспользуемся алгоритмом Евклида: будем уменьшать каждый раз большее из чисел на величину меньшего до тех пор, пока оба числа не станут равны.
Система программирования Турбо Паскаль. Главные особенности языка С++. Составной и условный оператор в Паскале, алгоритм работы. Метка в Турбо Паскале. Счетный оператор цикла FOR. Описание логической структуры. Свойства функции PieSlice и initgraph.
курсовая работа [20,8 K], добавлен 23.12.2010Правила описания множественных типов данных, приемов использования множеств и операций над множествами в Паскаль-программах. Разработка в Турбо Паскале программы вывода всех согласных букв, которые входят хотя бы в одно слово заданного предложения.
контрольная работа [30,8 K], добавлен 25.12.2010Структура программы в Турбо Паскале и определение переменной в ней. Понятие идентификатора и его основные ограничения. Операторы присваивания в языке программирования. Процедура ввода-вывода информации. Способы описания массива, обработка его элементов.
контрольная работа [134,5 K], добавлен 28.09.2012Международный стандарт на язык программирования Паскаль. Приемы объектно-ориентированного программирования в Турбо Паскале. Символы языка, его алфавит. Этапы разработки программы. Понятие алгоритмов и алгоритмизации. Структура программ на Паскале.
курсовая работа [29,8 K], добавлен 28.02.2010Программирование на языке Паскаль: алфавит, решение задач, простейшие программы, разветвляющие программы, циклические программы, ввод-вывод, массивы, подпрограммы, строковые данные, записи, файлы, использование библиотеки CRT, графика в Паскале.
учебное пособие [211,1 K], добавлен 30.03.2008Основные сведения о системе программирования Турбо Паскаль. Структура программы на Паскале и ее компоненты. Особенности и элементы языка Турбо Паскаль. Порядок выполнения операций в арифметическом выражении, стандартные функции и оператор присваивания.
лекция [55,7 K], добавлен 21.05.2009Алгоритмы, алфавит языка, структура программы, написанной на Турбо Паскале. Целые, вещественные, логические, символьные типы данных, их совместимость. Линейные алгоритмы, пустой и составной операторы, простейший ввод и вывод, разветвляющиеся алгоритмы.
курсовая работа [49,8 K], добавлен 03.11.2009Особенности программирования на языке Паскаль в среде Турбо Паскаль. Линейные алгоритмы, процедуры и функции. Структура данных: массивы, строки, записи. Модульное программирование, прямая и косвенная рекурсия. Бинарный поиск, организация списков.
отчет по практике [913,8 K], добавлен 21.07.2012Понятие и принципы реализации оператора ветвления, его значение и роль в языке программирования Паскаль. Основные логические операции и сложные логические выражения, их содержание. Программа упорядочения значений двух переменных, ее этапы и методы.
презентация [187,9 K], добавлен 02.04.2014Основные сведения о языке программирования Pascal. Листинг программы с комментариями. Диагональ элементов вектора и матрицы. Использование команд ввода-вывода информации. Быстродействие выполнения программы при компиляции. Отражение процессов вычисления.
курсовая работа [1,9 M], добавлен 05.05.2009
Исходные данные |
Первый шаг |
Второй шаг |
Третий шаг |
НОД (А, В) = 5 |
|
А =25 |
А= 10 |
А =10 |
А=5 |
||
В= 15 |
В- 15 |
В=5 |
В=5 |
program P5;
label 1,2;
var a, b: integer;
begin
write (`введите два натуральных числа');
readln(a, b);
1: if a = b then goto 2;
if a > b then a: = a - b
else b: = b - a;
goto 1;
2: write (`НОД = `, a);
readln;
end.
Оператор цикла пока. Циклический процесс можно организовать без использования специальных операторов. Но удобнее с операторами цикла пока, который имеет вид: while условие do оператор;
и выполняется следующим образом: оператор (тело цикла) повторяется до тех пор, пока выполняется условие (истинно логическое выражение). Оператор может быть простым или составным, заключенным в операторные скобки begin ... end. Для алгоритма Евклида программа примет вид:
program P6;
var a, b: integer;
begin
write (`введите два натуральных числа');
readln (а, b):
while a<>b do
if a>b then a: = a - b
else b: = b - a;
write (`НОД = `, a);
readln;
end.
Оператор цикла до. Проверка условия в цикле до осуществляется после выполнения оператора. Если условие в цикле пока является условием продолжения повторений, то условие в цикле до -- условием выхода из цикла, его завершением. Поэтому для одной и той же задачи эти условия противоположны. Общий вид оператора: repeat оператор until условие;
Между словами repeat (повторить) и until (до тех пор пока) можно записать любое количество операторов без использования операторных скобок. Перед словом until не ставится точка с запятой.
Программа нахождения наибольшего общего делителя примет вид:
program P7;
var a, b: integer;
begin
write (`введите два натуральных числа');
readln(a, b);
repeat
if a > b then a: = a - b;
if b > a then b: = b - a
until a = b;
write (`НОД = `,a);
readln; end.
Операторы циклов пересчет. При выполнении программ нахождения наибольшего общего делителя число повторений различно для разных данных. Когда известно число повторений, удобно использовать цикл пересчет. В Паскале имеется два оператора для организации циклов пересчет: прямой и обратный. Прямой пересчет идет от известного меньшего числа до известного большего, на каждом шаге прибавляется единица (например, от 120 до 140: 121, 122, 123, .... 139, 140). Оператор прямого пересчета:
for i: = n1 to n2 do оператор;
читается как "для i начиная с n1 до n2 выполнить оператор".
Переменная i называется переменной цикла, она при прямом пересчете всегда меняется от меньшего значения до большего. При i = n1 цикл выполняется первый раз. Затем к значению переменной i добавляется единица и осуществляется проверка, не превысило ли полученное значение величину n2. Если i+1 n2, то оператор выполняется, если нет, то происходит выход из цикла и выполнение следующего по порядку оператора программы. Поскольку оператор цикла for сам изменяет значение переменной цикла, ее нельзя менять другими способами, например присваиванием ей какого-либо значения в теле цикла (она не должна появиться слева от знака ":= ").
Оператор в цикле может быть простым или составным, заключенным в операторные скобки. Оператор пересчет работает как цикл до, поэтому надо быть внимательным, оператор в теле цикла выполнится всегда хотя бы один раз. Рассмотрим примеры использования операторов цикла.
1. Пусть надо вычислить аn. Известно, что для получения целой степени п числа его надо умножить само на себя п раз. Это произведение при выполнении программы будет храниться в ячейке с именем р. Каждый раз, при очередном выполнении цикла, из этой ячейки будет считываться предыдущий результат, домножаться на основание степени а и снова записываться в ячейку р. Основной оператор в теле цикла повторяется п раз и имеет вид: р: = р * а;
При первом выполнении цикла в ячейке р должно находиться число, не влияющее на умножение, т. е. до цикла туда надо записать единицу.
Программа имеет вид:
Выполнение программы |
||
а = 2 п = 5 |
||
I |
P |
|
1 |
||
1 |
2 |
|
2 |
4 |
|
3 |
8 |
|
4 |
16 |
|
5 |
32 |
program P8;
var a, p: real; i, n: integer;
begin
write (`введите a -- основание степени, а = `);
readln (a);
write (`введите целое n -- показатель степени, n = `);
readln(n);
p:= 1;
for i: = 1 to n do
p: = p * a;
write (`p = `, p);
readln
end.
Перед текстом программы представлен протокол ее выполнения при возведении числа 2 в пятую степень. Таблица заполнена вручную, процесс ее заполнения называется отладкой программы. Отладка -- это проверка всех этапов работы программы. Для сложных задач сначала составляется контрольный пример (тест) и программа выполняется человеком, который выполняет каждый оператор так, как его выполняет компьютер. Затем программу выполняет компьютер и сверяются все промежуточные, полученные при счете данные и конечные результаты. Только после полного совпадения программа выполняется с реальными данными. Для понимания работы программы, выполнения отдельных операторов полезно заполнять подобные протоколы для всех учебных задач.
2. Вычисление
р = n! (n факториал).
По определению п!= 1 * 2 * 3 * ... * n. Используя предыдущую программу, вычислим р как произведение чисел от 1 до n, т. е. р каждый раз умножается не на одно и то же число, а на значение переменной цикла.
program P9;
var p, i, n: integer;
begin
write (`введите целое n = `);
readln(n);
p= 1;
for i: = 1 to n do
p: = p* i;
write (n,'! = `,p);
readln
end.
3. Составление таблицы значений функции у = sin x. Пусть требуется составить таблицу значений функции на отрезке [0;3.14] с шагом 0,1. Чтобы не определять количество повторений вычислений, можно воспользоваться циклом пока. Используя вывод вещественных чисел с фиксированной точкой, определим, что количество цифр после запятой в значении функции будет равно 5. Тогда все число, учитывая область значений синуса, займет семь позиций (числа положительные, значит, добавится позиция для десятичной точки и целой части числа).
Программа имеет вид:
program P10;
var x, у: real;
begin
x: = 0;
writeln (`x' : 10,'sin x' : 10);
while x< =3.14 do
begin
y: = sin(x);
writeln (x : 10,' `,y : 7 : 5);
x: = x+ 0.1
end;
readln
end.
При каждом выполнении цикла будет сначала проверяться условие (x 3.14), затем вычисляться значение функции, печататься аргумент х (для него отведено десять позиций, из них одна -- для цифры дробной части) и, через три пробела, -- значение функции. Для следующего шага цикла вычисляется новое значение аргумента (х увеличится на 0,1). Цикл пока позволяет изменять переменную цикла как угодно, увеличивая ее или уменьшая на любое число.
4. Суммирование чисел. При суммировании, как и при умножении нескольких чисел, необходимо накапливать результат в некоторой ячейке памяти, каждый раз считывая из этой ячейки предыдущее значение суммы и увеличивая его на очередное слагаемое. Пусть известно, что будет складываться n чисел.
В этом случае надо n раз выполнить действие s: = s + а; здесь a -- очередное число, вводимое с клавиатуры. Для первого выполнения этого оператора присваивания надо из ячейки с именем s взять такое число, которое не повлияло бы на результат сложения. С
ледовательно, прежде чем начать выполнять цикл, надо поместить в эту ячейку (или, что то же самое, присвоить переменной s) число нуль. Программа имеет вид:
program Р11;
var a, s: real; i, n: integer;
begin
write (`введите количество слагаемых n = `);
readln(n);
s: = 0;
for i: = 1 to n do
begin
write (i,'- oe число - `);
readln(a);
s: = s + a
end;
write (`сумма s = `,s);
readln
end.
Если количество чисел неизвестно, то можно задать число-ограничитель, например нуль. В таком случае используется цикл while или repeat.
s:=0; s:=0;
readln(а); repeat
while а <> 0 do readln(a);
begin s: = s + a; s: = s + a
readln(a) until a = 0;
end;
Оператор цикла обратный пересчет работает аналогично оператору цикла прямого пересчета, только переменная цикла не возрастает с каждым шагом на единицу, а на единицу убывает. Оператор имеет вид:
for i: = n2 downto nl do оператор;
Для этого оператора должно также выполняться п2 > nl.
При использовании в программе операторов цикла необходимо соблюдать следующие правила:
-- внутри цикла может находиться другой цикл, но необходимо, чтобы циклы имели разные переменные и внутренний цикл полностью находился в теле внешнего цикла;
-- нельзя передавать управление в тело цикла, минуя заголовок (это значит, что метка и оператор goto с этой меткой должны находиться в теле цикла);
-- если требуется обойти группу операторов в теле цикла и продолжить цикл, т. е. выполнить его следующий шаг, то надо передать управление на замыкающий цикл end;
-- можно досрочно выйти из цикла, или используя оператор goto, или изменив параметр условия в операторах while и repeat так, чтобы цикл больше не выполнялся.
Методические указания по работе и задания
№ |
Условие задачи |
|
1 |
Для различных вводимых с клавиатуры целых чисел найдите сумму положительных нечетных. |