Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Копия Си лекция каз.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
3.05 Mб
Скачать

Int xmin,X[10];

int n,k,i;

clrscr();

printf("\nБерілген жиым элементтері:");

for (k=0; k<10; k++)

{x[k] = rand() % 100;

/* 32767-ге дейінгі кездейсоқ сандар */

printf(" %i",x[k]);}

for (k=0; k<9; k++)

{ xmin=x[k];n=k;

for (i=k+1; k<10; k++)

if (x[i] < xmin)

{

xmin=x[i];

n = i;

}

x[n]=x[k]; x[k]=xmin;

}

printf("\nРеттелген жиым

элементтері:");

for (k=0; k<10; k++)

printf(" %i",x[k]);

getch();

}

Бақылау сұрақтары

  1. Жиымды сұрыптау (сорттау, реттеу) жолдары.

Дәріс№7

6. Екі өлшемді жиымдар

Екі өлшемді жиымды – матрицаны пайдалану үшін тік жақшалар ішінде олардың екі өлшемінің де енін көрсету керек. Мысалы:

int a[4][3];

алғашқы сан жолдар санын, ал екінші сан бағаналар санын көрсетеді, а жиы­мы 12 элементтен тұрады. Оларға бастапқы мәнді былай береміз:

int a[4][3]={ {0,1,2},

{3,4,5},

{6,7,8},

{9,10,11}

};

ішкі жүйелі жақшаларды қоймаса да болады:

int a[4][3]={0,1,2,3,4,5,6,7,8,9,10,11};

Келесі түрде сипаттау жолдардың тек бірінші элементтерін ғана анықтайды, қалған элементтер 0-ге тең болып саналады:

int a[4][3]={ {0},{3},{6},{9} };

Егер ішкі жүйелі жақшалар алынып тасталса, онда мағынасы өзгереді.

int a[4][3]={ 0,3,6,9 };

мұнда бірінші жолдың 3 элементі мен екінші жолдың бірінші элементі анықталады да, қалғандары 0 болып саналады.

Екі өлшемді жиымды инициалдау қабаттасқан циклдер арқылы орындалады.

1-мысал.

/* a[3][4] жиымы элементтерін rand() арқылы енгізу және экранға шығару */

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

main()

{

const int row=3, col=4;

int a[row][col];

clrscr();

for (int i=0; i<row; i++)

for (int j=0; j<col; j++)

a[i][j]=rand()%100-50;

printf("\nа[3][4] жиым элементтерi мәндерi:");

for (i=0; i<row; i++)

for (j=0; j<col; j++)

printf(" %i",a[i][j]);

getch();

}

Матрицаларды өңдейтін негізгі алгоритмдер ретінде бір өлшемді жиымдарды өңдеу кезінде қолданылған алгоритмдер саналады. Жалпы матрицаларды өңдейтін барлық алгоритмдерді екі топқа бөліп қарастыруға болады, олар:

  1. матрицаның барлық элементтерін өңдейтін алгоритмдер.

  2. матрицаның әр жолы немесе әр бағанасы элементтерін жеке-жеке өңдейтін алгоритмдер.

Матрицаның барлық элементтерін өңдейтін алгоритмдер

2-мысал. Нақты сандардан тұратын a4,6 матрицасы берілген. Мынадай өрнекті есептеу керек, мұндағы P1 и P2 – сәйкесінше алынған матрицаның оң және теріс элементтерінің көбейтіндісі.

/* a[4][6] матрицасы берiлген. z=p1/|p2| есептеу керек, p1 и p2 – матрицаның

оң және терiс элементтерiнiң көбейтiндiсi */

#include <math.h>

#include <conio.h>

#include <stdio.h>

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;

clrscr();

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();

}

3-мысал. Бүтін сандардан тұратын квадрат b5,5 матрицасы берілген. Оның бас диагоналының сол жағында және оң жағында орналасқан нөлге тең элементтері санын анықтап, солардың айырмасының моду­лін табу керек.

Мынадай белгілеулер енгізейік:

L1 – бас диагональдың сол жағында (төменінде) орналасқан элементтер саны;

L2 – бас диагональдың оң жағында (жоғарысында) орналасқан элементтер саны;

L= |L1-L2| – солардың айырмасы модулі.

#include <math.h>

#include <conio.h>

#include <stdio.h>