Файл: программирование на паскале2.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.04.2025

Просмотров: 1354

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СОДЕРЖАНИЕ

Министерство образования и науки российской федерации

Начальный курс программирования на основе алгоритмического языка Паскаль

Введение

Часть. Основы программирования на Паскале

1.1. Структура простейшей Паскаль-программы

1.2. Данные и операции над ними

1.2.1. Свойства ячейки памяти. Переменные и константы

1.2.2. Типы данных

1.2.3. Правила записи констант

1.2.4. Описание переменных и именованных констант в Паскале

1.2.5. Выражения

1.3. Операторы преобразования данных

1.3.1. Оператор присваивания

1.3.2. Понятие ввода и вывода

1.3.3. Оператор вывода

1.3.4. Оператор ввода

1.4. Разработка простейших программ

1.4.1. Понятие о качестве программы и основные технологические принципы разработки программ

1.4.2. Алгоритм и способы его записи.

1.4.3. Изображение алгоритмов в виде блок-схем

1.4.4. Базовые структуры алгоритмов и их кодирование на Паскале

1. Следование

2. Ветвление (развилка)

If условие then

If условие then

3. Цикл

1.4.5. Примеры разработки программ

1.5. Массивы

1.5.1. Понятие массива. Основные правила работы с массивами в Паскале

1.5.2. Примеры программ с массивами

1.614. Структура паскаль-программы

Часть.Подпрограммы

2.1. Общие сведения о подпрограммах

2.2. Процедуры в Паскале

2.2.1.Описание процедур

2.2.2. Обращение к процедуре

2.3. Функции Паскаля

2.3.1. Описание функций

2.3.2. Обращение к функции

2.4. Глобальные и локальные имена

2.5. Использование подпрограммы в качестве параметра другой подпрограммы

2.6. Модули

2.6.1. Общие сведения

2.6.2. Структура модуля

2.6.3. Использование модулей

2.6.4. Модули как средство программирования

Часть. Обработка символьной информации и документов сложной структуры

3.1. Обработка символьной информации

3.1.1. Символьный тип

3.1.2.Строковые типы

3.1.3. Подпрограммы, работающие со строками

Функции

Процедуры

3.2. Тип запись

3.3. Файлы

3.3.1. Общие понятия

3.3.2. Файлы в Турбо Паскале

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

Пример 1

Пример 2

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

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

Часть IV. Работа с динамическими массивами

Приложение 1. Краткая инструкция по работе в среде Turbo (Borland) Pascal.

Режимы компиляции программы, использующей модули

Приложение 2. Краткая инструкция по работе в режиме консольного приложения средыDelphi. Создание консольного приложения

Сохранение консольного приложения.

Отладка программы

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

Заключение

Библиографические ссылки

Содержание

Часть IV. Работа с динамическими массивами 98

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

program primer2_4;

{вычисление минимальных значений элементов строк матрицы a[3*5]}

Type matr=array[1..3,1..5] of real;

mas= array[1..3] of real;

Var a:matr; min:mas; {далее-раздел процедур и функций}

Procedure minstr;

Var i,j:integer;

Begin

for i:=1 to 3 do

begin

min[i]:=a[i,1];

for j:=1 to 5 do

if min[i]>a[i,j] then

min[i]:=a[i,j];

end

End{minstr};

Procedure matrin;

Var i,j:integer;

Begin

Writeln('Введите матрицу размером 3*5');

for i:=1 to 3 do

for j:=1 to 5 do

read(a[i,j]);

readln;

End{matrin};

Procedure masout;

Var i:integer;

Begin

Writeln('Минимальные значения строк матрицы ');

for i:=1 to 3 do

writeln(' ',min[i]);

End{masout};

{далее - раздел действий программы}

Begin

matrin;

minstr;

masout;

readln

End.

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

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

  2. усложняет автономную отладку подпрограмм.

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


2.5. Использование подпрограммы в качестве параметра другой подпрограммы

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

Классические примеры таких ситуаций дают численные методы. В подпрограммах численных методов (вычисления определенного интеграла, нахождения экстремумов и нулей функций, вывода графиков, линий уровня, таблиц функций) обрабатываемые функции задаются как параметры. Средства для использования параметров-подпрограмм имеются во всех алгоритмических языках, предназначенных для решения вычислительных задач (СИ, Фортран, ПЛ/1).

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

TYPE PROC1=PROCEDURE(a,b,c:real; var d:integer);

FUNC1=FUNCTION : REAL;

G=FUNCTION (x,y,z:real);

Подпрограмма-фактический параметр должна соответствовать процедурному типу формального параметра, т.е. иметь такой же заголовок с точностью до обозначений.

Замечания

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

  2. В языках BorlandPascalиTurboPascalподпрограммы, используемые как фактические параметры, должны компилироваться с использованием "дальней модели памяти" , поэтому в программу надо включить директивы компилятора {$F+} и {$F-} или поставить стандартную директиву far (для версий начиная сTurboPascal6.0) cразу за заголовком подпрограммы.

Пример 1.Решение двух уравнений на отрезке [0,3] c погрешностью 0.0001.

program primer2_5;

Type fn=function(x:real):real;{функциональный тип, задающий

вид уравнения}

Var r1,r2:real; {коpни уpавнений}

{$F+} {опция дальнего вызова, в ObjectPascalне надо}

function fx1(x:real):real; {fx1 задает первое уравнение}

begin

fx1:=1.0/(1.2*sin(x)/cos(x)+sqrt(x+1));

end;

function fx2(x:real):real; {fx2 задает второе уравнение}

begin

fx2:=(exp(-x)-sqrt(exp(x))+3.7)/3.0;

end;

{$F-} { В Object Pascal не надо }

{root– подпрограмма вычисления корня}

{уравнения fx(x)=0 на [a,b] c погрешн.е методом простых итераций}

function root(fx:fn; a,b,e:real):real;

{fx - функция – формальный параметр}

var x,x0:real;

begin

x0:=(a+b)/2; x:=fx(x0);

while abs(x-x0)>e do

begin


x0:=x; x:=fx(x0);

end;

root:=x;

end;

begin

r1:=root(fx1,0,3,1.0e-4);{fx1 - функция - факт. параметр}

r2:=root(fx2,0,3,1.0e-4);{fx2 - функция - факт. параметр}

writeln('Коpень пеpвого уpавнения r1=',r1:7:4);

writeln('Коpень втоpого уpавнения r2=',r2:7:4);

end.

Пример 2. Предположим, что функцияrootрешения уравнения из примера 1 является библиотечной подпрограммой и не подлежит изменению. Пусть надо решить уравнение, заданное с точностью до параметраp,например, p задается вводом:

xp cosx=0.

В программе надо обратиться к root, подставив вместо формального параметраfxфактический

g(x,p)= xp cosx.

Но g имеет два аргумента, аfx один. Выход из этой ситуации состоит в том, чтобы параметрр считать глобальным. Программа решения уравнения приведена ниже; предполагается, что типfn и функцияrootимеются в подключенной к программе библиотеке.

Varp{глобальная переменная для функцииg},

E{погрешность решения уравнения},A,B{границы отрезка}:real;

function g(x:real):real;

begin

g:=x-p*cos(x)

end;

begin

writeln(‘Введите p,A,B,E’);

readln (p,A,B,E );

writeln(‘ корень уравнения равен ‘,root(g,A,B,E));

readln

end.


2.6. Модули

2.6.1. Общие сведения

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

Для обеспечения возможности компиляции программы по частям в реализациях Паскаля, начиная с Турбо Паскаля, введено новое средство языка - модули (Units).

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

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

2.6.2. Структура модуля

Схематично структуру модуля можно изобразить следующим образом:

UNITимя_модуля;

INTERFACE

интерфейсная_часть

IMPLEMENTATION

исполняемая_часть

[BEGIN

инициирующая_часть]

END.

Модуль начинается ключевым словом UNIT, после которого пишется имя модуля, и заканчивается словомЕND, после которого ставится точка.

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

Вторая часть содержит описания подпрограмм, заголовки которых находятся в интерфейсной части. Она называется исполняемой, так как содержит исполняемые операторы подпрограмм, и начинается с ключевого слова IMPLEMENTATION, которое переводится с английского как "исполнение". Содержание второй части доступно только данному модулю и не может использоваться другими программными единицами, поэтому ее также называют невидимой(для других программных единиц). В частиIMPLEMENTATIONв заголовках подпрограмм могут отсутствовать списки формальных параметров, так как они имеются в частиINTERFACE.


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

Пример

Ниже приведен модуль VECTOR, позволяющий осуществлять некоторые операции над векторами. Число компонент вектора не превышает 10. Смысл процедур поясняется в комментариях.

Unit VECTOR; {операции над векторами}

INTERFACE

Type AR=Array[1..10] of real;

Function Scpr(Var a,b:Ar;N:Integer):Real;

{вычисление скалярного произведения двух векторов}

Function Lngth(Var a:Ar; N:Integer):Real;

{вычисление длины вектора}

Function UngleRad(Var a,b:Ar; N:Integer):Real;

{вычисление угла между двумя векторами в радианах}

Function UngleGr(Var a,b:Ar;N:Integer):Real;

{вычисление угла между двумя векторами в градусах}

Procedure Sum(Var a,b,c:Ar;N:Integer);

{вычисление суммы двух векторов}

Procedure Inp(Var a:Ar; N:Integer);

{ввод координат вектора}

IMPLEMENTATION

Function Scpr;

Var I:Integer; S:Real;

Begin

S:=0;

For i:=1 To N Do

S:=S+a[i]*b[i];

Scpr:=S;

End;

Function Lngth;

Begin

Lngth:=Sqrt(Scpr(a,a,N));

End;

Function UngleRad;

Var x:Real;

Begin

x:=Scpr(a,b,N)/Lngth(a,N)/Lngth(B,N);

If x=0 then UngleRad:=pi/2

Else

UngleRad:=ArcTan(Sqrt(1-x*x)/x);

End;

Function UngleGr;

Begin

UngleGr:=UngleRad(a,b,3)/pi*180;

End;

Procedure Sum;

Var i:Integer;

Begin

For i:=1 to N Do

c[i]:=a[i]+b[i]

End;

Procedure Inp;

Var I:Integer;

Begin

For i:=1 To N Do

Read(a[i]);

Readln

End;

End.

В Объектном Паскале допустима рассмотренная структура модуля. Но можно также отмечать начало инициализирующей части ключевым словом INITIALIZATION(вместоBEGIN). Модуль Объекьного Паскаля может иметь завершающую часть, которая содержит операторы, выполняемые при завершении программы, и начинается со словаFINALIZATION.

Имя файла, содержащего исходный текст модуля, должно совпадать с именем модуля и иметь расширение .PAS(для примера предыдущего раздела VECTOR.pas). Результатом компиляции будет файл с тем же именем. Расширение откомпилированного файла .TPU(например,VECTOR.tpu) для средTurboиBorlandPascalи.DCUдляDelphi.