Обчислення массиву Calculation
4. Код програми: Program lab2_2; type arr=array [1..10,1..10] of real; {new array type} var mas:arr; {variables array type} n, {number of lines} m, {number of columns} i,j, {counters} imax,jmax:integer; {position of maximum number in array} max:real; {maximum number in array} flag:boolean; {flagok for incorrect value} {------------------Browse----------------------} procedure Browse(mas:arr;n,m:integer); {display array} {mas – array arr type, n- number of lines, m – number of colomn} begin for i:=1 to n do {circle for lines} begin for j:=1 to m do {circle for column} write(mas[i,j]:6:2,' '); {input array element} writeln; {outputting as a matrix} end; {end of for} writeln; end; {end of Browse} {------------------Input Array------------------} procedure InputArr(var masiv:arr;var n,m:integer); {entering of array} {mas – array arr type, n- number of lines, m – number of colomn} var key:char; {user answer} range1,range2:integer; {range of values array elements} begin writeln; writeln('Result of lab2_2'); writeln('Variant 5, made by Znakhurenko Viktoriya'); writeln('mas[1..n,1..m].'); {entering capacity of array} repeat {do while positive number} write('Enter number of lines in array <=10 '); {entering lines in array} readln(n); {input number of lines} until (n>0) and (n<=10); {circle by entering correct value} repeat {do while positive number} write('Enter number of colunms in array <=10 '); {entering columns in array} readln(m); {input number of column} until (m>0) and (m<=10); {circle by entering correct value} repeat {do while correct variant} writeln; {menu for type of entering} writeln('Oppurtunites of filling array elements'); writeln('1. Random '); {random generation of number} writeln('2. Keyboard entering'); {input from keyboard by user} write('Your choise [1/2] '); {possible variant of filling array} readln(key); {get user choise} until(key=1)or(key=2); {possible variant of filling} if(key=1) then {random filling} repeat {do while entering range is corrrect} writeln; write('border of range random numbers low and high range '); readln(range1,range2); {reading range of filling} until(range1<range2); {low range must be less than high one} for i:=1 to n do {circle for lines} for j:=1 to m do {circle for column} masiv[i,j]:=random(range2-range1+1)+range1; {randomind number from [range1;range2] } end {end of if} else {keyboard entry} begin write('Array mas: '); {users inputing numbers from keyboard} for i:=1 to n do {circle for lines} begin for j:=1 to m do {circle for column} read(masiv[i,j]); {reading current element} writeln; {outputting as a matrix} end; {end of for} writeln; end; {end of else} writeln; end; {end of InputArr} {----------------Maximal Element Position---------------------------} procedure MaxElemPos(var imax,jmax:integer;mas:arr;n,m:integer); {mas – array arr type, n- number of lines, m – number of column, imax – line index of maximal element, jmax – column index of maximal element} var max:real; {maximum element} begin imax:=1; {init line index} jmax:=1; {init column index} max:=mas[imax,jmax]; {take first element as maximal} {definition of max element of c array} for i:=1 to n do {circle for lines} for j:=1 to m do {circle for column} if(max<abs(mas[i,j])) then {current element is bigger than max} begin max:=abs(mas[i,j]); {remember current element as max} imax:=i; {index of current line} jmax:=j; {index of current column} end; {end of if} end; {end of MaxElemPos } {-------------Exchange---------------------} procedure Exchange(var mas:arr; n,m:integer;max:real);{change diagonal elements on maximum} {mas – array arr type, n- number of lines, m – number of column} begin for i:=1 to n do {circle } mas[i,i]:=max; {exchange diagonal elements} end; {-------------Calculation-----------------------} procedure Calculation(var mas:arr;n,m:integer); {mas – array arr type, n- number of lines, m – number of column} begin MaxElemPos(imax,jmax,mas,n,m); {maximum element of array} max:=abs(mas[imax,jmax]); {remember max element} writeln('Max element is ',max:6:2,' in [ ',imax,', ',jmax,' ] position'); if (max<>0) then {check by correct values} for i:=1 to n do {circle for lines} for j:=1 to m {circle for column}do mas[i,j]:=mas[i,j]/max {calculation elements} else {division by zero} begin writeln('error division by zero!'); flag:=false; {change flagok division by zero} end; {end of else} Browse(mas,n,m); {Output array} Exchange(mas,n,m,max); {changing diagonal elements} end; {end of Calculation } {----------------Main program------------------} begin flag:=true; {init flagok not division by zero} randomize; {for generation random numbers} InputArr(mas,n,m); {entering array} Browse(mas,n,m); {display array} Calculation(mas,n,m); {formation new array} if(flag=true)then {condition not division by zero} Browse(mas,n,m); {Output array} writeln; readln; end. {end of program}
5. Screen Shot результатів
6. Аналіз роботи Як ми бачимо зі ScreenShot’ів, ми ввели 3 варіанти даних. Введення кількості рядків та стовпчиків масиву, при умові n<=10. Завдання елементів масиву може здійснюватися генерацією випадкових чисел та самостійно користувачем. 1. При виборі першого типу введення, користувач вводить матрицю з клавіатури. 2. При генерації випадкових чисел необхідно задати їх діапазон. Якщо діапазон 5 та 10 чи -10 та 20, отримуємо масиви матрицю, знаходимо максимальний за модулем елемент, а також обчислюємо масив шляхом ділення на цей елемент, якщо він не дорівнює нулю. Заміна елементів головної діагоналі на цей елемент. Здійснене зациклення програми при введенні діапазону, перша границя не є меншою за другу, а також можливість введення чисел або з клавіатури, або генерацією випадкових чисел.
|