Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритм.docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
116.54 Кб
Скачать

2. Екі өлшемді жиым элементтерін енгізу

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

main()

{const int row=3, col=4;

int a[row][col];

clrscr(); randomize();

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

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

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

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

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

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

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

getch();

}

басы

i=0;i<jol;i=i+1

j=0;j<bag ;j=j+1

соңы

а

х[i][j] енгізу

jol=3; bag=4;

i=0;i<jol;i=i+1

j=0;j<bag ;j=j+1

х[i][j] шығ.

а

//матрица элементтерін қолмен енгізу мысалы

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

main()

{ int a[4][5];

int i,j;

printf(“жиым элементтерін қолмен енгізу:\n");

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

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

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

scanf("%i",&a[i][j]);

}

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

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

{for (j=0; j<5; j++)

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

printf("\n");

}

getch();

}

Массив элементтері типі ескеріліп, олардың көлеміне жеткілікті етіп массив үшін компьютер жадында қажет-ті орын бөлініп беріледі немесе массивтің аты осы ай-мақтың басына сілтейтін нұсқауыш типті константа болып табылады.

Берілген екі өлшемді массив мынадай түрде инициалданған болсын:

static int a[3][4]={

{5,3,4,2},

{3,3,4,5},

{2,3,3,4}

};

Осы массивтің әрбір жолдағы элементтер қосынды-ларын және сол қосындылардың орташа мәнін анықтау керек.

// әр жол қосындысы және солардың арифм. ортасы

#include <conio.h>

#include <stdio.h>

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;

clrscr();

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

}

43. Матрица мынадай түрде беріледі:

А(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

// бас диагональда орналасқан элементтерді қосу

#include <conio.h>

#include <stdio.h>

main ()

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

Int I,j,r,s; clrscr();

printf(“Енгізілген элементтер:");

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=i) s+=a[i][j];

printf("\ns=%i",s);

getch();

}

44-45. a[3][2] жиымы берілген болсын. Олар бүтін сандар, яғни

int a[3][2];

int *pri;

pri = a; // бұл pri=a[0][0] деген сөз

a – жиымның аты немесе a[0][0] элементінің адресі

a=&a[0][0];

pri нұсқауышына 1-ді қоссақ, pri+1 нұсқауышы a[0][1] элементін көрсетеді. Келесі теңдіктер дұрыс болып табылады:

pri == &a[0][0];

pri+1== &a[0][1];

pri+2== &a[1][0];

pri+3== &a[1][1];

pri+4== &a[2][0];

pri+5== &a[2][1];

//Жиым қосындысын табу мысалы

#include <conio.h>

#include <stdio.h>

main ()

{

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

{4,5,6,7},

{8,9,1,0},

{1,2,3,4}};

int i,s=0,*pri;

clrscr();

pri=&b[0][0];

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

s+=*(pri+i);

printf("сумма = %d",s);

getch();

}

Екі өлшемді жиым бір өлшемді жиымдардан құрастырылған жиым ретінде қарастырылуы мүмкін. Яғни берілген екі өлшемді жиым үш жолдан тұрады, ал әрбір жол екі элементтен тұратын жиым болып табылады.

Бірінші жол аты - a[0],

екінші жол аты - a[1],

үшінші жол аты - a[2].

Жиымның аты берілген жиымның нұсқауышы болып табылады, яғни ол жиымның ең алғашқы элементіне сілтейді.

Екі өлшемді жиымның осы қасиеті бір өлшемді жиымға арналған функцияны екі өлшемді жиыммен жұмыс істеуге мүмкіндік береді. Төменде b[3][4] матрицасы жолдарының арифметикалық ортасын табатын программада функция қолданылған.

float f1(int x[], int n)

{ int k; float s;

for (k=0,s=0;k<n; k++)

s+=x[k];

return(s/n);

}

main ()

{ int i,b[3][4]={ {6,4,3,3},

{7,5,3,3},

{8,4,2,6}

};

clrscr();

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

printf("cредн.значение строки %d = %f\n",

i,f1(b[i],4));

getch();

}

46. C тілінде барлық ішкі программалар функция ретінде қарастырылады. Әдетте программалар бірнеше шағын функциялардан тұрады. Функция дегенімізбелгілі бір операциялар тобын атқаратын программа блогы.

Функцияға мәліметтер береміз де, одан белгілі бір нәтижелер аламыз. Функцияның ішкі әрекеті програм-маның басқа бөліктеріне қатыссыз орындалады. Програмада кем дегенде, бір функция болады және программадағы бір функцияның аты main болуы тиіс. Программаның орындалуы осы main функциясынан басталады. Main функциясының орындалуы барысын-да басқа функциялар шақырылады, ал олар одан да басқа функцияларды шақыруы мүмкін.

Бір функция жұмыс істеп тұрғанда, екінші функция-ны орындау керек болса, онда бірінші функция жұмы-сын тоқтата тұрады да, екінші функция жұмысқа кірісе-ді. Ол өз жұмысын аяқтап, return сөзін кезіктіргенде ғана қайтадан бірінші программа өзінің тоқтаған жері-нен ары қарай іске кіріседі. Функция атынан соң, жақ-шалар ( ) болуы тиіс.

Әрбір функция сипатталып анықталуы тиіс. Фун-кцияның типі және ол арқылы есептелетін мәннің типі бірдей болуы керек. Функция типі көрсетілмесе, келісім бойынша, ол int типтес болып саналады. Енді функцияның сипатталуын қарастырайық. Функцияны сипаттағанда екі түрлі форматты немесе екі стильді қолдануға болады, яғни оны сипаттау және анықтау жолдары бар.

Функция мынадай жалпы түрде сипатталады: [<функция типі>] <функция аты> ([<формальды параметрлер спецификациясы>]) <функция тұлғасы>; мұндағы [<функция типі>] – функцияның есептелетін нәтижесі типі; <функцияның аты> – функция идентификаторы, яғни аты; <формальды параметрлер спецификациясы> – бұл болмауы да мүмкін (void) немесе әрбір параметр специфи-кациясы: <типі> <параметр аты> – формальды пара-метрлердің типтерін және идентификаторларын анықтайды; <функция тұлғасы> – орындалатын операторлар тізбегі және оның ішінде локальді айнымалының сипатталуы болуы мүмкін. Функцияны компилятор дұрыс түсінуі үшін оны шақырып пайдаланғанға дейін функцияның қысқаша сипаттамасы берілуі тиіс, яғни функция программаның соңғы жағында сипатталса, программа басында оны былайша хабарлап кету керек.

типі функция_аты (параметрлер_спецификациясы);

яғни оның прототипі – алдын ала қысқаша көрсетілуі тиіс. Прототипте формальды параметрлер атын жазбаса да болады, мысалы:

double f(int n, float x); немесе

double f(int, float);

Сонымен, функцияны хабарлау оның прототипін – аты және параметрлері саны мен типін программалық файлдың алдында жариялау болып табылады. Функцияны осылайша хабарлауды былай да көрсету-ге болады:

<нәтиже_типі><функция_аты>(<типі> <айнымалы>

,…, <типі> <айнымалы>);

Егер жай жақша ішінде жазылатын айнымалылар идентификаторлары көрсетілмесе, онда компилятор оларға арнап компьютер жадында тек орын қалдыра-ды. Мұнда функция тұлғасы жайлы сөз болмайды.

Мысалы, fun функциясын оның параметрлерінің типі арқы-лы хабарлау былай жазылады:

float fun(int, float, int, int);

Функция прототипі компиляторға негізгі программадан соң, оның толық мәтіні берілетінін хабарлап отыр.

Функцияны толық түрде анықтау, яғни оның нақты мәтінін жазу былай көрсетіледі:

<нәтиже_типі> <функция_аты>

(параметрлер тізімі)

{

Функция коды

}

Нәтиже типі функцияның программаға return операторы арқылы қайтаратын мәнінің типін анықтайды. Егер функ-ция типі көрсетілмесе, онда алдын ала (үнсіз) келісім бойынша ол int болып саналады.

Параметрлер тізімі функция аргументтерінің атаулары мен типтерінің үтір арқылы бөлінген тіркестерінен тұрады. Фун-кцияның параметрлері болмауы да мүмкін, ондайда функция атынан соң, олардың орнына міндетті түрде құр жай жақша-лар жазылады, мысалы, berne().

return операторы бірден осы функция жұмысын аяқтап, басқаруды оны шақырған программаға (немесе басқа функцияға) береді, яғни бұл оператор функция жұмысы нәтижесін анықтайды. Функция жұмысын анықтайтын мәтін ішінде (функция тұлғасында) бірнеше return операторы болуы немесе оның бір де бірі болмауы да мүмкін. Соңғы жағдайда оны шақырған программаға кері оралу функция тұлғасындағы ең соңғы оператордан кейін атқарылады.

Функцияны шақыру үшін функцияның аты және жақ-шада нақты аргументтері көрсетіледі. Функция өз жұм-ысын аяқтағаннан кейін есептелген нәтижені return операторы арқылы қайтарады. Бұл оператордың жалпы түрі мынадай:

return(өрнек);

return;

return операторы функцияның орындалуын аяқтайды да, функцияны шақырған оператордан кейінгі жолға басқаруды береді.

Мысалы, келесі функция void типіндегі мән қайтарады, яғни жұмыс атқарады, бірақ ешқандай мән бермейді: