Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Doc / Programmirovanie.docx
Скачиваний:
30
Добавлен:
24.03.2015
Размер:
444.3 Кб
Скачать

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 қосылады*/

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

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-түрдегі есептер

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-түрдегі есептер

Жиым ішіндегі екі элементтің бір-бірімен орнын ауыстыру үшін қосымша тағы бір айнымалы керек болады. Мысалы, a[i] және a[j] элементтерінің орнын ауыстыру үшін қосымша R айнымалысы керек:

R=a[i]; a[i]=a[j];a[j]:=R;

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

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

{ int r=a[i];

a[i]=a[j];

a[j]=r;}

3-класс есептері

Жиымдарды синхронды түрде өңдеуде жиымдар элементін қарастыру кезінде индекстер бірдей қадамға өзгереді. Мысалы, бүтін сандардан құралған nэлементтерден тұратын 2 жиым берілген делік. Жаңа с жиымы мынадай формула арқылы алынады: c[i]=a[i]+b[i];

For(int i=0;i<n;i++) c[i]=a[i]+b[i];

Жиымдарды асинхронды өңдеу кезінде әр жиым индексі өз реттілігімен өзгеріп отырады.

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-класс есептері

Іздеу есептерінде берілген шартқа сәйкес келетін элементті іздеп табу керек. Ол үшін жиым элементтерін біртіндеп тізбектей қарастырып отырып шартты тексеріп шығу керек. Осылай ету барысында циклден шығудың екі жолы бар:

  • Керекті элемент табылғаннан кейін;

  • Жиым элементтері тегіс қаралып шықты, керекті элемент табылмады.

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-ға тең элемент жоқ!”);

Вектор

Вектор(vector) массив сияқты, оның да элементтеріне массив элеметтеріне қатынағандай қатынаймыз. Бірақ вектордың бір артықшылығы, вектор өлшемін қадағалау қажет емес, себебі вектор өз өлшемін біледі. Вектор өлшемін өзгерту үшін, орындау барысында элементті қосу немесе жою жеткілікті.

Векторды программада қолдану үшін vector директивасын қосу керек, std атаулар кеңістігін көрсету керек.

Төмендегі вектор мен массивтің қолдануы көрсетілген

#include <vector> //Подключаем директиву vector

#include <iostream>

using namespace std; //Используем пространство имен std

int main(void)

{

   vector<int> v(10); //Объявили вектор в десять элементов типа int

   for (int i=0;i<10;i++) v[i]=i+1; //Записали в вектор числа 1,2,3...10

   for (int i=0;i<10;i++) cout<<v[i]<<" ";//Вывод всех элементов вектора на экран

   cout<<endl;

   int arr[10]; //Объявили массив в десять элементов типа int

   for (int i=0;i<10;i++) arr[i]=i+1; //Записали в массив числа 1,2,3...10

   for (int i=0;i<10;i++) cout<<arr[i]<<" ";//Вывели массив на экран

   cout<<endl;

   return 0;

}

Вектордың негізгі әрекеттері

Push_back(element) – vector элемент қосу

Pop_back(element) – vector дың элементін жою

erase(iterator) – vector дан элементті немесе элементтер тізбнгін жояды

begin()– коллекция басын көрсететін итераторды қайтарады.

end()–коллекция соңын көрсететін итераторды қайтарады.

Соседние файлы в папке Doc