Дәріс №7. Цикл операторы.
Цикл инструкциялары
Программалау негіздеріндегі қайталау алгоритмдерін ұйымдастыруда қолданылатын негізгі үш циклдық конструкция қарастырылған. Олардың бір-бірінен басты ерекшелігі циклдың қайталану шартына қарай цикл денесінің орындалу ретінің анықталуына байланысты.
While циклы
Жалпы форматы:
While <өрнек> инструкция
Мұндағы, <Өрнек> есептелінеді, егер мәні 0-ге тең емес болса, онда инструкция орындалады да өрнек қайта есептеледі және ол өрнек мәні 0-ге дейін қайталанады.
for циклы
For (өрнек1;өрнек2; өрнек3) инструкция
Мұндағы: өрнек1 және өрнек3 көбінесе меншіктеу немесе функцияны шақыру, ал өрнек2 қатынас өрнегі болып табылады. Өрнек1 цикл орындалғанға дейін қабылданғаннан кейін қатынас өрнегі тексеріледі. Егер қатынас өһрнегі ақиқат мән қабылдаса, онда циклдың денесі ретінде анықталған инструкция орындалады. Цикл денесі орындалған соң, яғни итерация аяқталғаннан кейін өрнек3 орындалады да қатынас өрнегі қайта тексеріледі. Осы процесс оның мәні жалған мән қабылдағанға дейін жалғасады.
Бұл өрнектердің кез-келгені болмаса да ; қойылуы міндетті.
Мысалы,
for(;;) {
…
}
Мұнда өрнек2 мәні барлық уақытта ақиқат деп есептелінеді, бұл шексіз циклды көрсетеді. Мұның жұмысы breаk немесе return инструкцияларының көмегімен тоқтатылуы мүмкін.
Цикл мысалы:
For(i=0,i
Do-while циклы
Жалпы форматы: Do инструкция while (өрнек);
Инструкция орындалған соң өрнек есептеледі, ақиқат болса онда инструкция қайта орындалады.
Break және Continue
Break-циклдан немесе ажыратқыштан уақытынан бұрын шығару.Continue-циклды келесі итерациясына көшіру Return инструкциясы-программаның орындалу барысында жұмысын тоқтату үшін қолданылады,аяқталу кодын меншіктейді.
Goto инструкциясы және белгі
Іштестірілген күрделі құрылымдарды үзу үшін кейде goto қолданылады. Ол көрсетілген белгіге көшеді. Белгі - айнымалы атауы секілді, белгілі бір атпен аталады да соңына : қойылады.
Мысалы,
for(…)
For(…) {…
If() goto error;
Дәріс №7.Өзін-өзі тексеру сұрақтары
Цикл дегеніміз не?
While циклының жалпы форматы қалай жазылады?
Дәріс №8. Функциялар және рекурсия
Функциялар. Функцияны сипаттау.
Функцияның формальды және нақты аргументтері.
Аргументтерді берілу тәсілдері.
Рекурсия. Рекурсивті алгоритмдер.
Функциялар. Функцияны сипаттау.
Си-дегі кез-келген программа - бұл айнымалылар сипаттамасы мен функциялар жиынтығы. Функциялар арсындағы байланыс мән қайтаратын аргументтер мен сыртқы айнымалылар арқылы орнатылады.
Return инструкциясы нәтижені шақыратын функциядан шақырған функцияға қайтару механизмін орындайды және return сөзінен кейін кез келген өрнек тұруы мүмкін.
Return <өрнек>; Өрнекті жақшаға да жазуға болады, бірақ ол міндетті емес.Си-дегі функция Раscal-ғы процедура мен функция секілді.
Айырмашылығы:-Си-де функцияның барлық аргументі параметрлер ретінде беріледі, яғни шақырылатын функцияға аргументтің өзі емес оның аргументтерінің мәні беріледі.
Си-гі кез келген функцияның прототипі болуы тиіс, яғни функция аты, аргументтерінің типі және қайтарылатын нәтиже типі көрсетілген тақырыбы хабарланады. Прототипі программа денесінде немесе бөлек тақырыптар файлында айқындалады. Функция прототипі компиляторға функция туралы информация береді де, сәйкесінше компилятор типтер сай келуін тексереді. Функция әртүрлі типті мән қайтара алады, М, int,void,float т.б.
Функцияның формальды және нақты аргументтері.
Айнымалылар жергілікті және сыртқы болуы мүмкін. Жергілікті айнымалылар функция ішінде сипатталады да сонда ғана “көрінеді”. Сыртқы айнымалылар кез келген функция сыртында сипатталады да, сол функцияның кез келген жерінде қолданылады. Кез келген функцияны анықтау үшін форматы:
<тип нәтиже> <функция аты> (параметр тізімі)
{
<функция денесі>
}
Mысалы:
#include
Int max (int m, int n, int k);
Main ( )
{ int a,b,c;
Printf (‘a,d,c=’);
Scanf (“%i,%i”,&a,&b,&c);
Priktf (“max (a,b,c)=%i”, max (a,b,c));
Return (0);
}
Int max (int m, int n, int k);
{
Int d;
D=(m>n)? m:n;
D=(d
Return d;
}
Формальды және нақты параметрлер
Кез келген функцияның формалды аргументтер тізімі болады (болмауы да мумкін). Программадан функция шақырғанда аргумент тізімі беріледі.
Аргументтер адрес алу мысалын қарастырайық:
#include
int prim (int *pa, int *pb);
int main ( )
{
int ia, ib, ic;
scanf (“%i,%i”,&ia,&ib);
ic=prim (&ia,&ib);
printf (“kob=%d\n”,ic);
return (0);
}
int prim (int *pa, int*pb);
{
int q;
q=*pa * *pb;
return (q);
}
С++-те аргументтерді беру барысында көрсеткіш орнына тікелей сілтеме беруге болады. Сілтеме де аргументке сілтейді, бірақ көрсеткішті айқындау операторын қолдануды қажет етпейді. Мысалы, төмендегі С++ тіліндегі программада функцияны шақырғанда адрес алу операторы, ал функция денесінде көрсеткіш опраторлары қатыспайды.
#include
Int prim (int &pa, int &pb);
Int main ( )
Int ia, ib, ic;
cin >>ia; cin >>ib;
Ic=prim (ia,ib);
cout >< “kob=”<
Return (0);
}
Int prim (int &pa, int &pb)
{int q;
q=pa +pb;
return (q);
}
Аргументтерді берілу тәсілдері.
Аргументтерінің айнымалы-мән ретінде берілу тәсілі: Аргументтер мән ретінде берілгенде функцияның ішінде аргумент аттас жергілікті айнымалы құрылады да оның мәні функцияда өзгеруі мүмкін, бірақ аргументтің мәні өзгермейді.
Айнымалы-сілтеме арқылы берілу тәсілі:
Аргументтегі айнымалы сілтеме арқылы берілгенде функция аргументтің мәнін емес, оның адресін алады. Ал мұнда құрылған жергілікті айнымалы көрсеткіш болады. Бұл, жадыны үнемдеуге мүмкіндік береді және функцияның орындалу барысында айнымалы аргумент мәні өзгереді. Бұл жағдайда функция аргумент айнымалы сілтеме арқылы бірнеше мән қайтара алады. Әртүрлі типті аргументті функцияларды қарастырайық:
Функция аргументтері Char, int, float, double, массив типті бола алады. Функция аргументтері болмауы да мүмкін. Онда Void қызметші сөзі қолданылады және ол функцияның аргументтерінің жоқ екенін білдіреді.
Mысалы,
#include
Void primer(void);
Int main ( )
{
printf (“cанның кубын анықтау”);
Primer ( );
Return (0);
}
Void primer (void)
{
int t=8;
Printf (“t-ның кубы=%d\n”,t*t*);
}
Функция аргументі ретінде массивті беруге болады, мұнда функция массивтің бірінші элементінің адресін көрсеткіш түрінде қабылдап алады.
Мысалы:
#include
void summ_pr(int *prmas);
int main()
{
int inmas[5]={10,4,16,0,45};
summ_mas(inmas);
return(0);
}
void summ_pr(int *prmas)
{
int t,s;
for (t=s=0; t<5; t++) s+=prmas[t];
printf(“массивтің элементтерінің қосындысы=%i \n”,s);
}
Функцияның аргументі ретінде массивті беру барысында массивті өлшемі белгісіз түрде де көрсетуге болады. Мына түрде void pr_mas(float mas[]) сипатталады.
Рекурсия. Рекурсивті алгоритмдер.
Өзін өзі шақыратын функция рекурсия деп аталады.Рекурсия тереңдігі дегеніміз – функция мәнін есептеуде өзін-өзі шақыру саны. Рекурсивті программалау стек принципіне сүйенеді.
Рекурсия түрлері мынадай:
сызықтық рекурсия;
параллель рекурсия;
қосалқы рекурсия;
жоғары ретті рекурсия.
Рекурсивті алгоритмдер мысалдары:
6!- алты факториялды есептеу алгоритмі:
#include
double fact(int n);
int n=6;
double f;
f=fact(n);
printf(‘6!=%10.0f\n”,f);
return (0);
}
double fact(int n)
{
if (n<1) return(1.0)
else
return(n*fact(n-1);
}
Евклид алгоритмі бойынша екі санның ең үлкен ортақ бөлгіші табу алгоритмі:
#include
#include
double euob(double n, double m);
int main ()
{
double f;
double n=1470;
double m=693;
f=euob(n,m);
printf(“f=%10.0f \n”, f);return(0);
}
double euob(double n, double m)
{
w=floor(fmod(n,m);
if (w==0) return(m);
else return(euob(m,w));
}
Дәріс №8.Өзін-өзі тексеру сұрақтары немесе тестер
1. Ішкі программа дегеніміз не?
2. Функция қандай типті мәндер қайтара алады?
3. Рекурсияның қандай түрлері бар?
Дәріс №9 Қатарлық тип. Атаулар. Жады.
Қатарлық тип.
Атаулар.
Жады.
Қатарлық тип
Қатарлық типтер символдар тізбегіне айтылады. қатарлық типтер char* (символ кµрсеткіші) типінде анықталады. Кµрсеткіш жадтағы орналасқан адресін білдіреді. қатарлық типті айнымалылар қатарлық типтегі бірінші тұрған символ адресіне байланысты болады. Мысалы:
char *str = "HELLO";
қатарлы тип пен қатарлы тип айнымалылардың жадта орналасуы кµрсетілген.
Сурет 9.1 Қатарлы тип пен қатарлы тип айнымалылардың жадта орналасуы
Литерал қатарлы типтер қос жоғары үтірлер аралығына жазылады. Компилятор әрқашан литерал қатарлы типтердің соңын білдіретін символ белгілеуі керек. қатарлы типтің кез-келген символын ажратып жазу мүмкін.
"Name\tAddress\tTelephone" // табулациямен ажратылған сµз
"ASCII character 65: \101" // 'A' арналады '101'
Бір қатарға симайтын ұзын қатарлы типтер (\) символы жәрдемінде ажратылып жазылуы мүмкін. мысалы:
“ biz inf 12 top \
studentteri Universitettin \
en bilgir studentteri”
Бұл “ biz inf 12 top studentteri Universitettin en bilgir studentteri” мағынасын береді.
Көп жағдайда программа “А” қатарлы тип пен ‘А’ символын шатастыру нәтижесінде қәте нәтиже береді. Бұл екеуі бір біріне тең емес, біріншісі А 2 байт және ‘\0’ символымен аяқталады, екіншісі бір байт кµлем иелейді.
Атаулар
Программалау тілінде программаны құру үшін әр түрлі мақсатты сөздерден және аттардан пайдаланамыз. Біз айнымалы аттарын енгізуге мысалдар кµрдік. Бұлардан басқа функция аттары, тип аттары және макро аттары бар.
Аттар (сөздер) программалар құруда программа құрушыға түсінікті сµздер жиындығын құрайтын мағынаға ие сµздер мен мәндерді ұйымдастыруға ыңғайлылық тудырады. Нәтижеде, компилятор оларды орындағанда сол аттардан пайдаланады. Мысалы, temperatura айнымалысы сол атты жадта бірнеше байттардан тұратын айнымалыға орын ажратады. Кейінірек, компилятор сол адресте сол есімді (атты) шақырады.
C++ программалау тілі тµмендегі жарамды аттарды (идентификатор) жарату құралдарынан пайдаланады. Есім (ат) ең кемінде бір символ немесе одан кµп символдардан олар әріптер (‘A’..’Z’ немесе ‘a’.. ‘z’ ), цифралар (0..9) немесе тµменгі сызықша ( _ ) символдарынан тұрады. Тек бас символ цифра болмауы тиіс. Бас әріппен басталған есім кіші әріпінен басталатын есімінен айырмашылыққа ие.
Мысалы:
salary // жарамды
salary2 // жарамды
2salary // жарамсыз (цифрамен басталады)
_salary // жарамды
Salary // жарамды бырақ salary дан басқа
Жады
Компьютер программаны орындауда орындалатын программа кодтарын сақтау үшін Random Access Memory (RAM) жадынан пайдаланылады. Бұны біз сақталатын кейін бе келетін биттер (bit 0 және 1) тізбегін түсінеміз. Жад кейін 8 биттен тұратын байт бµліктерінен құралады. Байттар тізбегі жадта адрестеледі. Демек, әрі байт жадта µз адресіне ие.
Жадыдағы бит пен байттар
Достарыңызбен бөлісу: |