Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсова робота1_1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
287 Кб
Скачать
☆

7.10 Оператор with

В операціях над записами оператор with зручно використовувати для короткого звернення до полів запису. В операторі with до полів однієї або більш конкретних змінних типу запис можна звертатися, використовуючи тільки ідентифікатори полів.

Візьмемо наступний опис:

type

TDate = record

Day : Integer:

Month : Integer;

Year : Integer:

end;

var OrderDate: TDate;

З урахуванням даного опису наведемо приклад оператора with:

with OrderDate do

if Month = 12 then

begin

Month := 1;

Year := Year + 1

end else

Month := Month + 1;

Це еквівалентно наступному:

if OrderDate.Month = 12 then

begin

OrderDate.Month := 1;

OrderDate.Year := TDate.Year + 1

end

else

Date.month := TDate.Month + 1;

В операторі with спочатку проводиться перевірка кожного посилання на змінну, а саме: чи можна її інтерпретувати, як поле записей. Якщо це так, то вона завжди інтерпретується саме таким чином, навіть якщо є доступ до змінної з тим же ім'ям.

Допустимо описати наступні тип та змінні:

type

TPoint = record

x,y: Integer;

end;

var

x: Point;

у: Integer;

В цьому випадку і до x, і до у можна звертатися, як до змінної або як до поля запису. В операторі:

with x do

begin

x := 10;

у := 25;

end;

x між ключовими словами with і dо відноситься до змінної типу покажчик, а в складовому операторі x і у посилаються на x.x і y.y.

Оператор:

with V1,V2...Vn do s;

еквівалентний операторам:

with V1 do

with V2 do

...

with Vn do

S;

В двох випадках, якщо Vn є полем і v1, і v2, то вона інтерпретується як v2.Vn, а не як v1.Vn.

Якщо вибірка змінної типу запис пов'язана з індексацією масиву або покажчика, то ці дії проводяться до того, як виконуватиметься складовий оператор.

Іі. Постановка задачі

Частина 1:

1. Обчислити елементи квадратної матриці за формулою:

2 . Використовуючи елементи матриці обчислити елементи вектора .

3. Обчислити значення функції G за формулою

Частина 2:

Ііі. Алгоритм розв’язання задачі

Частина 1:

  1. Складемо блок-схему обчислення елементів матриці за формулою

2.Складемо блок-схему підпрограми формування вектора , кожен елемент якої визначається, як різниця максимальних і мінімальних елементів рядків матриці. При цьому процедури M (m) знаходження максимального (мінімального) елементів i-о рядка матриці A винесено для наглядності на окрему блок-схему.

3. Складемо блок-схему підпрограми обчислення значення функції G за формулою:

IV. Програмні реалізації алгоритму

Частина 1: Програма написана на мові Паскаль. Дана програма призначена для обчислення елементів матриці, вектора та значення функції за формулами згідно варіанту. Результатами виконання програми є відповідні значення елементів матриці, вектора та значення функції.

Program kursova;

uses Crt;

type matrix = array[1..5, 1..5] of real;

type vector = array[1..5] of real;

procedure m_init(var B: matrix);

var i,j: byte;

begin

for i:=1 to 5 do

for j:=1 to 5 do

B[i,j]:=ln (i*i+j*j*j)-ln(abs(sin(i)+cos(i)))/ln(10);

end;

procedure m_print (B: matrix);

var i,j: byte;

begin writeln;

for j:=1 to 5 do

begin

for j:=1 to 5 do write('a[',i,',',j,']=',B[i,j]:4:2); writeln; writeln;

end;

end;

function v_max(k:byte; B: matrix): real;

var m: real; i: byte;

begin

m:=B[k,1];

for i:=2 to 5 do

if m< B[k,1] then m:= B[k,1];

v_max:=m

end;

function v_min(k:byte; B: matrix): real;

var m: real; i: byte;

begin

m:=B[k,1];

for i:=2 to 5 do

if m>B[k,1] then m:= B[k,1];

v_min:=m

end;

procedure m_print (Y:vector);

var i,j: byte;

begin writeln;

for i:=1 to 5 do writeln(' x[',i,']',Y[i]:7:4);

end;

function prod(i:byte; Y:vector): real;

var k: byte; p:real;

begin;

p:=Y[1];

for k:=2 to i do p:=p* Y[1];

prod:=p;

end;

var A: matrix;

i,j: byte;

X: vector;

G,s: real;

begin;

clrscr;

m_init(A);

m_print(A);

for i:=1 to 5 do X[i]:=v_max(i,A)-v_min(i,A);

v_print(X);

s:=0;

for i:=1 to 5 do s:=s+abs(X[i]*X[i]-prod(i,X));

writeln;

G:=exp(ln(s)/3);

write(' G =',G:7:4);

end.