Студопедия
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Оператор with

Читайте также:
  1. Begin IF умова 2 THEN оператор 1 end
  2. Begin оператори; end.
  3. Do While операторы.
  4. Else 2-оператор;
  5. SELLECT операторы.FROM сөйлемі.
  6. While цикл операторы
  7. Анализ безопасности оператора работающего на горизонтально-сверлильно-фрезерном станке с ЧПУ Milturn M65
  8. Анализ деятельности оператора
  9. Арифметические операторы
  10. Арифметические операторы и операторы присваивания

В операціях над записами оператор 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.




Дата добавления: 2015-01-29; просмотров: 104 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2025 год. (0.013 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав