Читайте также:
|
|
Массив бірдей типті айнымалылар тізбегін бірыңғай бүтін тізбек ретінде сақтауға мүмкіндік береді. Массивті жариялау арқылы массив элементтерінің типі мен оның аты анықталады. Ол сонымен қатар массивтегі элементтердің санын анықтауы мүмкін. Егер сипатталатын массив типі жазылмаса, int типі ұсынылады. Бір өлшемді массивті жариялаудың синтаксисі төмендегідей:
[<сипатталатын массив типі>] <айнымалы-идентификатор> [<константалық өрнек>];
[<сипатталатын массив типі>] <айнымалы-идентификатор> [];
Массивті жариялау кезінде жоғарыда көрсетілген екі синтаксистік формалардың бірін қолдануға болады. <айнымалы-идентификатор>-дан кейін тұрған квадрат жақша массив типінің белгісі болып табылады. Егер <айнымалы-идентификатор> идентификатор (массив аты) болса, онда ерекшеленген типті элементтер массиві жарияланады. Квадрат жақшаға алынған константалық өрнек массивтегі элементтер санын анықтайды. Массив элементтерінің индекстелуі нөлден басталады. Осылайша, массивтің соңғы элементінің индексі массивтегі элементтер санынан 1-ге кем болады.
Екінші синтаксистік формада квадрат жақшадағы константалық өрнек жазылмаған. Егер массивтің жариялануында инициализатор болса, немесе егер массив функцияның формальды параметрі ретінде жарияланса, немесе егер массивтің осы жариялануы программаның қандай да бір басқа жеріндегі массивтің жариялануына сілтеме болып табылса, осы форманы қолдануға болады. Массивтің барлық элементтерін орналастыруға қажетті жады көлемі бөлінеді. Массив элементтері біріншісінен бастап соңғысына дейін жадының тізбекті ұяшықтарына адрестерінің өсуі бойынша орналастырылады. Жадыда массив элементтерінің арасында бос орындар жоқ.
Программа мысалы: Нақты сандардан құралған, 5 саннан тұратын а массиві берілген. Массивтің барлық элементтерінің қосындысын табу керек.
#include<math.h>
#include<stdio.h>
main(){
int a[5],s=0;
printf("\n a[i] массивінің элементтерін енгізіңіз\n");
for (i=0;i<n;i++) scanf("%d",&a[i]);
for (i=0;i<n;i++) s+=a[i];
printf("%d\n",s);
return;}
Екі өлшемді массивті жариялау синтаксисі төмендегідей:
[<сипатталатын массив типі>] <айнымалы-идентификатор> [<константалық өрнек>][<константалық өрнек>].
<айнымалы-идентификатор>-дан кейінгі квадрат жақша массив типінің белгісі болып табылады. Квадрат жақшадағы әрбір константалық өрнек массивтің берілген өлшеміндегі элементтер санын анықтайды. Массив элементтері нөлден бастап индекстеледі. Осылайша, массивтің соңғы элементінің индексі массивтегі элементтер санынан 1-ге кем болады. Массивтің барлық элементтерін орналастыруға қажетті жады көлемі бөлінеді. Массив элементтері біріншісінен бастап соңғысына дейін жадының тізбекті ұяшықтарына адрестерінің өсуі бойынша орналастырылады. Жадыда массив элементтерінің арасында бос орындар жоқ. Көп өлшемді массив элементтері компьютер жадысында жол бойынша сақталады.
Программа мысалы: Нақты сандардан құралған а(5,5) екі өлшемді массиві берілген. Массивтің барлық элементтерінің қосындысын табу керек.
#include<math.h>
#include<stdio.h>
main(){
int a[5],s=0;
printf("\n a[i][j] массивінің элементтерін енгізіңіз\n");
for (i=0;i<n;i++)
for (j=0;j<n;j++)
scanf("%d",&a[i][j]);
for (i=0;i<n;i++)
for (j=0;j<n;j++)
s+=a[i][j];
printf("%d\n",s);
return;
}
Негізгі әдебиет: 1[104-107], 2[259-320], 3[192-195], 5[110]
Қосымша әдебиет: 1[239]
Бақылау сұрақтары:
1. Массивті реттеу қандай жағдайларда жүргізіледі?
2. Таңдау арқылы сұрыптау алгоритмін сипаттаңыз.
3. Алмастыру арқылы сұрыптау алгоритмін сипаттаңыз.
4. Қарапайым қою арқылы сұрыптау алгоритмін сипаттаңыз.
5. Сұрыптау алгоритмдерінің айырмашылығы неде?
6-дәріс. Borland C++-тегі функциялар
Функция – бұл қандай да бір жеке тапсырманы орындауға арналған жариялаулар мен операторлардың жиынтығы. Программада функциялардың санына шектеу қойылмайды. Си тіліндегі кез келген программада кем дегенде бір функция болады, ол – main атты басты функция.
Функцияның анықталуы функция атын, оның формальды параметрлерінің атрибуттарын және жариялаулар мен операторлардан тұратын функция денесін белгілейді. Функция анықталуында функция жадысының класы және қайтарылатын мәннің типі берілуі мүмкін.
Фукнцияның жариялануы функцияның атын және қайтарылатын мәнінің типін береді, оның айқын түрде анықталуы программаның басқа жерінде келтіріледі. Функцияның жариялануында жады класы, функция аргументтерінің саны мен типтері белгіленуі мүмкін.
Егер қайтарылатын мәннің типі int болса, оны функция анықталуында көрсету міндетті емес. Қайтарылатын мәннің типі басқа болса, оны функцияны жариялау кезінде көрсету қажет.
Функцияның шақыру кезінде басқару шақырушы функциядан шақырылатын функцияға беріледі. Нақты аргументтердің мәндері, егер олар бар болса, шақырылатын функцияға беріледі. Шақырылатын функцияда return қайтару операторын орындау кезінде басқару мен қайтарылатын мән (егер ол бар болса) шақырушы функцияға беріледі.
Функцияның анықталуы функцияның атын, формальды параметрлерін және денесін белгілейді. Функцияны анықтау синтаксисі төмендегідей:
[<жады класының спецификациясы>] [<тип спецификациясы>]
<сипаттауыш> ([<параметрлер тізімі>])[<параметрлердің жариялануы>]
<функция денесі>
Жады класының спецификациясы функция жадысының класын тағайындайды. <Тип спецификациясы> сипаттауышпен бірге қайтарылатын мәннің типі мен функция атын анықтайды. <Параметрлер тізімі> формальды параметрлер аттарының тізімі (бос болуы мүмкін) болып табылады, бұл формальды параметрлердің мәндері функцияны шақыру кезінде функцияға беріледі. <Параметрлердің жариялануы> формальды параметрлердің идентификаторлары мен типтерін береді. <Функция денесі> – бұл локальды айнымалылар мен операторлардың жариялануынан тұратын құрамды оператор.
Функцияның шақырылуы берілген функцияның басқаруы мен нақты аргументтерін (олар бар болса) тағайындайды. Функция шақырылуының синтаксисі келесідей:
<өрнек> ([<өрнектер тізімі>])
<Өрнек> есептеледі де, оның нәтижесі функция адресі ретінде қабылданады. Өрнектің типі функция типі болуы керек. <Өрнектер тізімі>-нде өрнектер үтір арқылы жазылады, ол функцияға берілетін нақты аргументтер тізімі болып табылады. Өрнектер тізімі бос болуы мүмкін. Функцияны шақыру кезінде нақты аргументтер формальды параметрлерге меншіктеледі. Басқару функция денесінің бірінші операторына беріледі. Функция денесінде return операторын орындау кезінде шақыру нүктесіне басқару қайтарылады, және бар болса мән де қайтарылады. Return операторы болмаған жағдайда, басқару функция денесінің фигуралы жақшасына жеткен кезде қайтарылады. Бұл жағдада қайтарылатын мән анықталмаған.
<Өрнек> функцияға сілтенуі тиіс. Бұл функция тек идентификатор бойынша ғана емес, функцияға көрсеткіш типіне ие кез келген өрнек бойынша шақырыла алады дегенді білдіреді.
Функцияның шақырылуы синтаксистік тұрғыда оның жариялануына ұқсайды. Функцияны жариялау кезінде алдымен функция аты, содан кейін жақшаның ішінде аргументтер тізімі жазылады. Функцияны шақыру кезінде де алдымен функция аты, содан кейін жақшаның ішінде өрнектер тізімі жазылады.
Нақты аргумент базалық типті кез келген мән, құрылым, бірлестік немесе көрсеткіш болуы мүмкін. Барлық нақты аргументтер мәндері бойынша беріледі. Массивтер мен функциялар параметр ретінде беріле алмайды, осы объекттерге арналған көрсеткіштер беріле алады. Сондықтан массивтер мен функциялар сілтеме бойынша беріледі. Нақты аргументтердің мәндері сәйкес формальды параметрлерге көшіріледі. Функция көшірме жасалған айнымалыларды өзгертпестен, тек осы көшірмелерді ғана пайдаланады. Аргументтерінің саны айнымалы болып табылатын функцияны шақыру үшін арнайы іс-әрекеттің қажеті жоқ: функция шақырылуында аргументтердің қажетті саны көрсетіледі. Рекурсивті шақырулар. Си программасындағы кез келген функцияны рекурсивті түрде шақыруға болады; атап айтқанда, ол өзін өзі шақыра алады. Компилятор бір функцияның рекурсивті шақырылуларының санына шектеу қоймайды.
Мысал: Екі a және b нақты сандары берілген. Есептеу керек: . Егер .
#include <conio.h>
#include <stdio.h>
#include <math.h>
// описание функции F
float F(float x){
float f1;
f1=sin(x)*cos(2*x)-sin(2*x)*cos(2/x);
return f1;
}
main(){
float a, b,t;
clrscr();
printf("\nВведите a, b: ");
scanf("%f",&a);
scanf("%f",&b);
t=(f(a+b)-f(a))/f(a-b);
printf("\nC = %5.2f",t);
return 0;
}
Негізгі әдебиет: 1 [161-181], 2[177-258], 3[170-191], 5[71-89]
Бақылау сұрақтары:
1. Ішкі программалардың формальды және нақты параметрлерінің аттары бірдей бола алады ма?
2. Егер ішкі программада бірдей атты локальды айнымалы болса, глобальды айнымалы осы ішкі программаның ішінде көрінеді ма?
3. Формальды және нақты параметрлер қандай шарттарды қанағаттандыруы тиіс?
4. Қандай параметрлер формальды деп аталады, қандай параметрлер нақты деп аталады?
5. Параметр-мән мен параметр-айнымалыны беру ережелері қандай?
7-дәріс. Borland C++ тіліндегі көрсеткіштер
Көрсеткіш – бұл басқа айнымалының адресін сақтайтын айнымалы.
Көрсеткіштер және адрестер. Көрсеткіште объектінің адресі болғандықтан, көрсеткіш арқылы осы объектке «жанама» қатынас жасауға мүмкіндік бар. х – int типті айнымалы, ал рх – қандай да бір тәсілмен құрылған көрсеткіш делік. & унарлы операциясы объект адресін шығарып береді, сондықтан рх = &х; операторы х- тің адресін рх айнымалысына меншіктейді; кейде рх х- ке «сілтейді» деп айтады. & операциясы айнымалылар мен массивтерге ғана қолданылады, &(х-1) және &3 түріндегі конструкциялар қате болып табылады. Сонымен қатар регистрлік айнымалының адресін алуға болмайды.
* унарлы операциясы өз операндын ақырғы нәтиженің адресі ретінде қарастырады және құрамындағы мәліметтерді алып алу үшін осы адрес бойынша қатынас жасайды, сонымен, егер y айнымалысының да типі int болса, онда
y = *рх;
y- ке рх сілтеп тұрған объектінің құрамындағы мәліметті меншіктейді. Сонымен
рх = &х;
y = *рх;
операторлар тізбегі y- ке
y = x;
меншіктеген нәрсені меншіктейді.
Осының бәріне қатысатын айнымалыларды төмендегідей сипаттау керек:
int x, y;
int *px;
x пен y- тің сипатталуы бізге таныс.
Дата добавления: 2015-07-08; просмотров: 1656 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Дәріс. Циклдар - басқару операторлар | | | Көрсеткішті сипаттау |