Вычисление параметра вектора 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Вычисление параметра вектора



 

Вычислить сумму положительных элементов третьей четверти массива

 


 
 

Алгоритм функции sum

       
 
   
 


n,f[i..n]

 

 
 

 


нет

 

да

       
 
   
s=s+fi
 

 


 
 

 


sum

 

Таблица переменных

 

Имя Тип Назначение Параметр
n     целый размерность формальный
f[1..n] вектор
i параметр цикла локальный
s вспомогательное
sum имя функции  

function sum(n:integer;f:vect):integer;

var i,s:integer;

begin

s:=0;

for i:=round(n/2)+1 to round(3*n/4) do if f[i] > 0 then s:=s+f[i];

sum:=s;

end;{sum}

 

Определение параметра вектора

 
 
Определить наибольший элемент среди нечетных по номеру элементов второй трети массива

 

 
 


Алгоритм функции max

 
 


n, f[1..n]

       
   
 
 

 

 


нет

 
 


 

да

нет

           
   
max=mx
   
 
 
 

 


да

 
 
mx=fi


ma max

Таблица переменных

Имя Тип Назначение Параметр
n целый размерность формальный
f[1..n] вещественный вектор
i   целый параметр цикла   локальный
mx вспомогательное
max имя функции  

function max(n:integer; f:vect):integer;

var i,mx:integer;

begin

mx:=-1000;

for i:=round(n/3)+1 to round(2*n/3) do

if odd(i) then if f[i] > mx then mx:=f[i];

max:=mx;

end{max};

4.2.3.4. Упорядочение элементов вектора

 
 
Упорядочить нечетные по номеру элементы второй половины массива по убыванию квадратов значений

 

 


Алгоритм процедуры porjadok

       
 
   
 


n,f[1..n]

 
 

 


       
   
 
 


нет f[1..n]

 

да

       
   
 
 

 

 


 
 

 


Нет нет

           
 
   
 
   
 

 


да да

 
 
c=fi fi=fk fk=c


k=j
нет да

       
   
 
 

 


Таблица переменных

Имя Тип Назначение Параметр
N   целый размерность формальный
f[1..n] вектор
i, j параметр цикла локальный
k, c вспомогательное

 

 

procedure porjadok(n:integer;var f:vect);

var i,k,j,c:integer;

begin

for i:=round(n/2)+1 to n-1 do

if odd(i) then

begin k:=i;

for j:=i+2 to n do

if odd(j) then if sqr(f[j]) > sqr(f[k]) then k:=j;

if i <> k then

begin

c:=f[i];

f[i]:=f[k];

f[k]:=c;

end;

end;

end {porjadok};

 

4.2.3.5. Вывод информации

 

Алгоритм процедуры writevect

 
 


n,k,f [1..n]

 
 

 

 


 

 

нет

       
   
 
 

 


да

       
   
 
 

 


Таблица результатов

Имя Тип Назначение Параметр
n   целый размерность формальный
f[1..n] вектор
i параметр цикла локальный
k кол-во строк

 

procedure writevect(n,k:integer; f:vect);

var i:integer;

begin

for i:=1 to n do

begin

write(f[i]:5);if i mod round(n/k)=0 then writeln;

end;

writeln;

end {writevect};

 

Паскаль-программа

 

program kurslab1;{Хасанов А. А. ст.гр. АГ 98-02 вар. 111}

uses crt;

type vect=array[1..99] of integer;

var f: vect; n,a,b,s,mx:integer;

 

{-----------Часть 1--------------}

procedure vector(n,a,b:integer;var f:vect);

var i:integer;

begin

for i:=1 to n do f[i]:=round((b-a)*random(100)/100+a);

end;

 

{-----------Часть 2--------------}

function sum(n:integer;f:vect):integer;

var i,s:integer;

begin

s:=0;

for i:=round(n/2)+1 to round(3*n/4) do

if f[i] > 0 then s:=s+f[i];

sum:=s;

end;

 

 

{-----------Часть 3-------------}

function max(n:integer; f:vect):integer;

var i,mx:integer;

 

begin

mx:=-1000;

for i:=round(n/3)+1 to round(2*n/3) do

if odd(i) then

if f[i] > mx then mx:=f[i];

max:=mx;

end;

 

{-----------Часть 4----------------}

procedure porjadok(n:integer;var f:vect);

var k,j,c:integer;

begin

for i:=round(n/2)+1 to n-1 do

if odd(i) then

