Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Ответы на тесты главы 7 1 страница




Begin

Begin

End.

Readln

Begin

s:=0;

for i:=1 to 4 do

s:=s+f[i,j];

x[j]:=s;

write( x[j]:7:2,' ' )

end;

В программе arrsum в разделе описания переменных описываются два массива. Первый из них – это двумерный массив f, который в дальнейшем будет заполнен числами вещественного типа. В данном массиве, как видно из описания, имеется 4 строки и 5 столбцов. Второй описанный в разделе массив x является одномерным и в дальнейшем будет заполнен элементами, каждый из которых представляет собой сумму элементов, содержащихся в одном из столбцов двумерного массива. Всего в одномерном массиве x должно быть 5 элементов – по количеству столбцов в двумерном массиве f. Вспомогательная переменная s – используется для подсчета суммы элементов, содержащихся в одном из столбцов


Рис. 7.8.2. Результаты работы программы, заполняющей двумерный массив произвольными элементами, и формирующей на его основе одномерный массив

7.9. Функции и процедуры.

 

7.9.1. Функции

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

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

К наиболее широко употребляемым стандартным функциям кроме уже известных нам функций length, ord и char, используемых для работы со строковыми переменными, относятся также следующие:

abs(x) – определяет aбсолютное значение аргумента, которым может быть число или выражение целого или вещественного типа;

arctan(x) – вычисляет арктангенс угла, значение которого выражено в радианах;

cos(x) – вычисляет косинус угла, значение которого выражено в радианах;

exp(x) – вычисляет экспоненту аргумента (то есть e в степени x);

int(x) – определяет целую часть аргумента. Значением функции является величина вещественного типа;

ln(x) – вычисляет натуральный логарифм аргумента (т. е. логарифм по основанию e);

pi – данная функция не имеет параметров, а значением ее является число 3.1415926…

round(x) – округляет значение аргумента до ближайшего целого числа;

sin(x) - вычисляет cинус угла, значение которого выражено в радианах;

sqr(x) – вычисляет квадрат аргумента, которым может быть число или выражение целого или вещественного типа;

sqrt(x) – вычисляет квадратный корень из аргумента;

trunc(x) – определяет целую часть аргумента. Значением функции является величина целого типа;

copy(x,n,l) – выделяет в строковой переменной x группу символов, начиная с позиции с номером n. Длина группы равна l. Параметры n и l должны быть величинами целого типа;

delete(x,n,l) – удаляет из строковой переменной x группу символов, начиная с позиции с номером n. Количество символов равно l.

 

В качестве примера программы с использованием стандартных функций рассмотрим программу решения квадратного уравнения ax2+bx+c=0 ( рис. 7.9.1).

В данной задаче вначале с помощью стандартной функции sqr вычисляется дискриминант уравнения. В зависимости от значения дискриминанта выясняется, имеет ли данное уравнение решение. Если решения нет, то соответствующее сообщение выводится на экран компьютера. В случае же, если решение имеется, оно определяется с помощью стандартной функции sqrt.


При значениях коэффициентов уравнения 2, 7 и 3 получаем решение, изображенное на рис. 7.9.1.

 


Рис. 7.9.1. Программа решения квадратного уравнения и результаты его решения.

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

 

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

< заголовок функции >;

< раздел описания констант и переменных, используемых внутри функции >;

< операторы функции >

end;

Рассмотрим более подробно элементы этой структуры.

Общий вид заголовка функции следующий:

function < имя_функции > (< параметры функции >): < тип функции >;

где: function – служебное слово, означающее «функция».

< имя_функции > - задается по тем же правилам, что и имена переменных.

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

< тип функции > - после скобок обязательно указывается тип значения самой функции.

Пример заголовка функции:

function beta (x,y:integer; z:real):real;

данная функция имеет имя beta, в ней используются 3 параметра: x и y – целого типа, z – вещественного. Значение самой функции beta является вещественным.

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

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

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

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

Например, правая часть оператора присваивания

d:=beta(3,4,7.5)

представляет собой обращение к функции beta, а 3, 4 и 7.5 – фактические параметры данной функции в отличие от формальных параметров х,y и z. В качестве фактических параметров функции могут выступать и константы (как в вышеприведенном примере) и переменные.

Рассмотрим программу определения числа сочетаний из n по m (см. рис.
7.9.2). Это число определяется по следующей формуле:

,

где n!, m! и (n-m)! – соответственно факториалы n, m и (n-m). Факториалом числа n называется произведение всех натуральных чисел от 1 до n. Так как в программе нам предстоит три раза вычислять факториал различных чисел, то целесообразно вычисление факториала оформить в виде отдельной функции faktor.

 


 


Рис.7.9.2. Программа подсчета числа сочетаний из n по m и результаты ее работы

 

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

В вычислении факториала используются следующие переменные: переменная k, которой присваивается значение того натурального числа, факториал которого вычисляется, переменная r, которой будет присвоено начальное значение, равное единице, а затем будут поочередно присваиваться значения факториалов всех чисел от единицы до k включительно, а также i – переменная цикла, в котором будут происходить это последовательные присваивания. Переменная k является формальным параметром функции, а переменные r и i являются вспомогательными. В теле функции имеется оператор присваивания конечного значения r имени функция faktor. Так как факториалы даже небольших натуральных чисел представляют собой достаточно большие величины (например, факториал числа 10 равен 3 628 800), то для описания типа функции используется тип longint.

В основной части программы осуществляется ввод исходных данных, затем производятся вычисления по формуле с использованием функции faktor. С помощью этой функции мы находим a –факториал числа n, b – факториал числа m и с – факториал разности этих чисел.Для вычисления этих величин в программе трижды производится обращение к функции faktor с различными фактическими параметрами. После нахождения a, b и c мы вычисляем d – искомое число сочетаний. На рис. 7.9.2 приведен результат работы программы при n = 5 и m = 3.

 

7.9.2. Процедуры

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

Процедуры отличаются от функций тем что, если при обращении к функции мы можем получить только один результат – значение данной функции, то результатом работы процедура может быть несколько значений. Существуют стандартные процедуры, которые подобно стандартным функциям, являются частью языка Паскаль. К таким стандартным процедурам относятся уже известные нам команды ClrScr, TextColor и TextBackground.. Наряду с этими стандартными процедурами в языке Паскаль широко используются также следующие:

Delay(i) -осуществляет задержку выполнения программы на i миллисекунд (тысячных долей секунды);

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

GotoXY(a,b) -переводит курсор в точку экрана с координатами a,b;

Halt - э та процедура не имеет параметров. Она завершает выполнение программы и передает управление операционной системе;

Str(x,s) -производит преобразование числовой величины x в строковую s;

Val(s,x,n) -производит преобразование строки s, изображающей число, в числовую величину x. В процедуре также должен присутствовать параметр n, относящийся к целочисленному типу. Если преобразование было выполнено успешно, то значение n будет равно нулю. Если преобразование не может быть выполнено, то в переменной n присваивается номер символа, который явился причиной ошибки.

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

 


 

 


Рис. 7.9.3. Программа «обратный отсчет» (исходный текст и программа в действии)

 

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

Общий вид описания процедуры следующий:

< заголовок процедуры >;

< раздел описаний процедуры >;

< раздел операторов процедуры >

end;

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

Общий вид заголовка процедуры следующий:

procedure < имя_процедуры > (< параметры процедуры >);

где: procedure – служебное слово,

< имя_процедуры > - имя процедуры задается по тем же правилам, что и имена переменных в Паскале,

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

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

Пример заголовка процедуры:

procedure vspomog(a,b:integer; var c,d:real);

где vspomog – имя процедуры, a,b,c,d – имена формальных параметров, причем a и b являются параметрами-значениями, а c и d – параметрами-переменными.

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

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

Рассмотрим программу определения наибольшего и наименьшего числа в группе из 4 чисел (рис.7.9.4). Напишем несложную процедуру minmax, которая определяет наибольшее и наименьшее из двух чисел. Затем разобьем введенные числа на пары и в каждой паре с помощью этой процедуры определим большее и меньшее число. Далее с помощью той же процедуры minmax определим наибольшее из двух больших и наименьшее из двух меньших. Это и будет искомый результат.

 

 


 

 


Рис. 7.9.4. Программа определения наименьшего и наибольшего из 4 чисел и результаты ее работы.

 

В заголовке процедуры minmax описаны два формальных параметра-значения x1 и x2, которые используются для ввода в процедуру исходных данных и два параметра-переменные min и max, используемые для вывода полученных результатов. Внутри процедуры параметры-значения сравниваются между собой и значение меньшего из них присваивается переменной min, а большего - переменной max.

В основной части программы обращение к процедуре minmax встречается 4 раза. В первых двух случаях в качестве фактических параметров выступают введенные с клавиатуры значения переменных a и b при первом вызове процедуры и c и d при втором. Результатами являются соответственно фактические параметры min1 и max1 (меньшее и большее в первой паре чисел) и min2 и max2 (меньшее и большее во второй паре).

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

Искомые наибольшее и наименьшее значения выводятся на экран с помощью оператора writeln.

На рис. 7.9.4 приводятся результаты работы данной программы при a равном 65, b – 111, c – 678 и d – 215.

7.10. Работа с файлами

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

