ВІКІСТОРІНКА
Навигация:
Інформатика
Історія
Автоматизація
Адміністрування
Антропологія
Архітектура
Біологія
Будівництво
Бухгалтерія
Військова наука
Виробництво
Географія
Геологія
Господарство
Демографія
Екологія
Економіка
Електроніка
Енергетика
Журналістика
Кінематографія
Комп'ютеризація
Креслення
Кулінарія
Культура
Культура
Лінгвістика
Література
Лексикологія
Логіка
Маркетинг
Математика
Медицина
Менеджмент
Металургія
Метрологія
Мистецтво
Музика
Наукознавство
Освіта
Охорона Праці
Підприємництво
Педагогіка
Поліграфія
Право
Приладобудування
Програмування
Психологія
Радіозв'язок
Релігія
Риторика
Соціологія
Спорт
Стандартизація
Статистика
Технології
Торгівля
Транспорт
Фізіологія
Фізика
Філософія
Фінанси
Фармакологія


Общие указания к выполнению лабораторных работ

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

К лабораторным работам

по дисциплине «Информатика. Введение в направление»

Часть 2 язык «Pascal»

для студентов дневной формы обучения

По направлению 09.03.01

«Информатика и вычислительная техника»

Севастополь


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

 

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

 

Методические указания утверждены на заседании кафедры Информационных технологий и компьютерных систем, протокол № __ от __ ____________ 2014г.

 

Рецензенты к.т.н., доцент Шаталова Ю. Г., к.т.н. доцент Волкова Т. В.



Оглавление

Предисловие. 3

Общие указания к выполнению лабораторных работ. 3

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

1.1. Оператор присваивания и выражения. 4

1.2. Операторы вызова процедур. Ввод/вывод данных. 5

1.2.1. Процедуры ввода READ и READLN.. 5

1.2.2. Процедуры вывода WRITE и WRITELN.. 6

Лабораторная работа № 1. 7

2. ПРОГРАММИРОВАНИЕ РАЗВЕТВЛЯЮЩИХСЯ АЛГОРИТМОВ.. 9

2.1. Составной и пустой операторы.. 9

2.2. Организация ветвлений. Операторы выбора. 10

2.2.1. Оператор ветвления IF. 10

2.2.2. Оператор варианта CASE.. 11

Лабораторная работа №2. 13

3. ОРГАНИЗАЦИЯ ЦИКЛОВ.. 15

3.1. Оператор WHILE.. 15

3.2. Оператор REPEAT. 16

3.3. Оператор FOR.. 16

Лабораторная работа № 3. 18

4. ОРГАНИЗАЦИЯ ПОДПРОГРАММ. ПРОЦЕДУРЫ И ФУНКЦИИ. ПРОЦЕДУРЫ И ФУНКЦИИ.. 19

4.1. Процедуры и их типизация. 20

4.1.1. Встроенные процедуры.. 20

4.1.2. Процедуры пользователя. 21

4.1.3. Процедуры без параметров. 21

4.1.4. Процедуры с параметрами-значениями. 22

4.1.5. Процедуры с параметрами-переменными. 24

4.1.6. Комбинированные процедуры.. 24

4.2. Функции пользователя. Рекурсивные функции. 26

4.2.1. Определение функции. 26

4.2.2. Функции пользователя. 26

4.2.3. Рекурсивные функции. 27

Лабораторная работа №4. 29

5. ОБРАБОТКА МАССИВОВ.. 31

5.1. Одномерные массивы.. 32

5.2. Многомерные массивы.. 33

5.3. Примеры работы с массивами. 33

Лабораторная работа №5. 34

6. ОБРАБОТКА СТРОКОВЫХ ВЕЛИЧИН.. 38

6.1. Тип данных CHAR.. 38

6.2. Массивы литер. 39

6.3. Тип данных STRING.. 39

6.4. Строковые функции и процедуры.. 40

Лабораторная работа №6. 42

7. ПРОГРАММИРОВАНИЕ ГРАФИКИ.. 44

7.1. Инициализация графического режима. 45

7.2. Простейшие графические операторы (процедуры) языка TurboPascal 46

7.3. Основные приемы работы с графикой. 48

7.3.1. Работа с цветом.. 48

7.3.2. Заполнение (закрашивание) произвольной замкнутой фигуры.. 49

7.3.3. Построение простейших геометрических фигур. 49

Лабораторная работа №7. 54

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


 



Предисловие

Пособие включает в себя выполнение 7 лабораторных работ, включающих в себя три работы на освоение построения линейных, разветвляющихся и циклических программ. В четвертой работе студент познакомится с подпрограммами, механизмом передачи параметров между подпрограммами, а также с рекурсивными функциями. Работа 5 посвящена изучению алгоритмов описания и обработки массивов. Здесь же приведены примеры реализации рассмотренных алгоритмов в Паскале. Обработка строковых величин рассмотрена в работе 6, где предусмотрено освоение работы со строкой, как с единой последовательностью символов, так и со строкой, состоящей из слов. Способы обработки графических изображений средствами языка Паскаль (в среде TurboPascal) представлены в работе 7.

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

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

Общие указания к выполнению лабораторных работ

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

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

1. Анализ условия задачи и выработка подхода к ее решению.

2. Пошаговая разработка алгоритма решения и его описание.

3. Составление блок-схемы алгоритма.

4. Разработка программы на языке Паскаль.

5. Отладка программы и демонстрация правильной ее работы на выбранном наборе данных.

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

Тема и цель работы.

Условия задания.

Схема алгоритма решения задачи:

- математическая модель задачи;

- блок схема алгоритма.

Анализ алгоритма.

Текст программы и размещение исходных данных при вводе.

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

Обоснование правильности разработанной программы.

Выводы.

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

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

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

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

Различают простые и структурные операторы. Простым оператором является оператор, не содержащий в себе других операторов. В простом операторе определяется, как правило, одно элементарное действие. В Паскале имеются три простых оператора: присваивания, вызова процедуры и перехода. Структурные операторы подразделяются, в свою очередь, на составные, условные, цикла и операторы над записями. Структурный оператор включает в себя другие операторы (как простые, так и составные). Существует несколько способов формирования структурных операторов, о которых речь пойдет в разделе «Структурные операторы».

Операторы вызова процедур. Ввод/вывод данных

Оператор вызова процедуры определяет активизацию процедуры, обозначенную с помощью идентификатора (имени) процедуры. Другими словами, с помощью операторов этого типа осуществляется вызов процедур с указанием в них входных и выходных параметров (подробнее об этом будет сказано в разделе «Процедуры»). Мы начнем знакомство с операторами-процедурами на базе организации ввода/вывода данных в языке Паскаль.

Для организации ввода и вывода данных используются следующие встроенные (машинные) процедуры: READ, WRITE, READLN, WRITELN.

Лабораторная работа № 1

Цель работы: выработать практические навыки использования системы программирования Borland Pascal или Delphi, научиться создавать, вводить, отправлять на выполнение и исправлять простейшие программы на языке Паскаль, познакомиться с диагностическими сообщениями компилятора об ошибках на примере программ, реализующих линейные алгоритмы.

Основные теоретические положения.

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

Перед выполнением работы необходимо ознакомиться с теоретическим материалом по темам «Описание языка Паскаль», «Простые операторы. Ввод/вывод данных».

Пример. Определить расстояние на плоскости между двумя точками с заданными координатами M1(x1,y1) и M2(x2,y2).

Решение задачи.

В этом примере проведем полный разбор решения задачи.

Математическая модель: расстояние на плоскости между двумя точками M1(x1,y1) и M2(x2,y2) высчитывается по формуле:

Составим блок-схему алгоритма, а затем уточним содержимое блоков "Вычисление расстояния" и "Вывод расстояния" (см. рис.1):

Рис. 1. Блок-схема алгоритма

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

program example1;

var x1, x2, y1, y2: Integer;

d:Real;

begin

Writeln('Эта программа вычисляет расстояние между двумя точками на плоскости');

Writeln('Введите координаты двух точек:');

Write('x1= '); Readln(x1);

Write('y1= '); Readln(y1);

Write('x2= '); Readln(x2);

Write('y2 ='); Readln(y2);

d:=sqrt(sqr(x2-x1)+sqr(y2-y1));

Writeln('d= ',d:6:2);

Writeln('нажмите Enter для завершения работы программы');

Readln;

end.

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

Задание 1. Даны x, y. Составить программу вычисления значения выражения:

a a ) b) c) d)

 

Задание 2. Составить программу для решения следующей задачи:

a) Дана длина ребра куба. Найти объем куба и площадь его боковой поверхности.

b) Известна длина окружности. Найти площадь круга, ограниченного этой окружностью.

c) Вычислить высоту треугольника, опущенную на сторону а, по известным значениям длин его сторон a, b, c.

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

Задание 3. Вывести значение true, если приведенное высказывание для предложенных исходных данных является истинным, и значение false в противном случае (все числа, для которых не указано иное, являются действительными):

a) данное число x принадлежит отрезку [-a, a];

b) данное число x не принадлежит интервалу (a, b);

c) данное целое число x является нечетным;

d) данное число x является корнем уравнения: ax2+bx+c=0;


 

Дополнительные задания

1. Ученик начал решать задачи данного урока программирования, когда электронные часы показывали h1 часов и min1 минут, а закончил, когда было h2 часов и min2 минут. Составьте программу, позволяющую определить, сколько времени (в часах и минутах) ученик решал эти задачи.

2. Дано действительное число а. Не пользуясь никакими другими операциями, кроме умножения, получить: а) а4 за две операции; б) а6 за три операции; в) а7 за четыре операции; г) а8 за три операции.

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

1. 1а,2а,3а

2. 1b,2b,3b

3. 1c,2c,3c

4. 1d, 2d, 3d

5. 1a,2b,3c

6. 1d,2a,3b

7. 1b,2c,3d

8. 1c,2d,3d

9. 1d,2c,3d

10. 1b,2d,3a

11. 1c,2a,3a

12. 1b,2c,3c

13. 1a, 2d,3c

14. 1c,2a,3d

15. 1b,2a,3c

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

1. Постановка задачи.

2. Описание алгоритма.

3. Тестовые примеры и анализ результатов тестирования.

4. Вывод.

 

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

1. Каковы назначение и возможности системы программирования?

2. Как запустить программу на трансляцию и выполнение?

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

4. Из каких разделов состоит программа на языке Паскаль?

5. Как в языке Паскаль осуществляется вывод на экран?

6. Для чего предназначен оператор присваивания?

7. Как вывести на экран значение переменной?

Лабораторная работа №2

Цель работы: научиться решать задачи на разветвляющиеся алгоритмы; научиться использовать в программах условный оператор if и оператор выбора case.

Основные теоретические положения.

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

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

Пример. Дано действительное x. Для функции f, график которой представлен на рисунке, вычислить f(x).

Решение задачи.

Математическая модель: функция вычисляется по следующей формуле:

Составим схему алгоритма, детализировав все блоки (рис. 2).

Дальнейшая детализация не требуется. Переводим алгоритм на язык Паскаль.

Program example1;

var x, f:Real;

begin

Write('Введите x: '); Readln(x);

if x<-1 then f:= - x-1 else

if (x>=-1) and (x<0) then f:= x-1 else

if (x>=0) and (x<1) then f:= - x+1 else f:= x+1;

Writeln('F= ',f:6:2);

Readln;

end.

Рис. 3. Блок-схема ветвления в 4-х направлениях

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

Задание 1. Используя оператор if, вычислить заданное выражение для данных типа Integer:

а) b)

c) d)

Задание 2. Найти алгоритм решения задачи и реализовать его с помощью оператора (операторов) if-then-else:

a) Составить программу, реализующую эпизод сказки: машина спрашивает, куда пойдет герой, и в зависимости от ответа (налево – (-1), прямо – 0, направо – 1), печатает, что произойдет с героем.

b) Морской бой. Машина задумывает два числа от 0 до 9. Игрок пытается их угадать, вводя свои два числа. Если они совпали (в любом сочетании), то игрок выиграл.

