Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Часть 2. Вычислить сумму положительных элементов третьей четверти массива ⇐ ПредыдущаяСтр 2 из 2
где […] – округление до целого. Часть 3. Определить наибольший элемент среди нечетных по номеру элементов второй трети массива.
Часть 4. Упорядочить нечетные по номеру элементы второй половины массива по убыванию квадратов значений.
3.2. Алгоритм решения
3.2.1. Структура алгоритма
Алгоритм состоит из основного алгоритма (для основной программы) и вспомогательных алгоритмов (для подпрограмм) для решения задач: - вычисление вектора – процедура vector (n, a, b, f); - вычисление параметра вектора – функция sum (n, f); - определение параметра вектора – функция max (n, f); - сортировка массива – процедура porjadok (n, f); где n – размерность вектора, a, b – интервал значений элементов вектора (a, b вводится при запуске программы); F – вектор из n элементов. Кроме того используется процедура вывода: вектора – writevect (n, k, f); k – число выводимых строк.
Алгоритм основной программы
Таблица переменных
begin clrscr; write('Введите размерность вектора'); readln(n); write('Интервал значений от '); read(a); write('до '); readln(b); writeln; writeln(' ': 25, ’Исходные данные’); writeln('Размерность вектора n = ', n); writeln('Интервал [', a, ', ', b, ']'); writeln; writeln(' ': 26, 'Результаты расчета'); randomize; writeln('-----------------Часть 1---------------------'); writeln(‘Вектор F из ‘, n, ’ элементов в интервале [‘, a, ’, ’, b, ’], полученных’); writeln(‘при помощи генератора случайных чисел’); vector(n, a, b, f); 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); writevect(n, 2, f); writeln('---------------Конец задачи----------------'); end.
Алгоритмы подпрограмм
Получение элементов вектора
Алгоритм процедуры vector
n, a, b
f[i..n] Таблица переменных
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; Вычисление параметра вектора
Алгоритм функции sum n, f[i..n]
нет
да
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]
нет
да нет
да
ma 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]
да
Нет нет
да да
Таблица переменных
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]
нет
да
Таблица результатов
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], полученных при помощи генератора случайных чисел
---------------------------------Часть 2------------------------------
Сумма положительных элементов третьей четверти вектора
s=40
---------------------------------Часть 3------------------------------
Наибольший элемент второй трети среди нечетных по номеру
mх=7
---------------------------------Часть 4------------------------------
Вектор F с упорядоченными по убыванию квадратов значений нечетными по номеру элементами второй половины
-----------------------------Конец задачи---------------------------
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. Алгоритм основной программы
Таблица переменных
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. Получение матрицы.
Алгоритм процедуры matrica
Таблица переменных.
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= Таблица переменных
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=
1) ;
2) U=A - E ;
3) V=A-E ;
4) C=U.V ;
5) ; 6) . Таблица переменных
Алгоритм процедуры matoper n, a[1..n, 1..n], x[1..n]
нет
да
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 Популярное:
|
Последнее изменение этой страницы: 2016-06-04; Просмотров: 692; Нарушение авторского права страницы