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

1 Оператор;

2 Оператор;

......

N оператор;

}

Мұнда шарт-өрнекке кіретін айнымалы цикл ішінде өзгеріп отырады.

while

жоқ

иә

шарт?

операторлар

/* y=f(x) функциясының мәндерін х х0-ден xk-ға дейін dx қадаммен өзгергенде анықтау керек*/

#include <stdio.h>

#include <conio.h>

main ()

{

float x,y,x0,xk,dx;

int k; int n; clrscr();

printf(“x0,xk,dx= “);

scanf("%f%f%f",&x0,&xk,&dx);

printf("----------------------\n");

printf(" x | y\n");

printf("----------------------\n");

x=x0;

while (x<=xk)

{ y=-2.4*x*x+5*x-3;

printf("%6.2f | %6.2f\n",x,y);

x=x+dx;

}

printf("----------------------\n");

getch();

}

34.For операторының жазылуы:

for(x=x0;x<=xk;x+=dx)

{

<1-оператор>;

<2-оператор>;

. . .

<n-ператор>;

}

Мұндағы өрнек1: x=x0; – цикл айнымалысының бастапқы мәні, өрнек2: x<=xk; – циклдің қайталану шарты, өрнек3: x+=dx – цикл айнымалысының қадам мөлшеріне артуы.

For цикл операторында өрн3 ретінде жалпы дұрыс жазылған кез келген өрнекті пайдалануға болады. Мысалы:

for (d=0.1; d<50; d*=5)

printf("%f",d);

For цикл операторында бір немесе бірнеше өрнектерді жазбауға да болады, бірақ мұндайда ; символын міндетті түрде өз орындарына жазып отыру керек, мысалы:

x=2;

for(n=4; x<=100;)

x=x*n;

For цикл операторында құрама өрнектерді «,» операциясы арқылы жазуға да бола-ды,мұндайда бөлектенген өрнектер солдан оңға қарай есептеледі. Мысалы:

int x,y;

for (x=1,y=9;x<=10; x++,y--)

printf("%d%d\n", x,y);

Мұнда өрн1 орнына екі өрнек жазылған (x=1,y=9;) және олар x,y айнымалыларын өзгерту үшін қолданылады. Ал соңында өрн3 орнына да екі өрнек (x++,y--)жазылған.

#include<stdio.h>

#include<conio.h>

main()

{ int i,s=0; clrscr();

for(i = 10; --i;)

s += i;

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

getch();

}

35. Шарты соңынан тексерілетін do … while циклінің схемасы

Жалпы жазылу түрі:

do

{

1-оператор;

2-оператор;

… … …

n-оператор;

}

while (өрнек);

while

жоқ

иә

шарт?

1-оператор

do

2-оператор

n-оператор

Do ... while циклінде шарт соңында тексерілетін болғандықтан, оның тұлғасы ең болмағанда бір рет орындалады. Цикл соңында жазылған while(өрнек) өрнек ақиқат болса (немесе 0-ге тең болмаса), цикл тұлғасы қайтадан орындалады. Ал өрнек жалған болса (немесе 0-ге тең болса), цикл аяқталады.

// 15 бүтін сандар ішінен олардың максимумын табу

#include <stdio.h>

main ()

{

int a, max, i=1;

max = -32000; //max басында ең кіші санға тең болады

do

{

printf ("сан енгізіңіз: ");

scanf ("%d",&a);

if (a > max) max = a;

i++;

}

while (i<=15);

printf ("\n15 санның ең үлкені=%i",max);

getch();

36. Break операторы

Программа орындалуы кезінде цикл аяқталмай-ақ одан шығу үшін break операторы қолданылады. Егер бұл оператор бірі-нің ішіне бірі енгізілген қабаттасқан цикл ішінде орналасса, онда ол ішкі циклдан оның сыртқы циклына шығуды ғана жүзеге асырады.

Мысалы: Екіөлшемді массивтен – A[5,5] бірөлшемді массив – B[5] құрастыру керек. Оны түрлендіру ережесі: егер осы жолда бір теріс элемент болса, онда B[i]=1, әйтпесе B[i]=0 болуы тиіс.

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

{ b[i]=0;

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

if (a[i][j]<0

{ b[i]=1; break; }

}

Continue операторы

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

Мысалы: Екіөлшемді массив – A[5,5] берілген. Осы массивтегі теріс элементтердің санын анықтайтын және оларды квадраттайтын программа құру керек.

k=0;

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

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

if (a[i][j]>0

continue;

else

{ k=k+1;

a[i][j]=pow(a[i][j],2);

}

Goto операторы

Басқа тілдердегідей Си тілінде goto операторы көп қолданылмайды, бұл оператордың жазылуы:

goto <белгі>;

мұндағы белгі – оператор нөміріне ұқсас ерекше белгі, яғни идентификатор.

Бұл оператор бірінің ішіне бірі енгізілген бірнеше цикл жиынынан (мәліметтер арасында қателер кездессе) бірден сыртқа шығып кету керек болған кезде қолданылады. Мұндайда break операторын пайдалана алмаймыз.

Мысалы:

goto m5;

goto belgi2;

37.Айнымалылар типтерден бөлек жады кластары-мен де сипатталады. Осы уақытқа дейін кластарды көрсетпеуіміз олардың алдын ала келісім бойынша сипатталуына байланысты болды. Айнымалылар компьютер жадында немесе процессор регистрлері-нің бірінде сақталады. Ол үшін айнымалы кластары анықталады.

ЭЕМ жадының класы (storage class) айнымалылар-дың қолданылу аймағын (жедел жады немесе регис-трлер) және осы айнымалының ЭЕМ жадында сақ-талу ұзақтығын анықтайды.

Жалпы жағдайда айнымалыны немесе функцияны анықтап сипаттағанда, соған сәйкес түйінді сөз арқылы жады класын көрсетуге болады.

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

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

Әрбір айнымалы анықталған бір типке және жа-дының бір класына жатуы тиіс (жалпы ЭЕМ жад-ында не регистрлерде). Си тілінде ЭЕМ жадының 4 түрлі класы бар және оларды сипаттау үшін 4 түй-інді сөз қолданылады:

auto – автоматты класты сипаттау үшін қолданылады,

extern – сыртқы класты сипаттау үшін қолданылады,

static– статикалық класты сипаттау үшін қолданылады, regisrter – регистрлік класты сипаттау үшін қолданылады.

Автоматтық айнымалылар функция ішінде сипат-талған айнымалылар, егер жады класының басқа ай-қын сипатталуы болмаса, онда олар auto класына жа-татын болып саналады, яғни келісім бойынша функ-цияның ішінде сипатталған айнымалы автоматтық айнымалы болып саналады. Кейбір жағдайларда бе-рілген айнымалылар тек осы функцияның ішінде ғана сипатталған болса және осында ғана қолданылса, олар auto түйінді сөзі арқылы айқын сипаттала алады. Мысалы:

auto int m;

auto int b=12345;

auto float d=123.45;

auto char c;

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

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

Сыртқы айнымалылар. Функцияның сыртында сипатталатын айнымалылар сыртқы болып табы-лады. Олар функция ішінде қайта қолданылатын бол-са, extern түйінді сөзі арқылы сол айнымалы қайта сипатталатын болады. Олардың әсер ету аймағы гло-бальді болып саналады. Мысалы:

int t;

main()

{extern int t;

scanf("%d",&t);

while(t!=50)

pr();

printf("Поиск завершен\n");

}

pr()

{extern int t;

printf("ввод следующего числа\n");

scanf("%d",&t);

}

Егер pr()функциясында t айнымалысының сипат-талуы келтірілмесе де, t атты сыртқы айнымалы pr()функциясында келісім бойынша белгілі болып саналады. Егер main() және pr()функцияларында extern түйінді сөзі сол функциялар ішіндегі t ай-нымалысының сипатталуында келтірілмесе, онда t атты жаңа автоматты айнымалы пайда болады. Сонымен t атты сыртқы айнымалы бұл функциялар-да белгілі болмайды. Егер pr() функциясында t айнымалысының сипатталуында extern деген сөз жазылмаса, онда main()функциясында орналасқан t айнымалысы ешқашан жаңа мән қабылдай алмайды.

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

#include <stdio.h>

int fun()

{ int av=1;

static int stv=1;

printf("av=%d stv=%d\n",av++,stv++);

}

main()

{ for(int k=1; k<=3; k++)

{ printf("%d-шы адым: ",k); fun(); }

getch();

}

Бұл программаның жұмыс нәтижесі:

1-адым: av=1 stv=1

2-адым: av=1 stv=2

3-адым: av=1 stv=3

Регистрлік айнымалыларды register түйінді сөзі анықтайды. Әдетте программада сипаттала-тын айнымалылар ЭЕМ жадында сақталады,ал регистрлік айнымалылар процессордағы регистр-лерде сақталады. Осындай айнымалыларды пай-даланғанда, программаның жұмысы жылдамырақ орындалуы тиіс.

Жалпы жағдайда регистрлік айнымалылар автоматтық айнымалыға ұқсас. Егер регистрлік айнымалы программада сипатталса, осы сәтте бір регистр бос болса, онда компилятор керекті мәнді осы регистрде сақтайды деп саналады. Ал егер келтірілген талапты орындауға мүмкіндік болмаса, онда регистрлік айнымалы автоматтық айнымалы ретінде пайдаланылады.

38. Массив немесе жиым – бір типтегі элементтердің реттелген жиыны. Олар бір атаумен – идентификатормен аталады да, индексті айнымалы ұғымына сәйкес келеді. Мысалы, мынадай тізбек

0 1 1 2 3 5 8 13 21

Фибоначчи тізбегінің 9 элементін құрайды (алғашқы екі санды таңдап алып, келесі санды алдыңғы екеуін қосу жолымен алады), математикада a9 = 0,1,1,2,3,5,8,13,21.

Си тілінде осы тізбекке сай жиымды сипаттап, оған бастапқы мән беріп инициалдау үшін былай жазамыз:

int fib[8]={0,1,1,2,3,5,8,13,21};

немесе

int fib[]={0,1,1,2,3,5,8,13,21};

мұндағы fib – жиым аты, оның элементтері типі int, ал ұзындығы – 9, жиым элементтерінің индек-стері 0-ден бастап нөмірленеді, сол себепті 9 элемент 8 индекспен көрсетіледі. Мәндері көрсетілсе, индексті жазбаса да болады.

Ал былай болса,

int fib[8]={0,1,1,2,3};

қалған элементтер 0 болып саналады.

n=10; k=2; fib[n-k]={0,1,2,3};

деп те жазуға болады.

Жоғарыдағы тізбектің 3-ші элементін бір бүтін айнымалыға меншіктеу үшін былай жазамыз.

int а=fib[3]; // а = 2

Жиымды сипаттау кезінде оның ұзындығы нақты санмен көрсетіледі, мыс., a[20],

a[n] деп жазу үшін алдын ала

#define n 20 жолы көрсетіледі немесе

const n=20; болып жазылады. 5