c) В Атлантическом океане терпит бедствие пассажирский теплоход «Посудина». Все пассажиры будут спасены, если на помощь успеют два судна. Судно продержится на плаву t часов. Скорость судов-спасателей 40 узлов. Составить программу, определяющую спасутся ли пассажиры. Известны расстояния от трех судов-спасателей до тонущего судна.

d) Через старый мост движется поток автомашин. Одновременно на мосту могут находиться 3 машины. Если на мост въедут 3 легковых или 2 легковых и грузовик – мост выдержит. Если 2 грузовика и легковая или 3 грузовика – рухнет.

Задание 3. Используя оператор выбора, составить программы решения следующих задач.

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

b) По номеру месяца указать, к какому времени года он относится.

c) По номеру месяца вывести на печать количество дней в нем.

d) Единицы массы пронумерованы следующим образом: 1 — килограмм, 2 — миллиграмм, 3 — грамм, 4 — тонна. Дан номер единицы массы и масса тела M в этих единицах (M - вещественное число). Вывести массу данного тела в килограммах.

Дополнительные задания

1. Даны действительные числа a, b, c, x, y. Выяснить, пройдет ли кирпич с ребрами a, b,c в прямоугольное отверстие со сторонами x и y. Просовывать кирпич в отверстие разрешается только так, чтобы каждое из его ребер было параллельно или перпендикулярно каждой из сторон отверстия.

2. Сможет ли шар радиуса R пройти в ромбообразное отверстие со стороной P и острым углом Q?

 

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

1. Постановка задачи.

2. Описание алгоритма.

3. Тестовые примеры и анализ результатов тестирования.

4. Вывод.

 

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

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

2. Как выполняются операторы условного перехода?

3. Какую из функций: Sin(x), Abs(x), Trunc(x) можно заменить условным оператором if x<0 then x := - x?

4. Если выбор вариантов осуществляется из конечного числа элементов выбора, то лучше взять для этого оператор if или case?

5. Как заменить оператор case операторами if?

6. В чем преимущество оператора case от последовательности «коротких» операторов if?

7. Какой тип переменной можно использовать в качестве ключа оператора case?

 

ОРГАНИЗАЦИЯ ЦИКЛОВ

Оператор цикла задает повторное выполнение определенных операторов. Для реализации циклов в Паскале предусмотрены три различных структурных оператора: WHILE, REPEAT, FOR. Первые два используются, если число повторений (итераций) заранее не определено, но известно условие завершения цикла. Оператор FOR применяется тогда, когда число повторений тела цикла известно заранее.

Оператор WHILE

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

WHILE <Условие> DO <Тело цикла>;

Логическое выражение, стоящее после WHILE, называется условием возобновления цикла и должно иметь булевский тип. Оператор, следующий за DO, является телом цикла. Он повторяется до тех пор, пока истинно условие возобновления цикла. Как только условие возобновления цикла становится ложным, управление переходит к оператору, стоящему за WHILE. Если условие возобновления не удовлетворяется до начала выполнения цикла, то тело цикла пропускается.

 

Из указанного описания видно, что оператор WHILE реализует базовую структуру «цикл-пока», так как здесь проверка условия идет до тела цикла. Поэтому оператор WHILE называют оператором цикла с предусловием.

П р и м е р. Даны числа A, B (A > 1). Получить все степени числа A, меньшие числа B.

program STEPENI;

var A, B, C: real;

begin

readln (A, B); C := A;

while C < B do

begin

writeln (C);

C := C*A;

end;

end.

Примечание.Грамотное использование оператора WHILE предполагает умение правильно написать условие возобновления цикла. Здесь надо иметь в виду следующие рекомендации:

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

2. Во избежание зацикливания лучше сначала написать условие прекращения цикла и взять потом в операторе его отрицание.

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

Оператор REPEAT

Оператор REPEAT называют оператором цикла с постусловием, так как здесь выражение, управляющее повторным выполнением последовательности операторов, помещается после тела цикла:

REPEAT <Тело цикла> UNTIL <Условие>;

Из общего вида оператора видно, что в этом операторе не обязательно использовать для тела цикла операторные скобки. Здесь ключевые слова REPEAT и UNTIL сами играют роль этих скобок.

В этом операторе тело цикла выполняется до тех пор, пока ложно условие, стоящее после UNTIL. Условием выхода из цикла является истинность выражения. Мы видим, что это есть форма «цикла-до».

П р и м е р. Даны числа A, B (A > 1). Получить все степени числа A, меньшие числа B.

program STEPENI;

var A, B, C: real;

begin

readln (A, B); C := A;

repeat

writeln (C);

C := C*A;

until C>= B;

end.

Примечание. Между операторами WHILE и REPEAT существует три основных различия:

1. В операторе REPEAT проверка условия выхода из цикла выполняется в конце, а не в начале цикла, как в операторе WHILE, поэтому в операторе REPEAT тело цикла выполняется хотя бы один раз.

2. В REPEAT выход из цикла осуществляется по истинности условия, а в WHILE – по ложности.

3. В операторе WHILE тело цикла чаще всего имеет форму составного оператора, в операторе REPEAT для организации тела цикла операторные скобки не нужны.

Оператор FOR

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

FOR <Переменная>:= <Выражение 1> TO <Выражение 2> DO;

FOR<Переменная>:=<Выражение1>DOWNTO<Выражение1>DO;

Здесь «Переменная» есть параметр цикла, «Выражение 1» – начальное значение параметра, «Выражение 2» – его конечное значение. В качестве управляющей переменной должна быть переменная, объявленная локальной в блоке, который содержит данный оператор FOR. Управляющая переменная должна иметь ординальный тип. Начальное и конечное значения имеют тип, совместимый с типом параметра цикла.

Когда начинает выполняться оператор FOR, начальное и конечное значения определяются один раз, и эти значения сохраняются на протяжении всего выполнения оператора.

Оператор, который содержится в теле цикла, выполняется один раз для каждого значения управляющей переменной в диапазоне между начальным и конечным значениями. Управляющая переменная всегда инициализируется начальным значением. Она принимает все свои значения из диапазона с шагом 1, если TO, и с шагом -1, если DOWNTO.

В случае TO, если начальное значение превышает конечное, тело цикла не выполняется.

Для случая DOWNTO это имеет место, когда начальное значение меньше, чем конечное. Отсюда заключаем, что оператор цикла FOR реализует, как и WHILE, схему цикла «пока» – проверка условия повторения цикла идет до тела цикла.

Примечание.

1. Если тело цикла в этом операторе состоит из более одного оператора, то они все заключаются в операторные скобки (реализуют конструкцию составного оператора).

2. В отличие от школьного алгоритмического языка, оператор FOR нельзя прервать путем присваивания управляющей переменной ее конечного значения. Изменения переменной цикла не влияют на число повторений тела цикла.

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

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

П р и м е р 1. Печать отсчета цифр при старте.

program START;

var SEC: integer;

begin

writeln ('До старта осталось...');

for SEC := 10 downto 1 do

writeln (SEC:4);

writeln ('ноль'); writeln ('Старт!!')

end.

В данном примере управляющая переменная SEC принимает значения типа INTEGER, однако в Паскале она определена как переменная ординального типа и, следовательно, может принимать значения типа CHAR или принадлежать перечислимому типу, как показано в примере 2.

П р и м е р 2 . Подсчет числа часов рабочей недели.

program WORKTIME;

type DAYS = (MO, TU, WE, TH, FR, SA, SU);

var DEN: DAYS; WT: integer;

begin

WT := 0;

for DEN := MO to SA do

if DEN <> SA then WT := WT + 8

else WT := WT + 7; writeln (WT);

end.


Лабораторная работа № 3

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

Основные теоретические положения.

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

Перед выполнением работы необходимо изучить различные схемы организации циклов и операторы for, while, repeat .

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

Пример: На промежутке от 1 до M найти все числа Армстронга. Натуральное число из n цифр называется числом Армстронга, если сумма его цифр, возведенных в степень n, равна самому числу. Например, число 153 (153=13+53+33).

Решение. После организации ввода данных программа будет содержать цикл с параметром i (от 1 до М) с двумя вложенными циклами. Первый предназначен для подсчета количества цифр n, второй – для вычисления суммы s степеней цифр числа i. Если числа i и s равны, то i – число Армстронга, его необходимо вывести на экран.

PROGRAM Primer_1;

var i, k,s, p,n, M: Integer;

begin

Write('Введите M '); Readln(M);

for i:=1 to M do

begin

s:=0; k:=i; n:=0;

while k<>0 do

begin k:=k div 10; n:=n+1 end;

k:=i;

While k<>0 do

begin p:=k mod 10; k:=k div 10;

if p<>0 then s:=s+ Round(Exp(n*Ln(p)))

end;

if s=i then Writeln(i);

end;

Readln;

end.


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

Задание 1. Целочисленная арифметика.

Найти количество натуральных двузначных чисел, каждое из которых делится на 3 и на 13.

a) Найти количество натуральных четырехзначных чисел, каждое из которых не делится ни на 2, ни на 3.

b) Найти количество натуральных чисел, не превосходящих 1000, каждое из которых кратно 25 и не кратно 3.

c) Найти те натуральные числа, не превосходящие x, которые при делении на 10 дают в остатке 5.

Задание 2. Найти алгоритм решения задачи и реализовать его в виде Паскаль-программы.

a) Начальный вклад в банк составляет а рублей. Через сколько лет он станет больше b рублей? Каждый год вклад увеличивается на 3%.

b) Ежегодный прирост рыбы в пруду составляет 15%. Запасы рыбы оценены в А тонн. Ежегодный план отлова В тонн. Подсчитать, сколько лет можно выдерживать заданный план?

c) Каждая бактерия делится на две в течение одной минуты. В начальный момент имеется A бактерий. Сколько времени потребуется, чтобы количество бактерий превзошло X?

d) Определить количество посетителей салона, которых успеет обслужить мастер-стилист, если его рабочий день составляет t часов и известна продолжительность (в минутах) обслуживания каждого посетителя очереди (вводится пользователем).

Задание 3.Составить программу для решения следующей задачи:

a) Вычислить количество точек с целочисленными координатами, попадающими в круг радиуса R (R>0) с центром в начале координат.

b) Найти все натуральные числа от 1 до N, представимые в виде суммы кубов двух натуральных чисел.

c) Найти все натуральные числа от 1 до N, представимые в виде суммы квадратов трех натуральных чисел.

d) Даны натуральные M, N (M<N). Найти числитель и знаменатель несократимой правильной дроби p/q такой, что p/q = m/n.

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

1. Постановка задачи.

2. Описание алгоритма.

3. Тестовые примеры и анализ результатов тестирования.

4. Вывод.

 

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

1. Как записывается и как работает оператор for?

2. Для организации каких циклов применим оператор for?

3. В чем отличие оператора while от оператора repeat?

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

5. Напишите пример оператора цикла, который не выполняется ни разу.

6. С какими ограничениями реализована конструкция цикла со счетчиком?

7. Замените оператор "repeat A until B" равносильным фрагментом программы с оператором while.

Процедуры и их типизация

Итак, процедура – это часть программы (подпрограмма), имеющая имя и предназначенная для решения некоторой частной задачи (подзадачи). Процедуры делятся по способам описания и обращения к ним.

Процедура встроенная (машинная) – это процедура, описание которой считается известной транслятору, в связи с чем ее можно использовать в программе, зная только ее имя.

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

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

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

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

Комбинированная процедура – процедура, имеющая параметры-переменные и параметры-значения, т. е. входные и выходные данные.

Встроенные процедуры

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

Помимо стандартных процедур в Паскале есть также стандартные модули, представленные в виде TPU – файлов, каждый из которых содержит в себе целый набор процедур и функций. Для того чтобы использовать процедуры из модулей, необходимо вызвать нужный модуль в разделе USES. Система TurboPascal имеет модули PRINTER, DOS, CRT, GRAPH и др.

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

