Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Algoritm.doc
Скачиваний:
18
Добавлен:
08.03.2016
Размер:
179.2 Кб
Скачать

4. С тіліндегі күрделі арифметикалық операциялар, қатынас операциялары, инкремент және декремент операцияларын пайдалану. Құрама операторлар.

Арифметикалық операциялар символдар арқылы жазылады. Си тілінде мынадай операциялар бар: * - көбейту, / - бөлу, % - модуль бойынша бөлу(қалдықты анықтау), + -қосу, - - азайту.

Модуль бойынша бөлу бүтін санды бүтін санға бөлген кездегі қалдықты анықтайды. Мысалы: 20%3=2.

Қатынас операциялары. Қатынас операциялары екі мәнді салыстыру үшін қолданылады. Си тіліндегі қатынас операциясының тізбегі мынадай: ==, !=, <, <=, >, >=.

Егер қарастырылатын қатынас нәтижесі ақиқат болса, шарттық өрнектің мәні 1-ге тең болып саналады. Егер ол жалған болса, шарттық өрнек мәні 0-ге тең болады. Қатынас операциясының приоритеті арифметикалық операцияларға қарағанда, төмен және меншіктеу операторымен салыстырғанда жоғары болады. Ал қатынас операцияларын приоритеттеріне сәйкес етіп екі топқа бөлуге болады. Мұнда соңғы 4 операциясының приоритеті 1-ші және 2-ші операциялар приоритетімен салыстырғанда жоғары болады.

Инкремент және декремент операциялары(арттыру немесе кеміту) ++ және – түрінде жазылады. Бұлар кез келген операндтың мәндерін бірге арттыруға немесе кемітуге мүмкіндік береді.

Инкремент, яғни арттыру операциясы (++) және декремент (--), кеміту операциясы айнымалы (тек айнымалы мәнін) мәнін бірге арттырады немесе кемітеді. Олар айнымалы мәнін өзгертеді, яғни жасырын түрдегі меншіктеу амалы болып табылады. Кейде олар жеке оператор түрінде жазылады:

i++; немесе ++i;

Бұл екеуі де мынадай амалмен бірдей болып саналады i = i + 1;

Бұл екеуін өрнектерде жиі қолданады. Мысалы:

sum = sum +x * --i;

Инкремент пен декремент екі формада жазылады: префистік және постфикстік. Постфикстік арттыру былай жазылады: x++, ал префикстік арттыру былай жазылады: ++x. Префикстік амалдар негізгі операция алдында, ал постфикстік амалдар негізгі амалдан кейін орындалады.

Постфикстік формада x айнымалысының мәні оны қолданғаннан кейін өзгереді, ал префикстік формада – айнымалы мәні оны қолданғанға дейін өзгереді, яғни бір деген санға артады. Мысалы:

k=10;

x=k++; /* x=10 k=11 */

x=++k; /* x=12 k=12 */

Арттыру/кеміту операцияларын өрнек ішінде де орындау мүмкіндігі бар. Мысалы: sum=a+b++;/*алдымен a,b қосылады, сонан соң b 1-ге артады*/

sum=a+ ++b;/*алдымен b 1-ге артады, сосын барып a,b қосылады*/

Арттыру/кеміту операцияларының приоритеттері өте жоғары, тек жақша ішіндегі операциялардың приоритеті олардан жоғары болады.

Құрама операторларға жай құрама операторлар жəне блоктар жатады. Екеуі де жүйелі жақшаға алынып жазылады. Блокта жай құрама операторларға

қарағанда, айнымалыларды сипаттау жолдары болады.

Мысалы:

{

n++; жай құрама оператор

summa+=n;

}

{

int n=0;

n++; бұл блок

summa+=n;

}

5. С тіліндегі жиым (массив), вектор, матрицаларды пайдалану. Тілдің жиымдарды өңдеу тәсілдері.

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

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 индекспен көрсетіледі. Мәндері көрсетілсе, индексті жазбаса да болады.

Жиым элементтерін енгізу/шығару

Жиым элементтерін енгізу немесе оларды түрлендіру үшін цикл операторы қолданылады. Төменде 10 элементі бар жиымды 0-ден 9-ға дейінгі сандармен толтырып, сонан кейін оларды кері бағытта экранға шығару мысалы көрсетілген:

main ()

{int a[10];

int i;

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

a[i] = i;

for (i = 9; i>=0; i--)

printf(“ %i”, a[i]); }

Бірөлшемді жиым н/е вектор – элементтері бір индекспен анықталатын жиым.

Екіөлшемді жиым н/е матрица элементтері екі индекспен анықталатын жиым. Матрицаны пайдалану үшін тік жақшалар ішінде олардың екі өлшемініңде көлемін көрсету керек. М: int a[4][3];

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

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

{3,4,5},

{6,7,8},

{9,10,11} };

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

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

Жиымдарды өңдеу есептерінің түрлері (класстары)

Жиымды өңдеу есептері көбінесе бірыңғайланған 4 түрге бөлінеді.

1. Есептердің 1-түріне жиым элементтерінің барлығын немесе көрсетілгендерін бірдей бір тәсілмен өңдеу есептері жатады.

2. Есептердің 2-түріне жиым элементтерінің орналасу реттілігін өзгерту тәсілдері жатады.

3. Есептердің 3-класына бірнеше жиымдарды қатар өңдеу немесе бір жиымның ішкі элементтерін бірнеше топқа бөліп жеке-жеке өңдеу тәсілдері жатады. Жиымдар бір тәсілмен- синхронды өңделеді немесе әр түрлі тәсілмен – асинхронды түрде өңделеді.

4. Есептердің 4-класына жиымның берілген санға тең бірінші элементін табу, яғни іздеу есептері жатады.

1-есеп. Жиымның ең үлкен элементін анықтау керек

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

main()

{ int a[100];

int n;

printf("\nЖиым ұзындығы: ",n);

scanf("%i",&n);

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

{

a[i]=rand()%100-50; // кездейсоқ сандар 0 – 32767

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

}

int max=a[0];

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

if(a[i]>max) max=a[i];

printf("\n max=%i”,max);

getch(); }

rand() функциясы 0...32767 аралығын-дағы бүтін сан береді. Оны қолдану үшін stdlib.h директивасын қолдану қажет. Жиым элементтері екі разрядты оң және теріс сандардан тұруы үшін алынған кездейсоқ сан 100-ге бөлінгендегі қалдықтан 50 алып тасталынады.

2-есеп. Жиым элементтерін кері бағытта орналастыру

For(int i=0, j=n-1;i<j; i++, j--)

{ int r=a[i];

a[i]=a[j];

a[j]=r;}

3-есеп. Жиымның барлық жұп элементтерін жою керек

Int b[10];

Int I,j=0;

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

if(a[i]%2!=0) {b[j]=a[i]; j++}

For(i=0;i<j;i++)

Printf(“%d”, b[i]);

Printf(“\n”);

4-есеп. Берілген к санына тең жиымның алғашқы элементін табу.

Int k; Printf(“\nK=”); Scanf(“%i“,&k);

Int ok=0; //элемент табылғаны/табылмағаны белгісі

Int I, nom;

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

If(a[i]==k) {ok=1;nom=i;break;}

If(ok==1) printf(“\nnom=”, nom);

Else printf(“\nk-ға тең элемент жоқ!”);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]