Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Вычисление значения арифметического выражения





Тема 1

Основы построения программы

Вычисление значения арифметического выражения

Алфавит языка Turbo Pascal

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

- латинские буквы: а, b, с, …, z;

- русские буквы: а, б, в, …, я;

- арабские цифры: 0,1, 2, …, 9;

- знаки действий: + – * / = > <;

- специальные символы: ',.:; () [ ] {}.

- зарезервированные слова:

 

and else of type
array end or until
begin file procedure uses
case for program var
const function record while
div if repeat with
do mod then  
downto not to  

Русские буквы используются только в значениях текстовых констант и в комментариях.

Переменные

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

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

alfa,suml, n 22, a 1 b 2 c 3.

Система Turbo Pascal латинские строчные и прописные буквы воспринимает одинаково.

 

Типы переменных и констант

В системе Turbo Pascal для описания числовых переменных и констант используются следующие стандартные типы:

− действительных чисел (real);

− символьный тип (char);

− строковый (string);

− логический (boolean);

− целые типы.

Целые типы данных языка Turbo Pascal

 

Название Диапазон значений Длина в байтах
Byte   0..255
ShortInt   -128..127
Word   0..65535
Integer   -32768..32767
LongInt   -2147483648..2147483647

 

Границы изменения: для действительного типа (real)

от –10–39 до 1038,

Константа – величина, которая в процессе выполнения программы не изменяет своего значения.

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

Вместо десятичной запятой при записи действительной константы ставится десятичная точка. Можно записывать числа «в форме Е (или е)». Символ Е (или е) означает десятичный порядок и имеет смысл «умножить на 10 в степени», например, число –3,1*10–4 в Паскале записывают как –3.1 е –4.

Примеры:

целые числа:

0, –13, 783, –12345, 2 е + 3;

действительные числа:

3.1415, –1.567, 0.08631,

– 0.13 е – 3, З.14 Е 5.

Стандартные математические функции, используемые

В Turbo Pascal

 

Запись в математике Запись в Паскале
abs(x)
sqrt(x)
x 2 sqr(x)
ex exp(x)
ln x ln(x)
sin x sin(x)
cos x cos(x)
arctg x arctan(x)

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

Арифметические выражения

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

Правила построения арифметических выражений:

- знак операции следует писать обязательно;

- два знака арифметических операций не могут быть записаны друг за другом (следует использовать скобки);

- количество открывающихся и закрывающихся ско­бок должно быть одинаковым;

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

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

в Turbo Pascal:

– если знаменатель является произведением, то есть

, то возможны два варианта записи: a /(c * d) или a / c / d.

Для переменных и констант целого типа в Turbo Pascal существуют две операции деления: mod (нахождение остатка от деления) и div (вычисление целой части частного), например,

20 div 6 = 3 и 20 mod 6 = 2.

В Turbo Pascal отсутствуют возведение в степень, извлечение корня и вычисление логарифма c произвольным основанием. Если арифметическое выражение содержит хa (х> 0), аx (а> 0) или log a х, то для их вычисления используют известные формулы, которые можно записать с применением стандартных функций языка Turbo Pascal.

 

exp (x* ln (a))
exp (a* ln (x))
ln (x) / ln (a)

 

Некоторые целые степени удобнее записывать непосредственно или использовать функции извлечения квадратного корня и возведения в квадрат:

х*х
х * х * х
x *sqr(sqr(x))
sqrt(sqrt(x))

Операторы

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

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

Все операторы условно можно разбить на группы: простые, сложные (структурные), вспомогательные.

Простые операторы:

− оператор присваивания,

− оператор безусловного перехода,

− оператор обращения к процедуре.

Структурными операторами называются такие, которые состоят из других операторов.

Структурные операторы:

− условный оператор,

− оператор варианта,

− операторы цикла,

− оператор присоединения.

Вспомогательные операторы:

− пустой оператор (простой),

− составной оператор (структурный).

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

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

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

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

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

Для задания такого действия и служит оператор присваивания, который относится к числу основных операторов:

Переменная := выражение;

где := – знак присваивания.

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

Примеры:

Var a,b:integer;

x:real; c:boolean; s,s 1:char;

........................

a:=5; {Значение переменной становится равным пяти}

b:= a; {Значение переменной в становится равным

значению переменной а }

b:= b +1; {Значение переменной в увеличивается на 1}

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

Переменной типа real можно присвоить значение выражения типа real или integer.

Переменной типа integer можно присвоить значение выражения только лишь типа integer.

a:= b /10; { a – целого типа, b /10 –выражение действительного типа, поэтому оператор неверен}

x:= a mod 2;

c:=(a >3) and (a <5);

Компьютер проверяет соответствие типов и при несоответствии типов выдает сообщение об ошибке.

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

 

Тема 2

Логические выражения

Условный оператор

Логические выражения состоят из переменных и констант логического типа, логических операций и операций отношений. Логическое выражение может принимать значения true (истина) или false (ложь).

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

Операции отношения:

 

< меньше
< = меньше или равно
> больше
> = больше или равно
= равно
<> не равно.

 

В Паскале определены три логические операции:

 

not отрицание (не)
and логическое умножение (и)
or логическое сложение (или)

 

Эти операции применимы только к логическим операндам и дают результат того же типа.

Логическое умножение (A and В) дает значение true только в том случае, если и А, и В имеют значение true. Если хотя бы один операнд (или оба) имеет значение false, то результат также имеет значение false.

Логическое сложение (A or В) дает значение false в том и только в том случае, если А и В одновременно имеют значение false. Если хотя бы один операнд (или оба) имеет значение true, то результат также име­ет значение true.

Операция отрицания (not A) дает значение false, если А имеет значение true и, наоборот, дает значение true, если false.

В логическом выражении принят следующий приоритет операций:

 

1. not (выполняется в первую очередь).

2. *, /, div, mod, and.

3. +, ~, or.

4. <, <=, =, <>, >, >=.

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

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

Примеры:

 

(x >= a) and (x <= b)
(x < a) or (x > b)
или
not ((x >= a) and (x <= b))

 

 

Запишем выражения, зависящие от координат точки (x,y) и принимающее значение TRUE, если точка принадлежит заштрихованной области, и FALSE, если не принадлежит.

 

(x >=3) and (x <=7) and (y >=-1) and (y <=2)
 
y -2 2 x

Условный оператор

В Turbo Pascal имеется две формы условного оператора: полная и сокращенная. Полный условный оператор имеет вид:

if A then S 1 else S 2;

где if (если), then (то), else (иначе) – служебные слова,

А –логическое выражение,

S 1, S 2– операторы.

Перед then и else нельзя ставить точку с запятой.

Если логическое выражение А принимает значение true, то выполняется оператор S 1, в противном случае выполняется оператор S 2. Пример:

if x > 0 then y:= ln(x) else y:=1;

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

Составной оператор – это последовательность операторов, взятая в операторные скобки beginend, т. е. это конструкция вида

begin S 1;

S 2;

...;

Sk

end;

где S 1, S 2,…, Sk – операторы.

Пример: if abs(x) <= abs(y) then

begin z:= x + y;

write(z:5:2)

end

else

begin z:= sqr(x) – sqr(y);

write(z:5:2)

end;

Краткий условный оператор имеет вид:

if A then S;

где А – логическое выражение,

S –оператор.

Если выполняется условие (логическое выражение принимает значение true), то выполняется оператор S, иначе управление передается оператору, следующему за данным условным оператором.

 

Пример: if у < 1 then z:= ехр(у);

Пример: if(a > b)and (x > 0) then

begin с:= аb;

у:= х + 2

end;

 

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

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

 

Пример 1. Найти максимальное из значений двух переменных, т. Е. х = мах(a, b).

If а > b then х:= a else х:= b;

 

Пример 2. Найти максимальное из значений трех переменных, то есть х = мах(а, b, с).

If a > b then x:= a else x:= b;

if c > x then x:= c.

Примечание. При нахождении минимального значения знак неравенства меняется на противоположный.

Пример выполнения задания 2

Даны три целых числа A, B и C. Определить значения переменных X Y, Z. Вывести их на экран монитора.

Пусть D l и D 2 – заштрихованные части плоскости (см. рис.1) и пусть U определяется как функция X и Y. Вывести на экран значение функции U. Вывод результатов оформить пояснительным текстом.

Если то

иначе

Вычислить значение функции U по правилу:

 

 

Записи (x, y) Î D l, (x, y) Î D 2

означают, что точка с координатами (х, у) принадлежит области D 1или D 2.

Рис. 1

Program lab2;

uses crt;

var u, x, y, z:real;

a, b, c:integer;

begin clrscr;

writeln (‘Введите a, b, c ¢);

readln (a, b, c);

if a + b > с then begin x:= a + b;

y:= sqrt(a * a + b * b);

z:= ln(b + c)

end

else

begin x:= aс;

y:= a * ac * c;

z:=ln(a*c)

end;

writeln (‘ x =’, x:5:2,’ y =’, y:5:2,’ z =’, z:5:2)

if (y <=2* x /3 + 2) and (y >= x * x) then и:= x * x

else

if (sqrt(sqr(x) + sqr(y)) >= 2)

and (sqrt(sqr(x) + sqr(y))<=3) and (y < 0)

then u:= x + y

else u:= 0;

writeln(‘ u =’, u:7:2);

readkey

end.


Тема 3

Тема 4

Оператор цикла с параметром

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

for к:= n 1to n 2do S;

или

for к:= п 1downto n 2do S;

где к – параметр цикла;

пп 2 –выражения, задающие начальное и конечное значения параметра цикла соответственно;

S –простой или составной оператор (тело цикла).

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

Шаг параметра цикла к при выполнении оператора цикла с параметром для целого типа равен 1 (для цикла to) и –1 (для цикла downto).

Следует запомнить и то, что для обоих вариантов записи цикла с параметром справедливо: если начальное и конечное значения равны, то тело цикла (оператор S) выполнится один раз.

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

Для оператора цикла с параметром имеются некоторые ограничения.

¾ Оператор цикла с параметром применяется, если число повторений тела цикла заранее известно.

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

¾ Для каждого значения параметра цикл выполняется только 1 раз.

¾ Значения параметра цикла запрещено изменять операторами в теле цикла.

Пример1. Вычислить сумму квадратов натуральных чисел с 1 до 10.

S:= 0;

for i:=1 to 10 do s:= s +sqr (i);

Примечание. Произведение n последовательных натуральных чисел обозначают n! (произносится n факториал), то есть .

Пример 2.

Вычислить 8!.

P:=1;

for i:=2 to 8 do p:= p * i;

Заметим так же, что параметр цикла может и не использоваться в теле цикла, так что основное его назначение – это управление числом повторений цикла.

Пример 3

Значение y=x n, где n >=0 – целое, можно вычислить по следующему алгоритму: предварительно положить y =1, а затем n раз домножить это значение на x:

Readln(n);

Readln(x);

y:=1;

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

Как видно, здесь параметр цикла i служит лишь для того, чтобы тело цикла (оператор y:= y * x) выполнилось нужное число раз.

Пример 4.

Вычислить сумму .

sum:= 0;

for i:=1 to 12 do sum:= sum +(sqr (i)+1)/(i * i*i);

Пример 5.

Вычислить произведение .

P:= 1;

for i:=1 to 7 do p:= p*i /(i* i-2* i+5);

В теле цикла с параметром среди операторов может находиться и оператор цикла, такие циклы называются вложенными (внешний и внутренний циклы).

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

Пример выполнения задания 4

Вычислить значение выражения

.

program lab4;

uses crt;

var c,p,sum:real;

k,i:integer;

begin p:=1;

for k:=1 to 5 do

begin sum:=0; a:=1; b:=1;

for i:=1 to k do

begin a:= a *2; {вычисляем 2 i }

b:= b *I; {вычисляем i!}

sum:= sum + a/b; {вычисляем сумму}

end;

