ПРОГРАММИРОВАНИЕ ВЫЧИСЛИТЕЛЬНЫХ ЗАДАЧ С ИСПОЛЬЗОВАНИЕМ ПОДПРОГРАММ ПОЛЬЗОВАТЕЛЯ




 

1. ЦЕЛЬ РАБОТЫ:

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

 

2. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

 

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

 

ПРОЦЕДУРЫПОЛЬЗОВАТЕЛЯ

 

Процедура начинается словом PROCEDURE, по структуре аналогична программе:

PROCEDURE <имя> (необязательные формальные параметры);

LABEL...; CONST...; TYPE...; VAR...;

BEGIN

<операторы>

END;

 

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

 

ФУНКЦИИ ПОЛЬЗОВАТЕЛЯ

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

FUNCTION <имя> (Необязательные формальные параметры): <тип результата>;

LABEL...; CONST...; TYPE...; VAR...;

BEGIN

<операторы>

END;

 

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

 

ПАРАМЕТРЫ

Если список параметров начинается словом VAR, то они передаются из процедуры после ее выполнения и результаты присваиваются соответствующим фактическим параметрам. Если при перечислении формальных параметров VAR не указано, то эти значения передаются в процедуру.

Изучите пример:

Дополнительно:

1. Три золотых правила.

2. Глобальные и локальные переменные.

3. Формальные и фактические параметры.

4. Параметры-значения и параметры-переменные.

 

1. Три золотых правила:

1. Если надо что-то вычислить и получить в точке вызова результат - используем функцию;

2. Если надо что-то сделать: считать данные с диска, очистить часть экрана, закрасить экран в другой цвет и т.п. - используем процедуру;

3. При вызове процедуры или функции тип фактических параметров должен совпадать с типом формальных параметров (т.е. они должны быть согласованы).

2. Глобальные переменные (константы, типы) - переменные (константы, типы), объявленные в программе вне процедуры или функции.

 

Локальные - существуют только внутри процедуры или функции, объявленные либо в списке параметров, либо в разделе VAR внутри процедуры или функции (для констант - раздел CONST, для типов - TYPE).

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

3. Формальные параметры - описываются в заголовке объявления подпрограммы.

Фактические параметры - которые подставляются на их место при вызове подпрограммы.

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

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

 

Пример.

Возведение числа в квадрат, если квадрат числа больше 100, то программа возвращает значение 100.

(pr1- использует функцию, pr2-использует для решения той же задачи прцедуру)

 

program pr1;

var flag:boolean; {flag-глобальная переменная}

function q(x:real):real; {x-локальная переменная,

парметр-значение,

формальный параметр}

const max=100; {локальная константа}

var x2:real; {x2-локальная переменная}

begin

x2:=sqr(x);

flag:=(x2>max);

if flag then x2:=max;

q:=x2;

end;

Begin

writeln(q(5),'Флаг',flag); {5-фактический параметр}

End.

 

program pr2;

var flag:boolean; {flag-глобальная переменная}

procedure q(x:real;var sq:real); {x-локальная переменная,

парметр-значение,

формальный параметр}

const max=100; {локальная константа}

var x2:real; {x2-локальная переменная}

begin

x2:=sqr(x);

flag:=(x2>max);

sq:=x2;

end;

var sqGlobal:real;

Begin

q(5,sqGlobal); {5-фактический параметр}

writeln(sqGlobal,'Флаг',flag);

End.

 

3.ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1. Ознакомиться с теоретическими сведениями данной работы.

2. Ответить на контрольные вопросы.

3. Выполнить свой вариант задания.

 

4.ОФОРМЛЕНИЕ ОТЧЕТА

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

 

5. КОНТРОЛЬНЫЕ ВОПРОСЫ

1. Что представляют собой формальные и фактические параметры программы и как организовать их согласование?

2. В какую точку программы осуществляется выход из функции?

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

4. Назвать два вида локальных переменных и описать их различие.

6. ВАРИАНТЫЗАДАНИЙ

№ по списку                                                            
№ задания                                                            

Задание:

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

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

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


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

РАБОТА С ФАЙЛАМИ

 

1. ЦЕЛЬ РАБОТЫ:

Целью работы является изучение приемов работы с переменными файлового типа.

 

2. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

Под файлом понимается либо именованная область внешней памяти ПК (жесткого диска, гибкой дискеты, электронного "виртуального" диска), либо логическое устройство - потенциальный источник или приемник информации.

Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре ASSIGN:

 

ASSIGN (<ф.п.>, <имя файла или л.у.>);

 

Здесь

<ф.п.> - файловая переменная (правильный идентификатор, объявленный в программе как переменная файлового типа);

<имя файла или л.у.> - текстовое выражение, содержащее имя файла или логическое устройство.

Если имя файла задается в виде пустой строки, например, ASSIGN(f,"), то в зависимости от направления обмена данными файловая переменная связывается со стандартным файлом INPUT или OUTPUT.

 

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

 

RESET (<ф.п.>);

 

Здесь

<ф.п.> - файловая переменная, связанная ранее процедурой ASSIGN с уже существующим файлом или логическим устройством - приемником информации.

В Турбо Паскале разрешается обращатся к типизированным файлам, открытым процедурой RESET (т.е. для чтения информации), с помощью процедуры WRITE (т.е. для записи информации). Такая возможность позволяет легко обновлять ранее созданные типизированные файлы и при необходимости расширять их. Для текстовых файлов, открытых процедурой RESET, нельзя использовать процедуру WRITE или WRITELN.

Стандартная процедура

 

REWRITE (<ф.п.>)

 

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

Стандартная процедура

APPEND (<ф.п.>)

инициирует запись в ранее существовавший текстовый файл для его расширения, при этом указатель файла устанавливается в его конец. Процедура APPEND применима только к текстовым файлам, т.е. их файловая переменная должна иметь тип TEXT. Процедурой APPEND нельзя инициировать запись в типизированный или нетипизированный файл. Если текстовый файл ранее уже был открыт с помощью RESET или REWRITE, использование процедуры APPEND приведет к закрытию этого файла и открытию его вновь, но уже для добавления записей.

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

Формат сообщения:

CLOSE(<ф.п.>)

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

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

 

3.ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1. Ознакомиться с теоретическими сведениями данной работы.

2. Ответить на контрольные вопросы.

3. Выполнить свой вариант задания.

 

4.ОФОРМЛЕНИЕ ОТЧЕТА

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

 

5.КОНТРОЛЬНЫЕ ВОПРОСЫ

1. В какое место файла можно добавлять новые элементы:

- в начало,

- в середину,

- в конец,

- куда угодно,

- никуда?

2. Если не переписывать файл заново, то значения каких его элементов можно менять:

- только первого;

- только последнего;

- каких угодно;

- никаких.

3. Если не переписывать файл заново, то какие из его элементов можно удалять:

- только первый;

- только последний;

- какие угодно;

- никакие.

4. Определить содержимое файла f после выполнения следующих операторов:

rewrite(f);

for i:=1 to 3 do write(f,i*2);

close(f);

5. Определить содержимое файла f после выполнения следующих операторов:

rewrite(f);

for i:=3 downto 1 do write(f,i);

close(f);

i:=5;

append(f);

write(f,i);

close(f);

6. Определить содержимое файла f после выполнения следующих операторов:

i:=5;

rewrite(f);

write(f,i);

close(f);

rewrite(f);

if eof(f) then write(f,i) else write(f,i-5);

close(f);

 

6.ЗАДАНИЕ

№ задания                              
№ по журналу                              
                             

Состоит из двух частей:1-общая для всех, 2-по варианту.

1). Организовать процедуру, позволяющую записать в текстовый файл введенную с клавиатуры строку.

2-1).Удвоить в данном файле каждую цифру.

2-2).Заменить в данном файле каждую цифру на следующую по величине.

2-3).Оставить в данном файле только первые вхождения каждой литеры.

2-4).Заменить в данном файле ккаждую литеру 'a' на две литеры 'b'.

2-5).Дописать в начало файла фразу 'Turbo Pascal'.


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

МОДУЛЬ SYSTEM

 

1. ЦЕЛЬ И ЗАДАЧИ РАБОТЫ

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

 

2. ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

Модуль System содержит все стандартные и встроенные процедуры и функции Turbo Pascal. Модуль System реализует низкоуровневые подпрограммы для операций ввода/вывода, обработки строк, управления оверлеями и динамическое распределение памяти. Модуль System используется автоматически любым модулем или программой и никогда не требуется указывать его в директиве uses.

 

Процедуры управления программой.

 

Процедура Описание
Exit Позволяет немедленно выйти из текущего блока
Halt Останавливает выполнение программы и возвращает в операционную систему
RunError Останавливает выполнение программы и генерирует ошибку времени выполнения

 

Функции преобразования.

Функция Описание
Chr Возвращает символ с заданным порядковым номером
Ord Возвращает порядковый номер, соответствующий символу
Round Округляет значение вещественного типа до значения типа LongInt
Trunc Усекает значение вещественного типа до значения типа LongInt

 

Арифметические функции.

 

Функция Описание
Abs Возвращает абсолютное значение аргумента
ArcTan Возвращает арктангенс аргумента
Cos Возвращает косинус аргумента
Exp Возвращает экспоненту аргумента
Frac Возвращает дробную часть аргумента
Int Возвращает целую часть аргумента
Ln Возвращает натуральный логарифм аргумента
Pi Возвращает значение числа Pi {3.1415926535897932385}
Sin Возвращает синус аргумента
Sqr Возвращает аргумент в квадрате
Sqrt Возвращает квадратный корень аргумента

 

Процедуры и функции для ординальных типов.

 

Процедура Описание
Dec Уменьшает значение переменной
Inc Увеличивает значение переменной

 

Функция Описание
Odd Проверяет, является ли аргумент нечетным числом
Pred Возвращает предшествующее значение аргумента
Succ Возвращает его последующее значение

 

Строковые процедуры.

 

Процедура Описание
Delete Удаляет подстроку из строки
Insert Вставляет подстроку в строку
Str Преобразует численное значение в его строковое представление
Val Преобразует строковое значение в его численное представление

 

Строковые функции.

 

Функция Описание
Concat Выполняет слияние последовательности строк
Copy Возвращает подстроку из строки
Length Возвращает динамическую длину строки
Pos Производит поиск подстроки в строке

 

Процедуры и функции для ввода/вывода.

 

Процедура Описание
Assign Присваивает имя внешнего файла файловой переменной
ChDir Меняет текущую директорию
Close Закрывает открытый файл
Erase Удаляет внешний файл
GetDir Возвращает текущую директорию на заданном диске
MkDir Создает директорию
Rename Переименовывает внешний файл
Reset Открывает существующий файл
Rewrite Создает и открывает новый файл
RmDir Удаляет пустую директорию
Seek Передвигает текущую позицию файла на указанную компоненту (не используется с текстовыми файлами)
Truncate Усекает размер файла до текущей позиции в файле. (Не используется с текстовыми файлами)

 

Функция Описание
Eof Возвращает для файла состояние end-of-file (конец Файла)
FilePos Возвращает текущую позицию в файле. (Не используется с текстовыми файлами)
FileSize Возвращает текущий размер файла. (Не используется с текстовыми файлами)
IOResult Возвращает целое значение, являющееся состоянием последней выполненной операции ввода/вывода.

 

Процедуры и функции для текстовых файлов.

 

Процедура Описание
Append Открывает существующий файл для добавления
Flush Выводит содержимое буфера файла в физический файл
Read Считывает одно или более значений из текстового файла в одну или более переменных
Readln Выполняет те же действия, что и Read, а потом делает пропуск до начала следующей строки файла
SetTextBuf Назначает буфер ввода/вывода для текстового файла
Write Записывает в текстовый файл одно или более значений
Write Выполняет те же действия, что и Write, а затем добавляет к файлу маркер конца строки

 

Функция Описание
Eoln Возвращает для файла состояние end-of-line (конец строки)
SeekEof Возвращает для файла состояние end-of-line (конец строки). Предварительно пропускает все пробелы, символы табуляции и признаки конца строки.
SeekEoln Возвращает для файла состояние end-of-line (конец строки). В отличии от Eoln предварительно пропускает все пробелы и символы табуляции.

 

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

 

Процедура Описание
BlockRead Считывает в переменную одну или более записей
BlockWrite Записывает одну или более записей из переменной

 

Функции для работы с указателями и адресами.

Процедуры и функции динамического распределения памяти.

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

Процедуры и функции разного назначения.

 

Процедура Описание
Randomize Инициализирует случайным значением встроенный генератор случайных чисел

 

Функция Описание
Hi Возвращает старший байт аргумента
Lo Возвращает младший байт аргумента
Random Возвращает случайное число
UpCase Преобразует символ в прописной

 

3. ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ

1. Ознакомиться с теоретическими сведениями данной работы.

2. Ответить на контрольные вопросы.

3. Выполнить свой вариант задания.

 

4. ОФОРМЛЕНИЕ ОТЧЕТА

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

 

5. контрольные вопросы

1. Следует ли указывать в директиве USES модуль SYSTEM?

2. В чем разница в процедурах Halt и Exit (своими словами)?

3. Какого типа может быть параметр-переменная используемая в функциях Round и Trunc, и в чем разница между этими функциями (разницу показать на примере)?

4. Какая процедура возвращает текущую длину строки?

5. Какая процедура позволяет создавать подкаталог?

 

6. ВАРИАНТЫЗАДАНИЙ

№ задания                              
№ по журналу                              
                             

Составить программу (по варианту), которая использует следующие процедуры и функции модуля System:

Exit, Chr, Abs, ArcTan, Dec,Random
Halt, Ord, Exp, Cos, Inc,Random
Exit, Round, Frac, Sin, Odd,Random
Halt, Trunc, Int, ArcTan, Pred,Random
Exit, Chr, Sqr, Cos, Succ,Random
Halt, Ord, Sqrt, Sin, Dec,Random
Exit, Round, Abs, ArcTa Inc n,,Random
Halt, Trunc, Exp, Cos, Odd,Random
Exit, Chr, Frac, Sin, Pred,Random
Halt, Ord, Int, ArcTan, Succ,Random
Exit, Round, Sqr, Cos, Dec,Random
Halt, Trunc, Sqrt, Sin, Inc,Random
Exit, Chr, Abs, ArcTan, Odd,Random
Halt, Ord, Exp, Cos, Pred,Random
Exit, Round, Frac, Sin, Succ,Random

 


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



Поделиться:




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

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


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