begin k:=i;

for j:=i+2 to n do

if odd(j) then

if sqr(f[j]) > sqr(f[k]) then k:=j;

if i <> k then

begin

c:=f[i];

f[i]:=f[k];

f[k]:=c;

end;

end;

end;

 

{--------Вывод вектора--------------}

procedure writevect(n,k:integer; f:vect);

var i:integer;

begin

for i:=1 to n do

begin

write(f[i]:5);if i mod round(n/k)=0 then

writeln;

end;

if n mod k <> 0 then writeln;

end;

 

{----------Основная программа-----}

begin

clrscr;

write('Введите размерность вектора ');readln(n);

write('Интервал значений от ');read(a);

write('до ');readln(b);

writeln;writeln(' ':25,’Исходные данные’);

writeln('Размерность вектора n = ',n);

writeln('Интервал [',a,',',b,']');writeln;

writeln(' ':26,'Результаты расчета');

randomize;

vector(n,a,b,f);

writeln('--------------------Часть 1---------------------------');

writeln(‘Вектор F из ‘,n,’ элементов в интервале [‘,a,’,’,b,’], полученных’);

writeln(‘при помощи генератора случайных чисел’);

writevect(n,4,f);

writeln('--------------------Часть 2---------------------------');

writeln('Сумма положительных элементов третьей четверти вектора');

s:=sum(n,f); writeln(‘ s=’,s);

writeln('--------------------Часть 3---------------------------');

writeln('Наибольший элемент второй трети среди нечетных по номеру');

writevect(n,3,f);

mx:=max(n,f);writeln(‘ mx=’,mx);

writeln('--------------------Часть 4---------------------------');

writeln(‘Вектор F с упорядоченными по убыванию квадратов значений’);

writeln(‘нечетными по номеру элементами второй половины’);

porjadok(n,f);

writeln('Упорядоченный вектор F’);

writevect(n,2,f);

writeln('----------------Конец задачи-----------------------');

end.

 

3.4. Распечатка результатов

 

Исходные данные

 

Размерность вектора n = 30

Интервал [-7,8]

Результаты расчета

 

--------------------------------Часть 1-------------------------------

 

Вектор F из 30 элементов в интервале [-7,8], полученных

при помощи генератора случайных чисел

 

  -6 -6     -4    
-4 -4 -6          
          -6    
-3       -2 -2    

 

---------------------------------Часть 2------------------------------

 

Сумма положительных элементов третьей четверти вектора

 

s=40

 

---------------------------------Часть 3------------------------------

 

Наибольший элемент второй трети среди нечетных по номеру

 

  -6 -6     -4     -4 -4
-6                  
  -6     -3       -2 -2

 

mх=7

 

---------------------------------Часть 4------------------------------

 

Вектор F с упорядоченными по убыванию квадратов значений нечетными по номеру элементами второй половины

 

  -6 -6     -4     -4 -4 -6        
            -6         -3   -2 -2

 

-----------------------------Конец задачи---------------------------

 

 

4. Задание 2. Обработка двумерных массивов.

4.1. Постановка задачи.

Часть 1. Вычислить элементы матрицы А по формуле

 

, i, , где

; ; .

Часть 2. Используя известную матрицу А, вычислить вектор () как

наибольший среди принадлежащих отрезку [-10,10] элементов i -го

столбца.

Часть 3. Вычислить Z= ,

где , - вектор;

, , - квадратная матрица;

, - единичная матрица;

– транспонированная матрица , , ;

– инвенторованный вектор , .

 

Часть 4. Упорядочить по убыванию положительные элементы последнего

столбца матрицы А.

 

Часть 5. Вычислить значение функции

4.2. Алгоритм решения.

4.2.1. Структура алгоритма.

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

- вычисление матрицы – процедура matrica (n, a);

- вычисление вектора – процедура vector (n, a, x);

- матричные операции – процедура matoper (n, x, a, z);

- сортировка массива – процедура porjadok (n, a, b);

- вычисление значение функции - функция – znachf (n,a,x),

где n – размерность матрицы, вектора (вводится в начале);

A,B,Z– квадратные матрицы размерности n;

X – вектор из n элементов.

 

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

- матрицы - writmatr (’A’, n, a);

- вектора - writvect (’X’, n, x);

‘A’, ‘X’ – имена соответственно матрицы A, вектора X.

 

4.2.2. Алгоритм основной программы

 

 

 

 

 


Таблица переменных

 

Имя Тип Назначение Параметр
n целый размерность глобальный
a[1..n,1..n]   вещественный матрица
x[1..n] вектор
z[1..n,1..n] матрица
y скаляр
simbol символьный символ
namber целый номер
b[1..n,1..n] вещественный матрица

begin{Основная программа}

clrscr;

write(' Введите размерность матрица n ');readln(n);

writeln(' ':25,'Исходные данные');

writeln('размерность матрицы n=',n);

writeln(' ':20,'результаты расчетов');

writeln('------------------ часть 1--------------------------');

writeln('Вычислить элементы матрицы А по формуле');

matrica(n,a);writmatr('А',n,a);

writeln('------------------- часть 2--------------------------');

writeln('Из матрицы А получить вектор Х, ');

writeln('элемент которого х[i] определяется как наибольший ');

writeln('среди принадлежащих отрезку [-10,10] ');

writeln('элементов i-го столбца. ');

vector(n,a,x);writevect('X',n,x);

writeln('------------------- часть 3--------------------------');

writeln(' ':7, 'Вычислить Z=(At-E)(A-E)(X-Xи)');

matoper(n,a,x,z);

write('Результат: ');

writmatr('Z',n,z);

writeln('------------------- часть 4--------------------------');

writeln('Упорядочить по убыванию положительные элементы');

writeln('последнего столбца мартицы А');

porjadok(n,a,b);

writmatr('B',n,b);

writeln('-------------------- часть 5------------------------ ');

writeln('Вычислить значение функции y=y1+y2');

y:=znachf(n,a,x);writeln('y=',y:6:3);

writeln('------------------конец задачи---------------------');

end.

 

4.2.3. Алгоритмы подпрограмм.

 

4.2.3.1. Получение матрицы.

 
 
Вычислить матрицу А по формуле , i, , где ; ; .

 

 


Алгоритм процедуры matrica

   
 
 
 

 

 


Таблица переменных.

 

Имя Тип Название Параметр
n   целый размерность матрицы формальный
a[1..n,1..n]   вещественный матрица
i, j   целый параметр цикла локальный

 

procedure matrica(n:integer;var a:matr);

var i,j:integer; f1,f2,f3:real;

begin

for i:=1 to n do

for j:=1 to n do

begin

f1:=cos(pi*(8.25+(i+j)/2))/sin(pi*(8.25+(i+j)/2));

f2:=pi*i*(1+i/j);

f3:=ln(sqr(n)-i/j+1)/ln(2);

a[i,j]:=f1/f2*f3;

end;

end{matrica};

4.2.3.2. Получение вектора.

 

Используя известную матрицу А, вычислить вектор X, если xi(i =1,2..n) вычисляется как наибольший среди принадлежащих отрезку [-10,10] элементов i -го столбца матрицы.

Математическая формулировка задачи

, , i =

Таблица переменных

 

Имя Тип Назначение Параметр
n целый размерность вектора формальный
i, j параметр цикла локальный
m   вещественный вспомогательный
a[1..n,1..n] матрица формальный
x[1..n] вектор

 

 

n, a[1..n, 1..n]
Алгоритм процедуры vector

 
 

нет

 


да

m =

 

 


m

 

 


нет

 


да

 

 


procedure vector(n:integer; a:matr; var x:vect);

var i,j:integer; m:real;

begin

for i:=1 to n do

begin

m:=-exp(30);

for j:=1 to n do

if abs(a[j, i])<=10 then if a[j, i]>m then m:=a[j, i];

x[i]:=m;

end;

end{vector};

 

4.2.3.3. Матричные операции.

 

Выполнить матричную операцию Z=

 

Х – вектор - инвентированный вектор А - матрица - транспонированная матрица Е – единичная матрица Z – матрица – результат    
Математическая формулировка задачи

 

1) ;

 

2) U=A - E ;

 

3) V=A-E ;

 

4) C=U.V ;

 

5) ;

6) .

Таблица переменных

 

Имя Тип Назначение Параметр
n целый размерность формальный
a[1..n,1..n] вещественный матрица   вектор
z[1..n,1..n] х[1..n]
i,k, j целый параметр цикла локальный
s вещественный вспомогательный скаляр
y
b[1..n,1..n] матрица
u[1..n,1..n]
v[1..n,1..n]
c[1..n,1..n]

 

Алгоритм процедуры matoper

       
 
   
 


n, a[1..n,1..n], x[1..n]

 

 
 


               
   
   
   
 
 
 


  y= 0

       
   
 
 


       
   
 
 


 

s=0
=

       
 
   
 


 

                   
   
 
         
y=y +
 
 
 


 

       
   
 
 

нет

               
   
   
 
 
   
 
 

 


да

                             
   
 
   
     
 
 
   
   
 
 
 
   
 
 

 

 


y

 

 


 


           
   
     
 
 


 

 

           
 
   
 
 
   

 

 


procedure matoper(n:integer;a:matr;x:vect;var z:matr);

var i,k,j:integer; s,y: real; b,u,v,c:matr;

begin

for i:=1 to n do

for j:=1 to n do

begin

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

u[i,j]:=b[i, j];

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

if i=j then

begin

u[i,j]:=b[i,j]-1;

v[i,j]:=a[i,j]-1;

end;

end;

for i:=1 to n do

for j:=1 to n do

begin

s:=0;

for k:=1 to n do s:=s+u[i,k]*v[k,j];

c[i,j]:=s;

end;

y:=0;

for i:=1 to n do y:=y+x[i]*(-x[i]);

for i:=1 to n do

for j:=1 to n do z[i,j]:=c[i,j]*y;

writeln('B=At':20);

writmatr('b',n,b);readln;

writeln('U=B-E':21);

writmatr('u',n,u);readln;

writeln('V=A-E':21);

writmatr('v',n,v);readln;

writeln('C=U*V':21);

writmatr('c',n,c);readln;

writeln('скаляр y=X*Xи':26);

writeln('y=',y:6:3);

end{matoper};

 

4.2.3.4. Упорядочение матрицы.

Упорядочить по убыванию положительные элементы последнего столбца матрицы А.

 

Алгоритм процедуры porjadok

 
 

 


n, a[1..n,1..n]

= i,j=
       
   
 

 

 


нет

 

да

k=i

 

       
   
 
 

 


 

       
   
 
 

 

 


да

 

k=j

 

       
   
 
 

 


 
 

b[1..n,1..n]

 


Таблица переменных

 

Имя Тип Назначение Параметр
n целый размерность формальный
a[1..n,1..n] вещественный матрица
b[1..n,1..n]
i,j,k целый параметр цикла локальный
c вещественный вспомогательный

 

procedure porjadok(n:integer; a:matr; var b:matr);

var j,i,k:integer; c:real;

begin

for i:=1 to n do

for j:=1 to n do b[i,j]:=a[i,j];

for i:=1 to n-1 do

if b[i,n] > 0 then

begin

k:=i;

for j:=i+1 to n do

if b[j,n]>0 then

if b[j,n]>b[k,n] then k:=j;

if k<>i then

begin

c:=b[i,n];

b[i,n]:=b[k,n];

b[k,n]:=c;

end;

end;

end{porjadok};

 

 

4.2.3.5. Вычисление параметра массива.

Вычислить значение функции

 

 

Алгоритм функции znachf

 

 
 
нет
да
да
да

 

 


да
да

 

 


Таблица переменных

 

Имя Тип Назначение Параметр
y вещественный имя функции -
n целый размерность формальный
a[1..n,1..n] вещественный матрица
x[1..n] вектор
i,j,k целый параметр цикла локальный
s,c вещественный вспомогательный
y1,y2 скаляр

 

function znachf(n:integer;a:matr;x:vect):real;

var i,j,k: integer; s,y1,y2,c: real;

begin

y1:=exp(30);

for i:=1 to n do

if odd(i) then

begin s:=0;

for k:=1 to n do

if odd(k)=false then

if abs(a[i,k])>1е-6 then

s:=s+ln(abs(a[i,k]))/ln(10);

if s<y1 then y1:=s;

end;

y2:=0;

for k:=1 to n do

if odd(k)=false then

begin

c:=1;

for j:=1 to k do c:=c*j;

y2:=y2+x[k]*exp(1/k*ln(с));

end;

writeln('y1=',y1:1:3,' y2=',y2:1:3);

y:=y1+y2;

znachf:=y;

end{znachf};

 

4.2.3.6. Вывод информации.

Алгоритм процедуры вывода матрицы writematr

       
   
 
 


name, n, a[1..n,1..n]

 
 
‘матрица’,


 

 

 
 

 


Таблица переменных

 



Поделиться:


Последнее изменение этой страницы: 2016-12-15; просмотров: 310; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 44.193.77.196 (0.522 с.)