3668 АЛГОРИТМИЧЕСКИЕ ЯЗЫКИ И ПРОГРАММИРОВАНИЕ

РАБОЧАЯ ПРОГРАММА

1.      Пояснительная записка

1.1. Цели и задачи дисциплины

Целью преподавания дисциплины "Алгоритмические языки и программирование" является обучение студентов навыкам проектирования программ с использованием современных технологий структурного программирования, освоение и получение навыков работы на современных вычислительных средствах, развитие умения проведения отладки и тестирования программ.

Основными задачами преподавания данной дисциплины являются изучение студентами теоретических основ алгоритмизации и проектирования программ, процесса структурного программирования, его технологий, приемов программирования на конкретных алгоритмических языках, основ организации вычислительного процесса на ЭВМ.

1.2. Связь с другими дисциплинами

Преподавание дисциплины "Алгоритмические языки и  программирование" основано на знаниях, полученных в средней школе по курсам математики, физики и основам информатики и вычислительной техники.

Знания, полученные в данном курсе, будут необходимы при изучении основных дисциплин по специальности, а также при выполнении лабораторных и курсовых работ, дипломного проектирования.

Обучение практическому программированию осуществляется на основе алгоритмического языка структурного программирования Турбо Паскаль.

Преподавание дисциплины рассчитано на 1-й и 2-й семестры для сокращенной формы обучения и на 2-й и 3-й семестры для полной, что позволяет применить полученные знания в последующих дисциплинах, при выполнении домашних заданий, курсовых и дипломных работ.

На изучение курса отводится 272 часа, из них 48 часов - обязательные аудиторные занятия для полной формы обучения и 32 часа  - для сокращенной и соответственно 224 и 240 часов - самостоятельная работа. В первом семестре изучения дисциплины предусмотрены одна контрольная работа и теоретический зачет, а во втором семестре – курсовая работа и экзамен.

2.      Содержание дисциплины

2.1. Теоретический курс

1-й семестр

2.1.1. Введение в программирование

Краткая историческая справка. Цели и задачи дисциплины "Алгоритмические языки и программирование".

Особенности решения задач с использованием ЭВМ. Примеры применения средств вычислительной техники. Этапы решения задач на ЭВМ.

Алгоритм и его свойства. Способы описания алгоритмов. Словесная запись алгоритмов. Средства графического изображения алгоритмов. Схемы алгоритмов. Структурограммы. Псевдокод. Документирование программ.

2.1.2. Турбо Паскаль - язык структурного программирования

Основные характеристики алгоритмического языка Паскаль, области его применения. Алфавит языка. Числа. Строки. Идентификаторы. Оператор присваивания. Арифметические выражения. Стандартные функции.

Типы данных. Скалярные типы данных. Вещественные, целые, логический, символьный типы. Перечисляемый, интервальный типы данных.

Структура программы. Стиль записи программ на языке Паскаль. Программирование линейных алгоритмов.

2.1.3. Управляющие структуры

Разновидность структур алгоритмов. Описание разветвляющихся структур алгоритмов. Условный оператор. Составной оператор. Оператор варианта.

Понятие цикла. Типы алгоритмов циклической структуры. Цикл с предусловием. Цикл с постусловием. Циклическая структура с заданным числом повторений. Оператор цикла. Цикл с параметром. Оператор цикла с предусловием. Оператор цикла с постусловием.

Программирование итерационных циклов. Вложенные циклы.

Организация ввода и вывода данных. Операторы ввода-вывода данных. Ввод числовых данных. Ввод символьных данных. Стандартная форма вывода данных. Управление формой вывода данных.

2-й семестр

2.1.4. Общие вопросы технологии проектирования программ

Процедуры и функции. Описание процедур и функций. Локальные и глобальные переменные. Обращения к подпрограммам. Оператор вызова процедуры. Формальные и фактические параметры. Вызов процедуры без параметров. Обращение к функции. Параметры процедур и функций. Параметры - значения. Параметры - переменные.

Итерация и рекурсия. Особенности использования подпрограмм в языке Паскаль. Рекурсивные описания. Рекурсивное обращение. Опережающее описание. Побочные эффекты.

2.1.5. Организация данных

Типы данных. Сложные типы данных. Массивы. Объявление массивов. Ввод и вывод массивов. Записи. Объявление данных. Селектор записи. Оператор присоединения.

Файлы. Файловый тип. Буферная переменная. Чтение и запись файла. Файлы последовательного и прямого доступа. Текстовые файлы. Операции над текстовыми файлами. Нетипизированные файлы.

2.3. Содержание лабораторных занятий

1-й семестр

2.3.1. Изучение среды программирования Турбо Паскаль.

2.3.2. Программирование линейных алгоритмов.

2.3.3. Программирование алгоритмов разветвляющейся структуры.

2.4. Содержание тем контрольной работы

1-й семестр

2.4.1. Проектирование программ циклической структуры. Оператор цикла с параметром.

2.4.2. Конструирование программ циклической структуры с неизвестным числом повторений. Итерационные циклы.

2.4.3. Проектирование алгоритмов и программ со структурой вложенных циклов.

2.5. Содержание лабораторных занятий

2-й семестр

2.5.1. Массивы. Программирование задач обработки табличных данных.

2.5.2. Описание и основные правила использования процедур и функций.

2.5.3. Рекурсии.

2.6. Содержание тем для самостоятельной работы

2-й семестр

2.6.1. Комбинированные типы данных.

2.6.2. Создание и преобразование файлов. Файлы прямого доступа.

2.6.3. Создание модулей.

2.7. Содержание заданий для курсового проектирования

2-й семестр

2.7.1. Создание и обработка данных файловой структуры.

2.7.2. Реализация алгоритмов обработки массивов, их сортировки.

2.7.3. Обработка списков.

2.7.4. Решение простейших задач на графах (алгоритмы построения кратчайших путей на графах, минимальных связывающих деревьев и т.п.).

2.7.5. Поиск кратчайших путей в лабиринтах.

2.7.6. Решение задач комбинаторики.

2.7.7. Моделирование устройств и узлов вычислительных машин.

2.7.8. Создание игровых программ.

2.7.9. Разработка обучающих и контролирующих программ.

Целью курсовой работы является приобретение студентами опыта алгоритмизации, конструирования, практической реализации программ и широкого применения ЭВМ для решения поставленной задачи.

В процессе курсового проектирования студенты должны разработать обобщенную схему алгоритма по словесному описанию задачи, провести детализацию отдельных блоков обобщенной схемы, выделить повторяющиеся и законченные по смыслу участки алгоритма с целью реализации их в виде процедур и функций, а также определить набор логически связанных между собой данных для создания отдельных файлов, ввести различные дополнительные средства для обеспечения наглядности и повышения уровня сервиса проектируемой программы, разработать и отладить программы, реализующие спроектированный алгоритм на алгоритмическом языке, выполнить на ЭВМ сконструированную программу, оформить программные документы в соответствии с требованиями ЕСПД.

Для успешного выполнения курсовой работы студент должен обладать подробными сведениями о работе в операционной системе, уметь пользоваться библиотеками стандартных программ, широко владеть знаниями особенностей алгоритмического языка в области обработки файлов, использования динамического распределения памяти, иметь навыки использования различных способов отладки программ.

3.       Литература

3.1. Основная литература

1. Алгоритмические языки и программирование: Метод. указ. к курс. раб./ РРТИ; Сост.:  В.С. Новичков, А.Н. Пылькин. Рязань, 1988. 56 с. № 1525.

2. Конструирование программ: Метод. указ. к курс. раб./ РРТИ; Сост.: В.С. Новичков, О.Г. Швечкова. Рязань, 1993. 48 с. № 2133.

3. Модульное программирование на Турбо Паскале: Метод. указ. к лаб. раб. № 11–15 / РГРТА; Под ред.  В.С.Новичкова.  Рязань. 2000. 72 с. № 3037.

4. Новичков В.С., Парфилова Н.И., Пылькин А.Н. Паскаль: Учеб. пособие. 2-е изд., перераб. и доп. М.: Высшая школа, 1994. 256 с.

5. Новичков В.С., Парфилова Н.И., Пылькин А.Н. Основы алгоритмизации и программирования на Турбо Паскале: Учеб. Пособие. М.: Гоячая линия-Телеком, 2005. 438 с.

6. Основы алгоритмизации и программирования на Турбо Паскале: Метод. указ. к лаб. раб. № 1–5. / РГРТА; Под ред. В.С.Новичкова. Рязань, 1996. 84 с. № 2582.

7. Реализация циклических алгоритмов на Турбо Паскале: Метод. указ. к лаб. раб. № 6–10 / РГРТА; Под ред. В.С.Новичкова. Рязань, 1998. 72 с. № 2665.

8. Структурированные типы данных в Турбо Паскале: Метод. указ. к лаб. раб. № 16–20 / РГРТА; Под ред. В.С.Новичкова. Рязань, 2001. 64 с. № 3193.

9. Фаронов В.В. Программирование на персональных ЭВМ в среде Турбо-Паскаль. М.: Изд-во МГТУ, 1991. 580 с.

10. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учеб. пособие. 7-е изд. Перераб. М.: “Нолидж”, 2000. 576 с.

3.2. Дополнительная литература

1. Вирт Н. Язык программирования Паскаль (пересмотренное сообще­ние) // Алгоритмы и организация решения экономических задач. М.: Статистика, 1977. Вып. 9. с. 52-86.

2. Вирт Н. Алгоритмы + структуры данных = программы: Пер. с англ. / Под ред. Д.Б. Подшивалова. М.: Мир, 1985. 392 с.

3. Епанешников А.М., Епанешников В.А. Программирование в среде Турбо-Паскаль 7.0. М.: «Диалог-МИФИ», 1993. 288 с.

4. Епанешников А., Епанешников В. Программирование в среде Turbo Pascal 7.0. 4-е изд.. М.: «Диалог-МИФИ», 2002. 367 с.

Методические указания к работам

Основной целью данного цикла работ является приобретение практических навыков алгоритмизации задач и конструирования программ на алгоритмическом языке Паскаль в среде программирования Турбо Паскаль 7.0.

Перед выполнением каждой работы необходимо выучить методические указания и разобрать примеры конкретных программ по каждой работе и ответить на контрольные вопросы.

1. Порядок выполнения работы

Работы должны выполняться в следующем порядке:

1) изучить методические указания;

2) для заданного преподавателем варианта разработать схему решения задачи, используя при этом один из способов описания алгоритмов, например графическую схему алгоритма или структурограмму (номер варианта задания для контрольной или самостоятельной работы определяется как сумма последних двух цифр номера студенческого билета или зачетной книжки студента плюс единица);

3) составить программу на языке Паскаль в соответствии с разработанной схемой алгоритма;

4) для выбранных самостоятельно данных просчитать контрольный вариант, используемый в дальнейшем  на этапе отладки программы;

5) подготовить программу (ввести ее в память ЭВМ), отладить и получить результат просчета контрольного варианта;

6) при совпадении результатов ручного и машинного просчетов контрольного варианта получить листинг программы и результаты решения необходимых вариантов задачи;

7) оформить отчет о выполненной работе;

8) отчитаться по работе перед преподавателем.

2. Содержание отчета

Отчет о проделанной работе должен содержать:

1) вариант задания;

2) схему алгоритма и основные промежуточные варианты, полученные в процессе ее проектирования;

3) текст программы;

4) результаты просчетов на ЭВМ (включая контрольные значения).

3. Пример оформления отчета

Титульный лист

 

 

Министерство образования Российской Федерации

Рязанская государственная радиотехническая академия

Кафедра вычислительной и прикладной математики

 

Отчет

по теме № 3.3

“Программирование алгоритмов разветвляющейся структуры”

по курсу

“Алгоритмические языки и программирование”

 

Выполнил:

студент гр.5030 Федоров А.В.

Проверил:

доцент кафедры ВПМ,

канд. техн. ннаук. Новичков В.С.

 

Рязань 2005

Оборот титульного листа

 

Задание. Вариант № 30.

Даны три неравных числа a, b, c. Составить программу вычисления значения z, равного квадрату большего из них.

Схема алгоритма

 

Текст программы.

{*********************************************************  }

{ Программа: Square, Тема 3.3, Вар. 30                                                }

{ Цель: Вычисление квадрата максимального из трех чисел                }

{              a, b, c - исходные числа                                                              }

{              z - результат                                                                                 }

{ Требуемые подпрограммы: Нет                                                             }

{ Метод: Вычисление по формулам                                                         }

{ Программист: Федоров А.В., гр. 5030                                                   }

{ Проверил: Новичков В.С., каф. ВПМ                                                   }

{ Дата написания: 4 октября 2005 г.                                                         }

{*********************************************************  }

Program Square;

Var

a,b,c : real;

Begin {Square}

WriteLn(‘Введите три числа a,b,c:’);

Read(a, b, c);

WriteLn(‘Исходные данные:’);

WriteLn(‘a=‘,a:6:2,’ b=‘,b:6:2,’ c=‘,c:6:2);

if a>b

then

z := a

else

z := b;

if c>z

then

z := c;

z := z*z;

WriteLn(‘Квадрат максимального:’);

WriteLn(‘z=’,z:8:2);

End.{Square}

Просчет контрольного варианта.

При a = 3,83; b = 1,53; c = 4,5 максимальным значением является 4,5, следовательно, z = 4,52=20,25.

Результат выполнения программы на ЭВМ.

Введите три числа a, b, c:

Исходные данные:

a=  3.83 b=  1.53 c=  4.50

Квадрат максимального:

z=    20.25

Введите три числа a, b, c:

Исходные данные:

a=  3.83 b=  15.30 c=  4.50

Квадрат максимального:

z=  234.09

Введите три числа a, b, c:

Исходные данные:

a=  5.00 b=  1.53 c=  4.50

Квадрат максимального:

z=    25.00

Тема 3.1. Изучение среды программирования Turbo Pascal

Среда программирования Turbo Pascal предназначена для выполнения этапов решения задачи на алгоритмическом языке Паскаль. Turbo Pascal позволяет редактировать, компилировать, компоновать и выполнять Паскаль-программы. При этом пользователю предоставляется высокая скорость компиляции, удобство работы с компьютером и мощная библиотека процедур и функций.

Перед выполнением данной работы необходимо создать на жестком диске C: следующую структуру каталогов:

С:\IVANOV\PASCAL

Каталог Pascal должен быть текущим.

При работе в локальной сети персональных компьютеров каталог должен быть создан на диске Z: в директории группы, например:

Z:\4030\IVANOV\PASCAL

1.      Загрузка среды Turbo Pascal


Убедитесь, что вы находитесь в своем рабочем каталоге. В командной строке MS DOS наберите команду turbo и нажмите [Enter]:

В режиме работы с локальной сетью для входа в среду Turbo Pascal необходимо вызвать меню пользователя (клавиша [F2]), выбрать пункт Turbo Pascal 7.0. и нажать клавишу [Enter].

При успешном выполнении команды на экране появляется изображение среды Turbo Pascal. Если команда не выполнилась, тогда вам необходимо произвести запуск среды из системного каталога Turbo Pascal.

В верхней строке экрана находится ГЛАВНОЕ МЕНЮ среды, определяющее действия, которые можно выполнить в среде Turbo Pascal.  B нижней строке экрана расположена СТРОКА СОСТОЯНИЯ, содержащая краткую справку о текущем состоянии среды и список “горячих клавиш”  (табл. 1), при нажатии на которые немедленно выполняются определенные действия. В центре экрана будут  располагаться окна редактирования, предназначенные для ввода и изменения исходных текстов программ на языке программирования Паскаль.

2.      Работа с помощью меню

Работа с меню осуществляется следующим образом:

- для входа в меню требуется нажать клавишу [F10];

- с помощью клавиш управления курсором выбирается нужный пункт главного меню и нажимается [Enter]. Из выбранного пункта меню "выпадает" подменю, определяющее конкретные действия, производимые в среде;

- используя клавиши управления курсором, можно выбрать нужный пункт и нажать клавишу [Enter]; действие будет выполнено.

Если для выполнения действия требуется дополнительная информация, в центре экрана появляется ОКНО ДИАЛОГА, в котором вводится требуемая информация.

Перед началом работы необходимо закрыть все открытые окна редактирования, если такие есть. Соответствующие действия выполняются при выборе команды "Close All" из меню "Window".

Теперь  откройте  новое  окно редактирования  (создайте новый файл), в котором вы будете набирать текст вашей программы. Открытие нового окна редактирования происходит при выборе команды "New" из меню "File".

3.      Ввод программы в среде Turbo Pascal

Ввод и редактирование программы в окне среды Turbo Pascal производится так же, как и в любом другом текстовом редакторе.

Например, введите следующую программу на языке Паскаль:

Program Primer1;

Var

A,B,C:Real;

Begin {Primer1}

Write('A=');

Read(A);

Write('B=');

Read(B);

WriteLn('A=',A,' B=',B);

С:=A+B;

WriteLn('C=',C);

End. {Primer1}

4.      Сохранение программы в файле

Для сохранения подготовленной программы в виде файла необходимо нажать клавишу [F2]. Если вы создаете новый файл, то среда Turbo Pascal запросит имя файла: на экране появится окно диалога "Save File As" (Сохранить файл под именем …), и курсор будет помещен в строку ввода.

Необходимо набрать имя файла и нажать [Enter]. Расширение .pas можно не указывать, оно приписывается к имени автоматически.

5.      Работа с существующей программой

Если ваша программа  подготовлена  ранее с помощью  какого-либо текстового редактора и хранится в виде файла в каталоге (например, файл primer1.pas в каталоге Z:\4030\IVANOV\PASCAL), то его можно загрузить в окно редактирования среды Turbo Pascal нажатием клавиши [F3] либо с помощью последовательности действий:

- нажать клавишу [F10]; происходит выход в меню;

- выбрать пункт "File" и нажать [Enter];

- с помощью "стрелок" выбрать пункт "Open" и нажать [Enter]; появляется окно диалога, в котором выбирается нужный файл.


6.      Компиляция программы в среде Turbo Pascal

Компиляция – это процесс перевода программы на язык машинных команд. Прежде чем программа на Паскале будет выполнена, ее необходимо откомпилировать. В результате компиляции Turbo Pascal создает исполняемый файл с тем же именем, что и файл, содержащий программу, но с расширением .exe. Впоследствии этот файл может быть выполнен, как любой другой исполняемый файл.

Turbo Pascal выполняет компиляцию программы по нажатию клавиши [F9]. При этом в центре экрана появляется окно, отображающее информацию о ходе компиляции.

Если в процессе компиляции в программе обнаружена синтаксическая ошибка, то компиляция прерывается, на экране появляется строка, содержащая информацию об ошибке, а курсор устанавливается в том месте программы, в котором обнаружена ошибка. Вы должны исправить ошибку (см. табл. 2) и вновь попытаться откомпилировать программу, нажав клавишу [F9]. Если в программе нет ошибок, то в нижней части окна появляется надпись:

Compile successful: Press any key         Успешная компиляция.

Нажмите любую клавишу.

После этого ваша программа может быть выполнена.

7.      Выполнение программ в среде Turbo Pascal

Среда Turbo Pascal предоставляет возможность выполнить программу, расположенную в текущем окне редактирования, не выходя из среды. Для этого требуется нажать комбинацию клавиш [Ctrl-F9]. Если в программу были внесены изменения, то сначала будет осуществлена ее компиляция, а затем запуск на выполнение. По окончании работы программы происходит возврат в среду Turbo Pascal. При этом результаты ее работы исчезают с экрана. Для того чтобы просмотреть их, следует нажать клавиши [Alt-F5]. На экране восстанавливается то изображение, которое было в момент завершения выполнения программы. После просмотра результатов для возврата в среду Turbo Pascal можно нажать любую клавишу.

8.      Выход из среды Turbo Pascal

Для выхода из среды Turbo Pascal требуется нажать комбинацию клавиш [Alt-X] либо выполнить команду Quit из меню File. Если изменения в программе не были сохранены, Turbo Pascal выдаст окно с предупреждающим сообщением.

С помощью клавиш управления курсором выделите нужный пункт:

Yes - сохранить изменения в файле и выйти из среды;

No - не сохранять изменения и выйти из среды;

Cancel - не выходить из среды Turbo Pascal.

После выделения нажмите [Enter].

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

В СРЕДЕ TURBO PASCAL!

[F1]

[F2]

[F3]

[F9]

[Ctrl+F9]

[Alt+F5]

[Alt+X]

Получение справочной информации

Сохранение программы в рабочем каталоге

Загрузка существующей программы

Компиляция программы

Выполнение программы

Просмотр результатов

Выход из среды (в Norton Commander)

Таблица 1

ФУНКЦИОНАЛЬНЫЕ КЛАВИШИ ТУРБО ПАСКАЛЯ

Клавиши

Выполняемая команда

Эквивалент меню

F1

F2

F3

F4

F5

F6

F7

 

F8

 

F9

 

F10

Получить справку-помощь

Записать файл на диск

Загрузить файл с диска

Выполнить программу до курсора

Расширить окно до полного экрана

Активизировать следующее окно

Построчное выполнение программы с трассировкой подпрограмм

Построчное выполнение программы без трассировки подпрограмм

Компилировать программу с перекомпиляцией измененных модулей

Перейти в основное меню

 

File/Save

File/Open

Run/Go to Cursor

Window/Zoom

Window/Next

Run/Trace Into

 

Run/Step Over

 

Compile/Make

 

 

Окончание табл. 1

Alt+F1

Alt+F3

Alt+F5

Alt+F7

Alt+F8

Alt+F9

Alt+F10

Получить предыдущую справку

Закрыть окно

Открыть окно пользователя

Перейти к предыдущей строке окна сообщений

Перейти к следующей строке окна сообщений

Компилировать программу

Вызвать локальное меню

Help/Previous topic

Window/Close

Debug/User Screen

Tools/Go to previous

Tools/Go to next

Compile/Compile

Alt+BS

Alt+F

Alt+E

Alt+R

Alt+C

Alt+S

Alt+O

Alt+T

Alt+D

Alt+W

Alt+H

Alt+X

Alt+O

Отменить изменения в текущей строке

Перейти в меню File

Перейти в меню Edit

Перейти в меню Run

Перейти в меню Compile

Перейти в меню Search

Перейти в меню Options

Перейти в меню Tools

Перейти в меню Debug

Перейти в меню Window

Перейти в меню Help

Завершить работу среды Турбо Паскаль

Показать список открытых окон

Edit/Undo

 

 

 

 

 

 

 

 

 

 

File/Exit

Window/List

Ctrl+F1

Ctrl+F2

Ctrl+F3

Ctrl+F4

 

Ctrl+F5

Ctrl+F7

Ctrl+F8

Ctrl+F9

Получить контекстную справку

Рестарт программы

Вызвать окно используемых подпрограмм

Вычислить или изменить переменную или выражение

Изменить размер/переместить окно

Добавить выражение в окно отладки

Задать/снять точку останова

Выполнить программу

Help/Topic Search

Run/Program Reset

Debug/Call Stack

Debug/Evaluate/Modify

 

Window/Size/Move

Debug/Add watches

 

Run/Run

Shift+F1

Shift+F6

Вывести словарь контекстной помощи

Активизировать предыдущее окно

Help/Index

Window/Previous

Таблица 2

КОМАНДЫ РЕДАКТОРА ТУРБО ПАСКАЛЬ

 

Перемещение курсора

 

 

Выполняемая команда

Клавиши

Эквивалент меню

 

 

На символ влево

¬ (Ctrl+S)

 

 

 

На символ вправо

® (Ctrl+D)

 

 

 

На слово влево

Ctrl+¬ (Ctrl+A)

 

 

 

На слово вправо

Ctrl+® (Ctrl+F)

 

 

 

На строку вверх

­ (Ctrl+E)

 

 

 

На строку вниз

¯ (Ctrl+X)

 

 

 

Экран на строку вверх

Ctrl+W

 

 

 

Экран на строку вниз

Ctrl+Z

 

 

 

На страницу вверх

PgUp (Ctrl+R)

 

 

 

На страницу вниз

PgDn (Ctrl+C)

 

 

В начало строки

Home (Ctrl+Q S)

 

 

В конец строки

End (Ctrl+Q D)

 

 

В начало экрана

Ctrl+Home (Ctrl+Q E)

 

 

 

 

 

 

Продолжение табл. 2

 

В конец экрана

Ctrl+End (Ctrl+Q X)

 

 

В начало файла

Ctrl+PgUp (Ctrl+Q R)

 

 

В конец файла

Ctrl+PgDn (Ctrl+Q C)

 

 

В начало блока

Ctrl+Q B

 

 

В конец блока

Ctrl+Q K

 

 

На предыдущую позицию

Ctrl+Q P

 

 

На последнюю ошибку

Ctrl+Q W

 

 

Работа с блоками

 

 

Выделить блок

Пометить начало блока

Пометить конец блока

Пометить слово

Скопировать в буфер

Напечатать блок

Перенести в буфер

Вставить из буфера

Скопировать блок

Удалить блок

Выделить/скрыть блок

Переместить блок

Записать блок на диск

Прочитать блок с диска

Сместить блок вправо

Сместить блок влево

Установить маркер

Искать маркер

Shift+(­,¬,®,¯)

Ctrl+K B

Ctrl+K K

Ctrl+K T

Ctrl+Ins

Ctrl+K P

Shift+Del

Shift+Ins

Ctrl+K C

Ctrl+Del (Ctrl+K Y)

Ctrl+K H

Ctrl+K V

Ctrl+K W

Ctrl+K R

Ctrl+K I

Ctrl+K U

Ctrl+Kn (n-номер мар-

Ctrl+Qn кера от 0 до 9)

 

 

 

 

Edit/Copy

File/Print

Edit/Cut

Edit/Past

 

Edit/Clear

 

 

 

 

 

Вставки и удаления

 

 

Режим вставки/замены

Ins (Ctrl+V)

 

Options/Environ-

ment/Editor/Insert/

/Mode

 

 

Включить управляю-

щий символ в файл

Поместить знак табуляции

Вставить строку

Удалить строку

Удалить конец строки

Сtrl+P

 

Ctrl+I (Tab)

Ctrl+N

Ctrl+Y

Ctrl+Q Y

 

 

 

 

 

 

 

 

Удалить слово справа

Удалить символ

Удалить символ слева

Перенести директивы компилятора в начало файла

Ctrl+T

Del (Ctrl+G)

Bs (Ctrl+H)

Ctrl+O O

 

 

 

Поиск фрагментов

 

Найти

Повторить поиск

Найти и заменить

Прекратить поиск

Искать ошибку

Искать правую парную скобку

Искать левую парную скобку

Ctrl+Q F

Ctrl+L

Ctrl+Q A

Ctrl+U

Ctrl+Q W

Ctrl+Q [

Ctrl+Q ]

Search/Find

Search/Search again

Search/Replace

 

Search/Show last compile error

 

 

 

 

 

Окончание табл. 2

 

Прочие комады

 

Восстановить строку

Вкл./Выкл. табуляцию

Табуляция

Вкл./Выкл. автоотступ

Сохранить файл и остаться в редакторе

Выйти из редактора без сохранения файла

Вернуться из меню в окно редактирования

Ctrl+Q L

Ctrl+O T (Ctrl+P T)

Ctrl+O F

Ctrl+O I (Ctrl+Q I)

F2 (Ctrl+K S)

 

Ctrl+K D

 

Esc

Edit/Undo

 

Контрольные вопросы

1. Как производится запуск среды программирования Turbo Pascal?

2. Какова структура среды Turbo Pascal?

3. Каким образом осуществляется вход в Turbo-среду?

4. Как создать и отредактировать программу в Turbo-среде?

5. Как производится компиляция программы в среде Turbo Pascal?

6. Каким образом осуществляется выполнение программ в среде Turbo Pascal?

7. Как можно сохранить программу, подготовленную в Turbo-среде?

8. Как производится выход из среды Turbo Pascal?

9. Каково назначение функциональных клавиш среды Turbo Pascal?

10. Какие команды редактора Turbo Pascal вам известны?

Варианты заданий

Во всех вариантах заданий необходимо внести приведенную программу в персональный компьютер, отладить ее и получить результаты выполнения программы.

1. {Программа решения систем линейных уравнений}

Program SU;

Var

a1,a2,b1,b2,c1,c2,d,x,y:Real;

Begin{SU}

Writeln(‘Введите коэффициенты 1-го уравнения a1,b1,c1:’);

Read(a1,b1,c1);

Writeln(‘ Введите коэффициенты 2-го уравнения a2,b2,c2:’);

Read(a2,b2,c2);

Writeln(‘Исходные данные:’);

Writeln(‘A1=’ ,a1,‘ B1=’ ,b1, ‘ C1=’ ,c1);

Writeln(‘A2=’ ,a2,‘ B2=’ ,b2, ‘ C2=’ ,c2);

d:=a1*b2-c2*b1;

x:=(c1*b2-c2*b1)/d;

y:=(a1*c2-a2*c1)/d;

Writeln(‘Корни уравнений:’);

Writeln(’X=’,x,’ Y=’,y)

End. {SU}

2. {Вычисление объемов цилиндра и конуса}

Program Vol;

Var

h,r,V1,V2:Real;

Begin{Vol}

Writeln(‘Введите значение радиуса и высоты’);

Read(r,h);

Writeln(‘ Исходные данные’);

Writeln(‘Радиус=’,r,’ см’,’ Высота=’ ,h,’ см’);

V1:=h*pi*r*r;

V2:=V1/3;

Writeln(‘Объем цилиндра:’,V1,’ куб. см’);

Writeln(‘Объем конуса:’,V2,’ куб. см’)

End. {Vol}

3. {Вычисление корней квадратного уравнения}

Program KvUr;

Var

a,b,c,e,s,z:Real;

Begin{KvUr}

Writeln(‘Введите коэффициенты уравнения a, b, c’);

Read(a,b,c);

Writeln(‘ A=’ ,a,’ B=’ ,b,’ C=’ ,c’);

z:=0.5/a;

e:=-b*z;

s:=sqrt(b*b-4*a*c)*z;

Writeln(‘Корни уравнения ‘);

Writeln(‘X1=’ ,e+s,’ X2=’ ,e-s)

End.{KvUr}

4. {Программа определения пути}

Program Route;

Var

a,s,t,v0:Real;

Begin{Route}

Write(‘Начальная скорость в м/с:’);

Read(v0);

Write(‘Ускорение в м/с*2):’);

Read(a);

Write(‘время в сек.:’);

Read(t);

Writeln(‘Исходные данные:’);

Writeln (‘V=’,v0,’ м/с, А=’,a,’ м/c*2, T=’,t,’ c. ‘)

s:=V0*t+a*t/2;

Writeln(‘Путь =’,s,’ м’)

End.{Route}


5. {Определение времени падения}

Program Tm;

Var

h0, v0, t:Real;

Const

g=9.81;

Begin{Tm}

Write(‘ Введите начальную высоту в м. ‘);

Read(h0);

Write(‘начальную скорость в м/с:’);

Read(v0);

t:=2*v0+sqrt(4*v0*v0+8*h0*g))/(2*g);

Writeln(‘Камень упадет через’ ,t,’. сек’);

End.{Tm}

6. {Сравнение двух алгоритмов}

Program Comp;

Var

x,y1,y2:Real;

Begin{Comp}

Write (‘x=’);

Read(x);

y1:=3*x*x*x*x+2*x*x*x+1;

y2:=(((3*x+0)*x+2)*x+1)*x+1;

Writeln(‘Значение многочлена по прямому алгоритму:’);

Writeln(y);

Writeln(‘Значение многочлена по схеме Горнера:’);

Writeln(y2)

End.{Comp}

7. {Определение массы воздуха}

Program Mass;

Const

Mu=0.029;

T0=273.16;

R=8.31441;

Var

v,m,p,t,y:Real;

Begin{Mass}

Writeln(‘Введите исходные данные:’);

Write(‘Объем в литрах:’);

Read(v);

Write(‘Температура в градусах Цельсия:’);

Read(t);

Write(‘Давление в паскалях:’);

Read(p);

t:=t+T0;

m:=Mu*p*v/(R*t);

Writeln(‘Масса воздуха в цилиндре:’);

Writeln(1000*m,’ гр.’)

End.{Mass}

8. {Вычисление сопротивления цепи}

Program Res;

Var

G,R,R1,R2,R3:Real;

Begin {Res}

Writeln(‘Введите значения r1, r2, r3’);

Read(R1,R2,R3);

G:=1/R1+1/R2+1/R3;

R:=1/G;

Writeln(‘Общее сопротивление параллельной цепи’)

Writeln(‘равно’,R,’ Ом’)

End.{Res}

9. {Вычисление периода колебания маятника}

Program Period;

Const

G=9.81;

Var

l,t:Real;

Begin {Period}

Writeln(‘Введите длину маятника в м.’);

Read(l);

Writeln(‘При такой длине в’,l,’ м ‘);

t:=2*pi*sqrt(1/G);

Writeln(‘период колебаний равен’,t,’ с’)

End.{Period}

10. {Определение силы притяжения двух тел}

Program Force;

Const

GAMMA=6.673e-11;

Var

f,m1,m2,r:Real;

Begin {Force}

Writeln(‘Введите массы двух тел:’);

Read(m1,m2);

Writeln(‘и расстояние между ними:’);

Read(r);

f:=GAMMA*m1*m2/(r*r);

Writeln(‘Тела притягиваются с силой в’);

Writeln(f,’ N’)

End.{Force}

11. {Определение периметра n-угольника}

Program Per;

Var

al,n,p,r:Real;

Begin {Per}

Writeln(‘Введите радиус вписанной окружности и ‘);

Writeln(‘количество сторон многоугольника’);

Read(r,n);

Writeln(‘При =’,r,’ и n=’,n);

al:=pi/n;

p:=2*n*r*sin(al)/cos(al);

Writeln(‘периметр равен’ ,p)

End.{Per}

12. {Вычисление энергии}

Program Energe;

Const

B=1.38E-23;

C=2.997924E8;

H=6.6262E-34;

Var

L,T:Real;

E:Real;

Begin {Energe}

Writeln(‘Введите длину волны и температуру тела: ’);

Read(L,T);

Writeln(‘При L=’,L,’ m. и T=’,T,’ град. ’);

E:=2*pi*c*h/(L*L*L*L*L*EXP(c*h/(B*L*T)));

Writeln(‘Черное тело излучает энергию’);

Writeln(E,’ Дж’);

End.{Energe}

13. {Площадь цилиндра}

Program Surface;

Var

dl,h,r,sb,sf:Real;

Begin {Surface}

Writeln(‘Введите высоту и радиус цилиндра’);

Read(h,r);

Writeln(‘При h=’,h,’ см. и r=’,r,’ см.’);

dl:=2*pi*r;

sb:=dl*h;

sf:=sb+dl*r;

Writeln(‘Площадь боковой поверхности: ‘,sb,’ кв.см’);

Writeln(‘Площадь полной поверхности: ‘,sf,’ кв.см’);

End.{Surface}

14. {Определение значения цифры}

Program Chifre;

Var

n,number:integer;

chfr:char;

Begin {Chifre}

Writeln(‘Введите цифру’);

Read(chfr);

Writeln(‘Цифра ‘,chfr);

n:=ord(chfr);

number:=n-ord(‘0’);

Writeln(‘Имеет номер ‘,n);

Writeln(‘ее числовое значение ‘,number);

End.{Chifre}

15. {Объем цилиндра}

Program Vol;

Var

h,r,v:Real;

Begin {Vol}

Writeln(‘Введите высоту и радиус цилиндра’);

Read(h,r);

Writeln(‘При h=’,h,’ см. и r=’,r,’ см.’);

V:=pi*r*r*h;

Writeln(‘Объем цилиндра равен’,v,’ куб.см.’);

End.{Vol}

16. {Вычисление площади}

Program Pl;

Var

a,s:Real;

Begin {Pl}


Writeln(‘Введите сторону треугольника’);

Read(a);

Writeln(‘Площадь треугольника со стороной’,a,’ см.’);

s:=a*sqrt(3)/4;

Writeln(‘равна’,s,’ кв.см’);

End.{Pl}

17. {Вычисление медианы равностороннего треугольника}

Program Med;

Var

a,ma:Real;

Begin {Med}

Writeln(‘Введите сторону треугольника’);

Read(a);

Writeln(‘Медиана треугольника со стороной ‘,a);

ma:=0.58*sqrt(2*a*a*(1+cos(pi*/3)));

Writeln(‘равна’,ma);

End. {Med}

18. {Вычисление параметров куба}

Program Kub;

Var

a,kv,s,v:Real;

Begin {Kub}

Writeln(‘Введите длину ребра куба’);

Read(a);

Writeln(‘Куб с ребром ’,a);

kv:=a*a;

s:=6*kv;

v:=kv*a;

Writeln(‘имеет площадь’,s);

Writeln(‘и объем’,v);

End. {Kub}

19. {Определение температуры смеси}

Program Temp;

Var

t,t1,t2,V,V1,V2:Real;

Begin {Temp}

Writeln(‘Введите температуру и объем 1-й компоненты’);

Read(t1,V1);

Writeln(‘температуру и объем 2-й компоненты’);

Read(t2,V2);

V:=V1+V2;

t:=(V1*t1+V2*t2)/V;

Writeln(‘Объем смеси: ‘,V);

Writeln(‘Температура смеси: ’,t);

End. {Temp}

20. {Расчет времени встречи двух тел,                              }

{движущихся равноускоренно навстречу друг другу     }

Program Time;

Var

a1,a2,s,t:Real;

Begin {Time}

Writeln(‘Введите ускорение двух тел’);

Read(a1,a2);

Writeln(‘и расстояние между ними’);

Read(s);

Writeln(‘Тела, находящиеся на расстоянии ‘,s);

Writeln(‘и движущиеся с ускорениями ‘,a1,’  ’,a2);

t:=sqrt(2*s/(a1+a2));

Writeln(‘встретятся через’,t,’ секунд’);

End. {Time}

ТЕМА 3.2. ПРОГРАММИРОВАНИЕ ЛИНЕЙНЫХ АЛГОРИТМОВ

9.      Основные символы

При написании программы на языке Турбо Паскаль можно использовать прописные и строчные буквы латинского алфавита, знак подчеркивания ( _ ), арабские цифры десятичной системы счисления и специальные символы: +   -   *   /   =   <>   <   <=   >   >=   :=   .   ,   :   ;   ’   (   )   [   ]   {   }   ^   #   $   @   & .

Символы применяются для записи в программе констант (чисел) переменных и для указания операций.

10.  Константы

Константы определяют значения, которые известны до того, как программа начинает выполняться. Константы, применяемые в программах, могут быть целыми и вещественными (действительными).

Константы –100, 0, 256, +9999 являются константами целого типа.

Константы –99.9, 0.12, +34.09, 99.0 – вещественного типа.

Если в вычислениях встречаются очень маленькие или очень большие величины, то их нелегко представить обычной десятичной записью. Например, известно, что масса покоя электрона приблизительно равна 0.000000000000000000000000000910956 грамма. Также числа чаще записываются в более удобном виде: 9,10956´10-28.

Можно такие числа записывать и в языке Паскаль. Часть числа, которая читается как “умножить на десять в степени”, сокращается до “Е” или “е”, и такое число выглядит в программе следующим образом:

9.10956Е-28.

Цифры, предшествующие букве Е, образуют мантиссу числа, а за буквой Е пишется целый порядок. Мантисса и порядок могут иметь знак + или -.

Допускается использование шестнадцатеричных констант, состоящих из цифр 0 1 2 3 4 5 6 7 8 9 A B C D E F и начинающихся символом $, например: $1BF=1´162+11´161+15´160=256+176+15=44710.

Диапазон представления шестнадцатеричных констант от $0000 до $FFFF, что в десятичной системе счисления соответствует значениям от 0 до 65535.

В языке зарезервированы стандартные константы целого типа Maxint со значением 32767 и вещественного типа pi, имеющая значение 3,1415926535897932385.

11.  Переменные и идентификаторы

Для обозначения переменных в программах используются их имена (идентификаторы). Переменная отличается от константы тем, что определяется не своим численным значением, а идентификатором (именем). Каждой переменной в памяти ЭВМ соответствует выделенная под нее область памяти, в которой хранится (записано) определяемое программой численное значение. Имя переменной состоит из букв, знака подчеркивания и цифр, но первым символом может быть только буква или знак подчеркивания. При записи идентификаторов используются прописные и строчные буквы латинского алфавита, при этом никакого различия между буквами нижнего и верхнего регистров не делается. Например: x, y22, gamma, Nomera_Groupp.

Переменные так же, как и константы, относятся к какому-либо типу. Тип переменной задается с помощью описания переменных в специальном разделе программы. Ниже приведен пример использования для этого раздела описания переменных:

Var

f,r,m1,m2:Real;

i,k23:Integer;

Здесь переменные f, r, m1, m2 объявлены как переменные действительного типа, переменные i, k23 - целого типа.

12.  Арифметические выражения

Константы и идентификаторы, объединенные знаками арифметических операций, образуют арифметические выражения. Константы и идентификаторы, входящие в арифметическое выражение, называют в общем случае операндами. Символы + - * / означают всем известные операции сложения, вычитания, умножения и деления.

Порядок выполнения операций в арифметическом выражении определяется приоритетом выполнения операций, а также управляется с помощью скобок. Операции умножения и деления выполняются перед операциями сложения и вычитания.


В отличие от алгебры не допускается многоступенчатая запись арифметических выражений. Например, выражение вида

может быть записано на языке Паскаль в следующем виде:

(a+12.55*b)/(c2+1.87E3)+gamma

Кроме известных арифметических операций к данным целого типа могут применяться ряд дополнительных операций:

- деление нацело div: 10 div 3=3;

- остаток от целочисленного деления mod: 10 mod 3=1,

которые имеют тот же приоритет, что и операции умножения и деления.

13.  Стандартные функции

В качестве операндов в выражении кроме констант и переменных можно использовать стандартные функции. Аргументы функций обязательно заключаются в круглые скобки. Приоритет выполнения функции выше, чем приоритет выполнения арифметических операций. Рассматриваемая реализация языка Паскаль допускает использование достаточно большого числа стандартных функций. В таблице приведены наиболее часто используемые арифметические стандартные функции.

Обращение

Тип

аргумента

Тип

результата

Тип

действия

Abs(x)

Вещественный, целый

Вещественный,целый

Абсолютная величина x

Sqr(x)

Вещественный, целый

Вещественный, целый

Квадрат x

Sin(x)

Вещественный, целый

Вещественный

Синус х (х в радианах)

Cos(x)

Вещественный, целый

Вещественный

Косинус х (х в радианах)

Arctan(x)

Вещественный, целый

Вещественный

Арктангенс х (х в радианах)

Exp(x)

Вещественный, целый

Вещественный

Возведение е»2,71828 в степень х

Ln(x)

Вещественный, целый

Вещественный

Логарифм натуральный x (x>0)

Sqrt(x)

Вещественный, целый

Вещественный

Корень квадратный x (x³0)

Trunc(x)

Вещественный

Целый

Целая часть x

Round(x)

Вещественный

Целый

Округление х до ближайшего целого

Frac(x)

Вещественный

Вещественный

Дробная часть х

Dec(x[,n])

Целый

Целый

Уменьшение х на n, при отсутствии n - на 1

Inc(x[,n])

Целый

Целый

Увеличение х на n, при отсутствии n - на 1

Для возведения переменной x в степень a, т.е. нахождения xa, где x>0, используется известное в математике равенство

xa = ea×lnx.

Тогда выражение xa на языке Турбо Паскаль должно быть записано в виде Exp(a*Ln(x)).

14.  Оператор присваивания

Значение переменной может быть задано или изменено с помощью оператора присваивания, который имеет вид:

<имя>:=<выражение>

После описания переменных

Var

x0,hx,n,xn:Real;

можно записать

x0:=1;

hx:=2;

n:=100;

xn:=x0+hx*n;

15.  Структур программы

Программа состоит из заголовка, блока и заканчивается точкой. Типичный заголовок выглядит так:

Program Primer;

Слово Program является первым словом программы.  За ним следуют имя программы.

Блок состоит из следующих разделов:

- раздел модулей (Uses);

- раздел меток (Label);

- раздел констант (Const);

- раздел типов (Type);

- раздел переменных (Var);

- раздел процедур и функций;

- раздел операторов.

Раздел операторов должен обязательно присутствовать в программе, остальные же разделы могут отсутствовать.

В Турбо Паскале разделы описаний могут встречаться в программе любое количество раз и следовать практически в любом порядке. Единственное ограничение состоит в том, чтобы все описания объектов программы были сделаны до того, как они будут использованы.

Программы, реализующие линейный алгоритм, обычно включают в свой состав разделы констант, переменных и операторов.

Раздел определения констант следует за заголовком. Пример раздела определения констант:

Const

MU=0.029;

LIMIT_CYCLE=100;

K=56;

Использование имен для обращения к константам обусловлено тем, что в случае необходимости внесения изменений в численное значение константы нужно осуществить единственное изменение, которое делается в разделе определения констант. В большинстве программ раздел определения констант может отсутствовать.

Вслед за разделом определения констант следует раздел описания переменных, в котором всем переменным, используемым в данной программе, присваивается вещественный или целочисленный тип. Например:

Var

x,y:Real;

i,limit,k3:Integer;

Далее следуют операторы программы, заключенные в операторные скобки Begin и End. К ним относятся, в первую очередь, операторы ввода исходных данных Read, операторы присваивания и операторы вывода на печать результатов решения Write. Операторы отделяются друг от друга точкой с запятой. Заканчивается программа словом End, после которого обязательно ставится точка.

Программа на языке Паскаль будет более наглядной и понятой, если ее записать специальным образом, добавив пробелы для отделения и выделения нужных участков программы. Пробелы могут встречаться практически в любом месте программы. Они не должны встречаться только внутри идентификаторов, констант, составных символов и зарезервированных слов.

Поясняющие надписи вводятся в программу с помощью комментариев, которые имеют вид

{ПОСЛЕДОВАТЕЛЬНОСТЬ СИМВОЛОВ}

16.  Пример составления программы


Составить программу вычисления общей поверхности и объема круглого конуса по заданным радиусу основания R и длине образующей L. При вычислениях использовать равенства:

где H - высота конуса, определяемая по формуле

 

Программа на языке Турбо Паскаль в общем случае содержит вводные комментарии, заголовок, раздел определения констант, раздел описания переменных, раздел операторов. Определение исходных данных может быть осуществлено с помощью операторов присваивания либо с помощью специальных операторов ввода. Вычисления по формулам реализуются в порядке определения числовых значений переменных H, S и V соответственно, после чего значения S и V выводятся на экран.

Для удобства пользования введем комментарии, которые позволяют записать нужную учетную и поясняющую информацию (фамилию студента, номер группы и выполняемого варианта, фамилию преподавателя и цель написания программы).

При вычислениях будет использована константа p, которой в Турбо Паскале соответствует имя PI.

В качестве имен переменных будем использовать переменные, обозначения которых максимально совпадают с именами и обозначениями переменных самой задачи.

Общий вид схемы алгоритма и программа на языке Турбо Паскаль для рассматриваемого примера показаны на рис. 1.

Рис. 1

{Программа: CONUS, Лаб. раб. N 1, Вар.28 }

{Цель: Вычисление площади и объема конуса }

{Описание параметров и переменных:              }

{   R - радиус; L - длина образующей;            }

{   H - высота;  S - площадь поверхности;          }

{   V - объем.                                            }

{Требуемые подпрограммы: нет                    }

{Метод: Вычисление по формулам                }

{Программист: Иванов, гр. 5030                    }

{Проверил: Петров, каф. ВПМ                       }

{Дата написания: 25 октября 2005 г.                  }

Program CONUS;

Var

H,L,R,S,T,V:Real;

Begin {CONUS}

WriteLn('Введите радиус и длину ',

'образующей');

Read(R,L);

WriteLn('R=',R,' L=',L);

H:=Sqrt(L*L-R*R);

T:=PI*R*R;

S:=T+PI*R*L;

V:=T*H/3;

WriteLn('Параметры конуса:');

WriteLn('H=',H,' V=',V,' S=',S)

End.{CONUS}

Исходные данные для просчета контрольного варианта выбираем таким образом, чтобы вычисления были достаточно простые и, в то же время, обеспечивали бы полные вычисления по всем формулам.

Примем R=3 см, L=5 см. Тогда получим H=4 см, S=75,36 см2, V=37,68 см3.

Результаты просчета контрольного варианта на ЭВМ дают следующие значения:

Параметры конуса:

R = 3.000000E+00 L = 5.000000E+00 H = 4.000000E+00

V = 3.767990E+01

S = 7.539820E+01

Откуда видно, что они хорошо совпадают с результатами ручного просчета.


Контрольные вопросы

1. Какие типы арифметических данных (констант и переменных) можно использовать в программах на Паскале?

2. В чем заключается отличие переменной от константы?

3. Из каких разделов состоит Паскаль-программа?

4. Каков приоритет выполнения операций в арифметическом выражении?

5. Какие стандартные функции используются в Турбо Паскале?

6. Как можно определить начальные значения переменных?

7. Чем характеризуется линейный алгоритм?

8. Каковы особенности выполнения оператора присваивания?

Варианты задания

1.

, где .

2.

, где , .

3.

, где .

4.

, где , .

5.

, где .

6.

, где .

7.

, где .

8.

, где .

9.

, где .

10.

, где .

11.

, где , .

12.

, где , .

13.

, где .

14.

, где .

15.

, где .

16.

, где , .

17.

, где .

18.

, где .

19.

, где .

20.

, где , , .

ТЕМА 3.3. ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ РАЗВЕТВЛЯЮЩЕЙСЯ СТРУКТУРЫ

17.  Условный оператор

Условный оператор позволяет выбрать и выполнить один из двух входящих в него операторов в зависимости от значения логического выражения. Он имеет следующий вид:

if <логическое выражение>

then

<оператор 1>

[else

<оператор 2>]

Здесь ifthenelse – зарезервированные слова языка, означающие соответственно, ЕСЛИ … ТО … ИНАЧЕ, квадратные скобки означают, что конструкция else <оператор 2> может отсутствовать.

Если <логическое выражение> принимает значение ИСТИНА, то выполняется <оператор 1>, если же оно принимает значение ЛОЖЬ, то выполняется <оператор 2>. В любом случае далее выполняется оператор, стоящий в программе непосредственно за условным. Например, оператор

if x<y

then

x:=x+1

else

y:=y+1

позволяет увеличивать на 1 меньшее из двух значений x или y и может быть “прочитан” следующим образом: “ЕСЛИ x меньше y, ТО x увеличить на единицу, ИНАЧЕ (т.е. когда y меньше или равен x) увеличить на единицу y”.

Условный оператор может не иметь конструкции else, тогда он называется сокращенным условным оператором. Если логическое выражение принимает значение ЛОЖЬ, сразу выполняется оператор, следующий за условным. Например, оператор

if x<0

then

x:= -x

обеспечивает инвертирование значения переменной x, если оно отрицательно, и оставляет его без изменения в противном случае. Рассмотрим более подробно составные части условного оператора.

18.  Логическое выражение

Логическим (булевым) выражением называется выражение, имеющее значение типа Boolean, т.е. True (ИСТИНА) или False (ЛОЖЬ). Операнды логического выражения связаны между собой знаками логических операций или операциями отношения.

В языке Паскаль допустимы следующие операции отношения: < - меньше; <= - меньше или равно; = - равно; > - больше; >= - больше или равно; <> - не равно.

Логическое выражение в виде отношения принимает значение true, если оно удовлетворяется для входящих в него операндов, и false в противном случае, поэтому выражение 5>2 имеет значение true, a 7<=0 - false.

Логические переменные должны быть описаны  в разделе описания переменных как имеющие тип Boolean (ЛОГИЧЕСКИЙ). Например, переменные x, y, z, описанные как

Var

x,y,z:Boolean;

считаются в программе логическими. Над множеством логических переменных определены следующие логические операции:

and - логическое умножение (конъюнкция),

or - логическое сложение (дизъюнкция),

not - логическое отрицание (инверсия),

xor - исключающее ИЛИ.

Их действие иллюстрируется таблицей (x, y - операнды логического типа):

x

y

not x

x and y

x or y

x xor y

false

false

true

false

false

false

false

true

true

false

true

true

true

false

false

false

true

true

true

true

false

true

true

false

Логические операции и операции отношения часто встречаются в одном логическом выражении, при этом отношения их необходимо заключать в скобки. В процессе вычислений эти операции имеют следующий приоритет выполнения:

выражения, заключенные в скобки;

логическое отрицание not;

логическое умножение and;

логическое сложение or, исключающее ИЛИ xor;

операции отношения.

Операции, имеющие одинаковый приоритет, вычисляются слева направо. Например, логическое выражение

1      6    4        2       5          3

(-3>=5)  or not (7<9)  and (0<=3)

имеет значение false. Цифрами сверху показан порядок выполнения операций.

19.  Операторы в конструкциях then и else

В общем случае в качестве <Оператора1> и <Оператора2> может быть использован любой оператор языка Паскаль. Однако часто возникает необходимость вставить в какую-нибудь ветвь не один, а группу операторов. В этом случае пользуются так называемым составным оператором. Составной оператор - это заключенная между зарезервированными словами begin (НАЧАЛО) и end (КОНЕЦ) последовательность операторов, отделенных друг от друга точкой с запятой:

begin

<оператор1>;

<оператор2>;

-  -  -

<операторn>

end

Примером  простейшего  разветвляющегося вычислительного процесса  может  служить  программа  определения  значения  функции  y= f(x), представленной на рис. 1,а. Так как функция определена на отрезке [-1; 1], то при ее вычислении необходимо использовать структуру выбора, в одной ветви  которой  вычисляется  значение  по  формуле  y= -x2+1 и выводится на экран, а в другой - выводится сообщение ФУНКЦИЯ НЕ ОПРЕДЕЛЕНА. Общая схема и программа решения задачи  представлены на рис. 1,б и 1,в соответственно.

Y

1                                a

 

 

 

-1                                 0                             1          X

Program RazV1;

б   { Цель : Вычисление функции.   }       в

{ Переменные : х - аргумент;       }

{                          y - функция.        }

{ Дата : 02.10.05                       }

{ Программист : Сизов В.К.         }

Var

x, y : Real;

Begin {RazV1}

WriteLn ('Введите  х ');

Read (x);

WriteLn ('x=',x);

if abs (x) <= 1

then

begin

y:= -x*x + 1;

WriteLn ('y=',y)

end

else

WriteLn ('Функция не определена');

End. {RAZV1}

Рис. 1

Структура выбора может входить составной частью в одну из ветвей другой структуры выбора. В этом случае имеет место сложное разветвление. Тогда ветвь else всегда относится к ближайшему if, не имеющему else.

20.  Оператор варианта

Условный оператор позволяет в процессе выполнения программы выбирать одно из двух возможных действий в зависимости от значения логического выражения. Оператор варианта есть обобщение условного оператора: он дает возможность выполнить одно из нескольких действий. В зависимости от значения выражения селектора, относящегося к перечисляемому или ограниченному (но не вещественному) типу, этот оператор производит выбор из нескольких операторов. В общем случае оператор варианта имеет вид:

Case <селектор> of

<метка11> [,<метка12>,…<метка1n>]:<оператор1>;

<метка21> [,<метка22>,…<метка2m>]:<оператор2>;

¼

<меткаk1> [,<меткаk2>,…<меткаkl>]:<операторk>;

[else

<операторk+1>]

end;

Здесь case – of – end – зарезервированные слова языка Паскаль, которые можно перевести соответственно как ВЫБОР – ИЗ – КОНЕЦ. Между словами of и end располагается case–список, состоящий из операндов, перед которыми записываются хотя бы одна или более меток – констант, отделяемых от оператора двоеточием. Каждое отличное от других значение селектора может появиться в качестве константы только перед одним оператором case–списка. Для выполнения будет выбран тот оператор, перед которым стоит константа, равная значению селектора, если же среди констант отсутствует значение селектора, то будет выполнен оператор, стоящий за else. Если же альтернативная конструкция else отсутствует, то будет выполнен оператор, следующий за оператором case сразу после слова end.

Примером, иллюстрирующим применение оператора варианта, может служить программа выполнения следующего задания.

Найти остаток от деления значения целого выражения с=k(a+b) на 4 и выдать сообщение о его величине. Если он равен 0, то увеличить значение на 1, если 2 или 3, то увеличить значение на 2.

Программа решения задачи приведена ниже, где константой D обозначена величина, по модулю которой находится остаток от целочисленного деления.

Program OSTATOK;

{цель:                                                 }

{Вычисление остатка от деления на 4         }

{Переменные :                                      }

{     a,b,k – параметры выражения      }

{     c – значение выражения               }

{Программист Орлова М.В.                    }

{Дата:                                       27.11.05     }

Const

d=4;

Var

a,b,c,k:integer;

Begin {OSTATOK}

writeln(’Введите a,b,k’);

read(a,b,k);

writeln('K=',k,' A=',a,' B=',b);

c:=k*(a+b);

case c mod d of

0:  begin

c:=c+1;

