АЛМАТИНСКИЙ ИНСТИТУТ ЭНЕРГЕТИКИ И СВЯЗИ
Кафедра инженерной кибернетики
УТВЕРЖДАЮ
Проректор
по учебно-методической работе
____________________Э.А.
Сериков
«___»__________2005
г.
ИНФОРМАТИКА.
Язык Turbo Pascal
Часть 3
Методические указания к
выполнению лабораторных работ
(для студентов всех
специальностей)
СОГЛАСОВАНО Рассмотрено и одобрено на
Начальник УМО заседание кафедры ИК
____________О.З.Рутгайзер Протокол №
4 от «29»декабря 2004 г.
«___»______2005 г. Зав. кафедрой __________Б.Д.Хисаров
Редактор Составители:
________________ ____________Г.А.Мастекбаева
«___»______2005 г.
____________Н.В.Сябина
Алматы 2005
СОСТАВИТЕЛИ: Г.А.Мастекбаева, Н.В.Сябина.
Информатика. Язык Turbo Pascal. Часть 3. Методические указания к выполнению
лабораторных работ (для студентов всех специальностей). - Алматы: АИЭС, 2005.-
29 с.
Методические указания по дисциплине «Информатика» состоят из 4 частей: части 1 и 2 – содержат методические указания по работе с операционной системой Windows, офисными программами MS Word, MS Excel, MS Access, графическим редактором CorelDraw и Интернетом. Части 3 и 4 посвящены основам программирования на языке Turbo Pascal.
Методические указания (часть 3) предназначены для получения навыков программирования алгоритмов различных структур и содержат три лабораторных работы: «Программирование алгоритмов линейной структуры», «Программирование алгоритмов разветвленной структуры» и «Программирование алгоритмов циклической структуры».
В каждой лабораторной работе излагаются необходимые
для ее выполнения теоретические сведения, которые подкрепляются конкретными примерами и сопровождаются необходимыми
комментариями, а также предлагаются варианты заданий и контрольные
вопросы. В приложениях содержится весь
необходимый справочный материал.
Методические указания предназначены для студентов всех специальностей.
Ил. 7, табл.
7, библиогр. – 5 назв.
Рецензент:
канд. техн. наук, доц. Л.К.Ибраева.
Печатается по плану издания Алматинского института энергетики
и связи на 2004 г.
© Алматинский институт энергетики и связи, 2005 г.
Введение
Важнейшую роль в курсе информатики играет формирование
у студентов алгоритмического стиля мышления, который выступает не только как
стимулятор общего развития, но и позволяет ввести их в сложный мир новых
информационных технологий. Без программирования развитие алгоритмического
мышления практически невозможно, так как отсутствует возможность компьютерного
эксперимента: проверки работоспособности разработанного алгоритма.
Взаимодействие человека с ЭВМ носит характер общения, поэтому возникли и широко
используются различные специальные языки программирования как средство общения
человека с компьютером.
Язык Pascal был
разработан в начале 70-х годов ХХ века швейцарским профессором Никлаусом Виртом
как инструмент для систематического обучения программированию. Для этого в
состав языка были включены элементы структурного программирования
(последовательные, разветвляющиеся и циклические структуры) и структуры данных
(массивы, записи, файлы и т.д.). В 1983 году французский математик Филипп Кан
разработал компактный, быстродействующий компилятор, названный Турбо Паскалем.
В 1992 году фирма Borland International выпустила в свет очередную версию языка Турбо Паскаль
7.0 с улучшенным интерфейсом пользователя и более быстрым компилятором.
Принципы построения программ, заложенные в Паскале, получили развитие в таких
языках программирования, как Ада, Модула-2, Си и т.д. Турбо Паскаль не только
обеспечивает возможность создания больших программ, поддерживая их строгую
логическую структуру, что весьма ценно для начинающих программистов, создающих
серьезные программы, так как приучает их к определенной дисциплине. Кроме того,
Паскаль считается достаточно простым и эффективным инструментом для решения
инженерных задач.
Предлагаемые методические указания к выполнению
лабораторных работ (части 3 и 4) разработаны в помощь первокурсникам для
самостоятельного освоения одного из важнейших разделов курса информатики
«Алгоритмизация и программирование». Изложение основных вопросов
программирования подкрепляется конкретными примерами и сопровождается
необходимыми комментариями. В приложениях содержится весь необходимый
справочный материал. Для достижения наилучшего результата при изучении
изложенного материала необходимо придерживаться следующих общих требований и
рекомендаций по выполнению лабораторных работ:
- при подготовке к лабораторным работам и в процессе
их выполнения студенты приобретают навыки построения блок-схем и практического
программирования, учатся эффективно использовать операторы языка, а также
анализировать полученные результаты;
- перед выполнением лабораторной работы студент обязан
внимательно ознакомиться с ее описанием, изучить предлагаемый теоретический
материал (при необходимости следует обратиться к дополнительным источникам
информации) и подготовить бланк отчета, включающий титульный лист установленной
формы, цель работы, текст варианта задания, соответствующие блок-схему, листинг
программы и ответы на контрольные вопросы. Вариант задания выдается преподавателем.
Студенты, неподготовленные к работе, к выполнению лабораторной не допускаются;
- в процессе выполнения работы непосредственно на
компьютере студент должен проанализировать полученные результаты и внести
данные в таблицы регистрации результатов заключительного отчета по лабораторной
работе. Отчет утверждается преподавателем, и, если он не соответствует
установленным требованиям, отчет возвращается студенту для доработки;
- защита лабораторной работы осуществляется только
после того, как преподаватель утвердит представленный студентом отчет по
работе. Форма защиты лабораторных работ выбирается по усмотрению преподавателя
в соответствии с рекомендациями кафедры.
1 Лабораторная работа №1. Программирование алгоритмов
линейной структуры
Цель работы – ознакомление с правилами построения алгоритмов, структурой программы на языке Паскаль, правилами записи арифметических выражений, особенностями программирования алгоритмов линейной структуры с использованием оператора присваивания, процедур ввода и вывода данных.
1.1 Алгоритм и блок-схема
При решении задач на ЭВМ производится подготовительная работа, включающая в себя следующие этапы: математическая формулировка задачи, разработка алгоритма решения, запись программы и подготовка исходных данных. Если математическая формулировка задачи есть, то можно сразу начать с разработки алгоритма.
Алгоритм – это формальное описание способа решения задачи путем разбиения ее на конечную по времени последовательность действий (этапов), понятных исполнителю. При этом должны быть четко указаны как содержание каждого этапа, так и порядок выполнения этапов. Отдельный этап алгоритма либо представляет собой другую, более простую задачу, алгоритм которой разработан ранее, либо должен быть достаточно простым и понятным без пояснений. Наиболее распространенный вид алгоритма – графический - выполняется в виде блок-схемы – совокупности геометрических фигур (блоков), связанных между собой при помощи стрелок. Все формулы в блок-схеме записываются на языке математики, а не конкретном языке программирования. В таблице А1 приведены наиболее используемые виды блоков. Блок-схемы выполняются в соответствии с ГОСТом 19.701-90, ЕСПД, но для упрощения записи их можно строго не соблюдать. Любой алгоритм синтезируют из типовых элементов: алгоритмов линейной, разветвляющейся и циклической структуры.
1.2 Особенности
языка Турбо Паскаль и структура программы
К основным особенностям Турбо Паскаль можно отнести довольно строгие требования к структуре программы. Программа на языке Паскаль записывается в виде последовательности символов, к числу которых относятся латинские буквы, арабские цифры, знаки препинания, знаки операций. Для обозначения исходных данных и результатов вычислений (промежуточных и итоговых) употребляются переменные, имена (идентификаторы) которых могут быть не только буквами - a, b, X, Y и т.д., но и последовательностью символов вида x1, time, alfa2 и т.д., которые состоят из букв и цифр и начинаются с буквы. Ключевые слова – это множество имен, которые используются в языке для написания операторов и других конструкций. Имена, применяемые пользователем для обозначения конструкции, не должны совпадать с ключевыми словами. Список зарезервированных слов и перечень операций языка приведены в таблицах Б1 и Б2. Соответствующее исходное данное или результат вычисления называется значением переменной. Константы отличаются от переменной тем, что их значения не меняются в ходе выполнения программы. Числа записываются в десятичной системе, вместо запятой ставится точка: 0, -19, 0.27, 3.1415 и т.д.
К основным типам данных
языка Паскаль относятся: вещественный (Real),
целочисленный (Integer), логический (Boolean) и
литерный (Char). Целые числа и числа с
плавающей точкой могут быть представлены в различных формах (таблица Б3).
Структура простейшей программы
на Паскале приведена в таблице В1. В описательной части задается имя программы,
все метки и константы, которые будут использоваться в программе, а также
идентификаторы и тип переменных. Главной частью программы является ее
исполнительная часть, то есть последовательность инструкций, которую должен
выполнить компьютер. Эти инструкции принято называть операторами.
Более сложные арифметические выражения строятся из операндов (констант и переменных), соединенных знаками арифметических операций. Кроме того, в выражении могут быть использованы круглые скобки и функции (таблица В2). Результатом расчета арифметического выражения является число. При составлении арифметических выражений должны соблюдаться следующие правила:
-
два
знака арифметических операций не должны стоять рядом;
-
при
вычислении значений арифметических выражений действуют правила старшинства
операций: указатели функций; умножение и деление слева направо; сложение и вычитание слева направо; круглые
скобки изменяют этот естественный порядок, то есть старшим действием является
действие в скобках.
1.3 Алгоритмы
линейной структуры и используемые в них операторы
Алгоритм называется линейным, если все операции в нем выполняются последовательно, друг
за другом.
Оператор
присваивания
позволяет изменить текущее значение переменной. Вид оператора приведен в
таблице Г1. Вычисляется выражение, стоящее справа от знака ":=" ("присвоить"),
полученный результат присваивается переменной, стоящей в левой части оператора.
При этом старое значение, хранившееся в ней, безвозвратно пропадает. Например, Р:= 5; (в переменную Р запишется число
5).
Для ввода данных и вывода
результатов используются процедуры ввода и вывода (таблица Г1). Существуют форматный и бесформатный способы вывода.
1.4 Пример алгоритма и программы линейной
структуры
Даны переменные a и b. Найти .
При составлении алгоритма необходимо выделить
однотипные выражения (здесь a2+b2), которые достаточно посчитать один раз, а затем
использовать результат вычислений. Желательно разбить сложные вычисления одного
выражения на более простые (например, отдельно вычислить числитель и
знаменатель дроби) для того, чтобы в алгоритме не было громоздких формул. На
рисунке 1.1 представлен вариант блок-схемы алгоритма и программа.
|
Program Primer1; Var a,b,c,z:real; Begin Write ('Введите a и b'); Read (a, b); C := sqr(a) + sqr(b); z := sqrt (sqrt(c)) + sin(c) –
1/с; Write('Z=', z:10:3) End. |
Рисунок 1.1 - Блок-схема алгоритма и программа линейной структуры
Вычисление значения Z производится в
следующей последовательности:
а) в блоке 2 вводятся исходные данные – значения a и b;
б) в блоке 3 вычисляется
арифметическое выражение a2+b2, и результат запоминается в
переменной c;
в) в блоках 4-6 вычисляются
первое слагаемое, числитель и знаменатель второго слагаемого;
г) в блоке 7 производится окончательный расчет Z;
д) в блоке 8 выводятся исходные данные и результат.
В программе действия блоков
3-7 записываются операторами присваивания, блоки 2 и 8 реализуются операторами
ввода/вывода. Ввод осуществляется с запросом, поэтому сначала записан оператор Write, а затем Read. Вывод
осуществляется форматным способом. Все переменные, участвующие в программе,
объявляются в разделе Var
ее описательной части.
1.5 Варианты заданий
Составить блок-схему и программу вычисления
значений функции при заданных значениях аргумента.
1.
. |
2.
. |
3. . |
4.
. |
5. . |
6.
. |
7. . |
8.
. |
9. . |
10. . |
11.
. |
12.
. |
13.
. |
14.
. |
15.
. |
16.
. |
17.
. |
18. . |
19.
. |
20.
. |
21.
. |
22. . |
23. . |
24.
. |
25.
. |
26.
. |
27.
. |
28.
. |
29.
. |
30.
. |
1.6 Контрольные вопросы
1.6.1 Назовите основные этапы подготовки и решения задач на ПК.
1.6.2 Что такое алгоритмический язык?
1.6.3 Что такое алгоритм? Назовите основные свойства алгоритмов.
1.6.4 Что понимается под «блок-схемой»? Назовите элементы блок-схемы.
1.6.5 Опишите структуру простейшей Паскаль-программы.
1.6.6 Какие типы данных используются в Паскале?
1.6.7 Какой алгоритм называется линейным? Опишите оператор присваивания.
Каких правил следует придерживаться при составлении арифметических выражений?
1.6.8 Подумайте,как можно представить в Паскале функции tg x, ctg x, lg x .
1.6.9 Какие операторы используются для ввода и вывода данных в Паскале?
1.6.10 Как осуществляется форматный и бесформатный выводы в Паскале?
1.6.11 Как осуществляется ввод и вывод с комментарием в Паскале?
2 Лабораторная работа №2. Программирование алгоритмов разветвленной структуры
Цель работы – ознакомление с особенностями программирования алгоритмов разветвленной структуры, а также с использованием различных операторов перехода.
2.1
Алгоритмы разветвленной структуры. Операторы перехода и выбора
Ветвящимся (разветвленным) называется
алгоритм, в котором в зависимости от исходных данных или промежуточных
результатов вычисления реализуется по одному из нескольких заранее предусмотренных
(возможных) направлений, называемых ветвями
вычислений.
Оператор условного перехода реализует разветвление алгоритма и применяется, когда в зависимости от условия необходимо выполнить либо одно, либо другое действие. В качестве условий используются логические отношения. Логические отношения представляют собой записи равенств и неравенств: <, >, =, <=, >=,<> (не равно), AND (логическое "и"), OR (логическое "или"). В Паскале оператор условного перехода имеет две конструкции (таблица Г1).
В Паскале принят порядок
выполнения операторов согласно их следованию в программе. Если необходимо
обойти какую-то группу операторов, то используется оператор безусловного перехода, который в блок-схеме отображается в
виде стрелки, а не отдельного блока (таблица Г1). Метка, используемая в
операторе, показывает, что дальнейшая работа должна проводиться в другой части
программы, с той строки, на которую она указывает и должна быть предварительно
описана в разделе Label (например, Goto NM;). Этот оператор используется только в исключительных ситуациях, поскольку
такие переходы разрушают связи между структурой программы и структурой
вычислений, что приводит к потере ясности программы и затрудняет задачу верификации (доказательства правильности
составления программы).
Кроме оператора безусловного
перехода, в Турбо Паскале 7.0 иногда используются четыре безусловные функции:
- Break – позволяет досрочно
закончить цикл;
- Continue – позволяет начать новую
итерацию цикла, не дожидаясь окончания предыдущей итерации;
- Exit – позволяет завершить
работу текущего программного блока (программу, процедуру);
- Halt(n) –
позволяет завершить работу программы с кодом завершения n.
К операторам разветвляющейся
структуры относится также оператор выбора
(варианта), позволяющий программировать сложные ветвления, когда имеется
несколько (обычно равновероятных) вариантов действия (таблица Г1).
2.2
Примеры решений задач разветвленной структуры
2.2.1 Вычислить |
|
На рисунке 2.1 представлена блок-схема и
программа для решения данной задачи. В блоке 4 производится ввод
значения х из какого-либо одного
заданного интервала. В блоках 5 и 6 осуществляется проверка условий
принадлежности х к одному из
интервалов. Если х<0 (блок 5), то
вычисления производятся по формуле в блоке 7, если нет, то проверяется условие х=0. Если это условие выполнено, то для
вычисления у используется блок 8,
иначе - блок 9. Независимо от того, по какой формуле осуществлено вычисление,
следующее действие - вывод вычисленного значения у. Блоки 2, 3, 11, 12 используются для организации многократного
ввода различных значений х, что
называется зацикливанием. Блоки 5, 6,
12 реализуются в программе операторами условного перехода, а блоки 3, 7, 8, 9,
11 – операторами присваивания. В качестве аналогов блоков 2, 4, 10 в программе
используются процедуры ввода-вывода.
|
Program
primer2_1; Label m1; Var i, n:integer;
x, y:real; Begin Write(‘Введи N’); Read(n); i:=1; m1: Write(‘Введи x’); Read(x); If x<0 then y:=exp(x) else if(x>=0)and(x<=1)
then y:=0 else y:=sin (x); write
(‘Y=’,y:10:3); i:=i+1; if i<=n then goto m1 end. |
Рисунок 2.1 - Блок-схема алгоритма и программа разветвленной
структуры
2.2.2
В
старояпонском календаре принят 60-летний цикл, состоящий из пяти 12-летних
малых циклов. Малые циклы обозначаются названиями цвета. Внутри каждого малого
цикла годы носят названия животных. Определить название заданного года нашей
эры по японскому календарю. Так как в данном случае блок-схема получается достаточно
громоздкой, ниже приведена только программа решения задачи.
Program primer2_2;
Var year, i, k : integer;
Begin
Write ('Введите год');
Read (year); Write (‘- the year of the ‘);
i := (year-3) mod 12; k := (3010 – year) mod 60 div 12;
Case k of
0: writе ('green ');
1: write ('red ');
2: write ('yellow ');
3: write ('white ');
4: write ('black ');
end;
Case i of
1: Writeln ('rat'); {крыса}
2: Writeln ('bull'); {бык}
3: Writeln ('tiger'); {тигр}
4: Writeln ('rabbit'); {кролик}
5: Writeln ('dragon'); {дракон}
6: Writeln
('snake'); {змея}
7: Writeln
('horse'); {лошадь}
8: Writeln
('sheep'); {овца}
9: Writeln
('monkey'); {обезьяна}
10: Writeln ('hen'); {петух}
11: Writeln ('dog'); {собака}
0: Writeln ('pig'); {свинья}
end;
end.
2.3 Варианты заданий
2.3.1 Составить блок-схему и
программу разветвляющейся структуры для вычисления заданной функции.
1.
|
2. |
3. |
4. |
5. |
6. |
7. |
8. |
9. |
10. |
11. |
12.
|
13.
|
14.
|
15.
|
16.
|
17.
|
18.
|
19.
|
20.
|
21.
|
22.
|
23.
|
24.
|
25.
|
26. |
27.
|
28. |
29. |
30.
|
2.3.2
Составить программу решения задачи, используя оператор выбора.
1. Определить время года по
вводимому номеру месяца. В случае если пользователь укажет недопустимый номер,
то повторить попытку ввода.
2.
Определить
знаки координат точки по вводимому номеру квадранта. В случае если пользователь
укажет недопустимый номер, повторить попытку ввода.
3.
Определить
квартал текущего года по вводимому номеру месяца. В случае если пользователь
укажет недопустимый номер, повторить попытку ввода.
4.
Вводится
ответ на вопрос "Язык общения? - русский (р) / английский (а)". Если
введено "р", то вывести "Привет!", если введено
"а", то вывести "Hello!". В остальных случаях
вывести "Повторите ввод".
5.
Вводится
ответ на вопрос "Продолжить работу? - да (1) / нет (0)". Если введено
"1", то вывести "Я готов к работе", если введено
"0", то вывести "Работа завершена".
6.
Вводится
целое число. Если введено "1", то вывести "понедельник".
Если введено "2", то вывести "вторник" и т.д. В остальных
случаях - "Повторите попытку ввода".
7.
Вводится
целое число от 2 до 5. Если введено "2", то вывести
"неудовлетворительно". Если введено "3", то вывести
"удовлетворительно" и т.д. В остальных случаях - "Такой оценки
не существует".
8.
Вводится
символ. Если этот символ равен "***", то вывести "Осадки в виде
снега". Если - ":::", то - "Осадки в виде дождя". В
остальных случаях - "Безоблачно".
9.
Ввести
целое число. Если введено "0", то вывести "незачет", если
введено "1", то вывести "зачет". В остальных случаях
вывести "Повторите ввод".
10.
По вводимому номеру вывести название ноты:
1-"до", 2-"ре", 3-"ми", 4-"фа",
5-"соль", 6-"ля", 7-"си". В остальных случаях -
"Нота не определена".
11.
По
вводимому номеру вывести название цвета: 1-"красный",
2-"оранжевый", 3-"желтый", 4-"зеленый",
5-"голубой", 6-"синий", 7-"фиолетовый". В остальных
случаях - "Цвет не определен".
12.
По
вводимому номеру вывести название времени года: 1-"зима",
2-"весна", 3-"лето", 4-"осень". В остальных
случаях - "Время года не определено".
13.
Вывести
название месяца, если вводится его номер. В случае если пользователь укажет
недопустимый номер, то повторить попытку ввода.
14.
Вводится
целое число от 1 до 10. Если введено "1", то вывести "Средний
возраст учеников - 7 лет". Если введено "2", то вывести
"Средний возраст учеников - 8 лет" и т.д.
15.
Даны
два числа. Ввести целое число n. Если n=1, то
найти минимум этих двух чисел. Если n=2, то найти максимум этих
чисел. В остальных случаях повторить ввод n.
16.
Вводится
символ. Если этот символ равен "я", то вывести "январь".
Если - "ф", то - "февраль". Если - "д", то -
"декабрь". В остальных случаях - "Зимний месяц не
определен".
17.
Вводится
символ. Если этот символ равен "с", то вывести "сентябрь".
Если - "о", то - "октябрь". Если - "н", то -
"ноябрь". В остальных случаях - "Осенний месяц не
определен".
18.
Вводится
целое число n (1£n£5), выводится n звездочек
(*). В остальных случаях повторить ввод n.
19.
По
вводимому значению n (1£n£5) вывести наименование
геометрической фигуры: 1-"точка", 2-"прямая",
3-"треугольник", 4-"квадрат", 5-"пентагон". В
остальных случаях повторить ввод n.
20.
Дано
натуральное число n (1£n£10). Вывести фразу "Мы
нашли n грибов (гриб, гриба), используя правильный падеж существительного
"гриб".
21.
По
вводимому номеру вывести название дня недели: 1-"понедельник",
2-"вторник", 3-"среда", 4-"четверг",
5-"пятница", 6-"суббота", 7-"воскресенье". В
остальных случаях повторить попытку ввода.
22.
По
вводимому номеру вывести наименование пальцев руки: 1-"мизинец",
2-"безымянный", 3-"средний", 4-"указательный",
5-"большой". В остальных случаях повторить попытку ввода.
23.
По
вводимому номеру вывести результаты спортивных соревнований: 1-"золотая
медаль", 2-"серебряная медаль", 3-"бронзовая медаль",
4-"утешительный приз". В остальных случаях повторить попытку ввода.
24.
По
вводимому номеру вывести наименование типов темперамента:
1-"сангвиник", 2-"флегматик", 3-"меланхолик",
4-"холерик". В остальных случаях повторить попытку ввода.
25.
По
вводимому номеру вывести наименование пяти чувств: 1-"зрение",
2-"слух", 3-"обоняние", 4-"осязание",
5-"вкус". В остальных случаях повторить попытку ввода.
26.
В
зависимости от количества участников вывести название музыкальных ансамблей:
1-"соло", 2-"дуэт", 3-"трио",
4-"квартет", 5-"квинтет", 6-"сикстет",
7-"октет". В остальных случаях повторить попытку ввода.
27.
По
вводимому номеру вывести наименование одного из факультетов АИЭС
1-"ТЭФ", 2-"ЭЭФ", 3-"ФРТС", 4-"ФЗО и
ПС", 5-"ФДП". В остальных случаях повторить попытку ввода.
28.
Написать
программу, которая запрашивает у пользователя номер дня недели и выводит одно
из сообщений: "Рабочий день", "Суббота" или
"Воскресенье". Если пользователь укажет недопустимый номер, то
повторить попытку ввода.
29.
Написать
программу, которая подводит итоги экзамена. При вводе кода 0 вывести сообщение:
"неявка"; 1 - "неудовлетворительно"; 2,3,4
-"удовлетворительно"; 5,6,7 - "хорошо"; 8,9
-"отлично"; 10 -"не допущен". В случае если пользователь
укажет недопустимый номер, то повторить попытку ввода.
30.
Дано
натуральное число n (1 £ n £ 10). Вывести фразу "n рублей
(рубль, рубля), используя правильный падеж существительного "рубль".
2.4
Контрольные вопросы
2.4.1 Какие логические
отношения используются в Паскале?
2.4.2 Какие функции
выполняет оператор условного перехода?
2.4.3 Чем отличаются полная
и краткая формы оператора условного перехода?
2.4.4 Как изображается на
блок-схеме оператор условного перехода?
2.4.5 Какую функцию
выполняет оператор безусловного перехода?
2.4.6 Как изображается на
блок-схеме оператор безусловного перехода?
2.4.7 Какие особенности
характерны для оператора выбора?
2.4.8 Как можно изобразить
на блок-схеме оператор выбора?
3 Лабораторная работа №3. Программирование
алгоритмов циклической структуры
Цель работы – ознакомление с особенностями программирования алгоритмов циклической структуры.
3.1
Алгоритмы циклической структуры. Операторы цикла
Алгоритм, в котором предусмотрено многократное
выполнение одной и той же последовательности действий, называется алгоритмом циклической структуры, а эта последовательность – циклом. Циклический алгоритм позволяет существенно сократить объем
программы. Цикл можно организовать двумя способами:
- с помощью счетчика и условия перехода
(пример 2.2.1);
- с помощью оператора цикла.
В Паскале существует
несколько операторов цикла. Оператор цикла представляет собой единую
синтаксическую конструкцию, в которой можно выделить три основные части:
заголовок цикла, тело цикла, заключительную строку. Заголовок цикла образуют
ключевое слово и управляющая фраза, задающая способ управления повторениями.
Заключительную строку составляет ключевое слово, заканчивающееся знаком “;”. Тело задает действия, которые
повторяются в соответствии с правилами, заданными управляющей фразой. Если
число повторений известно заранее (до начала повторений), то в такой ситуации
лучше воспользоваться оператором цикла с параметром For-To или For-Downto (оператор цикла с
фиксированным числом повторений). В остальных случаях следует использовать
операторы цикла с предусловием While-Do или постусловием Repeat-Until.
Оператор цикла с параметром имеет две
модификации For-To и For-Downto и следующие ограничения:
- i, m1, m2 могут быть только переменными целого типа;
- параметр i не может изменяться внутри
цикла.
Операторы цикла (For-To, For-Downto, While-Do и Repeat-Until) приведены в таблице Г1. Общим для всех перечисленных
операторов цикла является то, что циклы, организованные с их помощью, содержат
обязательные компоненты:
- задание начального значения параметра цикла;
- тело цикла; задание шага изменения параметра цикла;
- проверку на выход из цикла.
Для операторов While и Repeat изменение параметра цикла по какому-либо закону в
теле цикла обязательно.
При программировании алгоритмов циклической
структуры часто используются приемы
накапливания сумм, произведения, количества:
Накапливание суммы |
до цикла |
S = 0 |
в цикле |
S=S+элемент |
Накапливание произведения |
|
P = 1 |
|
P=P*элемент |
Накапливание количества |
|
K = 0 |
|
K=K+1 |
3.2
Примеры алгоритмов и программ циклической структуры
3.2.1 Вычислить все значения
функции Y=A*K2, если К меняется от 1 до 10
с шагом 1. Решить задачу несколькими способами (на рисунках 3.1,
3.2, 3.3 и 3.4 показаны все способы решения задачи).
|
Program Primer3_1; var k: integer; a, y: real; begin read (a); for k := 1 to 10 do
begin y := a *
sqr(k);
writeln(’K=’,k:2,’Y=’,y:10:3) end end. |
Рисунок 3.1 –
Пример решения задачи с использованием оператора For-To |
|
|
Program Primer3_2; var k: integer; a, y: real; begin read (a); for k := 10 downto 1 do begin y := a *
sqr(k);
writeln(’K=’,k:2,’Y=’,y:10:3) end end. |
Рисунок 3.2 –
Пример решения задачи с использованием оператора For-Downto |
|
|
Program primer3_3; var k:integer;
a,y: real; begin read (a); k:=1; while k<=10 do begin y := a * sqr(k);
writeln(’K=’,k:2,’Y=’,y:9:3);
k := k + 1 end end. |
Рисунок 3.3 –
Пример решения задачи с использованием оператора While-Do |
|
|
Program primer3_4; var k:integer; a,y: real; begin read (a); k:=1; repeat y := a * sqr(k);
writeln(’K=’,k:2,’Y=’,y:9:3);
k := k + 1 until k > 10 end. |
Рисунок 3.4 –
Пример решения задачи с использованием оператора Repeat-Until |
3.2.2 Вычислить значения
функции для х,
меняющегося в интервале от –5 до 7 с шагом 0,5. Найти количество (К) значений у(х) равных нулю, сумму (S) положительных значений у(х) и произведение (P)
отрицательных значений у(х). Решить
задачу, используя оператор For-To.
Блок-схема и программа
решения задачи представлены на рисунке 3.5.
При использовании
оператора цикла For-To для
решения данной задачи выбрать х в
качестве параметра цикла нельзя, так как это вещественная переменная, кроме
того, интервал ее изменения и шаг, также вещественные числа. Поэтому для
организации цикла используем дополнительный параметр i,
который будет изменяться параллельно с х
требуемое число раз. Для этого определим количество итераций (повторений) по
формуле: , где m1 и m2 - начальное и конечное
значение х, m3 – шаг. Так как значение N не
всегда получается целым числом, в программе рекомендуется использовать функцию trunc(x), результатом которой
является целое число, а аргументом - вещественное. Вычисления значения функции
производятся в цикле. До организации цикла необходимо задать начальные
значения переменных для хранения суммы
(S=0),
количества (K=0) и
произведения (P=1).
Также необходимо задать начальное значение переменной (х=-5), а затем внутри цикла изменять х на величину шага (х := х + 0.5). Для накопления суммы и
количества в теле цикла используется оператор присваивания типа счетчика, суть
которого: последующее значение = предыдущее значение + текущее значение (S:=S+y и K:=K+1),
а для накопления произведения используется идентичный оператор присваивания, но
со знаком * в правой его части (P:=P*y).
|
Program primer3_5; var S, P, y, x:real; K, i:integer; begin K := 0; S := 0; P := 1; N := trunc((7+5)/0.5+1); x := -5; for i := 1 to N do begin y := x*sin(x)-exp(x); writeln(’x=’,
x:4:1,’y=’, y:10:3); if y = 0 then K := K+1 else if y > 0 then S := S+y else P := P*y; x := x+0.5; end; writeln(K,
S, P) end. |
||
Рисунок 3.5 –
Пример решения задачи с использованием цикла FOR-TO с вещественным параметром |
3.3 Варианты заданий
Решить
задачу согласно варианту тремя способами, т.е. с использованием операторов
цикла For-To
(или For-Downto), While-Do и Repeat-Until.
1.
Вычислить сумму четных и нечетных первых N чисел натурального ряда.
2.
Дано целое число N.
Вычислить P=N!=1´2´3´…´N.
3. Даны числа a и n. Вычислить P = a´(a-n) ´
(a-2n) ´ (a-3n) ´…´ (a-n2).
4. Вычислить произведение первых n сомножителей .
5.
Вычислить произведение четных и нечетных первых N чисел натурального ряда.
6.
Даны вещественное число X и
натуральное число n. Вычислить сумму первых n слагаемых
S = sinX + sinX2 + sinX3 +…+ sinXn.
7.
Даны вещественное число X и натуральное число n. Вычислить
произведение первых N
сомножителей S = sinX ´ sinX2 ´ sinX3 ´…´ sinXn.
8.
Дано целое число n. Вычислить .
9.
. Дано целое число n. Вычислить .
10.
Вычислить произведение первых n сомножителей .
11.
Даны вещественное число X и натуральное число n. Вычислить
сумму первых n
слагаемых .
12.
Даны вещественное число X и натуральное число n. Вычислить
сумму первых n
слагаемых .
13.
Даны числа b и n.
Вычислить P = b´(b+1) ´ (b+2) ´ (b+3) ´…´ (b+n).
14.
Вычислить сумму первых N чисел натурального ряда.
15.
Вычислить произведение четных и нечетных первых N
чисел натурального ряда.
16.
Вычислить сумму первых n
слагаемых .
17.
Дано целое число n. Вычислить .
18.
Даны числа x и n.
Вычислить .
19.
Даны числа b и n.
Вычислить P = (b-n) + (b - (n-1)) + (b- (n-2)) +…+ (b-1).
20.
Даны вещественное число b и натуральное число n. Вычислить bn.
21.
Даны вещественное число x и целое число n. Вычислить .
22.
Даны числа x и n.
Вычислить .
23.
Дано целое число n. Вычислить
.
24.
Дано целое число n. Вычислить .
25.
Дано целое число n. Вычислить .
26.
Дано целое число n. Вычислить .
27.
Дано целое число n. Вычислить .
28. Даны числа a и n. Вычислить S = a+(a-n) + (a-2n) + (a-3n)
+…+ (a-n2).
29.
Даны вещественное число X и натуральное число n. Вычислить
сумму первых n
слагаемых S = sin2X + 2sin2X +…+ nsin2 X.
30.
Дано целое число n. Вычислить .
3.4
Контрольные вопросы
3.4.1 Что называется циклом?
3.4.2 Что представляет собой
оператор цикла?
3.43 Какие виды оператора
цикла существуют в Паскале?
3.4.4 Дайте сравнительную
характеристику операторов For-To и For-Downto.
3.4.5 Что представляет собой
оператор цикла While-Do?
3.4.6 Что представляет собой
оператор цикла Repeat-Until?
3.4.7 Как организовать цикл For-To с
вещественным параметром?
3.4.8 Как осуществляется
накапливание суммы в программе?
3.4.9 Какое значение следует принять за
начальное при накапливании произведения?
3.4.10 В какой последовательности выполняются
действия при накапливании количества?
Приложение A
Описание символов, используемых в графической схеме
алгоритмов (ГСА)
Таблица А1 – Основные элементы блок-схем
Наименование |
Обозначение
|
Примечание
|
Терминатор |
|
Отображает
выход во внешнюю среду или вход из внешней среды. Используется для
обозначения начала или окончания алгоритма
|
Данные |
|
Отображает
данные, носитель данных не определен. Используется для обозначения операций
ввода и вывода данных
|
Процесс |
|
Отображает
функцию обработки данных любого вида. Используется для обозначения операций
присваивания
|
Подготовка |
|
Используется
для обозначения заголовка цикла
|
Решение |
|
Используется
для обозначения оператора условного перехода или оператора выбора (варианта)
|
Предопределен-ный процесс |
|
Отображает
предопределенный процесс, состоящий из одной или нескольких операций, которые
определены, например, в подпрограмме или модуле. Обычно используется для
обозначения подпрограмм.
|
Соединитель |
|
Отображает
выход в часть схемы и вход из другой части этой же схемы и используется для обрыва линии и
продолжения ее в другом месте.
|
Линия |
|
Отображает
поток данных или управления. Направления слева направо и снизу вверх
обозначаются стрелками. Используется для соединения символов в алгоритме
|
Комментарий |
|
Используется
для добавления описательных комментариев или пояснительных записей с целью
объяснений или примечаний.
|
Примечание – символы могут быть вычерчены в любой ориентации, но
предпочтительной является горизонтальная. Внутрь символа помещают обозначения
или описания операций. Символы ГСА могут быть отмечены идентификаторами или
порядковыми номерами.
|
Приложение Б
Основные элементы языка Турбо Паскаль
Таблица Б1 – Список
зарезервированных слов
ABSOLUTE
|
Downto
|
In
|
Or
|
Then
|
And
|
Else
|
Inherited
|
Packed
|
To
|
Array
|
End
|
Inline
|
Private
|
Type
|
Asm
|
External
|
Interface
|
Procedure
|
Unit
|
Assembler
|
Far
|
Interrupt
|
Program
|
Until
|
Begin
|
File
|
Label
|
Public
|
Uses
|
Case
|
For
|
Mod
|
Record
|
Var
|
Const
|
Forward
|
Near
|
Repeat
|
Virtual
|
Constructor
|
Function
|
Nil
|
Set
|
While
|
Destructor
|
Goto
|
Not
|
Shl
|
With
|
Div
|
If
|
Object
|
Shr
|
XOR
|
Do
|
Implementation
|
Of
|
String
|
|
Таблица Б2 – Перечень
операций языка
Операции
|
Действие
|
Тип результата
|
|
||||
|
Арифмети-ческие
|
+
|
Сложение
|
Целый или вещественный
|
|||
|
-
|
Вычитание
|
|||||
|
*
|
Умножение
|
|||||
|
/
|
Деление
|
Вещественный
|
||||
|
Div
|
Целочисленное деление
|
Целый
|
||||
|
Mod
|
Остаток от деления
|
Целый
|
||||
|
Операции сравнения
|
=
|
Равенство
|
Логический
|
|||
|
<>
|
Неравенство
|
|||||
|
<
|
Меньше
|
|||||
|
>
|
Больше
|
|||||
|
<=
|
Меньше или равно
|
|||||
|
>=
|
Больше или равно
|
|||||
|
Логические
|
Not
|
Отрицание
|
Логический
|
|||
|
Or
|
Дизъюнкция
|
|||||
|
And
|
Конъюнкция
|
|||||
|
Xor
|
Исключающее ИЛИ
|
|||||
Таблица
Б3 - Типы переменных (целые и действительные числа)
Целые
числа |
Действительные числа
|
||
Формат |
Диапазон значений |
Формат |
Диапазон значений |
shortint |
-128 ¸ 127 |
real |
2.9E-39 ¸1.7E+38 |
integer |
-32768
¸ 32767 |
single |
1.5E-45
¸3.4E+38 |
longint |
-2147483648
¸ 2147483647 |
double |
5.0E-324
¸1.7E+308 |
byte |
0 ¸ 255 |
extended |
3.4E-4932
¸ 1.1E+4932 |
word |
0 ¸ 65 535 |
|
|
Приложение В
Структура простейшей Паскаль-программы и встроенные
функции языка
Таблица В1 – Структура
простейшей программы
Части |
Раздел |
Обозначение в программе |
Описа-тельная |
Заголовок программы |
Program Primer; |
Объявление меток |
Label 1,2,x1; |
|
Объявление констант |
Const a=3.5; b=5; |
|
Объявление переменных |
Var y,z:real; i:integer; |
|
Исполни-тельная |
Начало главной программы |
Begin |
{Ввод исходных данных}; {Обработка исходных
данных}; {Вывод результата}; |
||
Конец программы |
End. |
Таблица В2 - Некоторые
встроенные функции языка Паскаль
Математическая запись или
ее назначение |
Запись на Паскале |
sin x, x – в радианах |
Sin(x) |
cos x, x – в радианах |
Cos(x) |
arctg x |
Arctan(x) |
ln x – значение натурального
логарифма |
Ln(x) |
ex или exp(x) |
Exp(x) |
- абсолютное значение
величины х |
Abs(x) |
, x>=0 |
Sqrt(x) |
x2 |
Sqr(x) |
дробная часть числа х |
Frac(x) |
целая
часть числа х, получаемая путем отбрасывания дробной части |
Trunc(x) |
целая
часть числа х, получаемая путем округления до ближайшего меньшего целого |
Int(x) |
целая
часть числа х, получаемая путем округления до ближайшего большего целого по
абсолютной величине |
Round(x)
|
случайное число от 0 до х |
Random(x) |
случайное число от 0 до 1 |
Random |
Выдает значение True, если целое число х нечетно |
Odd(x) |
Примечания 1 В Паскале нет операции возведения в произвольную степень n,
поэтому используют выражение xn = enlnx.
2 Для получения tg x, ctg x, arcsin x, arccos x, arcctg x, logax могут быть использованы
известные математические соотношения. |