Реферат: Практикум по программированию на языке паскаль
ГОСУДАРСТВЕННАЯ АКАДЕМИЯ НАУК
РОССИЙСКАЯ АКАДЕМИЯ ОБРАЗОВАНИЯ
ИНСТИТУТ ИНФОРМАТИЗАЦИИ ОБРАЗОВАНИЯ
Касторнов А.Ф., Касторнова В.А.
ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ НА ЯЗЫКЕ ПАСКАЛЬ
Учебно-методическое пособие
Москва, 2011
УДК
ББК
М
Касторнов А.Ф., Касторнова В.А. Практикум по программированию на языке паскаль. Учебно-методическое пособие. – М.: ИИО РАО, 2011. – 84 с.
Практикум посвящен реализации учебно-методической поддержки содержательной линии «Алгоритмизация и программирование» предмета «Информатика» для старшего звена средней образовательной школы на основе изучения программирования на языке Паскаль. В пособии рассматриваются основные понятия языков структурного программирования на примере языка Паскаль, описываются различные типы данных, набор операторов для реализации базовых алгоритмических структур, создание процедур и функций, программирование графики, приведены примеры разработки программ, имеются задания для проведения лабораторных работ.
^ Kastornov A.F., Kastornova V.A. The algorithmic programming language PASCAL practical work
This manual is dedicated to the creation of a subject “Informatics” educational methodical “Algorithmization & programming” substantial line supporting for the secondary school higher forms by the use of PASCAL programming studying. The main algorithmic programming languages concepts on an example of PASCAL are considered, different data types, operators sets for basic algorithmic structures, procedures and functions creating, graphics programming are described, programs examples and laboratory tests are given in this manual.
© Касторнов А.Ф., 2011
© Касторнова В.А., 2011
© ИИО РАО, 2011
ОГЛАВЛЕНИЕ
Предисловие 4
Общие указания к выполнению лабораторных работ 5
1.ПРОГРАММИРОВАНИЕ ЛИНЕЙНЫХ АЛГОРИТМОВ 6
1.1. Оператор присваивания и выражения 6
1.2. Операторы вызова процедур. Ввод/вывод данных 7
Лабораторная работа № 1 10
2. ПРОГРАММИРОВАНИЕ РАЗВЕТВЛЯЮЩИХСЯ АЛГОРИТМОВ 13
2.1. Составной и пустой операторы 13
2.2. Организация ветвлений. Операторы выбора 14
Лабораторная работа №2 18
3. ОРГАНИЗАЦИЯ ЦИКЛОВ 22
3.1. Оператор WHILE 22
3.2. Оператор REPEAT 23
3.3. Оператор FOR 24
Лабораторная работа № 3 26
4.ОРГАНИЗАЦИЯ ПОДПРОГРАММ. ПРОЦЕДУРЫ И ФУНКЦИИ. ПРОЦЕДУРЫ И ФУНКЦИИ 28
4.1. Процедуры и их типизация 29
4.2. Функции пользователя. Рекурсивные функции 37
Лабораторная работа №4 41
5. ОБРАБОТКА МАССИВОВ 44
5.1. Одномерные массивы 45
5.2. Многомерные массивы 47
5.3. Примеры работы с массивами 48
Лабораторная работа №5 49
6. ОБРАБОТКА СТРОКОВЫХ ВЕЛИЧИН 54
6.1. Тип данных CHAR 54
6.2. Массивы литер 56
6.3. Тип данных STRING 57
6.4. Строковые функции и процедуры 58
Лабораторная работа №6 61
7. ПРОГРАММИРОВАНИЕ ГРАФИКИ 64
7.1. Инициализация графического режима 64
7.2. Простейшие графические операторы (процедуры) языка TurboPascal 66
7.3. Основные приемы работы с графикой 70
Лабораторная работа №7 78
Литература 83
Предисловие
Настоящий практикум предназначен для профильного курса старшего звена средней образовательной школы по теме «Алгоритмизация и программирование», предусматривающего более глубокое изучение технологии процедурного программирования на основе языка Паскаль.
Пособие включает в себя выполнение 7 лабораторных работ, включающих в себя три работы на освоение построения линейных, разветвляющихся и циклических программ. В четвертой работе учащийся познакомится с подпрограммами, механизмом передачи параметров между подпрограммами, а также с рекурсивными функциями. Работа 5 посвящена изучению алгоритмов описания и обработки массивов. Здесь же приведены примеры реализации рассмотренных алгоритмов в Паскале. Обработка строковых величин рассмотрена в работе 6, где предусмотрено освоение работы со строкой как с единой последовательностью символов, так и со строкой, состоящей из слов. Способы обработки графических изображений средствами языка Паскаль (в среде TurboPascal) представлены в работе 7.
Выполнение лабораторных работ опирается на знание теории, вот почему каждая из объявленных выше тем курса предваряется необходимым теоретическим материалом, где помимо собственно теории имеются примеры ее использования при решении практических задач.
В каждой из семи тем практикума после изложения теории идут контрольные вопросы, ответы на которые могут служить неким тестом по готовности учащегося к выполнению практического задания. Само задание начинается с формулировки цели выполнения работы, а затем рассматриваются типичные примеры решения задач по этой теме. Конечно, при проведении лабораторных работ каждый ученик должен иметь свое собственное задание, однако мы ограничились только четырьмя вариантами, рассчитывая на то, что учитель, ориентируясь на приведенные в пособии примеры, можем сам «сгенерировать» недостающие варианты заданий.
Заметим, что пособие содержит довольно обширный материал по языку Паскаль и учитель может сам выбрать для изучения только те темы, которые интересны учащимся и самому учителю.
^ Общие указания к выполнению лабораторных работ
Основная цель при выполнении лабораторных работ - практическое освоение всех этапов разработки программ для решения задач, начиная от анализа условия задачи и заканчивая сдачей отчета по написанной программе.
Задание каждой лабораторной работы включает не менее двух задач и предусматривает следующие виды работ:
Анализ условия задачи и выработка подхода к ее решению.
Пошаговая разработка алгоритма решения и его описание.
Составление блок-схемы алгоритма.
Разработка программы на языке Паскаль.
Отладка программы и демонстрация правильной ее работы на выбранном наборе данных.
Подготовка к выполнению задания осуществляется во внеурочное время. Выполнив лабораторную работу, учащийся оформляет отчет, который должен включать:
Тема и цель работы.
Условия задания.
Схема алгоритма решения задачи:
- математическая модель задачи;
- блок схема алгоритма.
Анализ алгоритма.
Текст программы и размещение исходных данных при вводе.
Результаты выполнения программы.
Обоснование правильности разработанной программы.
Выводы.
При защите отчета проверяется правильность его выполнения, учащийся должен быть готов отвечать на контрольные вопросы и уметь пояснять как работу программы в целом, так и ее отдельных частей.
^ ПРОГРАММИРОВАНИЕ ЛИНЕЙНЫХ АЛГОРИТМОВ
Всякая Паскаль-программа есть последовательность операторов, которые подразделяются на простые и структурные. Каждый оператор имеет определенную структуру и записывается с использованием служебных слов и символов языка. Говорят, что оператор характеризуется своим синтаксисом и семантикой.
Синтаксис оператора есть правило его описания, которое может быть задано либо в виде общей формы записи оператора, либо в виде синтаксической диаграммы. Синтаксическая диаграмма помимо синтаксиса задает и семантику оператора, т.е. определяет те действия, которые заложены в этом операторе, и порядок выполнения этих действий. Для некоторых сложных операторов помимо синтаксической диаграммы необходимо давать дополнительные пояснения по их семантике.
Различают простые и структурные операторы. Простым оператором является оператор, не содержащий в себе других операторов. В простом операторе определяется, как правило, одно элементарное действие. В Паскале имеются три простых оператора: присваивания, вызова процедуры и перехода. Структурные операторы подразделяются, в свою очередь, на составные, условные, цикла и операторы над записями. Структурный оператор включает в себя другие операторы (как простые, так и составные). Существует несколько способов формирования структурных операторов, о которых речь пойдет в разделе «Структурные операторы».
^ 1.1. Оператор присваивания и выражения
Оператор присваивания относится к простым операторам. По этому оператору переменной присваивается значение выражения. Несмотря на кажущуюся простоту оператора присваивания, при его выполнении осуществляется целый набор элементарных действий:
переменные, находящиеся в выражении, получают свои значения;
вычисляется значение выражения;
переменной слева от знака присваивания «:=» присваивается полученное значение.
В простейшем случае, когда выражение задано константой или другой переменной, вычислений не производится и переменная сразу получает свое значение, например:
RAZN := A – 3.5;
N := 25; C := D; Y := 'программа';
L := true; P := X > 10.
В языке Паскаль существует несколько типов выражений: арифметические, литерные, логические (булевские). В этом пункте мы рассмотрим только арифметические выражения.
Арифметические выражения складываются из констант, переменных, стандартных функций с использованием скобок и знаков операций. В Паскале определены следующие операции над числами: * , / , + , – , DIV, MOD, где DIV – деление нацело; MOD – вычисление остатка от деления. Приоритеты:
*, /, DIV, MOD – высший;
+, – – низший.
Например:
A := 13 DIV 5; (результат: A = 2),
B := 13 MOD 5; (результат: B = 3).
Каждое арифметическое выражение может иметь типы INTEGER и REAL. Тип константы определяется самим видом константы, тип переменной задается в ее объявлении.
Тип арифметического выражения определяется по следующему правилу:
Для операций «*, +, -» результат имеет тип REAL, если хотя бы один из операндов имеет тип REAL. Если оба операнда типа INTEGER, то и результат имеет тип INTEGER.
Для «/» результат всегда имеет тип REAL.
Для «DIV, MOD» операнды и результат имеют тип INTEGER.
Значение переменной интервального типа, образованной на основе INTEGER, всегда имеет тип INTEGER. При использовании оператора присваивания нужно соблюдать типизацию объектов слева и справа от знака «:=». Смешение типов недопустимо за исключением случая, когда слева от знака «:=» стоит тип REAL, а справа – тип INTEGER.
^ 1.2. Операторы вызова процедур. Ввод/вывод данных
Оператор вызова процедуры определяет активизацию процедуры, обозначенную с помощью идентификатора (имени) процедуры. Другими словами, с помощью операторов этого типа осуществляется вызов процедур с указанием в них входных и выходных параметров (подробнее об этом будет сказано в разделе «Процедуры»). Мы начнем знакомство с операторами-процедурами на базе организации ввода/вывода данных в языке Паскаль.
Для организации ввода и вывода данных используются следующие встроенные (машинные) процедуры: READ, WRITE, READLN, WRITELN.
^ 1.2.1. Процедуры ввода READ и READLN
Процедура READ вызывается с помощью соответствующего оператора процедуры.
Общая форма записи оператора
READ (X,Y, ... , Z), где X,Y, ... , Z – переменные, называемые
списком ввода.
При выполнении процедуры READ работа программы приостанавливается, ЭВМ ждет ввода данных. Пользователь должен с клавиатуры ввести значения переменных, указанных в списке, отделяя их одним пробелом. Ввод завершается нажатием клавиши ENTER. Можно нажимать клавишу ввода и после набора каждого элемента ввода. В этом случае каждое нажатие клавиши ENTER осуществляет присваивание очередной переменной списка ввода ее значения, набранного с клавиатуры. По завершении ввода программа возобновляет свою работу.
Для лучшего понимания работы данной процедуры и ее умелого использования при задании значений нескольких переменных необходимо знать, что при вводе значений переменных (констант) с клавиатуры они сначала идут в буфер клавиатуры, а потом считываются в ячейки оперативной памяти, отведенные компилятором этим переменным. При считывании буфер очищается по принципу очереди (первым зашел – первым вышел). Это означает, что при вводе сразу нескольких констант и при последующем нажатии клавиши ENTER из буфера клавиатуры будет считано столько констант, сколько переменных в операторе READ, а остальные останутся в буфере. Если же в буфере клавиатуры после очередного считывания останутся еще константы, то при следующем операторе READ остановки работы программы не будет, и его переменные получат свои значения из буфера (если только в нем достаточно констант для всех переменных).
Например, пусть имеется фрагмент программы, включающий в себя два оператора READ:
......................
READ (A, B, C);
…………….
READ (D, E);
…………….
и пусть по первому оператору READ на клавиатуре набрано 5 констант. Тогда при работе второго READ останова работы программы не будет и переменные C и D получат значения последних двух ранее введенных констант. Если же ввести 4 константы, то второй оператор READ затребует еще одну константу с клавиатуры.
Вызов процедуры READLN имеет тот же синтаксис, что и оператор READ, однако ее работа отличается от работы первой процедуры. При однократном вводе констант отличий нет, а при одноразовом вводе нескольких констант происходит очистка буфера клавиатуры. Так, если в нашем примере заменить первый READ на READLN и тоже ввести сразу 5 констант, то второй оператор READ произведет остановку работы программы и затребует повторного ввода последних двух значений для переменных D и E. Заметим также, что оператор READLN используется преимущественно при вводе текстовых констант (READLN – read line – читать текст).
^ 1.2.2. Процедуры вывода WRITE и WRITELN
Процедуры вывода WRITE и WRITELN служат для вывода на экран констант (как числовых, так и текстовых), значений переменных и выражений. Они вызываются с помощью одноименных операторов вызова процедур, например:
WRITE ('программа', X, Y – Z * 3).
По этому оператору на экран будет выведено в одной строке слово «программа» и далее без пробелов значения переменной X и выражения Y – Z * 3. Например, если имеем X = -3, Y = -5, Z = 12, то на экран будет выведено: программа-3-41.
Чтобы отделить элементы вывода друг от друга, используется прием форматирования вывода. Так, WRITE (А:20) – одиночное форматирование – показывает, что значению переменной А отводится 20 позиций на экране монитора. Если в значение переменной А входит менее 20 символов, то они сдвигаются вправо, а слева строка заполняется пробелами.
Двойное форматирование используется только для вывода вещественных значений. Например, WRITE (C:17:7) означает, что для вывода значения переменной C отведено всего 17 позиций, из них 7 позиций предназначены для представления дробной части. Если формат не указан, то вещественные константы выводятся на экран в экспоненциальной форме. Заметим также, что форматировать в операторах WRITE можно не только переменные, но и выражения, например:
WRITE (cos (x + 4) : 5 : 2);
Работа оператора WRITE отличается от работы оператора WRITELN тем, что по завершении вывода у WRITE курсор остается в конце списка вывода, а у WRITELN он переходит на следующую строку. Часто используют оператор WRITELN без списка вывода для вывода на экран пустой строки.
Проиллюстрируем работу этих операторов на следующем примере:
program AVERAGE;
var FIRST, SECOND, TROIS, SUM: integer;
begin
writeln ('Введите 3 числа ');
readln (FIRST, SECOND, TROIS);
^ SUM := FIRST + SECOND + TROIS;
writeln ('Среднее значение ', FIRST:4,',',SECOND:4,',');
write (TROIS:4,' равно ';(SUM div 3):3)
end.
На экран будет выведено:
Введите 3 числа
2 12 9
Среднее значение 3, 12,
9 равно 8
^ Лабораторная работа № 1
Цель работы: выработать практические навыки использования системы программирования Borland Pascal или Delphi, научиться создавать, вводить, отправлять на выполнение и исправлять простейшие программы на языке Паскаль, познакомиться с диагностическими сообщениями компилятора об ошибках на примере программ, реализующих линейные алгоритмы.
^ Общие сведения
Линейным называется алгоритм, в котором результат получается путем однократного выполнения заданной последовательности действий при любых значениях исходных данных. Операторы программы выполняются последовательно, один за другим, в соответствии с их расположением в программе.
Перед выполнением работы необходимо ознакомиться с теоретическим материалом по темам «Описание языка Паскаль», «Простые операторы. Ввод/вывод данных».
Пример. Определить расстояние на плоскости между двумя точками с заданными координатами M1(x1,y1) и M2(x2,y2).
Решение задачи.
В этом примере проведем полный разбор решения задачи.
Математическая модель: расстояние на плоскости между двумя точками M1(x1,y1) и M2(x2,y2) высчитывается по формуле:
Составим блок-схему алгоритма, а затем уточним содержимое блоков "Вычисление расстояния" и "Вывод расстояния" (см. рис.1):
Рис. 1. Блок-схема алгоритма
Дальнейшая детализация не требуется. Переводим блок-схему на язык Паскаль, доработав программу, чтобы улучшить ее интерфейс:
program example1;
var x1, x2, y1, y2: Integer;
d:Real;
begin
Writeln('Эта программа вычисляет расстояние между двумя точками на плоскости');
Writeln('Введите координаты двух точек:');
Write('x1= '); Readln(x1);
Write('y1= '); Readln(y1);
Write('x2= '); Readln(x2);
Write('y2 ='); Readln(y2);
d:=sqrt(sqr(x2-x1)+sqr(y2-y1));
Writeln('d= ',d:6:2);
Writeln('нажмите Enter для завершения работы программы');
Readln;
end.
^ Варианты заданий
Задание 1. Даны x, y. Составить программу вычисления значения выражения:
a)
b)
c)
d)
Задание 2. Составить программу для решения следующей задачи:
Дана длина ребра куба. Найти объем куба и площадь его боковой поверхности.
Известна длина окружности. Найти площадь круга, ограниченного этой окружностью.
Вычислить высоту треугольника, опущенную на сторону а, по известным значениям длин его сторон a, b, c.
По данным сторонам прямоугольника вычислить его периметр, площадь и длину диагонали.
Задание 3. Вывести значение true, если приведенное высказывание для предложенных исходных данных является истинным, и значение false в противном случае (все числа, для которых не указано иное, являются действительными):
данное число x принадлежит отрезку [-a, a];
данное число x не принадлежит интервалу (a, b);
данное целое число x является нечетным;
данное число x является корнем уравнения: ax2+bx+c=0;
Дополнительные задания
Ученик начал решать задачи данного урока программирования, когда электронные часы показывали h1 часов и min1 минут, а закончил, когда было h2 часов и min2 минут. Составьте программу, позволяющую определить, сколько времени (в часах и минутах) ученик решал эти задачи.
Дано действительное число а. Не пользуясь никакими другими операциями, кроме умножения, получить: а) а4 за две операции; б) а6 за три операции; в) а7 за четыре операции; г) а8 за три операции.
Контрольные вопросы
Каковы назначение и возможности системы программирования?
Как запустить программу на трансляцию и выполнение?
Как обозначается начало и конец программы?
Из каких разделов состоит программа на языке Паскаль?
Как в языке Паскаль осуществляется вывод на экран?
Для чего предназначен оператор присваивания?
Как вывести на экран значение переменной?
^ 2. ПРОГРАММИРОВАНИЕ РАЗВЕТВЛЯЮЩИХСЯ АЛГОРИТМОВ
Структурные операторы строятся из других операторов по определенным правилам. Операторы, входящие в структурный оператор, выполняются последовательно – в составных операторах и операторах над записями, альтернативно – в условных операторах, многократно – в операторах цикла.
^ 2.1. Составной и пустой операторы
При формировании структурных операторов существуют некоторые ограничения на число входящих в него операторов. В частности, в операторе выбора IF (в школьном алгоритмическом языке команда «если») после служебного слова THEN (аналог – «то») может стоять только один оператор. Поэтому в Паскале возникла необходимость группирования операторов в единое целое – в один составной оператор.
Любая группа операторов, размещенных между словами BEGIN и END (иначе, операторные скобки), рассматривается как один – составной оператор. При выполнении составного оператора все его компоненты (операторы) выполняются в порядке их написания (линейно).
Составные операторы обрабатываются как единое целое, как один оператор, что имеет значение там, где синтаксис языка допускает использование только одного оператора. Это имеет место практически во всех структурных операторах. Примеры использования составных операторов будут рассмотрены в соответствующих разделах данного пособия.
Наряду с понятием «составной оператор» в языке существует специфическое понятие «пустой оператор». ^ Пустой оператор – это оператор, который не предусматривает выполнения никаких действий. Зачем он нужен? Действительно, если оператор не выполняет никаких действий, то стоит ли его писать? Однако практика показывает, что иногда полезно иметь такое средство, например, при выполнении искусственной задержки выполнения программы:
FOR I := 1 TO 10 000 DO;
При выполнении данного оператора машина переменной I последовательно присвоит значения от 1 до 10 000. В теле цикла нет операторов, значит, кроме увеличения значений переменной на 1 ничего не будет выполнено, однако время на это затрачивается, и, следовательно, некоторое время программа «висит» на данном операторе.
Существуют и другие примеры использования пустого оператора, когда по синтаксису оператор формально необходим, но никаких действий внутри него не производится.
^ 2.2. Организация ветвлений. Операторы выбора
В языке Паскаль алгоритмическая базовая конструкция выбора может быть реализована с помощью двух структурных операторов – IF и CASE, называемых операторами выбора. С их помощью можно выбрать для выполнения один из составных операторов (или ни одного оператора).
^ 2.2.1. Оператор ветвления IF
Оператор IF можно представить в общей форме записи как
IF <Условие> THEN <Оператор 1> ELSE <Оператор 2>,
где конструкция «Условие» есть логическое выражение, которое принимает два значения типа BOOLEAN: TRUE, FALSE (истинно или ложно).
Само логическое выражение складывается из операций сравнения: >, >=, <, <=, =, <>. Результат сравнения может быть TRUE или FALSE.
Логические выражения могут формироваться также и с помощью трех логических операций: NOT, AND, OR. Приоритеты всех используемых в Паскале операций таковы:
^ Высший: ( )
NOT *, /, DIV, MOD
AND
OR +, -
Низший: >, =, < , >=, <>, <=
В качестве условия может быть использована и логическая переменная, например:
I and J or K ---> (I and J) or K;
not X and Y ---> (not X) and Y, где I, J, K, X, Y – переменные типа BOOLEAN;
(A < B) or (B = 0), где A, B – переменные простого типа.
В операторе IF всегда за словами THEN и ELSE должен следовать один оператор. Этим оператором может быть не только оператор присваивания, но и любой другой. Если хотя бы один из них является снова оператором IF, то полученную конструкцию называют вложением.
П р и м е р :
IF <условие1> THEN <ветвь 1>
ELSE IF <условие2> THEN <ветвь 2>
ELSE <ветвь 3>;
Такое вложение используется для уменьшения числа необходимых проверок. Этот метод часто обеспечивает большую эффективность, чем составное условие, однако одновременно он уменьшает надежность программы. Не рекомендуется использовать более двух-трех уровней вложения IF. Вложения могут идти и после слова THEN.
Первый способ предпочтительнее, чем второй, так как конструкция THEN-IF менее удобна, чем ELSE-IF. С помощью конструкции ELSE-IF чаще всего осуществляется выбор одного из нескольких альтернативных вариантов. Заметим, однако, что иногда такое вложение можно заменить на последовательность операторов короткой формы IF-THEN. Это видно на следующем примере:
program QUARD;
var A, B, C : real; D : real;
begin
read (A, B, C); D := sqr (B) – 4 * A - C;
1-й вариант
2-й вариант
if D < 0 then write ('Не имеет корней');
if D < 0 then write ('Нет корней')
else if D = 0 then write ('Один корень')
if D = 0 then write ('Один корень');
if D > 0 then write ('Два корня');
else write ('Два корня');
end.
Рис. 2. Пример программы двух разных вложений
Однако в данном примере 2-й вариант более эффективен, так как имеет на одно сравнение меньше, и в случае D < 0 сразу же дает ответ, не делая последующих проверок.
В Паскале существует специальный оператор, позволяющий сделать выбор из нескольких альтернатив – множественное ветвление, или оператор варианта.
^ 2.2.2. Оператор варианта CASE
Оператор варианта состоит из выражения и списка операторов, каждому из которых предшествует одна или более констант, называемых константами выбора.
^ Общая форма записи
CASE <выражение> OF
константы: оператор;
....................
константы: оператор
ELSE <оператор>
END;
Выражение, стоящее между CASE и OF, называется селектором. Константы (значения выражения), предшествующие двоеточию, называются метками случаев. Порядок работы оператора: сначала вычисляется значение селектора, затем выполняется оператор, одна из меток которого совпадает со значением селектора. Все остальные операторы не выполняются, и управление передается следующему после END оператору. В случае короткой формы оператора CASE при несовпадении значения селектора (ключа) ни с одной из констант из списка никакой оператор не подлежит исполнению. Если же в операторе есть строка ELSE, то при несовпадении значения селектора ни с одной константой выполняется оператор, следующий за ELSE.
Выражение «селектор» может относиться к любому скалярному типу, кроме REAL. Метки случаев должны принадлежать тому же типу, что и селектор. Нежелательно, чтобы одна и та же метка появлялась более одного раза в операторе CASE. Если же это произойдет (компилятор не проверяет повторяемость меток), то выполнится тот оператор, который соответствует первому вхождению метки в список констант.
Оператор CASE особенно удобно использовать, во-первых, когда характер действий определяется значениями, которые не попадают в последовательно расположенные интервалы, во-вторых, когда нескольким дискретным значениям селектора соответствует одно и то же действие.
П р и м е р 1. Печать названия десятичных цифр.
program DICITS;
var DIGIT: integer;
begin
writeln ('Введите цифру');
readln (DIGIT);
case DIGIT of
0: writeln ('нуль');
1: writeln ('один');
..................
9: writeln ('девять');
else writeln ('это не цифра');
end;
end.
П р и м е р 2. Печать номера квартала года.
program NUMKVART;
var MESIATZ: 1..12;
begin
write ('Введите номер месяца года – ');
read (MESIATZ);
case MESIATZ of
1, 2, 3: writeln ('Первый квартал');
4, 5, 6: writeln ('Второй квартал');
7, 8, 9: writeln ('Третий квартал');
10, 11, 12: writeln ('Четвертый квартал');
end;
end.
Примечание. В операторе CASE формально нет условий как таковых, однако проверка условий осуществляется в неявном виде на предмет совпадения константы со значением селектора.
^ Лабораторная работа №2
Цель работы: научиться решать задачи на разветвляющиеся алгоритмы; научиться использовать в программах условный оператор if и оператор выбора case.
^ Общие сведения
Алгоритм называется разветвляющимся, если он содержит несколько ветвей, отличающихся друг от друга содержанием вычислений. Выход вычислительного процесса на ту или иную ветвь алгоритма определяется исходными данными задачи.
Перед выполнением работы необходимо ознакомиться с правилами записи логических выражений, операций сравнения, операторов if, case.
Пример. Дано действительное x. Для функции f, график которой представлен на рисунке, вычислить f(x).
Решение задачи.
Математическая модель: функция вычисляется по следующей формуле:
Составим схему алгоритма, детализировав все блоки (рис. 2).
Дальнейшая детализация не требуется. Переводим алгоритм на язык Паскаль.
Program example1;
var x, f:Real;
begin
Write('Введите x: '); Readln(x);
if x<-1 then f:= -x-1 else
if (x>=-1) and (x<0) then f:= x-1 else
if (x>=0) and (x<1) then f:= -x+1 else f:= x+1;
Writeln('F= ',f:6:2);
Readln;
end.
Рис. 3. Блок-схема ветвления в 4-х направлениях
Варианты заданий
Задание 1. Используя оператор if, вычислить заданное выражение для данных типа Integer:
а) b)
c) d)
Задание 2. Найти алгоритм решения задачи и реализовать его с помощью оператора (операторов) if-then-else:
Составить программу, реализующую эпизод сказки: машина спрашивает, куда пойдет герой, и в зависимости от ответа (налево – (-1), прямо – 0, направо – 1), печатает, что произойдет с героем.
Морской бой. Машина задумывает два числа от 0 до 9. Игрок пытается их угадать, вводя свои два числа. Если они совпали (в любом сочетании), то игрок выиграл.
В Атлантическом океане терпит бедствие пассажирский теплоход «Посудина». Все пассажиры будут спасены, если на помощь успеют два судна. Судно продержится на плаву t часов. Скорость судов-спасателей 40 узлов. Составить программу, определяющую спасутся ли пассажиры. Известны расстояния от трех судов-спасателей до тонущего судна.
Через старый мост движется поток автомашин. Одновременно на мосту могут находиться 3 машины. Если на мост въедут 3 легковых или 2 легковых и грузовик – мост выдержит. Если 2 грузовика и легковая или 3 грузовика – рухнет.
Задание 3. Используя оператор выбора, составить программы решения следующих задач.
По номеру дня недели вывести на печать рабочий это день или выходной, считая выходными субботу и воскресенье.
По номеру месяца указать, к какому времени года он относится.
По номеру месяца вывести на печать количество дней в нем.
Единицы массы пронумерованы следующим образом: 1 — килограмм, 2 — миллиграмм, 3 — грамм, 4 — тонна. Дан номер единицы массы и масса тела M в этих единицах (M - вещественное число). Вывести массу данного тела в килограммах.
^ Дополнительные задания
Даны действительные числа a, b, c, x, y. Выяснить, пройдет ли кирпич с ребрами a,b,c в прямоугольное отверстие со сторонами x и y. Просовывать кирпич в отверстие разрешается только так, чтобы каждое из его ребер было параллельно или перпендикулярно каждой из сторон отверстия.
Сможет ли шар радиуса R пройти в ромбообразное отверстие со стороной P и острым углом Q?
Контрольные вопросы
Какие операторы используются для программирования развилок?
Как выполняются операторы условного перехода?
Какую из функций: Sin(x), Abs(x), Trunc(x) можно заменить условным оператором if x<0 then x := -x?
Если выбор вариантов осуществляется из конечного числа элементов выбора, то лучше взять для этого оператор if или case?
Как заменить оператор case операторами if?
В чем преимущество оператора case от последовательности «коротких» операторов if?
Какой тип переменной можно использовать в качестве ключа оператора case?
0>^ 3. ОРГАНИЗАЦИЯ ЦИКЛОВ
Оператор цикла задает повторное выполнение определенных операторов. Для реализации циклов в Паскале предусмотрены три различных структурных оператора: WHILE, REPEAT, FOR. Первые два используются, если число повторений (итераций) заранее не определено, но известно условие завершения цикла. Оператор FOR применяется тогда, когда число повторений тела цикла известно заранее.
^ 3.1. Оператор WHILE
Этот оператор является наиболее мощным из всех трех, реализующих циклы. Два других оператора можно выразить с его помощью. Общий этого оператора:
WHILE <Условие> DO <Тело цикла>;
Логическое выражение, стоящее после WHILE, называется условием возобновления цикла и должно иметь булевский тип. Оператор, следующий за DO, является телом цикла. Он повторяется до тех пор, пока истинно условие возобновления цикла. Как только условие возобновления цикла становится ложным, управление переходит к оператору, стоящему за WHILE. Если условие возобновления не удовлетворяется до начала выполнения цикла, то тело цикла пропускается.
И
Оператор
з указанного описания видно, что оператор WHILE реализует базовую структуру «цикл-пока», так как здесь проверка условия идет до тела цикла. Поэтому оператор WHILE называют оператором цикла с предусловием.
П р и м е р . Даны числа A, B (A > 1). Получить все степени числа A, меньшие числа B.
program STEPENI;
var A, B, C: real;
begin
readln (A, B); C := A;
while C < B do
begin
writeln (C);
C := C*A;
end;
end.
Примечание. Грамотное использование оператора WHILE предполагает умение правильно написать условие возобновления цикла. Здесь надо иметь в виду следующие рекомендации:
В условии, как в логическом выражении, должны обязательно фигурировать переменные, изменяющие свои значения в теле цикла.
Во избежание зацикливания лучше сначала написать условие прекращения цикла и взять потом в операторе его отрицание.
Переменные логического выражения должны получить свои исходные значения до входа в оператор WHILE.
^ 3.2. Оператор REPEAT
Оператор REPEAT называют оператором цикла с постусловием, так как здесь выражение, управляющее повторным выполнением последовательности операторов, помещается после тела цикла:
^ REPEAT <Тело цикла> UNTIL <Условие>;
Из общего вида оператора видно, что в этом операторе не обязательно использовать для тела цикла операторные скобки. Здесь ключевые слова REPEAT и UNTIL сами играют роль этих скобок.
В этом операторе тело цикла выполняется до тех пор, пока ложно условие, стоящее после UNTIL. Условием выхода из цикла является истинность выражения. Мы видим, что это есть форма «цикла-до».
П р и м е р . Даны числа A, B (A > 1). Получить все степени числа A, меньшие числа B.
program STEPENI;
var A, B, C: real;
begin
readln (A, B); C := A;
repeat
writeln (C);
C := C*A;
until C >= B;
end.
Примечание. Между операторами WHILE и REPEAT существует три основных различия:
В операторе REPEAT проверка условия выхода из цикла выполняется в конце, а не в начале цикла, как в операторе WHILE, поэтому в операторе REPEAT тело цикла выполняется хотя бы один раз.
В REPEAT выход из цикла осуществляется по истинности условия, а в WHILE – по ложности.
В операторе WHILE тело цикла чаще всего имеет форму составного оператора, в операторе REPEAT для организации тела цикла операторные скобки не нужны.
^ 3.3. Оператор FOR
Оператор FOR предназначен для организации циклов, когда заранее известно, сколько раз должно повториться тело цикла. Здесь управление числом повторений осуществляется с помощью специальной переменной – параметра цикла (управляющей переменной), которой присваивается возрастающая (убывающая) последовательность значений. Оператор FOR имеет следующий вид:
FOR <Переменная>:= <Выражение 1> TO <Выражение 2> DO;
FOR<Переменная>:=<Выражение1>DOWNTO<Выражение1>DO;
Здесь «Переменная» есть параметр цикла, «Выражение 1» – начальное значение параметра, «Выражение 2» – его конечное значение. В качестве управляющей переменной должна быть переменная, объявленная локальной в блоке, который содержит данный оператор FOR. Управляющая переменная должна иметь ординальный тип. Начальное и конечное значения имеют тип, совместимый с типом параметра цикла.
Когда начинает выполняться оператор FOR, начальное и конечное значения определяются один раз, и эти значения сохраняются на протяжении всего выполнения оператора.
Оператор, который содержится в теле цикла, выполняется один раз для каждого значения управляющей переменной в диапазоне между начальным и конечным значениями. Управляющая переменная всегда инициализируется начальным значением. Она принимает все свои значения из диапазона с шагом 1, если TO, и с шагом -1, если DOWNTO.
В случае TO, если начальное значение превышает конечное, тело цикла не выполняется.
Для случая DOWNTO это имеет место, когда начальное значение меньше, чем конечное. Отсюда заключаем, что оператор цикла FOR реализует, как и WHILE, схему цикла «пока» – проверка условия повторения цикла идет до тела цикла.
Примечание.
Если тело цикла в этом операторе состоит из более одного опера
еще рефераты
Еще работы по разное
Реферат по разное
В. А. Давыденко программирование и основы алгоритмизации лабораторный практикум
17 Сентября 2013
Реферат по разное
М. П. Папуша М.: Институт Общегуманитарных Исследований, 2001 Терминологическая правка В. Данченко К.: Psylib, 2004 практикум
17 Сентября 2013
Реферат по разное
Уміти будувати діалог з урахуванням ситуації та учасників спілкування, дотримуватися норм етикету; переказувати прослухані або прочитані тексти
17 Сентября 2013
Реферат по разное
Приказ от № Директор школы: (Ёжикова М. С.) «Познай себя» 8 класс Срок реализации программы 1 год Автор: новикова е. В. /педагог-психолог
17 Сентября 2013