Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование. Вар. 21

.docx
Скачиваний:
3
Добавлен:
02.06.2018
Размер:
98.91 Кб
Скачать

Содержание

1.Параметры - массивы и параметры – строки

3

2.Среда Турбо Паскаль: команды меню Options (Colors)

7

Задача 1.15.

8

Задача 2.13.

11

Задача 3.24.

16

Список использованной литературы

19

1.Параметры-массивы и параметры–строки

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

Procedure S (a: array [1..10] of Real);

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

Если мы хотим передать какой-то элемент массива, то проблем, как правило, не возникает, но если в подпрограмму передается весь массив, то следует первоначально описать его тип. Например:

type

atype = array [1..10]of Real;

Procedure S (a: atype);

.......

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

type

intype = String [15] ;

outype = String [30] ;

Function St (s : intype): outype;

.......

Требование описать любой тип-массив или тип-строку перед объявлением подпрограммы на первый взгляд кажется несущественным. Действительно, в рамках простейших вычислительных задач обычно заранее известна структура всех используемых в программе данных, поэтому статическое описание массивов не вызывает проблем. Однако разработка программных средств универсального назначения связана со значительными трудностями. По существу, речь идет о том, что в Турбо Паскале невозможно использовать в подпрограммах массивы с «плавающими» границами изменения индексов. Например, если разработана программа, обрабатывающая матрицу 10х10 элементов, то для обработки матрицы 9x11 элементов необходимо переопределить тип, т.е. перекомпилировать всю программу (речь идет о статическом описании массивов и передаче их как параметров в подпрограммы). Этот недостаток, как и отсутствие в языке средств обработки исключительных ситуаций (прерываний), унаследован из стандартного Паскаля. Разработчики Турбо Паскаля не рискнули кардинально изменить свойства базового языка, но, тем не менее, включили в него некоторые средства, позволяющие в известной степени смягчить недостатки.

Прежде всего, в среде Турбо Паскаля можно установить режим компиляции, при котором отключается контроль за совпадением длины фактического и формального параметра-строки. Это позволяет легко решить вопрос о передаче подпрограмме строки произвольной длины. При передаче строки меньшего размера формальный параметр будет иметь ту же длину, что и параметр обращения; передача строки большего размера приведет к ее усечению до максимального размера формального параметра. Контроль включается только при передаче строки, объявленной как формальный параметр-переменная. Если, соответствующий параметр объявлен параметром-значением, эта опция игнорируется и длина не контролируется.

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

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

Procedure MyProc(OpenArray: array of Integer);

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

{Иллюстрация использования открытых массивов: программа выводит на экран содержимое двух одномерных массивов разной длины с помощью одной процедуры ArrayPrint}

Procedure ArrayPrint(aArray: array of Integer);

var

k: Integer;

begin

for k := 0 to High(aArray) do

Write(aArray[k]:8);

WriteLn

end;

const

A:array [-1..2] of Integer = (0,1,2,3);

B: array [5..7] of Integer = (4,5,6);

begin

ArrayPrint(A);

ArrayPrint(B)

end.

Как видно из этого примера, фактические границы массивов А и В, передаваемых в качестве параметров вызова процедуре ArrayPrint, не имеют значения. Однако размерность открытых массивов (количество индексов) всегда равна 1 - за этим следит компилятор. Если бы, например, добавили в программу двумерный массив С:

var

С: array [1..3,1..5] of Integer;

то обращение ArrayPrint(С) вызывало бы сообщение об ошибке

Error26: Type mismatch.

(Ошибка 26: Несоответствие типов.)

2.Среда Турбо Паскаль: команды меню Options (Colors)

Опции пункта меню OPTIONS позволяют настраивать среду Турбо-Паскаля удобным для пользователя образом. В пункт меню OPTIONS входят следующие подпункты:

OPTIONS

Compiler

Linker

Environment

Directories

Parameters

Save options

Retrieve options

ENVIRONMENT. При вызове этой опции разворачивается еще одно дополнительное меню, содержащее пять опций.

ENVIRONMENT/Colors. С помощью диалогового окна этой опции можно установить нужную цветовую палитру отдельных элементов среды Турбо Паскаля. В колонке Group указаны следующие элементы среды:

Desktop  - вид экрана;               Watches - окно отладки; 

Menus -  меню;                            Call stack -  окно стека; 

Dialogs - диалоговые окна;         Register - окно регистров; 

Editor -  окна редактора;            Output - окно программы; 

Help - окно помощи;              Compiler - окно компилятора.

В колонке Item детализируются эти элементы (например, цвет рамки окна, цвет основных символов, цвет выделения и т.п.). В поле Foreground задается цвет символов, а в поле Background - цвет фона.

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

OPTIONS/Save. Сохраняет текущую настройку среды в конфигурационном файле.

OPTIONS/Save as. С помощью этой опции из меню Options можно указать каталог и файл, в котором среда будет сохранять свою настройку (по умолчанию это файл TURBO.TP).

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

Вычисления по формулам.

Расчетные формулы

Исходные значения

f = ,

z = mcos(btsin(t))+c .

m = 2,

c = -1,

t = 1,2,

b = 0,7.

Решение.

Блок-схема.

Program zadanie_1;

Var

m, c, t, b, d, f, z: real;

Begin

Writeln (‘Введите m, c, t, b’);

Read (m, c, t, b);

d:= sin(t)/cos(t);

f:= exp((ln(m*d+abs(c*sin(t)))/3);

z:= m*cos(b*t*sin(t))+c;

Writeln (‘f= ‘, f:8:3, ‘z= ‘, z:8:3);

End.

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

Вычислительный процесс разветвляющейся и циклической структур.

Решение.

Блок-схема разветвленной структуры.

Program zadanie_2 (input, output);

Uses Crt;

Var x, y: real;

Begin

Clrscr;

Write (‘Введите x’);

Read (x);

If x<=3.5 then y:= sin(x)*0.4343*ln(x)

else y:= sqr(cos(x));

Write (‘x= ‘, x:8:3, ‘y= ‘, y:8:3);

End.

Блок-схема циклической структуры.

Program zadanie_3;

Uses Crt;

Var x, y, x0, xk, d, deltax: real;

n, i: integer;

Begin

Clrscr;

Writeln (‘Введите x0, xk, deltax’);

Read (x0, xk, deltax);

Writeln (‘Таблица функции y(x)’);

Writeln (‘x y(x)’);

d:= (xk-x0)/deltax;

n:= trunc(d)+1;

x:= x0;

For i:= 1 to n do

begin

If x<=3.5 then y:= sin(x)*0.4343*ln(x)

Else y:= sqr(cos(x));

Writeln (x:10:3, ‘ ‘ , y:10:3);

x:= x+deltax;

end;

End.

3.24. Вычислить значение суммы членов бесконечного ряда с заданной точностью ε. Вывести на печать значение суммы и число членов ряда, вошедших в сумму.

S =

Значение 0,12. ε = 10-4.

Решение.

Используем рекуррентную формулу для получения общего члена ряда:

an+1 = Ran, R = .

an = , an+1 = .

R = .

Блок-схема.

Program zadanie_4 (input, output);

Const Eps=1E-04; x=0.12; pi=3.14;

Var n: integer;

an, Summa: real;

Begin

Summa:= 0; (обнуление начального значения суммы)

n:= 1; (задание номера 1-го члена ряда)

an:= 1; (задание значения 1-го члена ряда)

While abs(an)>=eps do (Проверка условия выполнения цикла)

Begin

Summa:= Summa+an; (накапливание суммы ряда)

n:= n+1 (Подсчет номера следующего члена ряда)

an:= an*cos((n+1)*pi/4)*x/((n+1)*cos(n*pi/4)) (подсчет значения следующего члена ряда)

end;

Writeln (‘Сумма ряда = ‘, Summa: 10:7);

Writeln (‘Последний член ряда = ‘ , an:10:7);

Writeln (‘Число членов ряда = ‘, N);

End.

Список использованной литературы

1.Алексеев В.Е. и др. Вычислительная техника и программирование: Прак. пособие / В.Е. Алексеев, А.С. Ваулин, Г.Б. Петрова; Под ред. А.В. Петрова. – М.: Высш. Шк., 1991.

2.Епанешников А.М., Епанешников В.А. Программирование в среде Turbo Pascal 7.0. – М.: «Диалог МИФИ», 1996. – 228 с.

3.Касьянов В.Н. Курс программирования на Паскале в задачах и упражнениях. – Новосибирск, 2001.

4.Фараонов В.В. Turbo Pascal: Учебное пособие. – СПб.: Питер, 2007. Автоматизированные информационные технологии в экономике: Учебник / Под ред. Г.А. Титаренко. – М.: ЮНИТИ, 2003.

20