Существует два способа записи и чтения информации – метод последовательного доступа и метод прямого доступа. Метод последовательного доступа можно сравнить с процессом записи на магнитофонную пленку и воспроизведения ее содержимого. Для того чтобы произвести одну или другую операцию требуется предварительно перемотать пленку до нужного места. Так же и для того, чтобы добраться в файле до интересующей нас информации методом последовательного доступа нужно предварительно «прокрутить» всю предшествующую ей информацию. При считывании информации методом прямого доступа можно непосредственно получить доступ к нужной нам компоненте (т.е. составной части файла) подобно тому, как можно непосредственно проиграть любую запись на лазерном диске.

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

 

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

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

var < имя_переменной >: text;

где: < имя_переменной > – имя переменной, которая связана с файлом;

text – соответствующий тип переменной.

Пример описания:

var k :text;

Текстовые файлы состоят из строк символов. Каждая такая строка заканчивается символами возврата каретки CR (этот символ имеет в таблице ASCII код 13) и перевода строки LF (данный символ имеет в таблице код 10). Вышеупомянутые символы относятся к так называемым управляющим символам, которые при просмотре и редактировании файла не выводятся на экран компьютера. В конце файла находится признак конца файла, который сокращенно обозначается EOF (сокращение от английской фразы end of file – конец файла). Файл такого вида имеет расширение txt. Этот файл можно создавать как с помощью программы, написанной на Паскале, так и с помощью какого-либо текстового редактора самой системы программирования Турбо Паскаль.

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

Общий вид процедуры, связывающей имя файла с именем переменной следующий:

Assign (< имя_переменной >, ‘< имя_ файла >’);

где assign – служебное слово, означающее в переводе «назначить»;

< имя_переменной > – имя соответствующей файлу переменной;

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

Пример использования процедуры:

Assign (k,’A: \ otchet.txt’);

Здесь переменной k ставится в соответствие файл otchet.txt, который находится на дискете, содержащейся в дисководе A того компьютера, с которым работает пользователь. Данная процедура устанавливает соответствие между вышеописанной переменной k и текстовым файлом otchet.txt. В дальнейшем во всех операциях с файлом будет указываться только имя соответствующей ему текстовой переменной.

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

reset (< имя_файловой_переменной >);

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

Общий вид данной процедуры:

Close (< имя_ файловой_переменной >);

Рассмотрим теперь операцию чтения информации из файла на конкретном примере.

Составим программу, которая считывает информацию из файла, находящегося на логическом диске D компьютера в каталоге obuch (Напомним, что для того, чтобы в Norton Commander создать новый текстовый файл, нужно нажать комбинацию клавиш Shift + F4, а в дальнейшем редактировать уже существующий файл можно выделив его курсорной рамкой и нажав клавишу F4). Файл имеет имя comp.txt и содержит информацию об устройстве компьютера.

Программа называется obrtext и в ней используются две переменные t, которой ставится в соответствие файл comp.txt и ln – вспомогательная переменная строкового типа, в которую строка за строкой будет считываться содержимое текстового файла (рис. 7.10.1). В начале основной части программы между файлом и файловой переменной устанавливается соответствие с помощью процедуры assign. Затем файл открывается для чтения процедурой reset. Сам процесс считывания информации производится в цикле с предусловием типа while. Условием завершения работы цикла является обнаружение признака конца файла eof, то есть цикл будет выполняться при условии, что конец файла в ходе считывания информации еще не найден.


 

Рис. 7.10.1. Программа чтения текстового файла и результаты ее работы.

 

Это условие записывается следующим образом: not eof(t), то есть здесь используется стандартная функция Паскаля, которая также называется eof и относится к логическим функциям, значением которых может быть только false или true. Пока не обнаружен конец файла, функция имеет значение false, а при его обнаружении она меняет значение на true. Аргументом же данной функции является имя файловой переменной. При каждом выполнении тела этого цикла из файла оператором readln считывается очередная строка и передается в строковую переменную ln. Затем содержимое строковой переменной (то есть очередная строка файла) выводится на экран компьютера оператором writeln. По окончании работы цикла файл закрывается процедурой close.

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

rewrite (< имя_файловой_переменной >);

append (< имя_ файловой_переменной >);

то есть он аналогичен виду процедуры reset. Надо помнить, что процедуры rewrite и append открывают файл для записи по-разному. Процедура rewrite при открытие файла очищает его, то есть предыдущее содержимое файла (если таковое было) удаляется и вместо него записывается новый текст. Если же содержимое файла нужно сохранить, то используют процедуру append, которая дополняет текущее содержимое текстового файла новой информацией, дописывая ее в конец данного файла. Сам же процесс записи информации в файл производится либо с помощью оператора write, либо оператором writeln. После служебного слова write или writeln в скобках указывается имя файловой переменной, а затем имя той строковой перменной, из которой осуществляется запись данных в файл.




Поделиться с друзьями:


Дата добавления: 2014-12-26; Просмотров: 759; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.105 сек.