Матрицаның барлық элементтерін өңдейтін алгоритмдер
2-мысал. Нақты сандардан тұратын a4,6 матрицасы берілген. Мынадай z=p1/|p2| өрнекті есептеу керек, мұндағы P1 и P2 – сәйкесінше алынған матрицаның оң және теріс элементтерінің көбейтіндісі.
/* a[4][6] матрицасы берiлген. z=p1/|p2| есептеу керек, p1 және p2 – матрицаның оң және терiс элементтерiнiң көбейтiндiсi */
#include
#include
#include
void line()
{printf("------------------------------\n"); return;}
main ()
{static int a[4][6]={{5,-11,4,-2,5,6},{3,3,-12,-5,7,8},{2,3,-3,14,-9,-3},{-9,3,-6,14,9,-3}};
int i,j; float p1, p2, z;
printf("Берiлген матрица :\n"); line();
for (i=0; i<4; i++)
{for (j=0; j<6; j ++)
printf(" %3i ", a[i][j]);printf("\n");}
line();
/* Матрицаны өңдеу */
p1 = 1;p2 = 1;
for (i=0; i<4; i++)
for (j=0; j<6; j ++)
{if (a[i][j]>0) p1 = p1*a[i][j];
if (a[i][j]<0) p2 = p2*a[i][j];}
z = p1/abs(p2);
printf(" z = %f\n",z); line();getch();}
Матрица мынадай түрде беріледі:
А(0,0)
|
A(0,1)
|
A(0,2)
|
A(0,3) ...
|
A(0, j)
|
…
|
A(0,n-1)
|
A(1, 0)
|
A(1,1)
|
A(1, 2)
|
A(1, 3) ...
|
A(1, j)
|
…
|
A(1, n-1)
|
A(2, 0)
|
A(2, 1)
|
A(2,2)
|
A(2, 3) ...
|
A(2, j)
|
…
|
A(2, n-1)
|
A(3, 0)
|
A(3, 1
|
A(3, 2
|
A(3, 3...
|
A(3, j)
|
…
|
A(3, n-1)
|
…
|
…
|
…
|
…
|
…
|
A(i, j)
|
… …
|
A(n-2, 0)
|
A(n-2, 1)
|
A(n-2, 2)
|
A(n-2, 3) ...
|
A(n-2, j)
|
… A(n-2, n)
|
A(n-1, 0)
|
A(n-1, 1)
|
A(n-1, 2)
|
A(n-1, 3) ...
|
A(n-1, j)
|
… A(n-1, n-1)
|
Бас диагональ элементтері белгісі: i = j
Бас диагональдан жоғары тұрған элементтері белгісі: i < j
Бас диагональдан төмен тұрған элементтері белгісі: i > j
Қосалқы диагональ элементтері белгісі: i+j = n-1
Қосалқы диагональдан жоғары элементтер белгісі: i+j < n-1
Қосалқы диагональдан төмен элементтер белгісі: j+j > n-1
3-мысал. Бүтін сандардан тұратын квадрат b5,5 матрицасы берілген. Оның бас диагоналының сол жағында және оң жағында орналасқан нөлге тең элементтері санын анықтап, солардың айырмасының модулін табу керек.
Мынадай белгілеулер енгізейік:
L1 – бас диагональдың сол жағында (төменінде) орналасқан элементтер саны;
L2 – бас диагональдың оң жағында (жоғарысында) орналасқан элементтер саны;
L= |L1-L2| – солардың айырмасы модулі.
#include
#include
#include
void line()
{printf("-------------------------\n"); return;}
main ()
{static int b[5][5]={{5,0,0,0,0}, {0,3,12,0,0}, {0,33,13,14,0}, {0,23,0,14,0}, {35,0,13,14,9},};
int i,j;
int L1,L2,L;
printf("Берiлген матрица :\n"); line();
for (i=0; i<5; i++)
{for (j=0; j<5; j ++)
printf(" %3i ", b[i][j]);
printf("\n");}line();
L1 = L2 = 0;
for (i=0; i<5; i++)
for (j=0; j<5; j ++)
if (b[i][j]==0){if (i>j) L1 = L1+1;
if (i
L= abs(L1 - L2);
printf(" L = %i ", L);
getch();}
Екінші типтегі есептер алгоритмдері
4-мысал. Бүтін сандардан тұратын a3,6 матрицасы жолдарының алғашқы элементін осы жолдың минимальды элементімен алмастыру керек. Нәтижелік a3,6 матрицасы элементтерін экранға шығару қажет.
/* a[3][6] матрицасы жолдарының алғашкы элементiн осы жолдың минимальды элементiмен алмастыру керек. Натижелiк Х матрицасы элементтерiн экранға шығару кажет.*/
#include
#include
#include
void line()
{printf("------------------------------\n");
return;}
main ( )
{ static int a[3][6]={ {5,-11,4,-2,5,6 }, {2,3,-3,14,-9,-3}, {-9,3,-6,-14,9,-3}};
int i,j,jmin,min;
printf("Берiлген матрица :\n");line(); for (i=0; i<3; i++)
{for (j=0; j<6; j ++)
printf(" %3i ", a[i][j]);
printf("\n");}
line();
for (i=0; i<3; i++)
{ min=+1E6;
for (j=0; j<6; j ++)
if (a[i][j]
{min=a[i][j];jmin=j;}
a[i][jmin]=a[i][0];
a[i][0]=min;}
printf("Өңделген матрица :\n");line();
for (i=0; i<3; i++)
{for (j=0; j<6; j ++)
printf(" %3i ", a[i][j]);
printf("\n");} line(); getch();}
5-мысал. Бүтін сандардан тұратын a3,4 матрицасының әрбір бағаналарының арифметикалық орташа мәнін анықтап, оларды бір өлшемді s4 жиымы ретінде бейнелеу керек.
/* a[3][4] матрицасының әрбiр бағаналарының арифметикалық орташа мәнiн анықтап,оларды бiр өлшемдi s[4] жиымы ретiнде бейнелеу керек. */
//әрбір бағана қосындысы және солардың орташа мәні
#include
#include
main ()
{ static int a[3][4]={ {5,11,4,2}, {3,3,12,5}, {2,3,3,14}};
int i,j;
float s[4];
printf("Берiлген матрица :\n");
printf("----------------------\n");
for (i=0; i<3; i++)
{for (j=0; j<4; j ++)
printf(" %3i ", a[i][j]);
printf("\n");}
/* матрицаны өңдеу */
printf("----------------------\n");
printf("");
for (j=0; j<4; j++)
{ s[j]=0;
for (i=0; i<3; i ++) s[j]+=a[i][j]; printf(" %4.2f",s[j]/3);}
printf("\n----------------------");
getch();}
Бұл программада s[j] жиымының әрбір элементін есептеуде қабаттасқан екі цикл қолданылған, онда j индексі сыртқы цикл параметрі, ал i индексі – ішкі цикл параметрі. Осы тәсіл матрица элементтерін бағаналар бойынша өңдеу ісін жүзеге асырады.
6-мысал. Берілген жиымның әрбір жолындағы элементтері қосындыларын және сол қосындылардың орташа мәнін анықтау керек. Әр жол қосындысы және солардың арифметикалық ортасы
#include #include main ()
{ static int a[3][4]= {{5,3,4,2},{3,3,4,5},{2,3,3,4}};
int i,j,s=0;
float c=0;
for (i=0; i<3; i++)
{for (j=0; j<4; j ++) s+=a[i][j]; printf("%i-жол косындысы:%i\n",i+1,s); c+=s;}
printf("--------------------"); printf("\n арифм.ортасы %5/2f", c/4) ; }
7-мысал. Берілген жиымның әрбір бағанадағы элементтері қосындыларын және сол қосындылардың орташа мәнін анықтау керек.
әрбір бағана қосындылары мен солардың орташа мәнін анықтау
#include #include main ()
{static int a[3][4]={{5,11,4,2},{3,3,12,5},{2,3,3,14}};
int i,j,s; float c;
printf("Берiлген матрица :\n"); printf("----------------------\n"); for (i=0; i<3; i++)
{for (j=0; j<4; j ++)
printf(" %3i ", a[i][j]);printf("\n");}
/* Матрицаны өңдеу */
printf("----------------------\n");
printf("s=");
for (j=0; j<4; j++)
{ s=0;
for (i=0; i<3; i ++) s+=a[i][j];
printf("%3i ",s); // қосынды s
c+=s;}
printf("\n----------------------"); printf("\n арифм. ортасы %5.2f",c/4); getch();}
8-мысал. Берілген a4,4 жиымының бас диагоналындағы элементтерді нөлге, ал қосалқы диагоналындағы элементтерді – бірге теңестіру программасы.
#include
#include
#include
main()
{int a[4][4]={{6,8,9,2},{5,3,4,2},{3,3,4,5},{2,3,3,4}};
int i,j;
printf("Берілген матрица :\n"); for (i=0; i<4; ++)
{for (j=0; j<4; j ++)
printf(" %2i ", a[i][j]);printf("\n");}
/* Матрицаны өңдеу */
for (i=0; i<4; i++) a[i][i]=0;
for (i=0; i<4; i++) for (j=0; j<4; j ++)
if (i+j==3) a[i][j]=1;
/* Өңделген матрица элементтерін шығару */ printf("Нәтижелік матрица :\n");
for (i=0; i<4; i++)
{for (j=0; j<4; j ++)
printf(" %2i ", a[i][j]); printf("\n");} getch();}
9-мысал. Берілген a3,3 жиымының бас диагоналынан төмен орналасқан элементтер қосындысын анықтау программасы.
#include
#include
main ()
{static int a[3][3] = {{0,1,2},{3,4,5},{6,7,8}};
int i,j,r,s;
printf("Енгiзiлген а[3][3] жиым элементтерi:\n"); for (i=0; i<3; i++)
{for (j=0; j<3; j++)
printf(" %2i",a[i][j]);printf("\n");}
/* бас диагоналдан төмен орналасқан элементтер қосындысын анықтау */
s=0;
for (i=0; i<3; i++)
for (j=0; j<3; j++)
if (j
printf("\ns=%i",s);
getch();}
10-мысал. Берілген a3,3 жиымының әрбір жолындағы элементтерді өсуі бойынша реттеп орналастыру программасы.
#include
#include
#include
main ()
{ static int a[3][3] ={{8,7,6},{5,4,3},{2,1,0}};
int i,j,r,s,n=3,amin,m,k;
printf("Берілген матрица:\n"); for (i=0; i<3; i++)
{for (j=0; j<3; j++)
printf(" %2i",a[i][j]);
printf("\n");}
for (i=0; i
{//мин тауып алмастыру
for (k=0; k
{ amin=a[i][k];m=k;
for (j=k+1; j
if (a[i][j] < amin) {amin=a[i][j]; m = j;}
a[i][m]=a[i][k]; a[i][k]=amin;}}
printf("\nНәтижелік матрица:\n"); for (i=0; i<3; i++)
{for (j=0; j<3; j++)
printf(" %2i",a[i][j]);
printf("\n");}
getch();
11-мысал. Берілген a3,3 жиымының әрбір бағанасындағы элементтерді өсуі бойынша реттеп орналастыру программасы.
#include
#include
#include
main ()
{ static int a[3][3]= {{8,7,6},{5,4,3},{2,1,0}};
int i,j,r,s,n=3;
int amin; int m,k; printf("Берілген матрица:\n"); for (i=0; i<3; i++)
{for (j=0; j<3; j++)
printf(" %2i",a[i][j]);
printf("\n");}
for (j=0; j
{for (k=0; k
{ amin=a[k][j];m=k; for (i=k+1; i
if (a[i][j] < amin) {amin=a[i][j]; m = i;}
a[m][j]=a[k][j]; a[k][j]=amin;}}
printf("\nСұрыпталған матрица элементтері:\n"); for (i=0; i<3; i++)
{for (j=0; j<3; j++)
printf(" %2i",a[i][j]);
printf("\n");}getch();}
Достарыңызбен бөлісу: |