writeln('c=',c,' остаток 0’)

end;

1:writeln('c=',c,' остаток 1’);

2,3:   begin

c:=c+2;

writeln(‘c=’,c,’ остаток 2 или 3’)

end

end

end. {OSTATOK}


Контрольные вопросы

1. Что такое логическое выражение?

2. Что такое отношение? Какие операции отношения вы знаете?

3. Какие логические операции вам известны?

4. Каким образом описываются логические переменные?

5. Каков порядок вычисления значения логического выражения?

6. Каковы формы условного оператора? Нарисуйте его схему.

7. Приведите примеры сложных условных операторов.

8. Какую структуру имеет оператор варианта?

9. Какой тип должны иметь селектор варианта и метки?

10. Объясните принцип работы оператора варианта.

Варианты заданий

При выполнении программы на ЭВМ исходные данные выбрать таким образом, чтобы получить результаты по каждой из ветвей программы.

1. Составить программу вычисления значения функции:

при  x<0;

при  ;

при  .

 

2. Даны три числа a, b, c. Если хотя бы одно из них равно нулю с погрешностью , то вычислить сумму этих чисел, в противном случае - их произведение.

3. Составить программу вычисления значения функции:

при  k=3  или  k=5;

при  k=20;

при  k=10  или  k=15.

 

 

 

В остальных случаях значение y не определено.

4. Составить программу вычисления значения функции, заданной графиком при произвольном значении x.

 

5. Даны отрезки A, B, C. Составить программу для определения:

1)      возможности построения из этих отрезков треугольника;

2)      будет ли построенный треугольник равносторонним, и печати соответствующего сообщения.

6. Определить, принадлежит ли точка M(x, y) заштрихованной области.

7. Составить программу вычисления значения функции:

при

при

В остальных случаях значение y равно 0.

8. Даны три числа a, b, c. Составить программу нахождения значения минимального отклонения каждого из них от их среднего арифметического. Данные выбрать произвольно.

9. Даны три целых положительных числа a, b, c. Найти остаток k от деления на 3 величины М:

 

при  k=1;

при  k=0;

при  k=2.

вычислить значение функции:

 

10. Составить программу, печатающую одно из сообщений:

“Корни действительные и равные”,

“Корни действительные и различные”,

“Корни мнимые”,

в зависимости от вида корней квадратного уравнения

. Принять .

11. Определить, принадлежит ли точка А(x, y) заштрихованной области.

 

12. Составить программу вычисления значения функции, заданной графиком, при произвольном значении x.

 

при  ;

при  ;

при  ,

13. Составить программу вычисления значения функции:

 

 

где .

14. Даны три числа A, B, C. Если все числа положительны, вычислить Z=A+B+C, если все отрицательны - Z=(A+B)C, в противном случае Z=ABC.

15. Составить программу преобразования вещественного вектора X (x1, x2, x3) по правилу: если x1<x2<x3, то всем компонентам присвоить значение наибольшей из них х3, если x1>x2>x3, то вектор оставить без изменения, в противном случае все компоненты заменить их квадратами.

16. Составить программу для вычисления функции:

,

при  ;

при  .

где

 

 

В остальных случаях принять а=0. Для просчета значение w выбрать произвольно.

17. Составить программу вычисления значения функции, заданной графиком. Значение х взять произвольно.

 

18. Даны три числа a, b, c. Составить программу вычисления экспоненты числа, значение которого ближе всего к значению функции

.

19. Определить принадлежность точки B(x,y) к заштрихованной области.

 

20. Даны произвольные отрезки a, b, c  и  d. Составить программу определения возможности построения из них параллелограмма и печати соответствующего сообщения.

ТЕМА 4.1. ПРОЕКТИРОВАНИЕ ПРОГРАММ ЦИКЛИЧЕСКОЙ СТРУКТУРЫ

21.  Оператор цикла с параметром

Для реализации циклического процесса с известным числом пов­торений целесообразно использовать оператор цикла с парамет­ром. Цикл с параметром предусматривает повторное выполнение неко­торого другого оператора с одновременным изменением по правилу арифметической прогрессии значения, присваиваемого управляющей переменной (параметру) этого цикла. Конструкцию оператора цикла с параметром можно представить в следующем виде:

for<имя>:=<выражение1>                     <выражение2> do

<оператор>

<Оператор> выполняется в цикле for для каждого значения па­раметра <имя> начиная со значения <выражение1>, которое задает начальное значение параметра цикла, до значения <выра­жение2>, задающего конечное значение параметра цикла, включитель­но. При использовании служебного слова to значение параметра цик­ла увеличивается, при downto - уменьшается. Шаг изменения значе­ний параметра цикла зависит от типа этой переменной. При исполь­зовании в качестве параметра цикла переменной целого типа, шаг равен единице.

Необходимо придерживаться следующих правил организации циклической структуры с параметром:

а) параметр цикла, начальное и конечное значения должны быть одного типа;

б) запрещено изменять внутри цикла (в теле  цикла)  значения

<имя >, <выражение1>, <выражение2>;

в) запрещено передавать управление в тело цикла извне, минуя заголовок for, так как начальное и конечное значения вычисляются один раз при первоначальном входе в цикл;

г) тело цикла не выполняется, если начальное значение при to больше (при downto меньше), чем конечное;

д) после выхода из цикла for значение <имя> не определено и не может быть использовано в дальнейших вычислениях;

е) после служебного слова do может быть записан только один оператор, поэтому в случае, когда в теле цикла содержится нес­колько операторов, их необходимо заключать в операторные скобки begin ... end, организуя составной оператор.

В качестве параметра цикла может выступать переменная любого скалярного типа, в том числе и определяемого программистом, кроме вещественного. Шаг изменения значения параметра цикла определяется с помощью стандартной функции Succ(x) в сочетании с to или функции Pred(x) в сочетании с downto. Функция Succ(x) определяет следующий, а функция Pred(x) - предыдущий элемент из списка зна­чений аргумента, перечисленных в определении его типа, например, Succ(4)=5, Succ('D')='E', Pred(22)=21, Pred(true)=false.

Рассмотрим несколько типовых примеров использования оператора цикла с параметром.

22.  Табулирование функции

Поскольку в качестве параметра в операторе for не может быть использована переменная действительного типа (например, переменная x), то введем дополнительную переменную i, значение которой будем изменять от 1 до Nx, с постоянным шагом 1. Значение Nx равно числу повторений цикла при законе изменения параметра x=x0(hx)xn и определяется формулой

,

где [z] означает целую часть числа z.

Для переменной x перед циклом зададим ее начальное значение x0, а в теле цикла будем производить ее модификацию (изменение). Закон изменения параметра i цикла укажем в заголовке цикла. В результате получаем схему алгоритма циклической структуры с заголовком (см.  рис. 1), для которой запишем программу табулирования функции

 

при x=x0(hx)xn в виде:

Program Tab;

{Цель - табулирование функции y=F(x) с         }

{            помощью  оператора цикла с          }

{            параметром                                    }

{Переменные:                                              }

{   X - переменная цикла;                                }


{   X0, XN - начальное и конечное значения;    }

{   HX - шаг изменения;                              }

{   I - параметр цикла;                                      }

{   NX - число повторений тела цикла.              }

{Дата написания - 25.10.05 г.                         }

{Программист - Федоров Ф.Ф., Гр. 5030      }

Var

hx,x,x0,xn,y:real;

i,nx:integer;

begin {Tab}

{Ввод и эхо-печать исходных данных }

Write('x0=');

Read(x0);

Write('hx=');

Read(hx);

Write('xn=');

Read(xn);

Writeln('X0=',x0,' HX=',hx,' XN=',xn);

{Табулирование функции }

Рис. 1                            x:=x0;

nx:=Trunc((xn-x0)/hx+1e-6)+1;

For i:=1 to nx do

begin {начало цикла}

if x<=0

then

y:=0

else    if x<1

then

y:=x

else

y:=1;

Writeln('X=',x,' Y=',y);

x:=x+hx

end {конец цикла}

end. {Tab}

В программе использована стандартная функция Trunc(x), ре­зультат которой есть наибольшее целое число, меньшее или равное x. Аргумент функции Trunc дополнен слагаемым 1Е-6, который, не изменяя полученного результата, позволяет избежать ошибки предс­тавления вещественных значений x0, hx и xn.

23.  Вычисление конечных сумм и произведений


Составим программу вычисления значений функции

В зависимости от значения переменной x реализуется вычисление суммы или произведения. Вычисление суммы целесообразно реализовать с помощью оператора цикла с параметром n. В теле  цикла  необходимо  вычислить значение очередного слагаемого un=(x/n)n при текущем n и осуществить накопление суммы по формуле Sn=Sn-1+un. Подобные операции требуется выполнить для n=1(1)10. Так как нет необходимости запоминать значения всех слагаемых u1,u2,...,u10 и конечных сумм S1,S2,...,S10, то в качестве Sn и un можно использовать скалярные переменные S и u. При этом накоп­ление суммы можно реализовать с помощью операции S:=S+u. Перед выполнением цикла значение переменной S должно быть нулевым (S:=0).

Вычисление произведения организуем с помощью аналогичной циклической структуры с параметром. В данном случае необходимо вычислять сомножитель u:=1+x/(n+2) и произведение по формуле p:=p*u. Перед выполнением цикла переменной p должно быть присвоено значение 1 (p:=1).

Для обеспечения большей универсальности алгоритма обозначим предел суммирования через ks, предел произведения через kp и обеспечим их ввод в программе в качестве исходных данных. Запишем программу:

Program Sum_Mul;

{Цель - Вычисление сложной функции (конечная       }

{          сумма и произведение)                               }

{Переменные:                                                          }

{     z - значение функции;     x - аргумент функции          }

{     S – сумма;               P - произведение             }

{     n - переменная суммирования и произведения;     }

{     u - слагаемое (сомножитель);                               }

{     KS- число слагаемых;     KP- число сомножителей    }

{Дата написания - 27.10.05 г.                                     }

{Программист - Сергеев С.С., гр. 5030                     }

Var

P,S,T,u,x,z:real;

n,KP,KS :integer;

begin {Sum_Mul}

Write('X=');

Read(x);

Write('KS=');

Read (KS);

Write('KP=');

Read(KP);

Writeln ('X=',x,' KS=',KS,' KP=',KP);

if x<=2

then

begin

S:=0;

for n:=1 to KS do

begin

u:=Exp(n*Ln(x/n));

S:=S+u

end;

z:=S*(x+1)/2

end

else

begin

P:=1;

for n:=0 to KP do

P:=P*(1+x/(n+2));

T:=Sin(x);

z:=(T+Cos(x))*P/(2+T)

end;

Writeln ('X=',x,' Z=',z)

end. {Sum_Mul}

Значение переменной x в данной программе может принимать только положительное значение, так как при возведении x в степень используется стандартная функция Ln.

Контрольные вопросы

1. Какова общая структура цикла с параметром?

2. В чем особенность оператора цикла с параметром?

3. Каким образом оформить тело цикла с параметром для нес­кольких операторов?

4. Приведите общую структуру оператора цикла с параметром.

5. Каковы основные правила организации цикла с параметром?

6. Переменные каких типов могут быть параметром цикла в операторе for?

7. Какие значения может принимать шаг изменения параметра цикла в операторе for?

8. В чем отличие алгоритма вычисления суммы от алгоритма вычисления произведения?

9. Приведите пример вычисления конечной суммы.

10. Приведите пример, в котором параметр цикла не является целочисленной переменной.

Варианты заданий

1. Вычислить

 

где x = -2(0,2)2 , A = -5 , B = 12.

2. Вычислить значение функции f(x) по указанному графику для значения аргумента x = x0(hx)xn,

Y

 

 

1

 

 

X

-1           0        1

где x0 = -2; hx = 0,5; xn.= 2.

3. Вычислить значение функции одной переменной

 

в интервале -3 £ x £ 6 с шагом hx = 0,5. Точки разрыва исключить.

4. Вычислить сумму

 

5. Вычислить сумму

 

6. Вычислить произведение

 

7. Вычислить значение интеграла

 

по формуле прямоугольников

 