p:= p *(sqr(k +2)+ sum; {вычисляем произведение}

end;

writeln(‘ p =’, p:0:2);

readkey;

end.

 

Тема 5

Тема 6

Задачи с использованием

Тема 7

Организация программ

С использованием функций

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

Описание функции содержится в главной программе после раздела описания переменных (var) и перед началом (begin) программы.

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

function имя(формальные параметры):тип результата;

Раздел описаний

Begin

Раздел операторов

end;

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

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

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

Например, описания вычисления функции тангенса угла:

 

function tg(x:real): real;

begin

tg:= sin(x)/cos(x)

end;

 

Вызов и выполнение функции производится при вычислении указателя функции:

имя функции(фактические параметры).

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

¾ по порядку следования,

¾ количеству,

¾ типам.

Например, вызов ранее описанной функции tg можно произвести так:

a:= tg(y);

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

 

Пример. Заданы стороны двух треугольников MNK (стороны m, n, k) и PLF (стороны p, l, f). Переменной s присвоить значение –1, если площадь треугольника MNK меньше или равнa площади треугольника PLF, и значение 1 в противном случае.

Вычисление площади треугольников по формуле Герона оформить в виде функции pl.

Примечание. Формула Герона для вычисления площади треугольника со сторонами a, b, c:

,

где , где p – полупериметр треугольника.

program pr1;

uses crt;

var m, n, k, l, p, f, h, q: real;

s: integer;

function pl (a, b, c: real): real;

var r: real;

begin

r:= (a + b + c) / 2;

pl:= sqrt (r *(r – a)*(r – b)*(r – c));

end;

begin clrscr;

writeln(‘Введите стороны m, n, k, p, l, f’);

readln(m, n, k, p, l, f);

h:= pl (m, n, k);

q:= pl (p, l, f);

if h > q then s:= 1 else s:= –1;

writeln('s=', s:3);

readkey;

end.

 

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

Нельзя записать так:

function sum (a: array[1..5] of real; var: real):real;

 

Пример. Пусть заданы два вектора а (8) и b (12). Вычислить для каждого вектора произведение его элементов.

program pr2;

type vect = array [ 1.. 12 ] of real;

var a, b: vect;

ta, tb: real;

..............

function prl (var x: vect; n: integer): real;

var i: integer;

p: real;

begin p:= 1;

for i:= 1 to n do

p:= p * x [ i ];

pr:= p

end;

begin

...............

ta:= pr (a, 8);

tb:= pr (b, 12);

.................

end.

Пример выполнения задания 7

Дана матрица А(4,4).

Вычислить

Z= X1X4 +X2X3 + X3X2+ X4X1,

где Xk – наибольшее из значений элементов K – го столбца матрицы A.

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

 

program lab6;

type matr = array[1..4,1..4] of real;

var a: matr; z: real;

x: array[1..4] of real;

i, j: integer;

function max(y:matr; k: integer): real;

var m: real; i: integer;

begin

m: = a [1, k ];

for i:= 2 to 4 do

if a [ i,k ]> m then m:= a [ i,k ];

max:= m

end;

begin

writeln(‘введите матрицу a(4,4)’);

for i:= 1 to 4 do

for j:= 1 to 4 do read(a [ i,j ]);

for i:= 1 to 4 do x [ i ]:=max(a,i);

z:=0;

for i:= 1 to 4 do

z:= z + x [ i ] * x [5 – i ];

writeln(‘z=’, z:6:2);

readkey;

end.

 

Тема 8

Организация программ

С использованием процедур

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

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

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

Описание процедуры включает заголовок и тело процедуры. Заголовок состоит из зарезервированного слова procedure, идентификатора (имени) процедуры и заключенного в круглые скобки списка формаль­ных параметров с указанием типа каждого параметра.

В общем виде описание процедуры выглядит так:

procedure имя (формальные параметры);

Раздел описаний;

begin

Раздел операторов

end;

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

Нетрудно заметить, что структура процедуры копирует структуру программы в целом, т. е. состоит из заголовка, раздела описаний и раз­дела операторов. Различия лишь в заголовках и в том, что в конце про­цедуры ставится точка с запятой вместо точки в конце программы. Процедура помещается в основной программе после раздела описания переменных и перед разделом операторов основной программы.

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

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

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

Имя процедуры(список фактических параметров).

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

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

Соответствие между фактическими и формальными параметрами должно быть следующим:

– число фактических параметров должно быть равно числу формальных параметров;

– соответствующие фактические и формальные параметры долж­ны совпадать по порядку следования и по типу.

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

 

Параметры

Параметры, перед которыми отсутствует зарезервированное слово var и за которыми следует тип, называются параметрами-значениями. Например, в описании

procedure korrect (s, к: real; x: integer);

s, k, x –параметры-значения. Фактический параметр, соответствующий параметру-значению, может быть выражением соответствующего типа, например:

korrect (2.5, (х + 2)/5, 1);

Изменение формальных параметров-значений не влияет на значе­ния соответствующих фактических параметров.

Параметры, перед которыми следует ключевое слово var и за кото­рым следует тип, называются параметрами-переменными. Например, в описании

procedure obr(var s, k: real; var x: integer);

s, k, x – параметры-переменные. Фактический параметр, соответствую­щий параметру-переменной, может быть только переменной, например:

obr(a, b, k);

где а, b – переменные вещественного типа, а k –целого типа.

Любые изменения в значении формального параметра-переменной отражаются на фактическом параметре.

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

Пример. Решить два квадратных уравнения и ,

считая, что его дискриминант неотрицателен.

program primer1;

uses crt;

var y 1, y 2, z l, z 2: real;

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

procedure sq(a, b, с: real; var x l, x 2: real);

var d: real;

begin

d:= b * b – 4* a * c;

x 1:=(– b + sqrt(d))/(2* a);

х 2:= (b – sqrt(d))/(2* a);

end;

{операторы основной программы}

begin clrscr;

sq(5.7, –1.2, –8.3, y 1, y 2);

sq(2.4, 3.4, –8.4, z l, z 2);

writeln(¢корни y 1, y 2 =¢, y l: 6: 2, y 2: 6: 2);

writeln(¢корни z l, z 2 =¢, z l: 6: 2, z 2: 6: 2);

readkey

end.

 

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

Нельзя (!) записать так:

procedure sum(a: array[l..5] of real; var s: real);

Как же написать одну процедуру для обработки двух массивов одного типа, имеющих разное число элементов?

 

Пример. Вычислить z = (s + к) * (s 1+ k 1), где s, k – сумма и количество отрицательных элементов a (10), s 1, k 1 сумма и количество отрицательных элементов массива b (8).

program primer 2;

uses crt;

type vect = array [1..10] of real;

{Значение верхней границы индекса равно максимальному числу элементов двух массивов а, b }

var а, b: vect; i, k, k 1: integer; s, s 1: real;

{Процедура для фиктивного массива х с числом элементов п, где п <= 10 вычисляет сумму (sum) и количество (col) отрицательных элементов}

 

procedure sumcol (x:vect; n:integer; var sum:real;

var col:integer);

var i:integer;

begin sum:= 0; col:= 0;

for i:=1 to n do

if x [ i ]< 0 then

begin sum:= sum + x [ i ];

соl:= соl + 1;

end

end;

begin clrscr;

writeln(¢ввeдитe массив а(10)¢);

for i:= 1to 10 do read(a[ i ]);

writeln(¢введите массив b (8)¢);

for i:= 1 to 8 do read(b [ i ]);

{в процедуру передается массив а длиной 10}

sumcol(a, 10, s, к);

{в процедуру передается массив b длиной 8}

sumcol(b, 8, s l, k 1);

z:= (s + k)*(s l + k l);

writeln(¢z=¢, z: 6: 2);

readkey

end.

 

Такой подход можно применить и для двумерных массивов.

Пример выполнения задания 8

Даны две вещественные матрицы a (7, 7) и b (5, 5). Из отрица­тельных элементов матрицы а сформировать одномерный массив с, а из отрицательных элементов матрицы b сформировать одномерныймассив d.

В программе использовать три процедуры:

– для ввода матриц,

– для формирования одномерных массивов,

– для вывода одномерных массивов.

program lab5;

uses crt;

const n =7;

type matr=array [1.. n, 1.. n ] of real;

vect = array[l.. n * n ] of real;

var a, b:matr; c, d:vect; t, q:integer;

{процедура для ввода квадратной матрицы с фиктивным именем х с числом строк k и с числом столбцов k, где k <= п}

procedure vvod (var x:matr; k:integer);

var i, j:integer:

begin

for i:=1 to k do

for j:=1 to k do read(x [ i, j ]);

end;

{процедура вывода одномерного массива с фиктивным именем y с числом элементов т, где т <= п*п }

procedure vyvod (y:vect; m:integer);

var i:integer:

begin

for i:= 1to m do write(y [ i ]:6:2);

writeln

end;

{процедура формирования из матрицы х (k, k) одномерного массива у (т)}

procedure form (x:matr; k:integer; var у:vect; var m:integer);

var i,,j:integer:

begin m:=0;

for i:=1 to k do

for j:=1 to k do

if x [ i, j ] <0 then

begin m:= m + 1;

y [ m ]:= x [ i, j ]

end

end;

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

begin clrscr;

writeln (¢введите элементы матрицы а(7, 7)¢);

vvod (a, 7);

writeln (¢введите элементы матрицы b (5, 5)¢);

vvod (b, 5);

form(a, 7, с, t);

writeln (¢вывод одномерного массива с длиной t

элементов¢);

vyvod(c, t);

form (b, 5, d, q);

writeln (¢вывод одномерного массива d длиной

q элементов¢);

vyvod (d, q);

readkey

end.


Тема 9

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

Файловый тип данных, т. е. файл, является в Турбо Паскале единственным типом, посредством которого данные, обрабатываемые программой, могут б







Что делает отдел по эксплуатации и сопровождению ИС? Отвечает за сохранность данных (расписания копирования, копирование и пр.)...

ЧТО ПРОИСХОДИТ, КОГДА МЫ ССОРИМСЯ Не понимая различий, существующих между мужчинами и женщинами, очень легко довести дело до ссоры...

Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем...

Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.