DOS поддерживает различные функции ДОС, включая установку и получение текущего значения даты и времени, поиск по каталогам файлов и выполнение программ.

PRINTER позволяет легко организовать доступ к устройству печати.

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

Рассмотрим несколько примеров встроенных процедур:

· CLRSCR – процедура очистки экрана. Результатом работы является стирание всей информации с экрана. Данная процедура является примером процедур без параметров.

· GOTOXY (A, B) – процедура позиционирования курсора на экране дисплея в точку с координатами (A, B). A и B являются входными данными, следовательно, это пример процедуры с параметрами-значениями.

· WRITE (A, B, ..., Q) – процедура вывода информации на экран дисплея. Данная процедура – процедура с параметрами-значениями.

· READ (A, B, ..., Q) – процедура ввода информации в ЭВМ. При выполнении данной процедуры переменным A, B, ..., Q присваиваются конкретные значения, т. е. данные передаются в основную программу, и, значит, процедура является примером процедур с параметрами-переменными.

Процедуры пользователя

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

В основной программе все процедуры (а также и функции) пользователя должны быть объявлены. Объявление процедур и функций осуществляется после объявления переменных и перед первым словом BEGIN программы.

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

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

Процедуры без параметров

Заголовок процедуры без параметров выглядит как:

PROCTDURE <Имя процедуры>;

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

Рассмотрим несколько примеров, в которых представлены эти варианты.

П р и м е р 1. Нарисовать три вертикальных квадрата 3 × 3.

 

program RISUNOK;

procedure KVADRAT;

begin

writeln ('***');

writeln ('* *');

writeln ('***');

end;

begin

clrscr; KVADRAT;

writeln; KVADRAT;

writeln; KVADRAT;

end.

Пример 2 . Вычислить площадь четырехугольника ABCD.

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

program PLOCHAD_1;

var AB, BC, CD, AD, BD, S1, S, a, b, c, p:real;

procedure GERON_1;

begin

p := (a + b + c)/2;

S := sqrt (p*(p - a)*(p - b)*(p - c));

end;

begin {*ОСНОВНАЯПРОГРАММА*}

read (AB, BC, CD, AD, AC);

a := AB; b := AD; c := BD; GERON_1; S1:= S;

a := BC; b := CD; c := BD; GERON_1; S1:= S1 + S;

write (S1);

end.

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

Комбинированные процедуры

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

PROCEDUREPRIMER (VARa, b, c: INTEGER;

m: CHAR; VAR i, j: REAL);

Здесь a, b, c, i, j – параметры-результаты (переменные); m – параметр-аргумент (значение).

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

program PLOCHAD_4;

var AB, BC, CD, AD, AC, S1, S2: real;

procedure GERON_4 (a, b, c : eal; var S : real);

var P : real;

begin

P := (a + b + c)/2;

S := sqrt (P*(P - a)*(P - b)*(P - c));

end;

begin {*ОСНОВНАЯПРОГРАММА*}

read (AB, BC, CD, AD, AC);

GERON_4 (AB, BC, AC, S1);

GERON_4 (AD, AC, CD, S2);

write ('S = ', S1 + S2)

end.

Примечание. Для более полного усвоения введенных ранее терминов перечислим на базе последнего примера все виды параметров и переменных:

1) глобальные переменные AB, BC, CD, AD, AC, S1, S2;

2) локальные переменные a, b, c, S, P;

3) формальные параметры a, b, c, S:

параметры-значения (аргументы) a, b, c;

параметр-переменная (результат) S;

4) фактические параметры AB, BC, CD, AD, AC, S1, S2:

параметры-значения (аргументы) AB, BC, CD, AD, AC;

параметры-переменные (результаты) S1, S2.

Заметим также, что термины «параметр-значение» и «аргумент», как и «параметр-переменная» и «результат», не всегда идентичны. Дело в том, что характеристика «значение (переменная)» отражает синтаксическую сущность параметра, а «а

© 2013 wikipage.com.ua - Дякуємо за посилання на wikipage.com.ua | Контакти