Пример программы на языке Turbo Pascal




При известных значениях переменных , , и натуральных чисел , вычислить значения функции: .

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

а) программа с процедурой Procedure

Program Primer6a;

var a, b, c, y, y1, y2, y3:real;

n, m: byte; {Глобальное описание данных}

procedure step (x:real; n:byte; var y:real);

{Объявление процедуры}

var i:byte; {Локальное описание данных}

begin {Начало локального блока}

y:=1;

for i:=1 to n do y:=y*x;

end; {Конец локального блока}

begin {Начало глобального блока}

writeln ('Введите исходные данные a, b, c, n, m');

readln (a, b, c, n, m);

step (a, n, y1); {Обращение к процедуре}

step (b, m+1, y2); {Обращение к процедуре}

step (c, 10, y3); {Обращение к процедуре}

y:= (y1+y2)/y3;

writeln ('y=', y:8:4);

end. {Конец глобального блока}

Рис. 12 – Cхема алгоритма работы программы

б) программа с процедурой Function

Program primer6a;

var a, b, c, y, y1, y2, y3:real;

n, m: byte; {Глобальное описание данных}

function step (x:real; n:byte): real; {Объявление функции}

var p:real; i:byte; {Локальное описание данных}

begin {Начало локального блока}

p:=1;

for i:=1 to n do p:=p*x;

step:=p; {Имени функции присваивается

значение результата}

end; {Конец локального блока}

begin {Начало глобального блока}

writeln ('введите исходные данные a, b, c, n, m');

readln (a, b, c, n, m);

y:=(step(a,n)+step(b,m+1))/step(c, 10);

writeln ('y=', y:8:4);

end. {Конец глобального блока}

Рис. 13 – Cхема алгоритма работы программы

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

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

2. Какое количество вспомогательных алгоритмов может присутствовать в основном алгоритме?

3. Можно ли вспомогательные алгоритмы, написанные для решения данной задачи, использовать при решении других задач?

4. Для чего нужны процедуры и функции пользователя?

5. Что такое “глобальный блок” и “глобальные объекты” и “локальный блок”, “локальные объекты”?

6. Как описываются в программе процедуры?

7. Как описываются в программе функции?

8. Чем отличается описание процедур от описания функций?

9. В каких случаях целесообразно использовать функции?

10. Какого типа может быть значение функции?

11. Чем отличаются фактические параметры от формальных?

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

13. Как вызываются процедуры, функции?

14. Как задаются (передаются) формальные параметры?

15. Какой вариант, представленной в качестве примера программы, более рационален а) или б) и почему?


Лабораторная работа № 7.
Файлы и их применение в Turbo Pascal

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

Теоретические сведения

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

Текстовый файл – содержит строки текста различной длины, чтение или запись осуществляется (как правило) построчно.

Типизированный файл – с точки зрения Turbo Pascal содержит элементы одного типа, единицей обмена информацией является один элемент.

Нетипизированный файл – содержит любые данные, Turbo Pascal никак не интерпретируемые.

Типизированные файлы

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

Type <имя_типа> = file of <тип>;

Var

<имя>: <имя_типа>;

или

Var

<имя>: file of <тип>;

Здесь:

<имя_типа> – имя файлового типа; <тип> – любой тип данных Pascal, кроме файлов; <имя> – имя файловой переменной.

После объявления файловой переменной для работы с файлом необходимо связать ее с реальным файлом на диске. Это выполняется процедурой Assign:

Assign (<имя>, ’ <путь_к_файлу> ’);

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

Для создания нового файла на диске после выполнения процедуры Assign необходимо открыть файл в режиме записи: ReWrite (<имя>);

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

Для открытия файла в режиме чтения он должен быть открыть процедурой: Reset(<имя>);

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

Read(F, i, j);

Write(F, n);

В первом примере из файла, связанного с переменной F, считывается два значения, во втором – записывается одно.

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

N:= FilePos(F);

Эта функция возвращает переменной N положение указателя относительно начала файла. Самая первая позиция имеет номер 0. Переместить указатель в требуемую позицию можно, используя функцию Seek. Например:

Seek(F, 5);

Seek(F, FilePos(F)-1);

Первый оператор устанавливает позицию указателя в файле после 5 элемента (и перед 6-м). Следующий оператор вызывает смещение указателя файла на 1 элемент назад относительно текущего положения указателя.

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

While not EOF(F) do Read(F, i);

Этот оператор считывает элементы файла, пока не доберется до конца файла.

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

Count:= FileSize(F);

Эта функция возвращает целое число, равное количеству компонент в указанном файле.

Для закрытие файла следует воспользоваться следующей процедурой:

Close (<имя>);

При этом связь файловой переменной, с именем файла установленная процедурой Assign сохраняется.

Текстовые файлы

Текстовый файл содержит строки текста различной длины. Каждая строка завершается символами «Возврат каретки» (код 13) и «Перевод строки» (код 10). При обычном просмотре эти символы на экране не отображаются, а интерпретируются компьютером как признак окончания одной строки и начала следующей.

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

Var

<имя>: Text;

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

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

Append(<имя>);

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

Далее в зависимости от способа открытия файла можно либо читать из него данные:

Read(F, i, j); ReadLn(F, s);

Либо записывать в него данные:

Write(F, a, b, c); WriteLn(F, Result);

При чтении/записи данных применяются те же правила, что и при вводе/выводе с клавиатуры/на экран, т.е. можно использовать форматирование:

WriteLn(F, x:5:2);

В данном примере F – имя файловой переменной; x – выводимое выражение; 5 – параметр, указывающий минимальную ширину поля, в которое будет записываться символьное представление; 2 – задает количество десятичных знаков в дробной части вещественного числа.

Нетипизированные файлы

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

Объявление нетипизированного файла:

Var

<имя>: File;

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

ReSet(F, 25);

или

ReWrite(F, SizeOf(Integer)*12);

В первом примере открывается файл для чтения/записи с размером блока 25 байт. Во втором случае размер блока указывается через размер типа Integer. Функция SizeOf возвращает количество байт, отводимых под указанный тип или переменную. Если размер блока данных опущен, принимается размер по умолчанию, равный 128 байт.

Чтение данных выполняется следующей процедурой:

BlockRead(F, Biffer, Count);

BlockRead(F, Biffer, Count, Result);

В примерах из файла F в область памяти, задаваемую переменной Buffer, считывается Count блоков данных. Во втором случае в переменную Result дополнительно заносится число реально считанных блоков данных. Такая ситуация возможна в тех случаях, когда конец файла встречается раньше, чем будет считано заданное число блоков. Если значения Count и Result различаются, это говорит о неполном чтении.

Аналогичные правила действуют для записи данных в файл:

BlockRead(F, Biffer, Count);

BlockRead(F, Biffer, Count, Result);

Частичная запись возможна в том случае, если на диске заканчивается свободное место.

Содержание лабораторной работы

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

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

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

2. Запись содержит данные о студенте: фамилию и инициалы, номер курса, номер группы, оценки, полученные в сессию. Получить списки студентов заданной группы, претендующих на повышенную стипендию и студентов-задолжников.

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

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

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

6. Запись содержит данные о студенте: фамилию и инициалы, номер курса, номер группы, аттестацию (0 или 1) по каждому предмету. Получить списки неаттестованных студентов заданной группы по каждому предмету.

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

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

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

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

11. Дан текстовый файл. Записать все строки файла в новый файл, изменив порядок следования букв в каждой строке на противоположный.

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

13. Создать файл, содержащий не более 100 случайных целых чисел. Выполнить сортировку чисел по возрастанию.

14. Запись содержит данные о студенте: фамилию и инициалы, номер курса, номер группы, экзаменационную оценку и дату сдачи экзамена. Получить списки студентов заданной группы, сдавших экзамен на отлично (5), хорошо (4), удовлетворительно (3), не сдавших экзамен (2) и не явившихся на экзамен (0).

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

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

Указание к решению

Индекс Кетле определяется по формуле

Индекс Кетле Показатели веса

до 19,5 малый вес

от 19,5 до 24,9 нормальный вес

от 25 и выше избыточный вес

17. Запись содержит данные о работнике: фамилия и инициалы, табельный номер, номер подразделения, должность, стаж работы, величина зарплаты. Получить списки работников, заданного подразделения, стаж которых не менее 10, 20, 25 лет.

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

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

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

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

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

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

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

25. Запись содержит сведения о результатах медосмотра: фамилия и инициалы, рост, вес. Для каждого человека определить идеальный вес и выдать списки людей, чей вес близок к идеальному (±3 кг), и тех, у кого он избыточен.

Указание к решению

Идеальный вес определяется в зависимости от роста:

рост (см) идеальный вес (кг)

до 155 вес – 50

до 165 вес – 60

до 175 вес – 70

свыше 175 вес – 85

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

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

28. Запись содержит данные о книгах: автор, название, издательство, год издания, цена. Получить список книг, изданныx в указанный год, и список книг заданного автора.

29. Запись содержит сведения о погоде в городах России: город, дневная и ночная температуры. Для каждого города определить разность температур и выдать списки городов, в которых дневная температура выше нуля, а ночная – ниже и в которых разность температур превышает 5оС.

30. Запись содержит сведения о странах мира: название страны, столица, территория (тыс.кв. км), население (тыс. чел.). Для каждой страны определить плотность населения и выдать списки стран с наименьшей (меньше минимума +20 тыс. чел.) и наибольшей (больше максимума –50 тыс. чел.) численностью населения.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: