Автор: Пользователь скрыл имя, 11 Февраля 2013 в 11:06, лекция
С++ тілінің базалық жабдықтары. Программа құрылымы. Жиымдар
Қарастырылатын сұрақтар:
1. С++ тілінің базалық жабдықтары
2. Мәліметтер типі
3. Программа құрылымы
4. Айнымалылар мен өрнектер
5. Тармақталу, басқаруды беру операторлары және циклдік операторлар
6. Жиымдар (массивтер)
#include <iostream.h>
int sum (int a, int b); // функцияны хабарлау
int main() { int a=2, b=3, c, d;
c= sum(a,b); // функцияны шақыру
cin>>d;
cin>>sum(c,d); // функцияны шақыру
return 0;}
int sum (int a, int b); // функцияны анықтау
{return(a+b);}
Функция ішінде сипатталған шамалар мен оның параметрлері жергілікті деп аталады.
Бірігіп жұмыс істегенде, функция ақпаратпен алмасуы керек. Мұны ауқымды айнымалылар көмегімен жүзеге асыруға болады.
Функциядан қайтару механизмі:
return [өрнек];
Егер функция void сияқты сипатталса, онда өрнек көрсетілмейді.
Мысалы:
int f1 {return 1;} //дұрыс
void f2 {return 1;} // дұрыс емес, f2 мән қайтармайды
Өзін-өзі шақыратын функция рекурсивті деп аталады. Рекурсивті функцияның классикалық мысалы: факториалды есептеу.
Функция шаблонының форматы:
template <class Type> тақырып{
функция денесі}
Type сөзінің орнына басқа атты қолдануға болады.
Функцияның түрлері: стандартты библиотеканың фунциялары, енгізу/шығару функциялары, қатарлар мен символдармен жұмыс істейтін функциялар, математикалық функциялар.
Кез-келген программа мәліметтерді өңдеуге арналған. Мәліметтерге жады компиляция этапында немесе new операциясының, болмаса malloc функциясының көмегімен программаның орындалу барысында бөлінеді. Екі жағдайда да жадының үзіліссіз аймағы бөлінеді.
Егер мәліметтермен жұмысты бастағанға дейін оларды сақтауға қанша жады талап етілетінін анықтау мүмкін болмаса, онда жады қажеттілікке байланысты бөлінеді. Мәліметтерді ұйымдастырудың бұл тәсілі мәліметтердің динамикалық құрылымы деп аталады, олардың өлшемі программаның орындалуы кезінде өзгеріп отырады.
Программада сызықты тізімдер, стектер, кезектер, бинарлы бұтақтар жиі қолданылады.
Элементтер жиынын байланыстырудың ең қарапайым тәсілі- әр элементтің келесі элементке сілтеме жасауы. Мұндай тізім бір бағытты деп аталады. Егер әр элементке екінші сілтемені (алдыңғы элементке) қоссақ, онда ол екі бағытты деп аталады. Егер соңғы элементті алғашқының нұсқауышымен байланыстырсақ, онда ол сақиналы тізім деп аталады.
Әр элемент кілт бола алады. Кілт не бүтін , не қатар, не мәлімет өрісі болуы мүмкін.
Тізіммен келесі операцияларды орындауға болады:
Стек- бір бағытты тізімнің жеке жағдайы, стектің төбесінен элементті таңдап алуға және элементті қосуға болады. Басқа операциялар анықталмаған.
Таңдау кезінде элемент стектен алынып тасталынады. Стек LIFO (last in-first out) қағидасына сүйенеді.
push-стекке орналастыру функциясы және pop-стектен таңдау функциясы. Стекпен жұмыс істеуге арналған нұсқауыш оның төбесіне (top) нұсқалады.
Мысалы: стекке нөмірленген шарларды салайық (1, 2, 3, 4, 5). Ретімен орналастырайық, шарларды стектен алып тастау керек (5, 4, 3, 2, 1).
#include <iostream.h>
struct Node {
int d;
Node *p;};
Node *first(int d);
void push(Node**top, int d);
int pop(Node**top);
//…………………………………………………int main(){
Node *top=first(1);
for (int i=2:i<6; i++) push(&top, i);
while(top)
cout<<pop (&top)<<‘ ‘;
return 0;}
//………………………………………………
//стектің бастапқы қалыптасуы
Node *first(int d);{
Node *pv=new Node;
pv->d=d;
pv->p=0;
return pv;
}
//………………………………………………..
//Стекке орналастыру
void push(Node**top, int d){
Node *pv=new Node;
pv->d=d;
pv->p=*top;
*top= pv;
}
pv->d=d;
pv->p=0;
return pv;
}
//………………………………………………..
//Стекке орналастыру
void push(Node**top, int d){
Node *pv=new Node;
pv->d=d;
pv->p=*top;
*top= pv;
}
//…………………………………………………//стектен таңдау
int pop(Node**top){
int temp=(*top)->d;
Node *pv=*top;
*top=(*top)->p;
delete pv;
return temp;
}
Программаның нәтижесі: 5 4 3 2 1
Кезек-бір бағытты тізімнің жеке жағдайы, элементтерді қосу бір басынан, ал таңдау екінші басынан бастап жүргізіледі.
Кезек FIFO (first in-first out) қағидасына сүйенеді. Басқа операциялар анықталмаған.
add-кезекке орналастыру функциясы және del-кезектен таңдау функциясы. Кезектің басының нұсқауышы- pbeg, ал соңының нұсқауышы- pend
Бинарлы бұтақтар- түйіндерден
тұратын мәліметтердің
3лекция
Объектілі-бағытталған программалау. Класстар. Конструкторлар
Қарастырылатын сұрақтар:
Объектілі-бағытталған программа- лаудың негізі-класс. Класс қолданушы анықтайтын мәліметтер типі болып табылады. Класста мәліметтер құрылымы мен оларды өңдеу функциялары бірігеді. Класстың нақты шамалары класс объектілері деп аталады.
Объектілі-бағытталған программа- лаудың негізгі қасиеттері: инкапсуляция, мұрагерлік, полиморфизм.
Класстар – бұл нақты программада анықталған типтер. Класс –бұл объектілер емес, оларды құруға арналған шаблондар. Класстар class түйінді сөзінің көмегімен сипатталады.
Класстың мәліметтері мәлімет-
Базалық класс төмендегідей анықталады (синтаксис):
class <className>
{ private:
<жабық мәлімет-мүшелер>
<жабық конструкторлар>
<жабық функция-мүшелер>
protected:
<қорғалған мәлімет-мүшелер >
< қорғалған конструкторлар>
< қорғалған функция-мүшелер>
public:
<ашық мәлімет-мүшелер >
<ашық конструкторлар>
<ашық деструкторлар>
<ашық функция-мүшелер>
};
private, protected, public түйінді сөздері класстарды хабарлау кезінде бірнеше рет қолданылуы мүмкін. Олардың реті жоқ.
Мысалы:
class Complex {
public:
int real; // нақты бөлігі
int imaginary; // жорамал бөлігі
void Add(Complex x); // комплекс санды қосу
};
Complex класы үшін Add операциясы анықталған.
Классты анықтағанда, біз Complex типті айнымалыны құрамыз:
Complex number;
number айнымалысы Complex типінің мәнінен тұрады, яғни Complex класының объектісінен тұрады. Енді объект атрибуттарының мәндерін бере аламыз: number.real = 1;
number.imaginary = 2;
Complex класының тағы бір объектісін
құрып, оны біріншіге қоса
Complex num2;
number.Add(num2);
class Complex {public:
int real;
int imaginary;
void Add(Complex x);};
void Complex::Add(Complex x)
{ real = real + x.real;
imaginary = imaginary + x.imaginary;}
int main()
{Complex number; number.real = 1;
Complex number.imaginary = 3;
Complex num2;
Complex num2.real = 2;
num2.imaginary = 1;
number.Add(num2);
return 1;}
Конструкторлар объектіні инициализа- циялау үшін арналған және автоматты түрде шақырылады. Конструктордың негізгі қасиеттері:
Көшіру конструкторы- бұл класстың объектісіне нұсқауыштың жалғыз параметрі ретінде алынатын конструктордың арнайы түрі.
Берілу форматы:
T::T(const T&) {конструктор денесі},
мұндағы Т-конструктор аты.
Жаңа объект бар объектіні көшіру арқылы алынатын болса, онда көшіру конструкторы шақырылады.
3лекция
Объектілі-бағытталған программалау. Класстар. Конструкторлар
Қарастырылатын сұрақтар:
Объектілі-бағытталған программа- лаудың негізі-класс. Класс қолданушы анықтайтын мәліметтер типі болып табылады. Класста мәліметтер құрылымы мен оларды өңдеу функциялары бірігеді. Класстың нақты шамалары класс объектілері деп аталады.
Объектілі-бағытталған
программа- лаудың негізгі
Класстар – бұл нақты программада анықталған типтер. Класс –бұл объектілер емес, оларды құруға арналған шаблондар. Класстар class түйінді сөзінің көмегімен сипатталады.
Класстың мәліметтері мәлімет-
Базалық класс төмендегідей анықталады (синтаксис):
class <className>
{ private:
<жабық мәлімет-мүшелер>
<жабық конструкторлар>
<жабық функция-мүшелер>
protected:
<қорғалған мәлімет-мүшелер >
< қорғалған конструкторлар>
< қорғалған функция-мүшелер>
public:
<ашық мәлімет-мүшелер >
<ашық конструкторлар>
<ашық деструкторлар>
<ашық функция-мүшелер>
};
private, protected, public түйінді сөздері класстарды хабарлау кезінде бірнеше рет қолданылуы мүмкін. Олардың реті жоқ.
Мысалы:
class Complex {
public:
int real; // нақты бөлігі
int imaginary; // жорамал бөлігі
void Add(Complex x); // комплекс санды қосу
};
Complex класы үшін Add операциясы анықталған.
Классты анықтағанда, біз Complex типті айнымалыны құрамыз:
Complex number;
number айнымалысы Complex типінің мәнінен тұрады, яғни Complex класының объектісінен тұрады. Енді объект атрибуттарының мәндерін бере аламыз: number.real = 1;
number.imaginary = 2;
Complex класының тағы бір объектісін құрып, оны біріншіге қоса аламыз:
Complex num2;
number.Add(num2);
class Complex {public:
int real;
int imaginary;
void Add(Complex x);};
void Complex::Add(Complex x)
{ real = real + x.real;
imaginary = imaginary + x.imaginary;}
int main()
{Complex number; number.real = 1;
Complex number.imaginary = 3;
Complex num2;
Complex num2.real = 2;
num2.imaginary = 1;
number.Add(num2);
return 1;}
Конструкторлар объектіні инициализа- циялау үшін арналған және автоматты түрде шақырылады. Конструктордың негізгі қасиеттері: