extracted_text:
Муниципальное общеобразовательное учреждение
«Лицей города Юрги»

Программирование на Turbo
Pascal

Сборник практических работ

Юрга 2009
ВВЕДЕНИЕ В ЯЗЫК TURBO
PASCAL 7.0

В 1992 год фирма Borland International выпустила два
пакета программирования, основанные на использование языка
Паскаля(1,8),-Borland Pascal 7.0 и Turbo Pascal 7.0.
Turbo Pascal включает в себя язык программирования
Паскаль для ЭВМ типа IBM и среду, предназначенную для написания, отладки и
запуска программ.
Язык характеризуется расширенными возможностями по
сравнению со стандартом, хорошо развитой библиотекой модулей, позволяющих
использовать возможности операционной системы, организовывать ввод – вывод,
формировать графические изображения и т.д.
Среда программирования позволяет создавать тексты
программ, компилировать их, находить ошибки и оперативно их исправлять,
компоновать программы из отдельных частей, включая стандартные модули,
отлаживать и выполнять программу.

I.
Алфавит языка
Алфавит языка – это совокупность допустимых в языке символов (или групп символов,
рассматриваемых как единое целое).
В языке Turbo Pascal все компоненты формируются
из множества символов стандарта ASCII.
Элементы алфавита можно условно разбить на четыре
группы:

Буквы: A,B,C,...,Z,  a,b,c,...z;
Цифры:
     0,1,2,…,9  и шестнадцатиричные цифры: 0,1,2,..,A,B,C,D,E,F;
Специальные
     символы: +, -, *, /, =, <, >, [ ], :, @, { }, $, #, Ù;
Комбинации
     символов: < >, <=, >=, :=, .. , (* *), (. .)

идентификаторы – имена, используемые для
обозначения программ, переменных и постоянных величин, различных процедур,
функций , объектов.
Для обозначения типов  данных, констант, процедур,
функций служат стандартные идентификаторы: integer, Sin,
Cos, Ln,
Sgr, Sgrt,
Read, Readln ,Write,  Writeln.

В этом примере стандартный идентификатор Sin
вызывает функцию, вычисляющую синус заданного угла, Read, Readln
вызывает процедуру, организующую ввод данных, Write,
Writeln  вызывает процедуру, организующую вывод данных.

Разделители
используются  для отделения друг от друга идентификаторов, чисел,
зарезервированных слов. В качестве разделителей можно использовать:
·
Пробел;
·
Любой управляющий символ (коды от
0 до 31), включая символ возврата каретки (код13);
·
Комментарий. Комментарии
заключаются в скобки { }, либо  в скобки вида (*  *) и могут  занимать любое
число строк.
При
написании программ применяются следующие специальные символы:
+         плюс
,           запятая
.           точка
-          минус
*
умножить
/           деление
div       деление
целых чисел
mod     остаток
от деления  целых чисел

Комбинации специальных
символов могут образовывать составные символы:
:=        присваивание
<=       меньше или равно
<>       не равно
 >=      больше
или равно
..          диапазон значений
(..)       альтернатива [ ]
(*
*)    альтернатива { }
В
программе эти пары символов  нельзя разделять пробелами, если они используются
как знаки операций отношения или ограничители комментария.

II.
Типы данных в TURBO PASCAL
Любая программа обрабатывает какие-либо данные. В
практике встречаются различные типы данных: целые и дробные числа, символы,
строки, массивы, множества и т.д.
Тип данных
– это множество значений, которые может принимать переменная, и совокупность
действий, которые можно выполнять с этими значениями.
Для описания каждого типа данных существует свой
стандартный идентификатор: для целых числовых данных – integer, для вещественных (дробных) - real, для символьных – char,
для строковых –string и т.д.
Данные целочисленных типов могут быть представлены как
в десятичной, так и в шестнадцатеричной системе. Если число представлено в шестнадцатеричной
системе, перед ним без пробела ставится знак $.
В десятичной  системе  числа могут записываться двумя
способами: с фиксированной и с плавающей запятой.
Пример:
125
-целое десятичное число
$1FF      -шестнадцатеричное число
125,563
-вещественное число
-12.9
-отрицательное вещественное число

Вещественные десятичные числа в форме с плавающей
точкой представлены в экспоненциальном виде: mE+p,
где m- мантисса (целое или дробное  число с десятичной
точкой), E  означает  десять в степени, p
- порядок (целое число).
Пример:
5.18Е+02=5.18*102=518
10Е
- 03=10*10-3=0.01
Пользователь может  разрабатывать собственные типы
данных и давать им произвольные имена.

III.
Константы и переменные
Константы
– это данные, не изменяющие своего значения до завершения работы программы,
описываются зарезервированным словом CONST, за
которым идет список имен констант, и каждой константе с помощью символа «=»
присваивается конкретное значение:
Пример:
CONST  PI=3.14;
                E=2.71;
                R=’МИР’;

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

VAR  A, B: integer;  {A и B –целые
переменные}

C: real;        {C – вещественная переменная}

IV.
Программы
Переменные и константы всех типов используются в выражениях.
Выражение задает порядок выполнения действий над элементами
данных и состоит из операндов (констант, переменных, обращений к функциям),
круглых скобок и знаков операции. Операции определяют действия,
которые надо выполнить над операндами.
Программа
– это совокупность операций решения какой–либо задачи, записанных в
соответствие алгоритму с помощью зарезервированных слов языка программирования.
По определению стандартного Pascal программа
состоит из:
·
заголовка программы
·
тела программы (блока), за которым следует точка
– признак конца программы.
В свою очередь, блок (тело программы) содержит:
·
раздел описаний;
·
раздел операторов.
Заголовок программы состоит из служебного слова Program, имени программы, образованного по правилам использования
идентификаторов Pascal, и точки с запятой.
Раздел описаний включает следующие подразделы:
·
раздел описания меток;
·
раздел описаний констант;
·
раздел описания типов;
·
раздел описания переменных;
·
раздел описания подпрограмм.
В языке Turbo Pascal должны быть описаны все переменные, типы, константы,
которые будут использоваться программой. Более подробно структуру программы
на языке Turbo Pascal можно представить
следующим образом:
Program <имя
программы>;
Label <раздел
меток>;
Const <раздел констант>;
Type
<раздел типов>;
Var
<раздел переменных>;
Procedure (Function) <раздел подпрограмм>;
Begin
<раздел операторов>
End.

Раздел операторов имеется в любой программе и является
основным. Предшествующие разделы носят характер описаний и не все обязательно
присутствуют в каждой программе.
В Turbo Pascal, в отличие от стандарта,
возможно следующее:
·   отсутствие заголовка программы;
·   разделы Const, Type, Var, Label могут следовать друг за
другом в любом порядке и встречаться в разделе описаний сколько угодно раз.
Тело программы начинается со слова begin, затем следуют операторы языка Pascal,
реализующие алгоритм решаемой задачи. Операторы в языке Pascal
отделяются друг от друга точкой с запятой и могут располагаться в одну строчку
или начинаться с новой строки. Назначение символа «;» - отделение
операторов друг от друга. Тело программы заканчивается служебным словом end.

Контрольные вопросы:
1.    Для
чего  используется указания типа данных величины?
2.    Как
описываются тип величины  в языке Паскаль?
3.    Чем
отличаются вещественные числа от целых?
4.    Какие
числа представлены в форме с плавающей  точкой:
5.    165,
10.3Е+02,   1234.678,   3789,    5.7Е+0.2,    63.9Е - 04
6.    Из
каких разделов состоит программа на языке Паскаль?
7.    С
какого слова начинается исполнительный блок программы?
8.    Каким
символом должна заканчиваться программа?
9.    Чем
отличаются переменные от констант?

ПРАКТИЧЕСКАЯ
РАБОТА №1
ПРИНЦИПЫ РАБОТЫ С
СИСТЕМОЙ TURBO PASCAL

Цель работы
Овладеть навыками работы  в интегрированной среде TURBO PASCAL 7.0:
уметь  запускать программу на выполнение, просматривать результаты программы в
окне пользователя.  Овладеть техникой  составления программы, компиляции программы
и записи её на диск под  заданным именем.

Задачи работы  Научиться
первоначальным навыкам работы в TURBO PASCAL 7.0.

Обеспечивающие средства
Сборник  описаний  практических работ, персональный компьютер, конспект лекций.

Задание
Запустить управляющую среду TURBO PASCAL 7.0. Составить программы,
используя предложенные задания, отладить их и сохранить.

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

Технология работы
1. Ознакомьтесь с
теоретическим материалом, необходимым для выполнения работы:
Для запуска интегрированной среды программирования TURBO PASCAL 7.0 нужно
установить на диске С: каталог TP  и ввести
команду turbo.exe.
С:\ТР\turbo.exe
После  запуска программы на экране отображаются три
видимых компонента интегрированной среды программирования: полоса меню в
верхней части(1), область редактирования в центре(2) и строка
статуса внизу(3).

1

2
3
Полоса
меню и подменю. Полоса меню и подменю
является основным доступом  ко всем командам меню. Для активизации выбора
команды меню необходимо нажать клавишу F10. Чтобы выбрать меню, которое хотите просмотреть,
используйте клавиши со стрелками, затем нажмите Enter. Чтобы
прервать действие нажмите клавишу Esc.
В поле редактирования набирается текст вводимой
программы. При наборе текста программы используются следующие клавиши:
Enter(¿) – перевод курсора на новую строку;
¬(Backspace) – удаление
символа перед курсором;
Delete – удаление символа над
курсором;
Ctrl+Y – удаляет всю строку, на которой расположен курсор;
Home – перевод курсора в начало
строки;
End – перевод курсора в конец
строки;
Page Up –
на страницу вверх;
Page Down –
на страницу вниз;
Ctrl+Page Up – в начало
текста;
Ctrl+Page Down – в
конец строки;
Tab – отступ строки на шаг
табуляции;
¬®¯ - стрелки
перемещения курсора по тексту.
При подготовке текстов программ часто возникает
необходимость перенести фрагмент текста в другое место или удалить его. Для
такого рода операций удобно использовать блоки – фрагменты
текста, рассматриваемые как единое целое. В каждый момент в оболочке может быть
объявлен только один блок в одном окне редактора. Сочетания клавиш,
предназначенные для работы  с блоком, таковы:
Ctrl+K+B – пометить начало блока;
Ctrl+K+K – пометить конец блока;
Ctrl+K+T – пометить в качестве блока слово слева от курсора;
Ctrl+K+Y – стереть
блок;
Ctrl+K+C – копировать
блок в позицию, где находится курсор;
Ctrl+K+V – переместить блок в позицию, где находится курсор;
Ctrl+K+W – записать блок в файл;
Ctrl+K+R – прочитать блок из файла;
Ctrl+K+P – напечатать блок;
Ctrl+K+H –
снять пометку блока (повторное использование этих клавиш вновь выделит блок).

Строка статуса.  В строке статуса обозначено назначение оперативных
клавиш, действующих в данный момент. Для того чтобы увидеть, как работают
другие комбинации клавиш, нажмите Alt и подержите ее в нажатом
положении несколько секунд: строка статуса изменится, и вы увидите назначение
комбинаций Alt с другими клавишами.
Запуск программы на выполнение
Нажмите
Ctrl +F9.
При
этом будет произведена  компиляция программы т. е. проверка правильности набора
и использования операторов. Если текст ввели правильно, то на экран будет
выведено сообщение об успешности компиляции "Compile successful" и программа запустится на выполнение. Если
появится красная надпись, следовательно, в программе есть ошибки. Курсор будет
находиться в месте предполагаемой ошибки. Проверьте и исправьте ошибку, затем
повторите запуск.

Просмотр
результатов выполнения программы
Результат
выполненной программы можно увидеть нажав комбинацию клавиш - Alt + F5. Вернуться
в окно редактирования клавиша Esc.

Сохранение
программы

Активизируйте
     верхнее меню – F10.
     Выберите пункт меню File, затем пункт  "Save as…" нажимая  клавишу Tab перейти на свой диск А: и записать имя файла.
Клавиша
     F2.
     Нажимая  клавишу Tab перейти на свой диск А: и записать имя
     файла.

Открытие
ранее сохраненной программы

Активизируйте
     верхнее меню – F10.
     Выберите пункт меню File, выберите пункт подменю Open.  Перейдите на свой диск А: выберите ранее сохраненный
     файл.
Клавиша
     F3. Перейдите на свой диск А: выберите
     ранее сохраненный файл.

Завершение
работы

Активизируйте
     верхнее меню – F10.
     Выберите пункт меню File, выберите пункт подменю Exit.
Комбинация
     клавиш Alt – X.

2. Выполните следующие
упражнения:
Задания уровня 1

Упражнение 1. Создать программу, вычисляющую длину гипотенузы  c  и величины двух
углов α  и β  прямоугольного треугольника, если заданы длины двух
его катетов a  и b. Значения катетов вести с клавиатуры.

1.
Наберите текст программы:

Program
Pr_1;                                                {Заголовок
программы Pr_1}
var                                                                     {Раздел
описаний}
  a,
b, c, alf, bet : real;                                      {Переменные a,
b, c, alf, bet - вещественные}
Begin                                                                 {Тело
программы}
      Write('a=');                                                {Вывод
запроса на экран}
      Read
(a);                                                     {Ввод
значения a с клавиатуры}
      Write('b=');                                                {Вывод
запроса на экран}
      Read
(b);                                                     {Ввод
значения b с клавиатуры}
      c:=sqrt(a*a+b*b);
                                     {Вычисление гипотенузы c}
      alf:=arctan(a/b);                                         {Вычисление угла
alf }
      bet:=arctan(b/a);                                        {Вычисление угла
bet }
      Writeln('c=', c:6:2);                                   {Вывод
ответа}
      Writeln('Радианы');
                                {Вывод ответа: углы в радианах}
      Writeln('alf=',
alf:6:2, 'bet=', bet:6:2);
End.                                                                   {Конец программы}

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4. Сохраните программу на своем
диске:  <F2>                                A:\P1PR1

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

      Writeln('Градусы');
                                 {Вывод ответа: углы в градусах}
      Writeln('alf=',
alf*180/ pi :3:0, 'bet=', bet*180/ pi :3:0);

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4. Сохраните программу на своем
диске:  <F2>                                A:\P1PR2

3. Выполнить самостоятельно:
Задания уровня 2

1. Заданы радиус основания
и высота цилиндра. Вычислить площадь основания и объем. Площадь основания
вычисляется по формуле, объем цилиндра равен V=S*h.
Сохраните как P1PR3.
2. Вычислите среднее
арифметическое (a+b)/2.
Сохраните программу как P1PR4.
3. Составить программу
вычисления площади и периметра прямоугольника по двум введенным сторонам.
Предусмотреть вывод на экран сообщения о результате. Сохраните как P1PR5.
4. За решение четырех
задач студент получил оценки (от 1 до 5). Составьте программу, которая
определит среднее значение оценок, полученных студентом за задачи. Сохраните
программу как P1PR6.

Задания уровня 3

5. Четыре человека
пообедали в ресторане. Официант подал каждому счет. Они решают оставить
официанту чаевые в размере 15% от счета. Составить программу,  которая выведет
на экран сумму чаевых, которую получил официант. Сохраните программу как P1PR7.
6. Составить программу,
которая определяет, сколько времени в минутах затратит школьник на дорогу из
школы до стадиона, если известна длина этого расстояния S
км и средняя скорость движения школьника v км/ч? Сохраните программу как P1PR8.
7. Три четверти пассажиров
самолета имеют билеты второго класса стоимостью X рублей каждый. Остальные пассажира имеют билеты первого
класса, которые стоят в два раза дороже билетов второго класса. Напишите
программу, которая выведет сумму денег, получаемую авиакомпанией от продажи
билетов на этот рейс, если салон самолета рассчитан на V пассажиров. Сохраните программу как P1PR9.

4.
Окончание работы:

1.
Сохранить созданные программы.
2.
Подготовить ответы на контрольные вопросы.
3.
Показать работу преподавателю.
4.
Завершить работу TURBO PASCAL.

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

1.
Как  запустить среду программирования TURBO PASCAL?
2.
В чем заключается назначение следующих опций пункта меню File: Save As, Save, Open, Exit?
3.
Как просмотреть  результаты выполнения программы в окне пользователя?
4.
Как откомпилировать файл программы?

ПРАКТИЧЕСКАЯ
РАБОТА №2
СТРУКТУРА
ПРОГРАММЫ. ОПИСАНИЕ ПЕРЕМЕННЫХ В TURBO PASCAL

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

Задачи работы  Научиться
составлять программы по определению TURBO PASCAL и описывать переменные
различных типов.

Обеспечивающие средства
Сборник  описаний  практических работ, персональный компьютер, конспект лекций.

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

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

Технология работы

1. Ознакомьтесь с
теоретическим материалом, необходимым для выполнения работы:
Данные, обрабатываемые программой, могут быть разных
типов.  Тип определяет область допустимых значений, а также операции и функции,
применяемые к величинам этого типа.
Типы данных в Turbo
Pascal можно разделить
на скалярные и структурированные. Существует также возможность вводить
пользовательские типы данных.
В скалярных типах можно выделить следующие группы.

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

Таблица 1
Целочисленные типы данных

Идентификатор

Длина, байт

Диапазон (множество) значений

Знак числа

Integer

2

от -32768 до 32767

Целое со знаком

Byte

1

от 0 до 255

Целое без знака

Word

2

от 0 до 65535

Целое без знака

Shorting

1

от –128 до 127

Целое со знаком

Пример
описания переменных целочисленного типа:
Var
a, b: byte;
f: word;

1. 2 Вещественный тип данных
Данные вещественного типа – это вещественные значения,
записанные в памяти в виде чисел с плавающей (например, 3.2Е-6, -6.42Е+2)
и фиксированной (например, 4.12, -17.548) точкой. Область возможного
изменения значений определяется размером (в байтах), отводимым под конкретную
реализацию типа. В таблице 2 представлена классификация целочисленных типов
данных.

Таблица 2
Вещественные типы данных

Идентификатор

Длина, байт

Диапазон (множество) значений

Знак числа

Real

6

от 2,9*10 до 1,7*10

11-12

Single

4

от 1,5*10 до 3,4*10

7-8

Double

8

от  5*10 до 1,7*10

15-16

Extended

10

от  3,4*10 до 1,1*10

19-20

Пример
описания переменных вещественного типа:
Var
a, b, c: real;
d, f: double;
k: single;

1. 3 Символьный тип данных
Данные стандартного символьного типа представляют
собой символы раскладки ASCII. Переменная или константа символьного типа занимает 1
байт памяти. Пример описания переменных символьного типа:
Var
a, b: char;

1. 4 Логический  тип данных
Данные логического типа (Boolean) в
стандарте языка могут принимать одно из двух значений: True или False. Переменная или константа логического типа занимает 1
байт, в который записывается 1, если переменная или константа имеет значение True,
и 0 в противном случае. Пример описания переменных символьного типа:
Var
a, b: boolean;

Кроме стандартных скалярных типов в Turbo Pascal можно вводить такие скалярные типы, как перечислимый
и интервальный.

1. 5 Перечислимый  тип задается непосредственным перечислением значений,
которые может принимать переменная данного типа, например:
Var
a, c: (red, blue, green);
b: (dog, cat);
Можно сначала ввести перечислимый тип данных, а затем
описать его переменные. Для создания нового типа используется служебное слово type:
type <имя_типа>=<определение_типа>;
Напрмер:
type
color= (red, blue, green);
Var
a, b: color;

1. 6 Интервальный тип данных позволяет задавать две константы, которые
определяют границы изменения переменных данного типа. Значение первой константы
должно быть меньше второй. Сами же они являются целочисленными или символьными,
например:
Var
a, b, c: -7. . 4;
f: ′а′.
. ′с′;
Как и в случае перечислимого типа,
можно предварительно ввести тип данных с помощью служебного слова  type,
а затем описывать переменные. Например:
type
x = 0 . .
9;
Var
a, b: x;
Каждая переменная интервального типа
занимает 1 байт.

1. 6 Арифметические операции
К арифметическим типам данных относятся группы
вещественных и целых типов.  К ним применимы арифметические операции и операции
отношений. Арифметические операции стандартного Паскаля описаны в таблице 3.
Таблица 3
Арифметические операции языка Turbo Pascal

ЗНАК

ВЫРАЖЕНИЕ

ТИП ОПЕРАЦИИ

ТИП РЕЗУЛЬТАТА

ОПЕРАЦИЯ

+

A+B

R, R
I, I
I, R; R, I

R
I
R

СЛОЖЕНИЕ

_

A – B

R, R
I, I
I, R; R, I

R
I
R

ВЫЧИТАНИЕ

*

A*B

R, R
I, I
I, R; R, I

R
I
R

УМНОЖЕНИЕ

/

A/B

R, R
I, I
I, R; R, I

R
R
R

ДЕЛЕНИЕ

DIV

A div B

I, I

I

ЦЕЛОЕ ДЕЛЕНИЕ

MOD

A mod B

I, I

I

ОСТАТОК ОТ ЦЕЛОГО ДЕЛЕНИЯ

К арифметическим величинам могут быть применены
стандартные функции Паскаля, описания которых содержатся в таблица 4.
Таблица 4
Стандартные математические функции языка Turbo Pascal

Обращение

Функция

Тип результата

Frac(x)

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

R

Int(x)

Целое

R

Ln(x)

Натуральный логарифм

R

Pi

Постоянная величина π

 R

Abs(x)

Абсолютное значение (модуль
  числа)

R ИЛИ I

Arctan(x)

Арктангес х

R

Cos(x)

Косинус х

R

Exp(x)

е- экспанента

R

Random

Случайное число от 0 до 1

R

Random(n)

Случайное число от 0 до n

I

Odd(x)

True , если х – нечетное
False , если х – четное

Sin(x)

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

R

Sqr(x)

Квадрат аргумента

I ИЛИ R

Sqrt(x)

Квадратный корень

R

Trunc(x)

Ближайшее целое, не
  превышающие аргумент по модулю (отсекание дробной части числа x)

I

Round(x)

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

I

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

Определенную проблему представляет возведение X в степень n. Если значение степени n –
целое положительное число, то можно n  раз
перемножить X (что дает более точный результат и при целом n предпочтительнее) или воспользоваться формулой,:

которая программируется с помощью стандартных функций
на языке Паскаль:
Ø  exp(n*ln(x)) –
для положительного X;
Ø  -exp(n*ln(abs(x))) – для отрицательного X.
Эту же формулу можно использовать для возведения  X в дробную степень n, где n - обыкновенная правильная
дробь вида k/l, а
знаменатель l нечетный. Если знаменатель l четный, это означает извлечение корня четной степени, следовательно
есть ограничения на выполнение операции.
При возведении числа X в
отрицательную степень n следует помнить, что

Таким образом, для программирования выражения,
содержащего возведение в степень, надо внимательно проанализировать значения,
которые могут принимать X и n, так как в некоторых
случаях возведение X  в степень n
невыполнимо.
Для вычисления логарифма с основанием a
используем: loga(x) = ln(x)/ln(a)

2. Выполните следующие
упражнения:

Задания уровня 1

Упражнение 1. Вычислить месячные выплаты m по займу
в s рублей
на n лет под процент p.
Вычисления выполняются по формулам:
1.
Наберите текст программы:
Program
Zaim;
var
  m, s, p, r,
n, a, d: real;
  rub,
kop: integer;
                                 {Целая и дробная часть числа (рубли и копейки)}
Begin
      writeln ('Введите заем, процент и количество лет в одной строке');
      readln
(s, p, n);
      r:=p/
100;
      a:=exp (ln(1+r)*n);                           {Вычисление
степени числа через логарифм}
      m:=(s*r*a)/(12*(a-1));
      m:=trunc (100*m+0.5)/ 100;            {Округление
до копейки}
      d:=m*n*12 - s;                                  {Общая прибыль}
      writeln;
      rub:=round (s*100) div 100;{Преобразование
числа в денежный формат (выделения руб.и коп.)}
      kop:=
round (s*100) mod 100;
      write ('Взято
', rub, 'руб.', kop, 'коп.');
      write
('под ', p:5:2, '% на ', n:5:2, 'лет');
      writeln;
      rub:=round (m*100) div 100; {Преобразование
числа в денежный формат (выделения руб.и коп.)}
      kop:=
round (m*100)
mod 100;
      writeln
('Месячная выплата = ', rub, 'руб.',
kop, 'коп.');
      rub:=round (d*100) div 100; {Преобразование
числа в денежный формат (выделения руб.и коп.)}
      kop:=
round (d*100)
mod 100;
      writeln
('Общая прибыль= ', rub, 'руб.', kop, 'коп.')
End.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4. Сохраните программу на своем
диске:  <F2>                                A:\P2PR1

Упражнение
2. Вычислить сумму цифр трехзначного
числа.
1.
Наберите текст программы:
Program
chislo;
var
    i, first,
second, third, sum: integer;
Begin
      write ('Введите целое трехзначное число: ');
      readln
(i);
      first
:= i div 100;                                                  {Выделение
первой цифры числа}
      second
:= i div 10 mod 10;                                  {Выделение
второй цифры числа}
      third
:= i mod 10;                                                {Выделение
третьей цифры числа}
      sum
:=  first + second + third;
      writeln
('Сумма цифр числа ', 100 * first+10 * second + third, '=', sum)
End.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4. Сохраните программу на своем
диске:  <F2>                                A:\P2PR2

Упражнение
3. Перевести
английские названия  дней недели на русский язык
1.
Наберите текст программы:
Program
WEEK;
type
days=(mon, tue, wed, thu, fri, sat, sun)
var
  d : days;
Begin
      for
d:=mon to sun do
      case d
of
            mon: writeln(′понедельник′);
            tue:
writeln(′вторник′);
            wed:
writeln(′среда′);
            thu:
writeln(′четверг′);
            fri:
writeln(′пятница′);
            sat:
writeln(′суббота′);
            sun:
writeln (′воскресенье′);
      end
End.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4. Сохраните программу на своем
диске:  <F2>                                A:\P2PR3

3. Выполнить самостоятельно:

Задания уровня 2

1. Вычислить произведение
цифр трехзначного числа. Сохраните как P2PR4
2. Заданы длины трех
сторон треугольника a, b, c. Вычислить
периметр и площадь треугольника по формуле Герона  Сохраните
как P2PR5

Задания уровня 3

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

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

Сохраните как P2PR9, P2PR10, P2PR11

4.
Окончание работы:
1.
Сохранить созданные программы.
2.
Подготовить ответы на контрольные вопросы.
3.
Показать работу преподавателю.
4.
Завершить работу TURBO PASCAL.

Контрольные вопросы:
1.
Какие типы данных в Turbo Pascal вы знаете?
2.
Как описываются целый, вещественный, логический и символьный типы
данных?
3.
Как задается перечислимый тип данных?
4.
В каких случаях удобно использовать интервальный тип данных?

ПРАКТИЧЕСКАЯ
РАБОТА №3
СОСТАВЛЕНИЕ
ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ ОСНОВНЫХ ОПЕРАТОРОВ В TURBO PASCAL

Цель работы
Овладеть техникой  составления программ с использованием основных операторов TURBO PASCAL.

Задачи работы   Научиться
использовать операторы присваивания, ввода-вывода, составной оператор, условный
оператор и оператор варианта.

Обеспечивающие средства
Сборник  описаний  практических работ, персональный компьютер, конспект лекций.

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

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

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

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

1. 2 Операторы ввода-вывода
Ввод информации с клавиатуры осуществляется с помощью оператора Read. Он может иметь один из следующих форматов:
                     Read
(<список ввода>);
где
<список ввода> – это последовательность имен переменных,
разделенных запятыми; или
                     ReadLn
(<список ввода>);
Оператор Read
обеспечивает ввод данных разных типов с клавиатуры. В скобках указываются имена
переменных, которым присвоятся введенные значения. При вводе нескольких
значений с помощью одного оператора они разделяются символом <пробел>.
Оператор ReadLn аналогичен предыдущему, отличие заключается в том,
что при выполнении одного оператора ReadLn
курсор на экране монитора переходит на новую строку.
Аналогично существует две формы оператора вывода.
Оператор вывода на экран (обращение к стандартной процедуре вывода)
имеет следующий формат:
            Write (<список вывода>);
            WriteLn
(<список вывода>);
Здесь элементами списка вывода могут быть выражения
различных типов. Действие оператора WriteLn
отличается от оператора Write тем, что после вывода последнего в списке
значения происходит перевод курсора к началу следующей строки. Оператор WriteLn
может использоваться без каких-либо параметров –  в этом случае после
выполнения такого оператора курсор перемещается на одну позицию вниз.
1. 3 Составной оператор
Составной оператор – группа операторов, отделенных друг от друга точкой
с запятой, начинающихся со служебного слова begin и
заканчивающихся служебным словом end.
Begin
      оператор_1;
      …
      оператор_n
End;
Транслятор
воспринимает составной оператор как единый.

1. 4 Условный оператор
Для задания выбора того или иного действия в
зависимости от условия в языке Pascal предназначен условный оператор:
                   if
<условие>  then <оператор1>
                  else <оператор2>;
В качестве условия используется значение логического выражения, в качестве
операторов – любой простой или составной оператор, в том числе и сам условный
оператор. Если значение логического выражения – true, то
выполняется <оператор1>, если false, то выполняется
<оператор2>.
И по ветке then, и по
ветке else должен
выполняться единственный оператор. Если по смыслу задачи необходимо выполнить
несколько операторов, тогда следует использовать составной оператор.

1. 5 Условный оператор Case
(оператор варианта)
Оператор варианта Case необходим в тех случаях, когда в зависимости от значений какой-либо
переменной надо выполнить те или иные операторы:
case
<выражение> of
            <значение1> : <оператор1>;
            <значение2> : <оператор2>;
            <значение3> : <оператор3>;
                        …                        …
      else <оператор N>
end;
<оператор
N> выполнится только в том случае, если значение
выражения не совпадет ни с одним из <значений I>. При
использовании оператора Case необходимо помнить о том, что значение выражения и <значения
I> должны быть одного типа.

2. Выполните следующие
упражнения:
Задания уровня 1

Упражнение 1. Вычислить частное двух целых чисел. В связи с тем, что
делить на ноль нельзя, организуем контроль ввода данных.
1.
Наберите текст программы:
Program
 DEL;
var
    a,
b: integer;                                                          {Операнды
– целые числа}
    result:
real;                                                            {Результат
– вещественное число}
Begin
      write ('Введите значение делимого a:
'); read(a);
      write ('Введите значение делимого b:
'); read(b);
      if b=0
         {Условие
выполнено}
         then writeln
(′Неверные исходные данные: делитель - ноль′)
         {Условие не
выполнено}
      else
         {Составной
оператор нужен для объединения двух команд в единое целое}
         begin                                                                  {Начало
составного оператора}
            result:=a/b;
            writeln (′Частное чисел′, a, ′и ′, b,
′ = ′, result:7:3);
         end                                                                     {Конец
составного оператора}
End.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4. Сохраните программу на своем
диске:  <F2>                                A:\P3PR1

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

1.
Наберите текст программы:
Program
CHET;
var
    n:
integer;
Begin
      write ('Введите
целое число: ');
      readln(n);
      write ('Число
', n, ′ - ′);
      if n
mod 2=0 then writeln (′четное′) else
writeln (′нечетное′);
End.

Комментарий: для проверки
на нечетность можно использовать функцию odd:
      if
odd(n) then writeln (′нечетное ′)
else writeln (′четное′);

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4. Сохраните программу на своем
диске:  <F2>                                A:\P3PR2

Упражнение 3. Вывести на печать название дня недели, соответствующее
заданному числу D, при условии, что в месяце 31 день и 1-е число –
понедельник. Для решения задачи воспользуемся
операцией mod, позволяющей вычислить остаток от
деления двух чисел, и условием, что 1-е число – понедельник. Если в результате
остаток от деления заданного числа D на 7 будет равен 1, то это понедельник, двойке – вторник, тройке –
среда и т.д.

1.
Наберите текст программы:
Program
D_NED;
var
    D: byte;
Begin
      write ('Введите
число D= ');
      readln
(D);
      case D mod 7 of                                                   {Вычисляется
остаток от деления D на 7}
            {В зависимости
от полученного значения на печать выводится название дня недели}
            1: writeln (′ПОНЕДЕЛЬНИК′);
            2: writeln (′ВТОРНИК′);
            3: writeln (′СРЕДА′);
            4: writeln (′ЧЕТВЕРГ′);
            5: writeln (′ПЯТНИЦА′);
            6: writeln (′СУББОТА′);
            0: writeln (′ВОСКРЕСЕНЬЕ′)
            {Если
результат управляющего выражения превышает 6, то выдается сообщение об ошибке}
      else writeln (′ОШИБКА ПРИ
ВВОДЕ!!!′)
      end;
End.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4. Сохраните программу на своем
диске:  <F2>                                A:\P3PR3

3. Выполнить самостоятельно:
Задания уровня 2

1. Составьте программу,
которая сравнивает возраст брата и сестры и выводит соответствующее сообщение.
Записать программу под именем P3PR4.
2. Составить программу,
проверяющую, принадлежит ли число, введенное с клавиатуры, интервалу (1; 5).
Сохраните программу под именем P3PR5.
3. По заданному номеру
месяца m вывести
на печать название времени года. Сохраните программу под именем P3PR6.
4. Составьте программу,
которая выводит на экран различные приветствия в зависимости от введенного
времени. Договоримся, что утро длится с 8 до 12 часов, день – с 12 до 17 часов,
вечер – с 17 до 23 часов и ночь – все остальное время. Задачу решить двумя
способами: с помощью условного оператора и оператора выбора. Сохраните
программу под именем P3PR7.
5. Работник зарабатывает X рублей за 38 часов своей работы. Ему платят в 1,5 раза
больше за каждый час сверх 38 часов. Какую сумму он получит, если отработает A часов? Сохраните программу под именем P3PR8.

Задания уровня 3

4. Составить программу,
которая проверяет, может ли существовать треугольник с заданными сторонами.
Известно, что сумма двух любых сторон должна быть больше третьей. Сохраните
программу под именем P3PR9.
5. Даны целые числа a, b, c. Если a ≤ b ≤ c, то
все числа заменить наименьшим из них, в противном случае сменить знак каждого
числа. Сохраните программу под именем P3PR10.
6. Составьте программу
решения квадратного уравнения с использованием сложных условий. Сохраните
программу под именем P3PR11.
7. Составьте программу,
предназначенную для вычисления значения переменной y, где   при
четных значениях  x;  y=x2 – 6  при
значениях  x, кратных
5;  y=0  во всех остальных случаях. Сохраните
программу под именем P3PR12.
8. Напишите программу,
которая при вводе латинской прописной буквы выводит на экран такую же букву, но
строчную. Сохраните программу под именем P3PR13.
Указание: воспользуйтесь
тем фактом, что все латинские прописные буквы расположены в кодовой таблице
подряд, по алфавиту, начиная с символа ‘A’ с кодом 65.
Строчные буквы также расположены по алфавиту, начиная с символа ‘a’ с кодом 97.
Подсказка: для решения
обратной задачи существует функция UpCase,
которая преобразует строчные буквы латинского алфавита в прописные, но не
изменяет другие, то есть: UpCase(‘p’)=’P’;
         UpCase(‘P’)=’P’;
         UpCase(‘+’)=’+’;
5.
Окончание
работы:

1.
Сохранить созданные программы.
2.
Подготовить ответы на контрольные вопросы.
3.
Показать работу преподавателю.
4.
Завершить работу TURBO PASCAL.

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

1.
Как работает оператор присваивания?
2.
Приведите синтаксис оператора присваивания.
3.
Что такое ввод данных?
4.
Что такое вывод данных?
5.
Перечислите формы операторов ввода данных.
6.
Перечислите формы операторов вывода данных.
7.
Сформулируйте правила записи оператора IF.
8.
Что такое вложенный оператор IF?
9.
Что представляет собой оператор варианта?
10.  В
программах какого типа используется оператор варианта?
11.  Константы
какого типа могут быть использованы в операторе варианта?
12.  Какое
соответствие должно быть между выражением оператора варианта и его константами?

ПРАКТИЧЕСКАЯ
РАБОТА №4
ПРИМЕНЕНИЕ ЦИКЛОВ
С ПАРАМЕТРОМ В TURBO PASCAL

Цель работы
Овладеть техникой  составления программ с повторяющимися фрагментами.

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

Обеспечивающие средства
Сборник  описаний  практических работ, персональный компьютер, конспект лекций.

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

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

Технология работы
1. Ознакомьтесь с теоретическим
материалом, необходимым для выполнения работы:
Оператор цикла с параметром используют, когда
количество повторений цикла известно заранее или необходимо изменять какую-либо
величину на одно и то же значение в определенном диапазоне. Форма записи
оператора:
For <параметр> := <начальное значение> To <конечное значение> Do
<оператор>;
Служебное слово To указывает
направление изменения параметра – увеличение на 1 (начальное значение меньше
конечного значения; если это условие не выполнится, то оператор не выполнится
ни разу). Если необходимо, чтобы параметр уменьшался на 1, то используется
слово DownTo (начальное значение больше конечного значения). В
качестве оператора можно использовать любой простой или составной оператор.
Цикл For удобно
использовать для организации вывода данных программы. Вместе с оператором if и функцией readln он позволяет выполнить постраничный вывод. Например, при
выполнении следующего цикла программа будет приостанавливать вывод после
заполнения экрана столбцом цифр до нажатия клавиши <Enter>:
for i:=1 to 50 do
   begin
      writeln (i);
      if i mod 24=23 then readln;
   end;

2. Выполните следующие
упражнения:
Задания уровня 1

Упражнение 1. Тест по таблице умножения: ученику задается ровно пять
вопросов и в конце тестирования выставляется оценка по пятибалльной системе.
1.
Наберите текст программы:

Program
CIKL;
Var                                                           {Описание
параметров цикла}
   i:
integer;
   c: char;
   b:
boolen;
begin
   {Вывод
на печать целых чисел от 1 до 10}
   for
i:=1 to 10 do writeln (i);
   {Вывод на
печать целых чисел от 10  до -10}
   for
i:=10 downto -10 do
    writeln
(i);
   {Вывод на
печать латинских символов от a до r}
   {
Параметр цикла изменяется от a до r в алфавитном порядке}
   for
c:='a' to 'r' do writeln (c);
end.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4.
Сохраните программу на своем диске:  <F2>                                A:\P4PR1

Упражнение 2. Тест по таблице умножения: ученику задается ровно пять
вопросов и в конце тестирования выставляется оценка по пятибалльной системе.
1.
Наберите текст программы:
Program
TABL;
var
    s1,
s2, otvet, k, prav: integer;      {s1,s2–сомножители,
otvet–ответ ученика, prav – пр. ответ
}
begin
     randomize;
                                   {Инициализация датчика случайных чисел}
      clrscr;                                           {Очистка экрана}
      for
k:=1 to 5 do
         begin
            s1:= random(18)+2; s2:= random(18)+2;{s1,s2 –
случайные числа в диапазоне от 2 до 19}
            write
('Сколько будет', s1, ' * ', s2, ' ? ');
            readln
(otvet);
            if
otvet=s1*s2 then
               begin
                  write('
Правильно! ');
                  prav:=prav+1;
               end
            else
write(' Неверно… ');
         end;
         clrscr;                                         {Очистка экрана}
         writeln('
Ваша оценка: ' , prav);
         readln
end.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4.
Сохраните программу на своем диске:  <F2>                                A:\P4PR2

Упражнение 3. Дано натуральное число N.
Определить, является ли оно простым. Натуральное число N называется простым, если оно делится нацело без остатка только на
единицу и N. Число 13 – простое, т.к. делится
только на 1 и 13, N=12 не
является простым, т.к. делится на 1, 2, 3, 4, 6, 12. Алгоритм решения этой
задачи заключается в том, что число N делится на параметр цикла i, изменяющийся в диапазоне от 2 до N/2. Если среди значений параметра не найдется ни
одного числа, делящего заданное число нацело, то N – простое число, иначе оно таковым не является.

1.
Наберите текст программы:
Program
PRCH;
Var
  N, i: integer;
   Pr: boolen;
begin
   writeln
(′N= ′);
   readln(N);
   Pr:=true;                             {Предположим, что число
простое}
   for
i:=2 to N div 2 do
      if N mod i=0
then            {Если найдется хотя бы один
делитель, то}
      begin
         Pr:=false;                      {число
простым не является, и}
         break;                            {досрочный выход из
цикла}
      end;
   if
Pr then {Проверка
значения логического параметра и вывод на печать соответствующего сообщения}
      writeln(′Число
′, N, ′ - простое′)
   else
      writeln(′Число
′, N, ′ простым не является′)
end.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4.
Сохраните программу на своем диске:  <F2>                                A:\P4PR2

3. Выполнить самостоятельно:

Задания уровня 2

1. Вычислить an (n>0),
где a - вещественное число, которое необходимо
возвести в целую положительную степень n.
Записать программу под именем P4PR3
2. Вычислить сумму
натуральных нечетных чисел, не превышающих n.
Сохранить программу под именем P4PR4
3. Вычислить произведение
натуральных чисел, кратных трем и не превышающих n.
Сохранить программу под именем P4PR5
4. Выведите на экран в три
столбца список чисел от 1 до N, их квадратов и
кубов. Число N вводите с клавиатуры.  Сохранить
программу под именем P4PR6
5. Вычислите сумму S и произведение P всех целых чисел от N1 до N2. Пример: для N1=3, N2=7 получим S=25, P=2520. Сохранить
программу под именем P4PR7

Задания уровня 3

6. Напишите программу
вычисления выражения
(3-x)(6-x)(9-x)∙ …
∙(21-x), где x
– действительное число.
Сохранить программу под именем P4PR8

7. Последовательно
вводится N целых чисел.
Найдите минимальное и максимальное число из введенных чисел. Сохранить
программу под именем P4PR9

8. Вводится
последовательность из M элементов. Каждый
элемент последовательности – цифра (то есть находится в диапазоне от 0 до 9).
Сформировать  число N,  считая  первый элемент
последовательности младшим разрядом. Например,  дана  последовательность  5, 4,
3, 2, 1, тогда десятичное число формируется следующим образом:
5+4*10+3*100+2*1000+1*10000=12345.   Сохранить программу под именем P4PR10

4.
Окончание работы:

1.
Сохранить созданные программы.
2.
Подготовить ответы на контрольные вопросы.
3.
Показать работу преподавателю.
4.
Завершить работу TURBO PASCAL.

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

1.
Что называют циклом?
2.
Какова функция оператора цикла с параметром?
3.
В программах какого типа используется счетный оператор цикла?
4.
Каким образом изменить наращивание переменной цикла в отрицательную
сторону?
5.
Перечислите правила использования оператора цикла с параметром.

ПРАКТИЧЕСКАЯ
РАБОТА №5
ПРИМЕНЕНИЕ ЦИКЛОВ
С ПРЕДУСЛОВИЕМ И С ПОСТУСЛОВИЕМ
В TURBO PASCAL

Цель работы
Овладеть техникой  составления программ с повторяющимися фрагментами.

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

Обеспечивающие средства
Сборник  описаний  практических работ, персональный компьютер, конспект лекций.

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

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

Технология работы
1. Ознакомьтесь с
теоретическим материалом, необходимым для выполнения работы:
1.1 Оператор while…do
предназначен для реализации циклов с предусловием. Форма записи:
            while
<условие> do <оператор>;
В качестве оператора может быть любой простой или
составной оператор.
В цикле с предусловием предварительной проверкой
определяется, выполнять тело цикла или нет, до первой итерации. Если это не
соответствует логике алгоритма, то можно использовать цикл с постусловием,
т.е. цикл, в котором проверяется, делать или нет очередную итерацию, лишь после
завершения предыдущей. Это имеет принципиальное значение только на первом шаге,
а далее циклы ведут себя идентично.
1.2 Оператор repeat…until реализует цикл
с постусловием. Данный цикл всегда будет выполнен хотя бы один раз. Форма
записи:
repeat
<оператор1>;
<оператор2>;
…
 until    <условие>;
Последовательность операторов может состоять из одного
или нескольких любых операторов.
В цикле while подразумевается такой
алгоритм: пока условие истинно, выполнять операторы тела цикла. В цикле repeat действует другой алгоритм: выполнять тело цикла, пока не станет
истинным условие, т.е. пока условие ложно, выполняется цикл.

2. Выполните следующие
упражнения:
Задания уровня 1

Упражнение 1. Вывести на экран таблицу значений функции. Вывод
выполняется в два столбца: первый – значения аргумента, второй – значения
функции при изменении аргумента от значения a до b с шагом dx.
1.
Наберите текст программы:
Program
FUNC;
uses crt;
var
    x, y, z,
lg3, a, b, dx: real;
begin
      clrscr;
                                                                  {Очистка экрана}
   write (′Введите
начальное значение аргумента: ′); readln(a);
   write (′Введите
конечное значение аргумента: ′); readln(b);
   write (′Введите
шаг табулирования: ′); readln(dx);
   writeln (′---------------′:20);
   write (′x′:9, ′
| ′:4, ′y′:4);
   writeln (′---------------′:20);
      lg3:=ln(3.0)/ln(10.0);                 {Вычисление lg(3)}
      x:=a;
      while
x<(b+dx/2) do
         begin
            z:=sin((pi*x)/3;
            if (z<0) then writeln(x:10:3, ′  |  функция не определена′:22)
            else
               begin
                  y:=lg3+x*sqrt(5.0*z);
                  writeln(x:10:3,
′  |  ′, y:7:3);
               end;
            x:=x+dx;
         end;
   writeln (′---------------′:20)

end.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4.
Сохраните программу на своем диске:  <F2>                                A:\P5PR1

Упражнение 2. Тест по таблице умножения, которая уже приводилась в
качестве примера. В результате использования цикла получается полноценная
тестирующая программа, которая также будет выводить и результаты тестирования. Обратите внимание, что команда
инициализации датчика случайных чисел  выполняется до начала цикла, т.к. она
должна быть выполнена только один раз. Инструкции для вывода результатов теста
выполняются после выхода из цикла.
1.
Наберите текст программы:
Program
TABL_1;
uses crt;
var
    s1, s2, otvet,
kol, prav: integer; yn: char;
{s1,s2–сомножители, otvet–ответ ученика, prav – пр. ответ}
begin
     randomize;
                       {Инициализация датчика случайных чисел}
      clrscr;
                              {Очистка экрана}
      repeat
         kol:=kol+1;
         s1:= random(18)+2; s2:= random(18)+2;     {s1,s2 – случайные числа в диапазоне от 2 до 19}
         write
('Сколько будет', s1, ' * ', s2, ' ? ');
         readln
(otvet);
         if
otvet=s1*s2 then
            begin
               write('
Правильно! '); prav:=prav+1;
            end
         else
write(' Неверно… ');
         write(' Продолжим тест? (Y/N) '); readln(yn);
      until
(yn=′n′) or (yn=′N′);
      clrscr;
{Очистка экрана}
      writeln('
Результаты теста: ');
      writeln('
Задано вопросов: ', kol, ′.
Правильных ответов: ′, prav,
′.′);
      readln
end.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4.
Сохраните программу на своем диске:  <F2>                                A:\P5PR2

3. Выполнить самостоятельно:

Задания уровня 2

1. Измените программу из Упражнения
2 таким образом, чтобы, при необходимости, можно отказаться от выполнения
теста и корректно выйти из программы (используйте оператор WHILE..DO). Записать программу под именем P5PR3
2. Вычислить сумму
натуральных четных чисел, не превышающих N.
Программу составьте двумя способами: используя цикл с предусловием и цикл с
постусловием. Сохранить программу под именем P5PR4 и P5PR5
3. В результате выполнения
программы должны быть выведены значения функции y=x3+2x для
значений x, лежащих в диапазоне [1; 3], с шагом
0,2. Программу составьте двумя способами: используя цикл с предусловием и цикл
с постусловием. Сохранить программу под именем P5PR6 и P5PR6

Задания уровня 3

4. Дано действительное
число A. Требуется найти первое значение числа N, при котором сумма S=1+1/2+1/3+…+1/N превышает  A.
Программу составьте двумя способами: используя цикл с предусловием и цикл с
постусловием. Сохранить программу под именем P5PR7 и P5PR8
5. Составьте программу,
которая имитирует работу арифметического калькулятора. Организуйте ввод первого
и второго операндов и знака операции. Сохранить программу под именем P5PR4
6. Составьте программу,
которая производит суммирование произвольного количества целых чисел, вводимых
с клавиатуры. Концом последовательности служит ввод отрицательного числа.
Программу составьте двумя способами: используя цикл с предусловием и цикл с
постусловием. Сохранить программы под именем P5PR5 и P5PR6
7. Составьте программы для
нахождения сумм  приведенных ниже рядов и проверьте их работоспособность на
компьютере.
1) ,
Замечание:
при вычислении суммы степенного ряда sin(x) можно
использовать следующие выкладки: пусть Sk
- значение k-го слагаемого, причем значение S0=x.
Тогда выполняется следующее соотношение:
2) ,

3)

4.
Окончание работы:

1.
Сохранить созданные программы.
2.
Подготовить ответы на контрольные вопросы.
3.
Показать работу преподавателю.
4.
Завершить работу TURBO PASCAL.

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

1.
Что называют циклом?
2.
Какова функция предусловного оператора цикла?
3.
В программах какого типа используется предусловный оператор цикла?
4.
Каким образом можно создать бесконечную программу?
5.
Как прервать выполнение бесконечного цикла?
6.
Какова функция оператора цикла с постусловием?
7.
В программах какого типа используется оператор цикла с постусловием?
8.
Почему перед словом UNTIL вставка
точки с запятой не обязательна?

ПРАКТИЧЕСКАЯ
РАБОТА №6
РАБОТА С МАССИВАМИ
В TURBO PASCAL

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

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

Обеспечивающие средства
Сборник  описаний  практических работ, персональный компьютер, конспект лекций.

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

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

Технология работы
1. Ознакомьтесь с
теоретическим материалом, необходимым для выполнения работы:
Массив –
это упорядоченная последовательность однотипных элементов определенной длины,
имеющая общее имя.
Номер элемента в последовательности называется индексом.
Количество элементов в массиве не может быть изменено в процессе выполнения
программы. Элементы массива размещаются в памяти последовательно и нумеруются
от 1 до n, где n – их количество в массиве. К каждому элементу массива
имеется прямой доступ. Это означает, что для того чтобы обратиться к
какому-либо элементу массива, нет нужды перебирать все его предыдущие элементы,
достаточно указать номер этого элемента.
Одномерные массивы – массивы, в которых элементы пронумерованы
последовательно по порядку: первый элемент, второй, третий и т.д. Для
обозначения элементов одномерного массива используется один индекс.
Двумерные массивы – массивы, в которых данные условно организованы в
виде таблицы (матрицы), где положение каждого элемента определяется номером
строки т номером столбца. Для обозначения элементов двумерного массива
используются два индекса: первый индекс для обозначения номера строки, второй
индекс для обозначения номера столбца.
При работе с массивами в программе они должны быть
объявлены (описаны), т.е. указаны имя массива, тип элементов массива, его
размерность.

1.1
Одномерные массивы: описание, ввод и вывод, обработка массива

1.1.1 Описать массив можно двумя способами:
1) В разделе
описания переменных мы можем описать массив следующим образом:
                  Var A: Array[n1..n2] Of  <базовый тип>;
Здесь   A – название массива;
                  Array – служебное слово;
                  n1,n2
– соответственно номер первого и
последнего элемента массива;
                  <базовый тип> – любой из уже изученных типов.
Количество элементов массива будет равно (n2-
n1+1).
2) Описание
массива заключается в создании нового оригинального типа. Для того, чтобы
программист мог создавать свои новы типы в Паскале существует раздел описания
типов Type. Этот раздел находится между разделом описания
констант и разделом описания переменных.
                  Type
                  <Имя типа> = Array[n1..n2] Of  <базовый тип>;

1.1.2 В большинстве случаев для обработки массивов
используются циклы. В цикле имеется возможность поочередно перебрать все
элементы массива.
Для ввода массива с клавиатуры может быть
использован цикл следующего вида: пусть имеется массив с именем A, состоящий из n элементов,
тогда  For i:=1 To
n Do Read (A[i]);
В этом случае пользователь вводит через пробел n элементов
массива. Для ввода элементов массива с новой строки используется оператор ReadLn. Ввод данных в массив происходит следующим образом: сначала значение
счетчика цикла равно 1; выполняется операция Read
(A[1]);
поле чего счетчик цикла становится равным 2; выполняется операция Read (A[2])… и т.д. до значения i=n включительно.
Для вывода массива на экран используется следующий
цикл:
                  For
i:=1 To n Do Write (A[i]);
                  WriteLn;
В данном случае на экран в одну строку будут выведены
все n элементов
массива, после чего курсор переместится на одну строку вниз.
Для обработки массивов также используются циклы.

1.2
Двумерные массивы: описание, ввод и вывод, обработка массива

1.2.1 Описание двумерных массивов отличается от описания
одномерных массивов только тем, что мы указываем начальное и конечное значение
для обоих индексов:
                  Var A: Array[n1..n2, m1..m2] Of  <базовый тип>;
Здесь   n1,n2
– начальное и конечное значения
первого индекса;
               m1,m2
– начальное и конечное значения
второго индекса.
В Паскале не допускается употребление
динамических массивов, т.е. таких, размер которых определяется в процессе
выполнения. Изменение размеров массива происходит через изменение в тексте
программы и повторную компиляцию. Для упрощения таких изменений удобно
определять индексные параметры в разделе констант:
                  Const Imax = 10; Jmax = 20;
                  Var Mas: Array[1.. Imax, 1..Jmax] Of  Integer;
Теперь для изменения размеров массива Mas
и всех операторов программы, связанных с этими размерами, достаточно
отредактировать только одну строку в программе – раздел констант.

1.2.2 Для ввода и вывода двумерных массивов используются
два вложенных цикла.
Ввод массива:       For
i:=1 To n Do
                                 For j:=1 To m Do
                                 Read
(A[i,j]);

Вывод массива:    For
i:=1 To n Do
                                 Begin
                                    For j:=1 To m Do
                                    Write
(A[i,j]:3);
                                    WriteLn;
                                 End;
Для обработки двумерных массивов также используются
два вложенных цикла.

2. Выполните следующие
упражнения:

Задания уровня 1

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

1.
Наберите текст программы:

Program
MAS_1;
const count=10;
var n,                                                                          {Число
для поиска}
       a,                                                                          {Номер
первого элемента}
       b,                                                                          {Количество
элементов}
       i: integer;
       m: array [1..count] of integer;
begin
 writeln(′Ввод
исходного массива: ′);
   for i:=1 to count do
      begin
         write(′элемент №′, i, ′: ′);
         readln(m[i]);
      end;
a:=0; b:=0;
write(′Введите число для поиска →′);
readln(n);
for
i:=1 to count do                                                   {Поиск элемента, равного n}
   if
m[i]=n then
      begin
         if  b=0 then  a:=i;                                              {Запомним
номер первого элемента, равного n}
         b:=b+1;                                                             {Увеличить
число найденных элементов на 1}
      end;
if b=0 then writeln(′Нет
таких элементов в массиве′)
   else
      begin
         writeln(′Количество
элементов массива, имеющих значение ′, n, ′ =′, b:3);
         writeln(′Первый
элемент имеет номер ′, a:3);
      end
end.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4.
Сохраните программу на своем диске:  <F2>                                A:\P6PR1

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

1.
Наберите текст программы:

Program
MAS_2;
const row=3;
col=row;
var a: array
[1..row, 1..col] of integer;
       i, j,
buf: integer;
begin
   randomize;                                      {Инициализация датчика случайных
чисел}
 writeln(′Исходная
матрица случайных чисел: ′);
   for i:=1 to row do
      begin
         for
j:=1 to col do
            begin
               a[i, j]:=random(100);         {Случайное значение
элемента}
               write(a[i, j]:4);                    {Вывод элемента
массива на экран}
            end;
            writeln;
      end;
{Транспонирование
матрицы}
   for i:=1 to row do                           {Просмотр всех строк матрицы}
{Просмотр
элементов в строке, расположенных выше главной диагонали}
      for j:=1 to col do
         begin
            buf:=a[i,
j]; a[i, j]=a[j, i]; a[j, i]=buf;
         end;
 writeln(′Результат
транспонирования матрицы: ′);
   for i:=1 to row do
{Обмен
элементов, симметричных относительно главной диагонали}
      begin
         for
j:=1 to col do write(a[i, j]:4);
         writeln;
      end
end.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4.
Сохраните программу на своем диске:  <F2>                                A:\P6PR2

3. Выполнить самостоятельно:

Задания уровня 2

1. В одномерном массиве
выполнить поиск максимального элемента массива, а затем вывести на экран его
значение и порядковый номер в массиве. Массив задается с помощью датчика
случайных чисел.  Записать программу под именем P6PR3.
2. Требуется вывести на
экран сумму четных элементов массива из 10 чисел. Массив заполняется случайными
числами. Записать программу под именем P6PR4.
3. Требуется переписать
элементы массива a в массив b
в обратном порядке. Массив a
заполняется случайными числами. Сохранить программу под именем P6PR5.
4. Задана матрица A размера 5×7. Требуется вывести ее на экран так, чтобы
каждая строка матрицы выводилась на экран с новой строки. Сохранить программу
под именем P6PR6.

Задания уровня 3

5. Требуется переписать
элементы массива a в массив b,
удвоив все элементы, меньшие первого элемента, остальные переписать без
изменения. Массив a
заполняется случайными числами. Сохранить программу под именем P6PR7.
6. Транспонировать
целочисленную матрицу 5х5. Массив задается при помощи ввода с клавиатуры.
Сохранить программу под именем P6PR8.
7. Составить программу,
которая вводит с клавиатуры квадратный массив  целых  чисел  и
формирует два вектора. В первый
записываются элементы исходного массива, расположенные на главной диагонали и
выше, а во второй – элементы, лежащие ниже главной диагонали. Предусмотреть
вывод на экран. Сохранить программу под именем P6PR9.
8. В каждой строке матрицы
C размера M×N найдите минимальный элемент и
поменяйте его с первым элементом в этой строке. Сохранить программу под именем P6PR10.
9. Составьте программу
вычисления среднего арифметического элементов в каждом столбце матрицы B размера N ×N и запишите полученные значения в главную диагональ этой
матрицы. Сохранить программу под именем P6PR11.

5.
Окончание
работы:

1.
Сохранить созданные программы.
2.
Подготовить ответы на контрольные вопросы.
3.
Показать работу преподавателю.
4.
Завершить работу TURBO PASCAL.

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

1.
Что такое массив?
2.
Что такое одномерный массив?
3.
Что представляет собой двумерный массив?
4.
Как обозначаются массив и элемент массива?
5.
Как описываются массивы в программах?
6.
Как производится ввод и вывод данных в массивах?
7.
Перечислите характеристики массивов.
8.
Какие типы адресации существуют при обращении к элементам массива?

ПРАКТИЧЕСКАЯ
РАБОТА №7
ИСПОЛЬЗОВАНИЕ
ПРОЦЕДУР И ФУНКЦИЙ В TURBO PASCAL

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

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

Обеспечивающие средства
Сборник  описаний  практических работ, персональный компьютер, конспект лекций.

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

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

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

1.1 Процедура  –  это независимая
именованная часть программы, которую после однократного описания можно многократно
вызывать по имени из последующих частей программы для выполнения определенных
действий. Процедура не может выступать как операнд в выражении.
Структура процедуры повторяет структуру программы. В отличие от программы для процедур и
функций наличие заголовка обязательно.
Заголовок
состоит из зарезервированного слова procedure,
идентификатора (имени) процедуры и необязательного, заключенного
в круглые скобки, списка формальных параметров с указанием типа
каждого параметра:
                     PROCEDURE   <имя>  (список формальных параметров);
Имя процедуры
должно быть уникально, т.е. его нельзя использовать повторно в программе для
именования других процедур.
Для обращения к процедуре используется оператор
вызова процедуры. Он состоит из имени процедуры и списка
фактических параметров, отделенных друг от друга запятыми и заключенных в
круглые скобки:
<имя
процедуры> (список фактических параметров);
Список параметров отсутствует, если процедуре не
передается никаких значений.
Параметры обеспечивают механизм замены, который
позволяет выполнять процедуру с различными начальными данными. Между
фактическими параметрами в операторе вызова процедуры и формальными параметрами
в заголовке описания процедуры устанавливаются взаимнооднозначное
соответствие в результате их перебора слева направо. Количество и тип
формальных параметров равны количеству и типу фактических параметров.
Соответствующие друг другу параметры не обязательно должны одинаково
обозначаться.

1.2 Если результатом подпрограммы является только одно
значение, то имеет смысл оформить такую подпрограмму в виде функции.
Функция, определенная пользователем, состоит из
заголовка и тела функции. Заголовок содержит зарезервированное слово function, имя функции, заключенный в круглые скобки необязательный
список формальных параметров и тип возвращаемого функцией
значения:
                     FUNCTION  <имя> (список формальных параметров) :
<тип результата>;
Имя функции
уникально в пределах программы.
Обращение к функции осуществляется по имени с указанием списка фактических
параметров. Количество, типы и порядок следования формальных параметров
должны совпадать:
                     <имя_функции>
(список фактических параметров);
В теле функции всегда должен быть один
оператор, присваивающий значение имени функции.

2. Выполните следующие
упражнения:
Задания уровня 1

Упражнение 1. Задан массив целых чисел. Необходимо удалить из него
все совершенные числа. Совершенное число представляет собой сумму всех своих делителей, меньших его самого. Для
решения поставленной задачи необходимо проверить каждый элемент массива, и,
если он представляет собой совершенное число, удалить его (после удаления
остается элемент с тем же номером, однако это уже следующий элемент). В
противном случае надо перейти к следующему элементу. В программе будут
использоваться две подпрограммы: функция Sover, которая проверяет, является ли число совершенным,
и процедура Udal удаления одного элемента из
массива.
1.
Наберите текст программы:
Program
MAS_3;
type

{Тип
данных massiv будет использоваться при описании процедуры удаления i-го
элемента}
   massiv=array[1..1000] of longint;

{Описание функции, проверяющей,
является ли число совершенным}
Function
Sover (P: longint):boolean;
var sum, m:
longint;
begin
   if p>1
then
   begin                           {Нахождение
суммы общих делителей}
      sum:=1;
                  {В начале сумма равна 1, т.к. любое число делится на 1}
      for
m:=2 to p div 2 do
{Делителем числа может быть любое
число от 2 до половины самого себя}
      if p mod m=0
then sum:= sum+m;     {Если число m
– делитель, то добавляем его к сумме}
{Если сумма делителей = самому
числу p, то функция возвращает значение true,}
      if
sum=p then Sover:=true
      else Sover:=false                 {иначе - false}
   end;
{Числа,
меньшие или равные 1, не являются совершенными, поэтому ф-ция возвращает
значение false}
   else Sover:=false
end;

{Описание процедуры удаления i-го элемента из массива x}
Procedure
Udal (var x: massiv; i: word; var N: word);
var j: word;
begin
   for j:=i to
N-1 do {Сдвиг массива, начиная
с i–го,
влево на один элемент}
   x[j]:=x[j+1];
   N:=N-1;                {После удаления элемента его размер
становится на один меньше}
end;

var x:
massiv;
      i, n:
word;
      L:
boolean;
begin
   write ('n=');
readln (n);
   writeln ('Массив
X');
   for i:=1
to n do read (x[i]);
   i:=1;
                                       {Просмотр массива начинаем с первого
элемента}
   while
(i<=n) do                      {Проверяем, не достигнут ли конец
массива}
   begin
{Обращение
к функции Sover, которая проверяет, является ли элемент массива x[i] совершенным;}
      {результат записывается в
логическую переменную L}
      L:=Sover (x[i]);
{Если
число совершенное,то удаляем его из массива. При этом текущим остается элемент
с номером i}
      {но после удаления там
хранится другой элемент}
      if
L then Udal (x, i, n)
      else i:=i+1
{Если число не является
совершенным, то переходим к следующему элементу массива}
   end;
   writeln
('Преобразованный массив X');
   for
i:=1 to n do
   write
(x[i], ' ');
end.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4.
Сохраните программу на своем диске:  <F2>                                A:\P7PR1

3. Выполнить самостоятельно:

Задания уровня 2

Разработать процедуры и функции
для решения следующих задач обработки массивов (по вариантам):
1.
посчитать количество отрицательных элементов одномерного массива вещественных
чисел. Записать программу под именем P7PR2;
2.
посчитать сумму квадратов положительных элементов одномерного массива
вещественных чисел. Сохранить программу под именем P7PR3;
3.
посчитать сумму квадратов отрицательных элементов одномерного массива
вещественных чисел. Сохранить программу под именем P7PR4;
4. преобразовать
одномерный массив вещественных чисел, присвоив каждому элементу квадрат его
значения. Сохранить программу под именем P7PR5;
5.
преобразовать одномерный массив вещественных чисел, уменьшив каждый элемент на
абсолютную величину среднего значения элементов массива. Сохранить программу
под именем P7PR6;
6.
преобразовать одномерный массив вещественных чисел, занеся в каждый элемент
сумму всех предыдущих элементов (в первый элемент при этом необходимо поместить
значение 0). Сохранить программу под именем P7PR7;
7.
посчитать сумму квадратов диагональных элементов двумерного массива вещественных
чисел. Сохранить программу под именем P7PR8;
8.
посчитать максимальную сумму элементов в строках двумерного массива
вещественных чисел. Сохранить программу под именем P7PR9;
9.
посчитать минимальную сумму элементов в столбцах двумерного массива
вещественных чисел. Сохранить программу под именем P7PR10;
10.
преобразовать двумерный массив вещественных чисел, занеся значение 0 во все
элементы с двумя четными индексами. Сохранить программу под именем P7PR11.
Задания уровня 3
Функции
11. Даны
четыре числовых массива f1, f2, f3,
f4. Вывести имя того из этих массивов,
который имеет наибольшее число элементов (если таких элементов более одного, то
вывести имя одного из них). Описать в программе функцию l(f),
значение которой равно количеству элементов массива. Сохранить программу под
именем P7PR12.
12. Даны
действительные числа a, b, c. Получить:
            Сохранить программу под
именем P7PR13.
Процедуры
13. Дано:
натуральное n,
действительные a1,
…, a3n. Получить x + y2 + z3, где
x = a1 ∙ a2 ∙…∙
an ,
y = an+1 ∙ a n+2 ∙…∙
a 2n ,
y
= a2n+1
∙ a 2n+2 ∙…∙
a 3n
Сохранить
программу под именем P7PR14.

4.
Окончание работы:

1.
Сохранить созданные программы.
2.
Подготовить ответы на контрольные вопросы.
3.
Показать работу преподавателю.
4.
Завершить работу TURBO PASCAL.

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

1.
Что такое процедура?
2.
Какое назначение имеют процедуры?
3.
Как описываются процедуры в программах?
4.
Как осуществляется вызов процедуры?
5.
Что такое функция?
6.
Как описывается функция и в каком месте программы она располагается?
7.
Как осуществляется вызов функции в программе?
8.
Какие параметры называют формальными, а какие фактическими?
9.
Перечислите отличия между процедурой и функцией.
10.  Какие
переменные называются глобальными?
11.  Какие
переменные называются локальными?

ПРАКТИЧЕСКАЯ РАБОТА
№8
РЕАЛИЗАЦИЯ
АЛГОРИТМОВ СОРТИРОВКИ

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

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

Обеспечивающие средства
Сборник  описаний  практических работ, персональный компьютер, конспект лекций.

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

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

Технология работы
1. Ознакомьтесь с
теоретическим материалом, необходимым для выполнения работы:
Сортировка
представляет собой процесс упорядочения элементов в массиве по возрастанию или
убыванию их значений. Если в массиве есть одинаковые элементы, то говорят о
сортировке по неубыванию или по невозрастанию. Следует знать:
·   сортировка массивов – одно из наиболее важных действий над массивами в системах сбора и
поиска информации, т.к. в отсортированных  массивах найти нужную информацию
можно гораздо быстрее по сравнению с несортированными;
·   существует множество различных алгоритмов сортировки,
которые значительно отличаются друг от друга по скорости работы;
·   «быстрые» способы сортировки массивов могут
дать колоссальный выигрыш на больших массивах, содержащих тысячи
элементов, однако для небольших массивов можно использовать самые простые
способы сортировки.
Обычная постановка задачи по сортировке массива выглядит следующим образом: программа должна вывести
несортированный массив целых чисел на экран, выполнить его сортировку по
невозрастанию или неубыванию, а затем вывести отсортированный массив.
Существует большое количество алгоритмов сортировки,
но все они базируются на трех основных:
·
сортировка обменом;
·
сортировка выбором;
·
сортировка вставкой.

1.1
Сортировка методом «пузырька» (обменом)
Суть обменной сортировки заключается в том, что
упорядоченный список B′ получается
из B систематическим обменом пары рядом стоящих элементов,
не отвечающих требуемому порядку, пока такие пары существуют.
Наиболее простой метод систематического обмена
соседних элементов с неправильным порядком при просмотре всего списка слева
направо определяет пузырьковую сортировку: максимальные элементы как бы
всплывают в конце списка.
1.2
Сортировка выбором
Для того чтобы упорядочить массив, в нем выбирается
минимальный элемент и ставится на первое место, причем все элементы, стоявшие
перед выбранным, сдвигаются на одну позицию вправо. Затем минимальный элемент
ищется среди оставшихся элементов, начиная со второго, и ставится на второе
место. Предшествующие ему элементы сдвигаются. Процедура продолжается до тех
пор, пока в неупорядоченной части массива остается больше одного элемента.
1.3
Сортировка вставкой
Требуется упорядочить массив B, состоящий из N элементов. Пусть B1, B2, …, Bi-1
уже отсортированная часть массива B, а  Bi, Bi+1, …, Bn не отсортированная. Идея метода:
1)
выбираем очередной элемент Bi (начинаем с i=1);
2)
в упорядоченной части массива
находим k-ое место, такое чтобы при вставке на это место элемента
Bi порядок не нарушился;
3)
все элементы начиная с Bk–го до Bi-1  сдвигаем на одну позицию вправо и вставляем элемент Bi на k-ое место;
4)
повторяем пункты 1-3 до тех пор
пока i < N.

2. Выполните следующие
упражнения:
Задания уровня 1

Упражнение 1. Программа
с процедурами сортировки простого выбора и простой вставки.

Наберите
     текст программы:

Uses Crt;
Const n=10;
Type
      Mas = Array [1 .. n] Of Integer;
Var A: Mas;

Procedure SetRandomMas ( Var A:
Mas ); {Задание случайного массива}
Var i: Integer;
Begin
      Randomize;
      For i := 1 To n Do A[i] := Random (100);
End;

Procedure OutPutMas ( Var A: Mas
); {Вывод массива на экран}
Var i: Integer;
Begin
      For i := 1 To n Do Write( A[i]:3 );
      WriteLn;
End;

Procedure SortVybor ( Var A: Mas
); {Сортировка выбором}
Var i, k, m, j,Temp, Min: Integer;
Begin
      For i := 1 To n Do
      Begin
         Min := A[i];
         k := i;
         For j := i+1 To n Do
            If A[j] < Min Then Begin Min :=
A[j]; k := j; End;
            Temp := Min;
            For m := k-1 DownTo i Do A[m+1] :=
A[m];
            A[i] := Temp;
      End;
End;

Procedure SortVstav ( Var A: Mas
); {Сортировка вставкой}
Var i, k, j, Temp: Integer;
Begin
      For i := 1 To n-1 Do
      Begin
         If A[i+1] < A[i] Then
            Begin
                  j := i;
                  While (A[j] > A[i+1]) And (j
>0) Do j := j – 1;
                  k := j + 1;
                  Temp := A[i+1];
                  For j := i  DownTo k Do
A[j+1] := A[j];
                  A[k] := Temp;
            End;
      End;
End;

Begin
      ClrScr;
      SetRandomMas(A);
      OutPutMas(A);
      SortVstav(A);
      OutPutMas(A)
End.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4.
Сохраните программу на своем диске:  <F2>                                A:\P8PR1

3. Выполнить самостоятельно:
Задания уровня 2

1. Написать программу,
реализующую алгоритм пузырьковой сортировки, причем просмотр элементов должен
вестись наоборот (справа налево).  Записать программу под именем P8PR2
2. Написать процедуру
сортировки простым выбором, в которой выбирается не минимальный, а максимальный
элемент. Сохранить программу под именем P8PR3

Задания уровня 3

4. Запрограммируйте
сортировку выбором в виде процедуры. Поиск наименьшего числа сделайте ее
внутренней функцией. Сохранить программу под именем P8PR4
3. Написать свои программы
сортировки массива для изученных алгоритмов сортировки.  Сохраните программы.

4.
Окончание работы:
1.
Сохранить созданные программы.
2.
Подготовить ответы на контрольные вопросы.
3.
Показать работу преподавателю.
4.
Завершить работу TURBO PASCAL.

Контрольные вопросы:
1.
Что называют сортировкой?
2.
Как выглядит постановка задачи по сортировке массива?
3.
На какие части можно разбить любой алгоритм сортировки?
4.
Какие виды сортировки вы знаете?
5.
На каких основных видах сортировки базируются остальные алгоритмы
сортировки?
6.
В чем заключается идея сортировки методом «пузырька»?
7.
Объясните суть метода сортировки вставкой.
8.
Объясните суть метода сортировки посредством выбора.
9.
В чем заключается идея сортировки методом Хоара?
10.  В чем
заключается сущность метода Шелла?

ПРАКТИЧЕСКАЯ РАБОТА
№9
СОСТАВЛЕНИЕ
ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ МНОЖЕСТВ
В TURBO PASCAL

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

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

Обеспечивающие средства
Сборник  описаний  практических работ, персональный компьютер, конспект лекций.

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

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

Технология работы
1. Ознакомьтесь с
теоретическим материалом, необходимым для выполнения работы:
Множество -
это набор элементов одинакового типа, которые рассматриваются как единое целое.
Элементы множества не пронумерованы, следовательно, нельзя обратиться к
отдельному элементу множества по его индексу. Поэтому множества используются в
тех задачах, где порядок следования элементов данных не имеет значения.
Тип элементов множества называется базовым типом
множества. Область значений типа множества –  набор всевозможных
подмножеств, составленных из элементов базового типа.
В языке Turbo Pascal  имеются ограничения на базовый тип. Это может быть
только порядковый тип, количество значений которого не превышает 256. Из
простых типов к ним относятся char, byte, boolean. Разрешается использовать перечисляемый тип и
диапазон.
Это существенные ограничения, которые не позволяют
использовать множества в серьезных задачах обработки данных. Все же для ряда
задач применение множеств может обеспечить серьезные преимущества по сравнению
с использованием других структур данных – массивов или строк.
Для задания типа множества используются
зарезервированные слова Set и Of, а затем указываются
элементы этого множества, как правило, в виде перечисления или диапазона.
 Множества могут быть описаны двумя способами:
1)
Type имя_типа =
Set Of базовый тип;
Var имя_множества: имя_типа;
2)
Var имя_множества: Set Of базовый
тип;
Исходя из особенностей внутреннего представления
множеств, можно сделать два основных вывода:
·   в множестве не может быть одинаковых элементов, что согласуется и с нашими математическими знаниями;
·   все операции над множествами выполняются значительно
эффективней, чем над другими структурами данных.
Нельзя вводить значения во множественную переменную
оператором ввода и выводить оператором вывода. Множественная переменная может
получить конкретное значение только в результате выполнения оператора
присваивания следующего формата:
< множественная переменная > := <
множественное выражение >

Пример:
A := [50, 100, 150, 200]; B := [′m′, ′n′, ′ k′]; C := [True, False];
D := A;
Кроме того, выражения могут включать в себя операции
над множествами.
При работе с множествами допускается использование
следующих операций:
·      отношения (=, <>, >=, <=);
·      объединения множеств (+);
·      пересечения множеств (*);
·      разности множеств (-);
·      проверка принадлежности элемента множеству (in).
2. Выполните следующие
упражнения:
Задания уровня 1

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

1.
Наберите текст программы:
Program Mn1;
Var
M: Set Of Char;
Str: String;
c: Char;
i, n: Integer;
Begin
   M:=[];                   { M – пустое
множество}
   n:=0;                      {переменная, считающая количество
различных букв в строке}
   WriteLn (′Введите строку′);
   ReadLn (Str);  {ввод строки}
   For i:=1 To Length (Str) Do

   If not (Str[i] In M) Then
   Begin
      M:=M+[Str[i]];  {формирование
множества, содержащего все буквы, входящие в строку}
      n:=n+1;
   End;
   WriteLn (′Количество различных элементов в строке
равно′, n)
End.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4.
Сохраните программу на своем диске:  <F2>                                A:\P9PR1

Упражнение 2. Даны
две символьные строки, содержащие только строчные латинские буквы. Построить
строку S3, в которую войдут только общие
символы S1 и S2 в алфавитном порядке и без повторений.

1.
Наберите текст программы:
Program P2;
Type Mset=Set of  ‘a’..’z’;
Var     S1, S2, S3: String;
           MS1,
MS2, MS3 :  Mset;
           C:
Char;
Procedure   SM (S: String; Var MS: Mset);
{Процедуры формируют множество MS, содержащее все символы строки S }
Var I Byte;
Begin  MS:=[];
    For I:=1
To Length (S) Do
    MS:=MS+[S[I]]
End;
Begin {Ввод исходных строк}
   ReadLn
(S1); ReadLn (S2);
{Формирование множеств MS1 и MS2 из символов строк S1 и S2}
   SM (S1, MS1);
SM (S2, MS2);
{Пересечение множеств – выделение
общих элементов в множество MS3}
   MS3:=MS1*MS2;
{Формирование результирующей
строки S3}
     S3:=’’;
     For
C:=’a’ To ‘z’ Do
     If C
In MS3 Then S3:=S3+C;
     WriteLn
(‘Результат:’S3)
End.
2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4.
Сохраните программу на своем диске:  <F2>                                A:\P9PR2

3. Выполнить самостоятельно:
Задания уровня 2

1. Составьте программу,
демонстрирующую операции над множествами: операции объединения, разности,
пересечения. Множества чисел заполнить следующим образом: D1
– четными числами 2, 4, 6, 8; множество D2 – числами 0,
1, 2, 3, 5; множество D3 – нечетными числами 1, 3, 5,
7, 9. Сохранить программу под именем P9PR3
2. Введите строку.  Подсчитайте
количество гласных букв в ней.  Записать программу  под  именем  P9PR4

Задания уровня 3

3. Задано некоторое
множество M и множество T того же типа. Подсчитать, сколько же  элементов из
множеств T и M  совпадает. Сохранить программу под именем P9PR5
4. Требуется сформировать
последовательность натуральных чисел от 1 до n, расположенных в случайном порядке без
повторения значений. Сохранить программу под именем P9PR6

4.
Окончание работы:
1.
Сохранить созданные программы.
2.
Подготовить ответы на контрольные вопросы.
3.
Показать работу преподавателю.
4.
Завершить работу TURBO PASCAL.

Контрольные вопросы:
1.
Что такое множество?
2.
Назовите основные особенности множеств.
3.
Что называют конструктором множеств?
4.
Как описываются множества в Паскале?
5.
Какие операции можно осуществлять с множествами?

ПРАКТИЧЕСКАЯ
РАБОТА №10
РАБОТА С ФАЙЛАМИ В
TURBO PASCAL

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

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

Обеспечивающие средства
Сборник  описаний  практических работ, персональный компьютер, конспект лекций.

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

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

Технология работы
1. Ознакомьтесь с
теоретическим материалом, необходимым для выполнения работы:
В Паскале понятие файла употребляется в двух смыслах:
·
как поименованная информация на
внешнем устройстве (внешний файл);
·
как переменная файлового типа в
Паскаль-программе (внутренний файл).
В программе между этими объектами устанавливается
связь. Вследствие этого все, что происходит в процессе выполнения программы с
внутренним файлом, дублируется во внешнем файле. С элементами файла можно
выполнять только две операции: читать из файла и записывать в файл.
Файловый тип переменной – это структурированный тип, представляющий собой
совокупность однотипных элементов, количество которых заранее (до исполнения
программы) не определено.
Для работы с файлом при описании переменных необходимо
определить переменную файлового типа, которая будет считаться «представителем»
этого файла в данной программе. Такая переменная называется также указателем. Структура
описания файловой переменной:
Var
   <имя файла>: File Of <базовый тип>
В качестве базового типа можно использовать любой тип,
за исключением типа File.

1.1
Основные операции с файлами
ØУстановочные и завершающие операции
1.
assign (f, FileName) – связывает
файловую переменную f с конкретным файлом с именем  FileName. Данную процедуру необходимо использовать до начала
работы с файлом. FileName – выражение строкового типа вида:
Диск: \ имя
каталога \ имя подкаталога \ … \ имя файла
Если имя диска и имя каталога не указывать, то берутся
текущий диск и текущий каталог.
2.
reset (f) – открывает файл f для
чтения, т.е. указатель устанавливается на первый элемент файла. Предполагается,
что открываемый файл уже существует, в противном случае возникает ошибка.
3.
rewrite (f) – открывает файл f для
записи (указатель так же, как и в предыдущем случае, устанавливается на первый
элемент файла). Допускается, что файл не существует, тогда процедура создает
файл с заданным именем. Если же такой файл существует, процедура удаляет из
него всю информацию. В обоих случаях в результате вызова данной процедуры
файловая переменная указывает на нулевой элемент файла (т.е. файл пуст).
4.
close (f) – закрывает файл f для,
очищает внутренний буфер, образованный при открытии файла. Теперь указатель f можно связать с другим файлом.
ØОперации ввода-вывода
1.
read (f, x1,
x2, …) – считывает
в переменные x1, x2, … по одному элементу из файла  f,
начиная с той позиции, на которую установлен указатель. Операция чтения
осуществляется следующим образом: значение на которое указывает текущий
указатель файла, присваивается переменной x1, указатель перемещается на следующую позицию, то же
самое выполняется для переменной  x2, и т.д. Данная процедура выполнима только в том
случае, если не достигнут конец файла (eof(f)=false).
2.
write (f, x1,
x2, …) – записывает
в файл f значения переменных  , начиная с той позиции, на
которую указывает файловая переменная. После записи в файл нового элемента,
указатель перемещается на следующую позицию. Данная функция выполнима только в
том случае, когда достигнут конец файла (eof(f) = true).
ØОперации перемещения по файлу
1.
seek (f, N) – функция, позволяющая явно изменить значение
текущего указателя, установив его на элемент файла с заданным номером N
(N -
целочисленное выражение). Данная процедура не выполняет чтения или записи
элементов файла, оно лишь перемещает указатель к элементу с  номером N.
(Первый элемент файла имеет номер 0). Вызов процедуры с аргументами seek (f, filesize(f)) установит указатель на конец файла.
2.
filepos (f) – функция, позволяющая определить текущее положение
указателя (номер элемента).
3.
filesize (f) – функция, позволяющая определить размер (кол-во
элементов) файла f.
4.
eof (f) – функция, возвращающая логическое значение  true, если достигнут конец файла.
ØСпециальные операции
1.
erase (f) – удаляет файл, связанный с файловой переменной  f.
2.
rename (f, NewName) – присваивает
файлу, связанному с файловой переменной f, новое
имя  NewName.

1.2
Текстовые файлы
Отдельным типом файлов являются текстовые файлы.
Особенность этих файлов заключается в том, что их содержимое рассматривается
как последовательность строк переменной длины, разделенных специальными
символами, которые называются «конец строки». Символ конца строки при просмотре
файла не виден, так же как и символ конца файла. В программе файловая
переменная текстового типа описывается следующим образом:
               Var <
имя файловой переменной >: text;
Каждый символ представлен во внутреннем коде (ASCII)
и занимает 1 байт.
Главная особенность текстовых файлов в том, что можно
считывать из него и записывать в них элементы типа char, integer, real, string, boolean. Если информация несимвольная, то в процессе чтения
или записи происходит ее преобразование из символьной формы во внутреннюю и
обратно.
Для работы с текстовыми файлами можно использовать все
процедуры и функции, используемые при работе с файлами любых типов, за исключением
процедуры  seek, функций  filepos, filesize. Дело в том, что заранее неизвестно, элементы какого
типа находятся в файле.
Для работы с текстовыми файлами определены
дополнительные операции.
Функция:
eoln (f) –
логическая функция, возвращающая логическое значение  true, если достигнут конец строки, и false в
противном случае.
Процедуры:
1.
append (f) – открытие уже существующего текстового файла  f  для
добавления данных в конец файла;
2.
writeln (f) – завершение текущей строки текстового файла при его
записи (записывает символ конца строки);
3.
writeln (f, x1,
x2, …, xn) – запись в файл f
значений переменных x1, x2, …, xn; после выполнения операции
записи осуществляется переход к новой строке файла;
4.
readln (f) – переход к началу следующей строки файла f при его чтении;
5.
readln(f, x1, x2,
…, xn) – чтение
значений n элементов из файла f в
переменные x1, x2, …, xn; после выполнения операции
чтения осуществляется переход к новой строке файла.
2. Выполните следующие
упражнения:
Задания уровня 1

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

1.
Наберите текст программы:

Program rem (input,
output);
type v=file
of integer;
var int: v;
i: integer;
begin reset
(int);
while not eof
(int) do
   begin
      read
(int, i);
      if i
mod 2=0 then writeln (i)
   end
end.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4.
Сохраните программу на своем диске:  <F2>                                A:\P10PR1

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

1. Наберите текст программы:

Program rabf
type
file_type=file of integer;
var f:
file_type;
      sum,
mult, r, k1, k2, max: integer;
begin
   writeln
('Введите элементы файла, окончание - 0');
   {Запись элементов в файл}
   assign
(f, 'data.dat'); rewrite (f);
   repeat
      readln
(r); if r<>0 then write (f, r);
   until r=0;
   {Вычисление результатов}
   seek (f,
0); sum:=0; mult:=1;
   read (f,
r); max:=r; seek (f, filepos(f)-1);
   while not
eof (f) do
      begin
         read
(f, r); sum:=sum+r; mult:=mult*r;
         {Поиск
максимального элемента}
         if max<r then max:=r;
      end;
   seek
(f, 1); read (f, k1);                           {Чтение
второго компонента}
   seek
(f, filesize (f)-2); read (f, k2);         { Чтение
предпоследнего компонента}
   close
(f);
   {Вывод результатов}
   writeln
('Сумма = ', sum, #10#13'Произведение
= ', mult);
   writeln
('Разность = ', k2-k1, #10#13'Максимум = ', max);
end.
2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4.
Сохраните программу на своем диске:  <F2>                                A:\P10PR2

3. Выполнить самостоятельно:
Задания уровня 2

1. Создать три программы:
a)
Считывает 10 действительных чисел с клавиатуры и записывает их в
файл. Сохранить программу под именем P10PR3
b)
Добавляет в этот файл еще 5 чисел. Сохранить программу под именем P10PR4
c)
Читает этот файл и выводит числа, содержащиеся в нем на экран.
Сохранить программу под именем P10PR5

Задания уровня 3

2. Написать программу, в
результате выполнения которой выводятся все числа кратные трем из данного файла
int с целочисленными компонентами. Сохранить
программу под именем P10PR6
3. Дан файл Input.txt, элементы
которого являются целыми числами. Получите в файле Output.txt все элементы файла Input.txt, которые делятся на 3 и не делятся на 7.
Сохранить программу под именем P10PR7

4.
Окончание работы:
1.
Сохранить созданные программы.
2.
Подготовить ответы на контрольные вопросы.
3.
Показать работу преподавателю.
4.
Завершить работу TURBO PASCAL.

Контрольные вопросы:
1.
Понятие файла в Паскале.
2.
Что называют файловым типом переменной?
3.
Какова организация доступа к файлам?
4.
Назовите основные типы операций работы с файлами.
5.
Перечислите установочные и завершающие операции работы с файлами.
6.
Какие операции ввода-вывода существуют для работы с файлами?
7.
Назовите операции перемещения по файлу.
8.
Перечислите специальные операции для работы с файлами.
9.
Особенности работы с текстовыми файлами.

ПРАКТИЧЕСКАЯ
РАБОТА №11
СОСТАВЛЕНИЕ
ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ ЗАПИСЕЙ
В TURBO PASCAL

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

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

Обеспечивающие средства
Сборник  описаний  практических работ, персональный компьютер, конспект лекций.

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

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

Технология работы
1. Ознакомьтесь с
теоретическим материалом, необходимым для выполнения работы:
Запись –
это структурированный тип данных, состоящий из определенного числа компонентов,
которые называются полями записи. Они могут иметь разный тип.

Описание записи выглядит следующим образом:

Type
<имя типа> = Record
                        <имя поля1> : <тип
поля1>;
                        <имя поля2> : <тип
поля2>;
                        .
                        .
                        End;

Здесь Record и End
- служебные слова.

Для того чтобы обратиться к полю записи, необходимо
указать имя переменной и через точку – имя поля:           <имя
переменной> . <имя поля>

Обращение к полям имеет громоздкий вид, поэтому
удобнее воспользоваться специально предназначенным для этого оператором:
With
<имя переменной>   Do   <оператор>;

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

2. Выполните следующие
упражнения:
Задания уровня 1
Упражнение 1. О
каждом студенте известна следующая информация:
·
фамилия, инициалы;
·
год рождения;
·
группа;
·
отметка по математике;
·
отметка по истории;
·
отметка по ВТ;
·
отметка по статистике.
Сформировать таблицу,
записав в нее известную информацию о каждом студенте и его средний балл.
Подсчитать средний балл по каждому предмету, вывести таблицу на экран дисплея в
алфавитном порядке.

1.
Наберите текст программы:

Program stud;
Type   tablica=record           {Описание записи о каждом студенте}
      name:
string[15];
group: string[8];
god: integer;
vt, history, stat,
math: byte;
sr_bal: real;
   end;
var i, j, n :integer; a: tablica;
mas:array
[1..30] of tablica; {Таблица - массив записей}
s_vt, s_history,
s_stat, s_math: real; {Переменные для хранения средних значений по
предметам}
begin
   write(′n=′); readln(n); {Ввод количества записей}
   for i=1 to n do{Ввод
элементов массив записей}
with mas[i]
do
begin
writeln(′i=′,i:4);
writeln(′FIO′);
readln(name);
write(′Group′);
readln(group);
write(′Year′);
readln(god);
write(′Otsenki′);
readln(vt, history,
stat, math);
sr_bal:=(vt+history+stat+math)/4;
      end;
s_vt:=0;
s_history:=0; s_stat:=0; s_math:=0;
for i=1 to n do {Вычисление среднего балла по
каждому предмету}
begin
s_vt:=s_vt+mas[i].vt;
s_history:=s_history+mas[i].history;
s_stat:=s_stat+mas[i].stat;
s_math:=s_math+mas[i].math;
   end;
   for i=1 to n do {Упорядочение записей массива в алфавитном порядке
фамилий}
      for j:=1 to n-1 do
         if   mas[j].name>
mas[j+1].name then
         begin
a:=mas[j];
mas[j]:=mas[j+1];
mas[j+1]:=a;
         end;
clrscr;
   write(′  ′;4, ′FIO
′,′  ′;4); {Вывод результатов}
write(′
′;2, ′ GROUP ′,′  ′;2);
write(′
′;5, ′ OTSENKI ′,′  ′;5);
writeln(′Sr/
Bal  ′);
for i=1 to n
do
   with mas[i]
do
   begin
write(name:15);

write(′
′,group:8);
write((′
′,god:4);
writeln(′
′,vt:3, ′  ′,history:3, ′  ′,stat:3, ′
′,math:3, ′  ′,sr_bal:5:2);
      end;
   writeln(′  Sr. Bal: ′,
′  ′, s_vt:3:1, ′  ′, s_history:3:1, ′  ′, s_stat:3:1,
′  ′, s_math:3:1);
end.

2.
Запустите программу на выполнение и проверьте её работу: Ctrl-F9
3.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
4.
Сохраните программу на своем диске:  <F2>                                A:\P11PR1

3. Выполнить самостоятельно:

Задания уровня 2

1. Создайте массив
записей, содержащий сведения об альбомах различных групп:
·
название группы;
·
название альбома;
·
год выпуска;
·
стиль.
Выведите на экран все альбомы в
стиле pop и rock. Сохранить программу под
именем P11PR2

2. О сотрудниках некоторого
предприятия известно следующее:
·
фамилия, инициалы;
·
год рождения;
·
должность;
·
пол.
Сформировать таблицу, записав в
нее известную информацию о каждом сотруднике. Вывести на печать информацию о
количестве пенсионеров – женщин старше 55 лет и мужчин старше 60 лет. Сохранить
программу под именем P11PR3

Задания уровня 3

3. Известна информация о
сотрудниках некоторого предприятия:
·
фамилия, инициалы;
·
год рождения;
·
должность;
·
стаж;
·
оклад.
Сформировать таблицу, записав в
нее известную информацию о каждом сотруднике. Создать поле «Зарплата», добавляя
10% к окладу, если стаж работы более 10 лет, и 15%, если более 20.
Отсортировать таблицу в алфавитном порядке. Сохранить программу под именем P11PR4

4. Создайте массив
записей, содержащий информацию о машинах:
·
марка;
·
год выпуска;
·
цвет;
·
номер;
Выведите на экран информацию о
машинах черного цвета. Выведите на экран марки машин, номера которых начинаются
на букву М. Упорядочьте записи в массиве по возрастанию года выпуска. Сохранить
программу под именем P11PR4

4.
Окончание работы:
1.
Сохранить созданные программы.
2.
Подготовить ответы на контрольные вопросы.
3.
Показать работу преподавателю.
4.
Завершить работу TURBO PASCAL.

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

1.
Понятие записи в Паскале.
2.
Что называют комбинированным типом данных?
3.
Как описывается комбинированный тип данных?
4.
Назовите основные типы операций работы с записями.
5.
С помощью какой процедуры производится прямой доступ к записям файла?
6.
С помощью какого оператора осуществляется доступ к полям записи?

ПРАКТИЧЕСКАЯ
РАБОТА №12
ИСПОЛЬЗОВАНИЕ ДИНАМИЧЕСКИХ
ПЕРЕМЕННЫХ В TURBO PASCAL

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

Задачи работы   Научиться
работать с динамическими массивами.

Обеспечивающие средства
Сборник  описаний  практических работ, персональный компьютер, конспект лекций.

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

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

Технология работы
1. Ознакомьтесь с
теоретическим материалом, необходимым для выполнения работы:
Динамическое
размещение данных осуществляется компилятором непосредственно в процессе
выполнения программы. Причем заранее не известно количество размещаемых данных.
Кроме того, к ним нельзя обращаться по именам, как к статическим переменным.
Оперативная память
ПК представляет собой совокупность
элементарных ячеек для хранения информации – байтов, каждый из которых имеет
собственный номер. Эти номера называют адресами. Они позволяют
обращаться к любому байту памяти.
Turbo Pascal имеет гибкое средство управления памятью – указатели.
Указатель – переменная, которая в качестве своего значения
содержит адрес байта памяти. Один указатель позволяет адресовать 64 Кб.
Указатель занимает 2 байта.
Указатель объявляется с помощью символа каре (^),
за которым записывается идентификатор типа динамической переменной:
Type имя_типа =
^тип;
Var имя_переменной = имя_типа;
                                       или
Var имя_переменной:
^имя_типа;

1.1
Процедуры и функции для работы с динамической памятью
Процедуры:
1.
Любым действиям с динамической
переменной должна предшествовать процедура ее размещения в ОЗУ. Эта процедура
имеет вид: New (Var p:
Pointer). Она
создает новую динамическую переменную, присваивая указателю p значение ее адреса в ОЗУ. При этом динамической переменной отводится блок
памяти, соответствующий размеру типа, с которым объявлен указатель p.
2.
Когда в ходе вычислительного
процесса переменная становится ненужной, ее следует удалить. Это осуществляется
процедурой Dispose (Var p:
Pointer). Данная
процедура освобождает память, занятую динамической переменной, делая значение
ее указателя неопределенным.
3.
Процедура GetMem (Var p: Pointer, Size: Word), где Word
- 2 байта (целые числа от 0 до 65535),
создает новую динамическую переменную размером Size байт,
устанавливая значения указателя  на начало выделяемой ей динамической области
оперативной памяти.
4.
Процедура FreeMem (Var p:
Pointer, Size: Word) уничтожает динамическую
переменную, освобождая Size байт. После выполнения процедуры FreeMem значение p становится неопределенным.
5.
Процедура Mark (Var p: Pointer) записывает
в указатель p адрес начала участка свободной динамической памяти на
момент ее вызова.
6.
Процедура Realease (Var p:
Pointer) освобождает
участок динамической памяти, начиная с адреса, записанного в указатель p процедурой Mark, т.е. очищает ту динамическую память, которая была
занята после вызова процедуры  Mark.

Функции:
1.
MaxAvail: LongInt
– возвращает длину в байтах самого длинного свободного участка динамической
памяти.
2.
MemAvail: LongInt – возвращает размер свободной области динамической
памяти (в байтах).
3.
Addr(X):
Pointer – возвращает
адрес объекта, где X - любая переменная,
имя процедуры или функции.
4.
SizeOf(X):
Word возвращает
объем в байтах, занимаемый X, причем X может быть либо именем переменной любого типа, либо
именем типа.

1.2
Динамические массивы и матрицы
Указатели чаще всего
используются для работы с динамическими массивами памяти, которые
представляют собой массивы переменной длины, память под которые может
выделяться и изменяться в процессе выполнения программы, как при каждом новом
запуске программы, так и в разных ее частях. Обращение к i-му
элементу динамического массива x имеет вид x^[i].
При работе с
динамическими переменными необходимо соблюдать следующий порядок работы:
1.       описать указатели;
2.       распределить память;
3.       обработать динамический массив;
4.       освободить память.
Понятие динамического
массива можно распространить и на матрицы. Динамическая матрица представляет
собой массив указателей, каждый из которых адресует одну строку (или столбец).
Рассмотрим описание динамической матрицы. Пусть есть типы данных massiv и указатель на
него din_massiv:
                        type massiv=array [1..1000] of real;
                                 din_massiv=^massiv;
Динамическая матрица X
будет представлять собой массив указателей:
                        var X: array[1..1000] of din_massiv;
Работать с матрицей
необходимо следующим образом:
1.       определить ее размеры (пусть N – число строк,
M – число столбцов);
2.       выделить память под матрицу:                 for i:=1 to N do
                                                                       getmem(X[i], M*sizeof(real));
Каждый элемент
статического массива X[i] – указатель на динамический массив, состоящий из M элементов типа real.
В статическом массиве X находится N указателей.
3.       для обращения к элементу динамической матрицы,
расположенному в i-той строке и j-м столбце,
следует использовать следующую конструкцию: X[i]^[j];
4.       после завершения работы с матрицей необходимо
освободить память:
                                                            for i:=1 to N do
                                                            freemem(X[i],
M*sizeof(real));

2. Выполните следующие
упражнения:
Задания уровня 1

Упражнение 1. Найти
максимальный и минимальный элементы массива x(n).
1.
Наберите текст программы:

1-ый вариант
Program din_mas1;
type massiw=array
[1..150] of real;
   var
x:^massiw;
   i, n:
integer; max, min: real;
begin
   new(x); {Выделяем память под динамический массив из 150
вещественных чисел}
   writeln
(′Введите размер массива′); readln(n);
   for
i:=1 to N do
   begin
      write
(′x(′, i, ′)=′); readln(x^[i]);
   end;
   max:=x^[1];
min:=x^[1];
   for i:=2
to N do
   begin
      if
x^[i] > max then max:=x^[i];
      if
x^[i] < min then min:=x^[i];
   end;
   writeln
(′максимум= ′, max:1:4, ′минимум= ′, min:1:4);
   dispose(x); {Освобождаем память}
end.

2-ой
вариант
Program din_mas2;
type massiw=array
[1..150] of real;
   var
x:^massiw;
   i, n:
integer; max, min: real;
begin
   writeln
(′Введите размер массива′); readln(n);
   getmem
(x, n*sizeof(real)); {Выделяем
память под n элементов массива}
   for
i:=1 to N do
   begin
      write
(′x(′, i, ′)=′); readln(x^[i]);
   end;
   max:=x^[1];
min:=x^[1];
   for i:=2
to N do
   begin
      if
x^[i] > max then max:=x^[i];
      if
x^[i] < min then min:=x^[i];
   end;
   writeln
(′максимум= ′, max:1:4, ′минимум= ′, min:1:4);
   freemem
(x, n*sizeof(real)); {Освобождаем память}
end.

2.
Проанализируйте работу программ
3.
Запустите программы на выполнение и проверьте их работу: Ctrl-F9
4.
Для просмотра результатов выполненных программ необходимо нажать: Alt-F5
5.
Сохраните программы на своем диске:  <F2>       A:\P12PR1
и  A:\P12PR2
соответственно

3. Выполнить самостоятельно:
Задания уровня 2

1. Записать все элементы
массива X= (x1,
x2, …, xn),
удовлетворяющие условию xiЄ[1,2],
подряд в массив Y= (y1,
y2, …, yn).
Определить минимальный элемент массива X.
Записать программу под именем P12PR3
2. Переписать элементы
массива целых чисел  X= (x1,
x2, …, xn)
в обратном порядке  в  массив Y=(y1, y2,
…, yn). Вычислить количество
четных, нечетных и нулевых элементов массива Y.
Сохранить программу под именем P12PR4

Задания уровня 2

3. Во входном файле
расположена последовательность целых чисел. Определите, имеются ли среди этих
чисел два совпадающих? Сохранить программу под именем P12PR5
4. Во входном файле
расположен символ, за которым следуют 20 различных целых чисел, если этот
символ есть i,
или 30 различных действительных чисел, если этот символ есть r. Написать программу в
результате выполнения которой выводится часть данной последовательности чисел,
начиная с первого по порядку и заканчивая минимальным из данных. Сохранить
программу под именем P12PR6

4.
Окончание работы:
1.
Сохранить созданные программы.
2.
Подготовить ответы на контрольные вопросы.
3.
Показать работу преподавателю.
4.
Завершить работу TURBO PASCAL.

Контрольные вопросы:
1.
Чем отличаются динамические переменные от статических?
2.
Что такое указатель?
3.
Если все указатели хранят адреса, зачем различать типы указателей?
4.
Какие есть процедуры для работы с указателями?
5.
В чем преимущество динамического выделения памяти?
6.
Каков порядок работы при использовании динамических переменных?

ПРАКТИЧЕСКАЯ
РАБОТА №13
СОСТАВЛЕНИЕ
ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ МОДУЛЕЙ
В TURBO PASCAL

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

Задачи работы   Научиться
составлять программы с использованием модулей.

Обеспечивающие средства
Сборник  описаний  практических работ, персональный компьютер, конспект лекций.

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

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

Технология работы
1. Ознакомьтесь с
теоретическим материалом, необходимым для выполнения работы:
Модуль –
это автономная программная единица, включающая в себя различные компоненты:
константы, переменные, типы, процедуры и функции. Общая схема структуры модуля выглядит следующим
образом:
Unit
<имя_модуля>; {заголовок модуля}
Interfaсe
      {интерфейсная часть}
Implementation
      {раздел реализации (исполнительная часть)}
Begin
      {раздел инициализации модуля}
End.
Заголовок модуля состоит из служебного слова Unit и
следующего за ним имени. Причем имя модуля должно совпадать с именем файла, в
котором он хранится.
Интерфейсная часть начинается служебным словом  Interfase,
за которым находятся объявления всех глобальных объектов модуля: типов,
констант, переменных и подпрограмм. Эти объекты будут доступны всем модулям и
программам, вызывающим данный модуль.
Исполнительная часть начинается служебным словом Implementation
и содержит описания подпрограмм, объявленных в интерфейсной части. Здесь же
могут объявляться локальные объекты, которые используются только в интерфейсной
части и остаются недоступными программам и модулям, вызывающим данный модуль.
В разделе инициализации модуля размещаются
исполняемые операторы, содержащие некоторый фрагмент программы. Эти программы
исполняются до передачи управления  основной программе и обычно используются
для подготовки ее работы. Инициирующая часть может отсутствовать вместе с
начинающим ее словом Begin.
Разработанный модуль сохраняется в файле с
расширением  .pas. Для компиляции можно
воспользоваться внешним компилятором, поставляемым вместе с Турбо Паскалем.
Команда будет выглядеть так:  TPC  имя_файла.pas. Если в
тексте нет синтаксических ошибок, получим файл с расширением .tpu, иначе будет выведено сообщение с указанием строки, содержащей ошибку.
Другой вариант компиляции: в меню системы
программирования Турбо Паскаль выбрать Compile→Destination Disk, затем - Compile→Build.
Теперь можно подключить модуль к программе, где
планируется его использование.

2. Выполните следующие
упражнения:
Задания уровня 1

Упражнение 1. Реализовать
в виде модуля набор подпрограмм для выполнения следующих операций над
обыкновенными дробями вида P/Q (P -целое , Q - натуральное):
1)
сложение;
2)
вычитание;
3)
умножение;
4)
деление;
5)
сокращение дроби;
6)
возведение дроби в степень N
(N - натуральное);
7)
функции, реализующие операции отношения (равно, не равно,
больше или равно, меньше или равно, больше, меньше).
Дробь представить следующим
типом:
            type Frac=record
                        P: integer;
                        Q: 1..32767
                        end;
Используя этот модуль
решить задачи:
1.
Дан массив A, элементы
которого – обыкновенные дроби. Найти сумму всех элементов и их среднее
арифметическое; результаты представить в виде несократимых дробей.
2.
Дан массив A, элементы
которого – обыкновенные дроби. Отсортировать его в порядке возрастания.

1.
Наберите текст программы:

Unit Droby;
Interfaсe
   type
      Natur=1..High
(longint);
      Frac=record
            P:
longint;
            Q:
Natur
            end;
Procedure
Sokr (var A: Frac);
Procedure
Summa (A, B: Frac; var C: Frac);
Procedure
Raznost (A, B: Frac; var C: Frac);
Procedure
Proizvedenie (A, B: Frac; var C: Frac);
Procedure
Chastnoe (A, B: Frac; var C: Frac);
Procedure
Stepen (A: Frac; N: Natur; var C: Frac);
Function
Menshe (A, B: Frac): boolean;
Function Bolshe
(A, B: Frac): boolean;
Function Ravno
(A, B: Frac): boolean;
Function MensheRavno
(A, B: Frac): boolean;
Function BolsheRavno
(A, B: Frac): boolean;
Function NeRavno
(A, B: Frac): boolean;
Implementation               {Раздел
реализации модуля}

{Наибольший общий делитель двух
чисел – вспомогательная функция, ранее не объявленная}
Function NodEvklid
(A, B: Natur): Natur;
begin
   while A
<> B do
      if A
> B then
         if A
mod B <> 0 then A:=A mod B
                                    else
A:=B
         else
         if B
mod A <> 0 then B:=B mod A
                                    else
B:=A;
   NodEvklid:=A
end;

Procedure
Sokr;              {Сокращение дроби}
var M, N:
Natur;
begin
   if A.P
<> 0 then
   begin
      if A.P
< 0 then M:=abs(A.P)
      else
M:=A.P;              {Совмещение типов, т.к. A.P -
longint}
      N:= NodEvklid(M,
A.Q);
      A.P:=A.P
div N;
      A.Q:=A.Q
div N
   end
end;

Procedure
Summa;         {Сумма дробей}
begin
      C.Q:=(A.Q*B.Q) div NodEvklid(A.Q, B.Q); {Знаменатель
дроби}
      C.P:=A.P*C.Q div A.Q + B.P*C.Q div B.Q;  {Числитель дроби}
      Sokr
(C)
end;

Procedure
Raznost;        {Разность дробей}
begin
      C.Q:=(A.Q*B.Q) div NodEvklid(A.Q, B.Q); {Знаменатель
дроби}
      C.P:=A.P*C.Q div A.Q - B.P*C.Q div B.Q;  {Числитель дроби}
      Sokr
(C)
end;

Procedure
Proizvedenie; {Умножение дробей}
begin
      C.Q:=
A.Q*B.Q;       {Знаменатель
дроби}
      C.P:=A.P*B.P;          {Числитель дроби}
      Sokr
(C)
end;

Procedure
Chastnoe;      {Деление дробей}
begin
      C.Q:=
A.Q*B.P;        {Знаменатель
дроби}
      C.P:=A.P*B.Q;          {Числитель дроби}
      Sokr
(C)
end;

Procedure Stepen;          {Возведение дроби в степень}
var I: Natur;
begin
      C.Q:=
1;
      C.P:=1;
      Sokr
(A);
      For
I:=1 to N do
            Proizvedenie
(A, C, C)
end;

Function Menshe;           {отношение ′<′ между
дробями}
begin
      Menshe:=A.P*B.Q < A.Q*B.P
end;

Function Bolshe;             {отношение ′>′ между
дробями}
begin
      Bolshe:=A.P*B.Q > A.Q*B.P
end;

Function Ravno;             {отношение ′=′ между
дробями}
begin
      Ravno:=A.P*B.Q = A.Q*B.P
end;

Function
BolsheRavno;  {отношение
′>=′ между дробями}
begin
      BolsheRavno:=
Bolshe(A, B) or Ravno(A, B)
end;

Function
MensheRavno;     {отношение
′<=′ между дробями}
begin
      MensheRavno:=
Menshe(A, B) or Ravno(A, B)
end;

Function
NeRavno;         {отношение
′<>′ между дробями}
begin
      NeRavno:=
Not Ravno(A, B)
end;

{Раздел инициализации модуля}
begin
end.

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

Program Sum;
Uses Droby;
var A: array
[1..100] of Frac;
      I, N:
integer;
      S:
Frac;
begin
      write
(′Введите количество элементов массива:′);
      readln
(N);
      S.P:=0; S.Q:=1;         {Первоначально сумма равна нулю}
      for
I:=1 to N do         {Вводим и суммируем дроби}
      begin
         write
(′Введите числитель′, I,
′-й дроби:′);
         readln (A[I].P);
         write
(′Введите знаменатель′, I, ′-й дроби:′);
         readln
(A[I].Q);
         Summa
(A[I], S, S);
      end;
      write
(′Ответ: ′, S.P, ′/′,
S.Q)
end.

2.
Проанализируйте работу программ
3.
Запустите программы на выполнение и проверьте их работу: Ctrl-F9
4.
Для просмотра результатов выполненной программы необходимо нажать: Alt-F5
5.
Сохраните программу на своем диске:  <F2>        A:\P13PR1

3.
Выполнить самостоятельно:

Задания уровня 2

1. Вторую задачу из
рассмотренного выше примера решить самостоятельно. Записать программу под
именем P13PR2.

Задания уровня 3

2. Найти самый большой
файл с расширением .pas в
заданном каталоге. Записать программу под именем P13PR3.
3. Проверьте, правда ли,
что 28 июня, 5 июля, 13 сентября и 13 декабря попадают на один день недели.
Если да, то определите, какой это будет день недели в году. Сохранить программу
под именем P13PR4.

4.
Окончание работы:
1.
Сохранить созданные программы.
2.
Подготовить ответы на контрольные вопросы.
3.
Показать работу преподавателю.
4.
Завершить работу TURBO PASCAL.

Контрольные вопросы:
1.
Какими причинами обусловлено использование внешних подпрограмм и
модулей?
2.
Что называется модулем?
3.
Назовите составные части модуля.
4.
Охарактеризуйте каждую составную часть модуля.
5.
Как осуществляется компиляция разработанного модуля?
6.
Какие стандартные модули используются в Турбо Паскале?
7.
По какому принципу осуществляется работа со стандартными модулями?

СПИСОК ЛИТЕРАТУРЫ

1.
Абрамов, В. Г. Введение в язык
программирования Паскаль [Текст]: учеб. пособие / В. Г. Абрамов, Г. Н.
Трифонова, Н. П. Трифонов. – М.: Наука. Гл. ред. Физ.-мат. лит. 1988. – 320 с.
2.
Алексеев, Е. Р. Турбо Паскаль 7.0.
[Текст] / Е. Р. Алексеев, О. В. Чесноков. – М.: НТ Пресс, 2004. – 320 с.: ил. –
(Шаг за шагом).
3.
Голицина, О. Л. Основы алгоритмизации
и программирования [Текст]: учеб. пособие. / О. Л. Голицина, И. И. Попов. – М.:
ФОРУМ: ИНФРА-М, 2002. - 432 с.
4.
Епанешников, А. М. Программирование в
среде TURBO PASCAL 7.0.[Текст]: Учебно-справочное пособие. / А.М. Епанешников,
В.А. Епанешников. – М.: ДИАЛОГ-МИФИ, 1995
 г. – 288 с.
5.
Иванова, Г. С. Основы программирования [Текст]: учебник для вузов. / Г.
С. Иванова. – М.: Изд-во МГТУ им. Баумана, 2001. – 546 с.
6.
Рапаков, Г. Г. Turbo Pascal для
студентов и школьников [Текст] / Г. Г. Рапаков, С. Ю. Ржеуцкая. – СПб.: БХВ-Петербург, 2004. – 352 с.
7.
Семакин, И. Г. Основы
программирования [Текст]: учебник / И. Г. Семакин, А. П. Шестаков.  –  М.:
Высшая школа, 2001. – 432 с.
8.
Фаронов, В. В. Турбо Паскаль
7.0. Начальный курс [Текст]: учебное пособие /  В. В. Фаронов. – М.: Нолидж,
1999. – 616 с.

9.

file_name: ПР_Паскаль все.doc

alt: ВВЕДЕНИЕ В ЯЗЫК TURBO PASCAL 7

alt: I. Типы данных в

alt: ПРАКТИЧЕСКАЯ РАБОТА №1 ПРИНЦИПЫ

alt: Вычислите среднее арифметическое ( a + b )/2

alt: ПРАКТИЧЕСКАЯ РАБОТА №2 СТРУКТУРА

alt: Таблица 2 Вещественные типы данных

alt: Var a , b : x ; Каждая переменная интервального типа занимает 1 байт

alt: Месячная выплата = ', rub , ' руб

alt: ПРАКТИЧЕСКАЯ РАБОТА №3 СОСТАВЛЕНИЕ

alt: Составной оператор нужен для объединения двух команд в единое целое} begin {Начало составного оператора} result := a / b ; writeln (′

alt: СУББОТА ′); 0: writeln (′

alt: Окончание работы: 1.

alt: ПРАКТИЧЕСКАЯ РАБОТА №4 ПРИМЕНЕНИЕ

alt: Вывод на печать латинских символов от a до r } {

alt: N= ′); readln(N); Pr := true ; {Предположим, что число простое} for i:=2 to

alt: Окончание работы: 1.

alt: ПРАКТИЧЕСКАЯ РАБОТА №5 ПРИМЕНЕНИЕ

alt: Очистка экрана} write (′

alt: Неверно … '); write ('

alt: Окончание работы: 1.

alt: ПРАКТИЧЕСКАЯ РАБОТА №6 РАБОТА

alt: Наберите текст программы: Program

alt: Случайное значение элемента} write ( a [ i , j ]:4); {Вывод элемента массива на экран} end ; writeln ; end ; {Транспонирование матрицы} for…

alt: ПРАКТИЧЕСКАЯ РАБОТА №7 ИСПОЛЬЗОВАНИЕ

alt: Задания уровня 3 Функции 11

alt: ПРАКТИЧЕСКАЯ РАБОТА №8 РЕАЛИЗАЦИЯ

alt: B i порядок не нарушился; 2) все элементы начиная с

alt: ПРАКТИЧЕСКАЯ РАБОТА №9 СОСТАВЛЕНИЕ

alt: MS:=[S[I]] End ; Begin { Ввод исходных строк }

alt: ПРАКТИЧЕСКАЯ РАБОТА №10 РАБОТА

alt: Выполните следующие упражнения:

alt: Вывод результатов} writeln ('

alt: ПРАКТИЧЕСКАЯ РАБОТА №11 СОСТАВЛЕНИЕ

alt: ВТ; · отметка по статистике

alt: FIO ′,′ ′;4); { Вывод результатов } write(′ ′;2, ′

title: Практические задания по программированию в Паскаль