f(xi) - подынтегральная функция. Принять a = 0, b = p/4, n = 30.

8. Вычислить сумму

 

Для контрольного просчета принять x = 1,75.

9. Вычислить значение интеграла

 

по формуле трапеций

 

xk = a + i×h; f(xk) подынтегральная функция.

Принять a = 1, b = 4, n = 40.

10. Вычислить произведение

 

11. Вычислить

 

Для контрольного просчета принять x = 7,5; a = 1,7.

12. Вычислить

 

Для контрольного просчета принять k = 5.

13. Определить количество заданных точек (x,y), попавших в указанную область, включая ее границы,

Y                           где x = x0 + ih;

y = y0 + ih;

x0 = 0,5; y0 = 1,5;

h = 0,1; i = 1(1)10.

 

-2                     0              2                     X

14. Определить, сколько четных целых чисел лежит в интервале (a,b), где a < sinx2; b = x4; x = 3.

15. Определить максимальное целое число n, удовлетворяющее условию 3n2 - 730n < 5.

16. Вычислить первые 20 членов последовательности чисел Фибоначчи: u1 = 1; u2 = 2; un = un-1 + un-2, а также значение золотого сечения

 

17. Вычислить

 

для x = -3(0,5)3; a = 1,35. Причем точку 0, т.е. x = 0, исключить.

18. Вычислить значение интеграла

 

по формуле трапеций при n = 30 (см. вариант 9), где c = 2,1.

19. Вычислить значение интеграла

 

по формуле трапеций при n = 20 (см. вариант 9), где c = 1,5.

20. Вычислить

 

для x = 0,5(0,2)1,7. Точки разрыва исключить.

ТЕМА 4.2. ИТЕРАЦИОННЫЕ ЦИКЛЫ

24.  Оператор цикла с предусловием

Часто встречаются задачи, когда число повторений в цикле неизвестно, а задано только некоторое условие его продолжения или окончания. Для программирования таких алгоритмов в Турбо Паскале существуют два типа операторов - оператор цикла с предусловием и оператор цикла с постусловием.

Оператор цикла с предусловием имеет следующий синтаксис:

While <логическое выражение> do

<оператор>

Здесь внутренний <оператор> выполняется в цикле до тех пор, пока условие продолжения цикла (<логическое выражение>) истинно. Если же <логическое выражение> становится ложным, то цикл прекращает функционировать и выполняется оператор, следующий за оператором While. Если условие продолжения цикла ложно с самого начала, то внутренний оператор не выполняется ни разу. Условие продолжения цикла вычисляется и анализируется перед каждым шагом выполнения цикла, отсюда и термин "предусловие". Если в теле цикла необходимо выполнять несколько операторов, то эту группу следует объединить в один составной оператор с помощью операторных скобок begin и end.

Пусть, например, необходимо вычислить среднее арифметическое последовательности чисел произвольной длины.

Каждый раз, когда вводится число N, счетчик количества чисел увеличивается на 1. Конец ввода определяется по значению булевой функции EOF - "конец файла". При вводе с терминала завершение последовательности должно быть указано нажатием клавиш "конец файла". Этот знак можно ввести, нажав одновременно клавишу <Ctrl> и клавишу <z>. Когда этот знак будет прочитан, функция EOF примет значение true и цикл накопления суммы прекратится.

На рис. 1 приведена схема алгоритма, а далее - текст программы:

{Цель -  вычисление среднего арифметического   }

{            произвольного количества чисел              }

{Переменные:                                                   }

{        N - вводимые числа;                               }

{        i - счетчик количества чисел;                     }

{        S - сумма чисел.                                       }

{Дата написания - 01.11.2001 г.                          }

{Программист - Иванов И.И., гр. 1030                   }

Program MidSum;

Var

N,S:Real;

i:Integer;

Begin{MidSum}

S:=0;

i:=0;

Writeln('Пожалуйста, введите список,');

Writeln('заканчивающийся символом');

Writeln('конца файла');

Read(N);

While not EOF do

begin

S:=S+N;

Inc (i);

Read (N)

end;

Writeln('Среднее значение ',i,' чисел');

Writeln('равно ',S/i)

Рис. 1                  end. {MidSum}

25. Оператор цикла с постусловием

Оператор цикла с постусловием имеет следующую структуру:

repeat

<оператор 1>;

<оператор 2>;

...

<оператор N>

until <логическое выражение>


Оператор или группа операторов, следующая после служебного слова repeat (повторять), выполняется при входе в оператор цикла хотя бы один раз, и только после этого вычисляется булевское вы­ражение, следующее за служебным словом until (до тех пор, пока). Если булевское выражение имеет значение false, оператор или группа операторов выполняется вновь, и так до тех пор, пока булевское выражение не примет значение true.

Существует  программа,  алгоритм  которой приведен на рис. 2, определяющая, является ли число простым. С помощью операции mod проводится проверка всех целых чисел от 2 до N. Если такой множи­тель находится, цикл завершается значением i, равным этому множителю. Если число является простым, цикл завершается при значении i, равном N.

{Цель - определить, является ли число простым                           }

{Переменные: N - исследуемое число; i - возможный делитель. }

{Дата написания - 02.11.05 г.                                                      }

{Программист - Сидоров С.С. гр.5030                                      }

Program Prime;

Var

i,N:Integer;

begin {Prime}

Writeln('Введите число');

Read(N);

Write(N,' - ');

i:=1;

repeat

Inc (i)

until N mod i = 0;

if i=N

then

Writeln('простое число!')

else

Writeln('делится на ',i)

end. {Prime}

При программировании циклов с предусловием или постусловием необходимо соблюдать следующие рекомендации:

а) перед каждым выполнением цикла условие окончания или продолжения цикла должно быть определено, т.е. иметь конкретное значение;

Рис. 2

б) тело цикла должно содержать хотя бы один оператор, влияющий на условие окончания или продолжения, иначе цикл будет продолжаться бесконечно;

в) условие окончания цикла должно быть, в конце концов, удовлетворено;

г) условие вычисляется при каждом выполнении цикла и поэтому должно быть по возможности наиболее простым.

В Турбо Паскале версии 7.0 можно использовать стандартные процедуры Break и Continue внутри операторов цикла. Процедура Break позволяет досрочно выйти из цикла, не дожидаясь выполнения условия выхода. Процедура Continue позволяет начать новую итерацию цикла, даже если тело цикла не завершено.

26. Итерационные циклы. Вычисление суммы ряда

Среди циклов с неизвестным числом повторений большое место занимают итерационные. Характерными примерами итерационных циклов являются задачи вычисления сумм бесконечных рядов и уточнение корней при решении алгебраических и трансцендентных уравнений.

Большой класс задач сводится к нахождению суммы некоторого количества слагаемых

 

при различных значениях параметра суммирования. Каждое слагаемое tn(x) зависит от параметра x и номера n, определяющего место этого слагаемого в сумме.

Обычно формула общего члена суммы tn(x) принадлежит к одному из следующих трех типов:

 

В случае "а" применение рекуррентных формул нецелесообразно. Вычисления будут наиболее эффективными, если каждое слагаемое определять по общей формуле и полученные значения накапливать в некоторой переменной. Общий вид схемы алгоритма, реализующего вычисление суммы с погрешностью e с помощью цикла с предусловием, показан на рис. 3,а.

В случае "б" для вычисления слагаемых целесообразно использовать рекуррентные формулы, т.е. при вычислении слагаемого tn(x) использовать значение слагаемого tn-1(x). Это позволяет сущест­венно сократить объем вычислений, а также избежать вычислений факториала (значение которого может привести к переполнению) и возведения отрицательного основания в степень. Общая схема такого итерационного алгоритма показана на рис. 3,б.

а                Рис. 3                          б

Основная сложность, возникающая в процессе проектирования подобного алгоритма, состоит в определении сомножителя jn(x). В общем виде можно записать

 

тогда сомножитель jn(x) будет определен формулой

 

Например, если общий вид слагаемого некоторой суммы

 

тогда

 

Теперь можно определить

 

Начальное значение t0(x) находим по формуле

 

Программа вычисления такой суммы имеет вид:

Program Serie;

{Цель - вычисление суммы с заданной                     }

{          погрешностью по итерационному алгоритму   }

{Переменные:                                                          }

{              X - аргумент функции                                 }

{              N - переменная суммирования                   }

{              EPS - погрешность вычисления суммы         }

{              S - сумма                                                       }

{              T - слагаемое                                                 }

{Дата написания - 04.11.05 г.                                }

{Программист - Карлов К.К., гр. 5030                 }

Var

EPS,S,T,X:Real;

N:Integer;

Begin {Serie}

Write('X=');

Read(X);

Write ('EPS=');

Read (EPS);

{Эхо-печать}

Writeln (' Для X=',X,' с погрешностью ', EPS);

{Вычисление суммы}

T:=1;

S:=1;

N:=1;

While ABS(T)>EPS do {Условие продолжения цикла}

begin

T:=-T*X*X/(2*N*(2*N-1));

S:=S+T;

N:=N+1

end;

Writeln ('N=',N,' S=',S)

end. {Serie}

В случае "в" член суммы целесообразно представить в виде двух сомножителей, один из которых вычисляется по рекуррентному соотношению, а другой − непосредственно.

27.  Метод итерации для уточнения корней

Исследуем уравнение f(x)=0. С помощью метода отделения кор­ней получаем интервал (a,b), в котором находится искомый корень x, т.е. a<x<b. Уравнение f(x)=0 представим в виде, удобном для проведения метода итерации x=j(x).

Если в интервале (a,b) выполняется неравенство |j'(x)|£q<1, то метод итерации применим к исходному уравнению, и он приведен к уточнению корня с заданной точностью (процесс итерации сходится).

Преобразование исходного уравнения f(x)=0 к форме x = j(x) может быть выполнено разными способами. Один из них сводится к следующему. Предположим, что 0£m£f'(x)£M при a£x£b (если f'(x)<0, то достаточно уравнение f(x)=0 умножить почленно на -1). В результате получаем уравнение

 

которое равносильно исходному уравнению f(x)=0, имеет требуемую каноническую форму и

 

Метод итерации состоит из последовательности следующих ша­гов: выбираем любое значение x=x0 из интервала (a,b), вычисляем j(x0) и приравниваем его к новому значению корня x1:

x1=j(x0).

Далее этот процесс повторяется так, что k-я итерация состоит в вычислении

xk=j(xk-1).

Погрешность ek на k-й итерации удовлетворяет неравенству

ek £ qk(b-a).

Процесс итерации проводим до тех пор, пока погрешность ek будет больше заданной погрешности e. В качестве условия продолже­ния итерационного цикла можно выбрать неравенство |xk-xk-1|>e, а также неравенство |f(xk)|>e.

Пусть, например, необходимо найти с погрешностью e=10-4 ко­рень уравнения

5x3 + 10x2 + 5x - 1 = 0.

Преобразуем исходное уравнение к виду

 

Для определения x0 применим графический метод отделения корней, а именно построим график функций

 

Нетрудно убедиться, что корень (точка пересечения этих графиков) принадлежит отрезку [0,1]. Поэтому

 

для всех x Î [0,1], метод итераций применим.

Программа будет иметь следующий вид:

{Цель - уточнение корня                                        }

{Переменные:                                                     }

{     eps - допустимая погрешность;                       }

{     x0 - начальное приближение;                         }

{     x1,x2 - последовательные приближения корня.}

{Метод - итераций .                                            }

{Дата - 05.11.05 г.                                                    }

{Программист - Петров П.П., гр. 5030                      }

Program Iter;

Var

eps,x0,x1,x2: Real;

begin {Iter}

Writeln('Введите начальное приближение и погрешность');

Read (eps,x0);

Writeln('Погрешность: ',eps);

Writeln(' начальное приближение: ',x0);

x1=x0;

repeat

x2:=x1;

x1:= 1/(5*(x2+1)*(x2+1))

until Abs (x1-x2) < eps;

Writeln ('корень: ',x1)

end. {Iter}


Контрольные вопросы

1. Какова общая структура цикла с предусловием?

2. Какова общая структура цикла с постусловием?

3. Какой алгоритм можно назвать итерационным?

4. В чем отличие оператора цикла с предусловием от оператора цикла с постусловием?

5. Какие правила необходимо использовать при проектировании программ со структурой циклов с предусловием и постусловием?

6. Каким образом формируется условие продолжения цикла?

7. По каким правилам формируется операция итерации при вычислении суммы?

8. Каким образом формируется итерационная формула уточнения корней алгебраического уравнения?

Варианты заданий

Корень n-й степени

 

из числа x является пределом последовательности y0,y1,y2,...,yk,..., каждый член которой определяется итерацией

 

Определить с точностью до e=10-3 корень 2-й и 4-й степени из числа p/3 и число итераций, необходимых при этом.

2. Вычислить значение функции sin(z), используя разложение ее в степенной ряд:

 

Определить число итераций, необходимых для вычисления sin(0,3) с точностью до e=10-4.

3. Вычислить значение функции sin(z), используя разложение ее в  бесконечное произведение:

 

Определить число итераций, необходимых для вычисления sin(0,3) с точностью до e=10-4.

4. Вычислить значение функции cosx, используя разложение ее в степенной ряд:

 

Определить число итераций, необходимых для вычисления cos(0,3) с точностью до e=10-4 .

5. Для уравнения x2 - cosx = 0 уточнить корень методом итераций на интервале [0,2] для e = 10-4.

6. Вычислить значение функции cosx, используя разложение ее в бесконечное произведение:

 

Определить число итераций, необходимых для вычисления cos(0,3) с точностью до e=10-4 .

7. Вычислить значение гиперболического синуса, используя разложение его в степенной ряд

 

Задание выполнить для x=1,75 с погрешностью e=10-3.

8. Вычислить значение гиперболического синуса по формуле

 

используя разложение функции ex в степенной ряд

 

Задание выполнить для x=1,75 с погрешностью e=10-3.

9. Вычислить значение гиперболического косинуса по формуле

 

Задание выполнить для x=1,75 с погрешностью e=10-3.

10. Вычислить значение интегрального косинуса

 

используя разложение

 

для аргумента x=3 с погрешностью e =10-3. Постоянную Эйлера-Маскерони принять равной С = 0,577216.

11. По определению Эйлера гамма-функция

 

Составить рекуррентное соотношение и вычислить Г(2,5) с пог­решностью e=10-7.

12. Вычислить интеграл Френеля для x=1,55 с погрешностью e=10-4 по формуле

 

13. Вычислить интеграл Френеля для x=1,55 с погрешностью e=10-4 по формуле

 

14. Вычислить значение функции arctg(x) с погрешностью e =10-3 и определить число требуемых для этого итераций при x=0,5; x=0,7.

 

15. Вычислить значение функции arcsin(x) с погрешностью e =10-3 и определить число требуемых для этого итераций при x=0,5; x=0,7.

 

16. Для уравнения, приведенного в задании № 5, и найденного интервала (a, b) уточнить корень x с погрешностью e=10-4 методом половинного деления.

Обозначим: xл - левая граница; xп - правая граница поля, т.е. xл £ x £ xп. Вначале считаем xл = а, xп = b, значение корня x = (xл + xп)/2, текущая погрешность e = (xn - xл)/2. Уменьшаем интервал (xл,xп) вдвое. Для этого вычисляем f(x1) и f(xп), где x1= (xл + xп)/2. Если f(x1) и f(xп) имеют равные знаки, то уменьшаем интервал до (xл,xп=x1), в противном случае - (xл=x1,xп). Выбранный интервал вновь делится пополам и так до тех пор, пока текущая погрешность не станет меньше заданной.

Полученный корень x проверить путем подстановки его значения в уравнение f(x) = 0.

17. Для уравнения, приведенного в задании № 5, и найденного интервала (a, b) уточнить корень x с погрешностью e=10-4 методом хорд (пропорциональных частей).

Через точки (a, f(a)) и (b, f(b)) проводим прямую и находим значение x точки пересечения данной прямой с осью OX по формуле

 

Если f(a)f(x)<0, то правую границу b переносят в точку x, т.е. выполняют присваивание b:=x, в противном случае уменьшают интервал за счет присвоения a:=x. Искомый корень x определяется с погрешностью, равной разности двух его соседних значений. Если полученная погрешность больше заданной, то вновь применяют вышеприведенную формулу.

18. Выполнить задание № 5 для уравнения 1 - x2 + sinx = 0 на интервале (0,p/2).

19. Вычислить значение функции

 

с допустимой погрешностью e=10-4. Процесс суммирования прекращается, как только выполняется неравенство |uk|<4e, где uk - текущий член ряда суммирования. Найти ln(5), ln(0,5) и определить число слагаемых, учитываемых в обоих случаях.

20. Определить значение функции y = f(x) при x=2, если эта функция задана неявно в виде

(x-1)2 + (y-2)2 - 9 = 0.

Применить метод итераций, при котором уравнение F(x,y)=0 представляется следующей итерационной формулой:

 

Начальное приближение задать y0=1. Процесс итерации продолжать до тех пор, пока два последовательных приближения yn+1 и yn не совпадут между собой с точностью до e=10-2.

ТЕМА 4.3. ВЛОЖЕННЫЕ ЦИКЛЫ

В вычислительной технике достаточно часто встречаются задачи, при решении которых необходимо проектировать программы с несколькими циклами, вложенными один в другой. Вложенным называют любой цикл, содержащий внутри себя один или несколько циклов. Цикл, охватывающий другие циклы, называют внешним, а остальные - внутренними циклами. Правила организации внешнего и внутренних циклов одинаковы (как и для простого цикла). Внутренний цикл должен полностью располагаться в теле внешнего цикла. Циклы, образующие вложенный цикл, условно разбивают на уровни вложения: внешний цикл - уровень 0, первый внутренний цикл - уровень 1, второй внутренний цикл - уровень 2 и т.д.

При программировании каждого нового уровня расходуется опре­деленный объем памяти для хранения параметров цикла, поэтому глубина вложения сложной циклической структуры ограничивается объемом имеющейся памяти ЭВМ. В программе на каждом уровне может быть использован любой из операторов цикла языка Паскаль (с постусловием, предусловием, параметром).

Параметры циклов разных уровней изменяются неодновременно. Вначале все свои значения принимает поочередно параметр самого внутреннего цикла (при неизменных значениях параметров внешних циклов). После этого изменяется на один шаг параметр следующего по рангу цикла, и снова все свои значения изменяет параметр цикла наивысшего уровня вложения и т.д. до тех пор, пока параметры циклов всех уровней не примут все возможные значения. Если во вложенном цикле реализованы две циклические структуры с параметрами x=x0(hx)xn и y=y0(hy)yn, то общее число повторений тела внутреннего цикла

N = NxNy,

где

 

1. Табулирование функций от нескольких переменных

Рассмотрим функцию z=f(x,y) от двух переменных x и y. Обе переменные могут выступать в качестве параметров циклов при табулировании функции. В процессе проектирования алгоритма и программы не имеет значения, по какому параметру организовать внутренний и внешний циклы. Выберем в качестве внешнего параметра переменную x. Схема циклического алгоритма (табулирования функции) по параметру x показана на рис. 1. Детализация тела цикла по параметру x - ТЦx реализуется в виде циклической структуры с параметром y (см. рис. 2). В результате получаем схему алгоритма табулирования функции z=f(x,y) от двух переменных (рис. 3).

Фрагмент программы, который схематично показывает структуру вложенных циклов, имеет вид:

¼

x:=x0;

repeat

y:=y0;

repeat

¼

вычисление функции z=f(x,y)

¼

Writeln ('z=',z,'x=',x,'y=',y);

y:=y+hy

until y>yn;

x:=x+hx

until x>xn;

¼

2. Вычисление кратных сумм и произведений

В процессе вычисления кратной суммы требуется организовать вложенный цикл, который позволяет провести суммирование отдельных слагаемых. Пусть, например, необходимо вычислить значение функции

 

при некоторых значениях аргумента x=x0(hx)xn.

Проектирование алгоритма решения этой задачи начинаем с сос­тавления циклической структуры с постусловием, которая решает в общем виде табулирование функции y=f(x) (см. рис. 4). Значение двойной суммы вычислим с помощью вложенного цикла по параметрам k и n, являющимся одновременно переменными суммирования. В качестве начального значения для суммы S берем нулевое значение. Оба цикла (k и n) являются циклическими структурами с заголовком и целиком расположены внутри тела цикла по параметру x.

Составим программу:

Program pr1;

{Цель - вычисление двойной суммы при }

{   различных значениях аргумента x        }

{Переменные:                                          }

{   S - сумма; S1 - промежуточная сумма;  }

{   k,n - переменные суммирования;          }

{   xk  x в степени   k; x1 - x в степени n;   }

{   x= x0(hx)xn – параметры аргумента;         }

{   y - функция аргумента x                    }

{Дата написания - ноябрь 2005 г.                   }

{Программист - Федоров Ф.Ф. гр. 5030        }

Var

hx,S,S1,x,x0,x1,xk,xn,y:real;

k,n:byte;

begin {pr1}

{Ввод и эхо-печать исходных данных}

Write('x0=');

Read(x0);

Write('hx=');

Read(hx);

Write('xn=');


Read(xn);

Writeln('x0=',x0,' hx=',hx,' xn=',xn);

{Табулирование функции}

x:=x0;

repeat

{Вычисление двойной суммы}

S:=0;

xk:=1;

for k:=0 to 10 do

begin

S1:=0;

x1:=1;

for n:=0 to 5 do

begin

S1:=S1+(k+n)*x1;

x1:=x1*x

end;

S:=S+S1*xk;

xk:=xk*x

end;

y:=(x+1.5)*s/3.75;

Writeln('x=',x,' y=',y);

x:=x+hx;

until x>xn

end. {pr1}

Контрольные вопросы

1. Какой циклический процесс называется вложенным?

2. Что называется уровнем вложения?

3. Как определить объем выводимых данных для вложенного цикла?

4. Какие операторы можно использовать при программировании вложенных циклов?

5. Сформулируйте правила построения вложенных циклов?

6. В чем сущность нисходящего поэтапного проектирования алгоритма?

7. Составьте общий алгоритм табулирования функции от трех переменных.

8. Как определить число повторений внутреннего цикла при та­булировании функции от трех переменных?

9. Приведите пример структуры с вложенными циклами.

10. Составьте общий алгоритм нахождения кратного произведения.

Варианты заданий

Используя метод нисходящего проектирования, разработать схему алгоритма и составить программу вычисления функции при заданных значениях аргументов. Результаты вычислений напечатать.

1.

 

2.

 

3.

 

4.

 

5.

 

6.

 

7.

 

8.

 

9.

 

10.

 

11.

 

12.

 

13.

 

14.

 

15.

 

16.

 

17.

 

18.

 

 

19.

 

20.

 

ОГЛАВЛЕНИЕ

Рабочая программа                                                                     3

Методические указания к работам                                           7

Тема 3.1. Изучение среды программирования Turbo Pascal 11

Тема 3.2. Программирование линейных алгоритмов           24

Тема 3.3. Программирование алгоритмов разветвляющейся структуры        32

Тема 4.1. Проектирование программ циклической структуры        41

Тема 4.2. Итерационные циклы                                              49

Тема 4.3. Вложенные циклы                                                   61