Завдання.
У заданій квадратній матриці значення деяких діагональних елементів дорівнюють нулю. Переставити рядки або стовпці матриці таким чином, щоб діагональні елементи стали ненульовими. Якщо це неможливо зробити, вивести відповідне повідомлення. 2. Hipo-діаграма
3. Блок-схема головної програми
Введення масиву InputArr
Вивведення масиву Browse Відповідь Answer
Перевірка нулів на головній діагоналі Checknul Перетворення матриці Solution
4. Screen Shot результатів Program lab2_3; type arr=array[1..10,1..10] of real; var mas:arr; {array} i,j,k, {counters} n,nul:integer; tmp:real; {temp variable} flag:boolean; {flag} str:string; {answer srting of possibility change} procedure Browse; {display array} begin for i:=1 to n do begin for j:=1 to n do write(mas[i,j]:6:2); writeln; end; writeln; end;
procedure InputArr(var masiv:arr); {entering of array} var key:char; {user answer} range1,range2:integer; {range of values array elements} begin writeln; writeln('Result of lab2_3'); writeln('Variant 5, made by Znakhurenko Viktoriya'); writeln('mas[1..n]'); repeat write('Enter number of lines in array <=10 '); readln(n); {entering lines in array} until (n>0) and (n<=10); {cyrcle by entering correct value}
repeat {cyrcle for getting correct choice} writeln; writeln('Oppurtunites of filling array elements'); writeln('1. Random '); writeln('2. Keyboard entering'); write('Your choise [1/2] '); readln(key); {get user choice} until(key='1')or(key='2');
if(key='1')then {random filling} begin repeat writeln; write('border of range random numbers low and high range '); readln(range1,range2); until(range1<range2); {range of filling} {low range must be less than high one}
for i:=1 to n do for j:=1 to n do {randomind number from [range1;range2] } masiv[i,j]:=random(range2-range1+1)+range1; end else begin write('Array mas: '); {users inputing numbers from keyboard} for i:=1 to n do begin for j:=1 to n do read(masiv[i,j]); writeln; end; writeln; end; writeln; flag:=true; end;
procedure ChackNul(mas:arr); {circle for chacking null elements on main diagonal} begin flag:=true; for i:=1 to n do if mas[i,i]=0 then flag:=false; {change flag}
end;
procedure Solution(var mas:arr); begin for i:=1 to n do begin if(mas[i,i]=0)then {condition of null element} begin for j:=1 to n do begin if(mas[i,j]<>0)and (j>=i)then begin for k:=1 to n do {exchange column} begin tmp:=mas[k,j]; mas[k,j]:=mas[k,i]; mas[k,i]:=tmp; end; j:=n; end; if(mas[j,i]<>0)and(i>=j)then begin for k:=1 to n do {exchange line} begin tmp:=mas[j,k]; mas[j,k]:=mas[i,k]; mas[i,k]:=tmp; end; j:=n; end; end; end; end; end;
procedure Answer; begin str:='Possible to invert'; ChackNul(mas); if (flag=false) then begin Solution(mas); ChackNul(mas); end; if flag=false then {condition of impossibility changing} str:='Impossibile to invert'; writeln(str); end;
{main program} begin randomize; InputArr(mas); Browse; Answer; Browse; end.
5. Screen Shot результатів
6. Аналіз роботи Як ми бачимо зі ScreenShot’ів, ми ввели 4 варіанти даних. Введення першого рядка,з якого будуть видалятися слова, та другого рядка слів, що видалятимуться. 1. Розмір матриці 4, спосіб заповнення – генерування чисел, границі генерування 0 та 1, бачимо 3 нулі на головній діагоналі. Не можна перемістити рядки та стовпчики так, що не буду діагональних нульових елементів, тому що маємо нульовий рядок. 2. Розмір матриці 5, спосіб заповнення – генерація випадкових чисел, границі генерування 0 3. Маємо 2 нульових елементи. Переміщення можливе. 3. Розмір матриці 3, спосіб заповнення – введення з клавіатури. Маємо 3 нульові діагональні елементи. Переміщення можливе. 4. Здійснено зациклення програми на введення можливої кількості елементів(додатне число, менше 10), також на спосіб введення чисел (1. Генерація випадкових чисел. 2. Введення з клавіатури)
|