Turbo pascal тілі туралы ақпарат
Кiрiспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...3
1. Есеп қойылымы ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 4
2. Қолданылған әдiстер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...4
3. Есеп алгоритмi. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .13
4. Бадағрламаның баяндалуы. ... ... ... ... ... ... ... ... ... ... ... ... ... ... .14
4.1 Жалпы мағлұмат. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .15
4.2 Функциялардың тағайындалуы. ... ... ... ... ... ... ... ... ... ... ... .19
4.3 Логикалық құрылымның баяндалуы. ... ... ... ... ... ... ... ... ... 19
4.4 Шақыру және жүктеу. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .22
4.5 Қажеттi техникалық жабдықтар. ... ... ... ... ... ... ... ... ... ... ...22
4.6 Kiрiс мәлметтер енгiзу. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 22
4.7 Шығыс мәлметтер шығару. ... ... ... ... ... ... ... ... ... ... ... ... ... .22
5. Қорытынды. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...28
6. Қолданылған әдебиеттер. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .29
7. Бағдарлама листингісі ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 30
1. Есеп қойылымы ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 4
2. Қолданылған әдiстер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...4
3. Есеп алгоритмi. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .13
4. Бадағрламаның баяндалуы. ... ... ... ... ... ... ... ... ... ... ... ... ... ... .14
4.1 Жалпы мағлұмат. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .15
4.2 Функциялардың тағайындалуы. ... ... ... ... ... ... ... ... ... ... ... .19
4.3 Логикалық құрылымның баяндалуы. ... ... ... ... ... ... ... ... ... 19
4.4 Шақыру және жүктеу. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .22
4.5 Қажеттi техникалық жабдықтар. ... ... ... ... ... ... ... ... ... ... ...22
4.6 Kiрiс мәлметтер енгiзу. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 22
4.7 Шығыс мәлметтер шығару. ... ... ... ... ... ... ... ... ... ... ... ... ... .22
5. Қорытынды. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...28
6. Қолданылған әдебиеттер. ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .29
7. Бағдарлама листингісі ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 30
Паскаль тілі – жоғары дәрежелі программалау тіліне жатады. Бұл тіл Fortran тілінен бастау алады. Паскаль тілін 1971 жылы швейцар ғалымы Никлаус Вирт ойлап шығарды. Ол оны ұлы француз ғалымы Блез Паскальдің құрметіне «Паскаль» деп атайды. Вирт программалау тілін бас әріптен басталуын ұсынады. 20-шы ғасырдың 80-інші жылдары Borland фирмасы Паскаль тілінің MS-DOS операциялық жүйесіне арналған TurboPascal деген версиясын шығарады. Осы кезден бастап ТР аса танымал болды. Қазіргі кезде графикалық программалау жүйелері кең тараса да, ТР әсіресе жас программалаушылар (студенттер) арасында кең танымал. Көп программалаушылар өзінің жұмысын ТР тілінен бастайды.
TurboPascal тілі стандартты Паскальға қарағанда көп мүмкіндіктер береді. ТР-да Паскальдағы көптеген шектеулер жоқ.TurboPascal-да структуралық, процедуралық, обьекті-негізделген программалауды жүзеге асыруға болады. TurboPascal тіліне көптеген платформаларға арналып компиляторлар жазылған.
Әрбір Pascal-программада программа атынан және 2 бөлімнен тұрады:
I. баяндау бөлімі
II. программа денесі
Баяндау бөлімінде программада қолданылатын айнымалылар, процедуралар мен функциялар, типтер, массивтер және тағы басқа конструкциялар баяндалады.
Мысалы:
program myprog;
const
n=100;
type
matrix=array[1..n] of Integer;
float=Extended;
var
a, b,c: Real;
Мұндағы type, var, const, Real, Integer, array, program TurboPascal-дің резервті сөздері. Қалған сөздер ол идентификаторлар. Оларды программаулы өз қалауынша атай алады, бірақ мына ереже сақталу керек:
1)идентификатор әрқашан әріптен басталу керек. Егер
саннан басталса қате саналады.
2)идентификатор резервтелген сөзбен бірдей болмау
керек.
3)идентификатор ұзындығы 63 символдан аспау керек.
Программа денесі begin сөзінен басталып end сөзімен аяқталады және соңына нүкте қойылады. Begin – end сөздерінің арасында TurboPascal тілінің операторлары жазылады.
TurboPascal тілі стандартты Паскальға қарағанда көп мүмкіндіктер береді. ТР-да Паскальдағы көптеген шектеулер жоқ.TurboPascal-да структуралық, процедуралық, обьекті-негізделген программалауды жүзеге асыруға болады. TurboPascal тіліне көптеген платформаларға арналып компиляторлар жазылған.
Әрбір Pascal-программада программа атынан және 2 бөлімнен тұрады:
I. баяндау бөлімі
II. программа денесі
Баяндау бөлімінде программада қолданылатын айнымалылар, процедуралар мен функциялар, типтер, массивтер және тағы басқа конструкциялар баяндалады.
Мысалы:
program myprog;
const
n=100;
type
matrix=array[1..n] of Integer;
float=Extended;
var
a, b,c: Real;
Мұндағы type, var, const, Real, Integer, array, program TurboPascal-дің резервті сөздері. Қалған сөздер ол идентификаторлар. Оларды программаулы өз қалауынша атай алады, бірақ мына ереже сақталу керек:
1)идентификатор әрқашан әріптен басталу керек. Егер
саннан басталса қате саналады.
2)идентификатор резервтелген сөзбен бірдей болмау
керек.
3)идентификатор ұзындығы 63 символдан аспау керек.
Программа денесі begin сөзінен басталып end сөзімен аяқталады және соңына нүкте қойылады. Begin – end сөздерінің арасында TurboPascal тілінің операторлары жазылады.
1. Попов В.Б. TUPBO PASCAL для школьников, Санкт-Петербург 2002;
2. О.П Зеленяк . Практикум программирования на TUPBO PASCAL –М*Санкт-Петербург *Киев,2002;
3. А.И Гусев Учимся программировать:Pascal 7.0 Москва 2002;
4. Алексеев Е.Р., Чеснокова О.А., Павлыш В.Н., Славинская Л.В., ТУРБО ПАСКАЛЬ 7.0 численные методы, Москва 2004;
5. Ж.Қ. Масанов, Б.А. Бельгибаев, А.С. Бижанов Қ.Қ. Мақұлов TUPBO PASCAL Алматы 2004;
6. Фаронов В.В. Турбо Паскаль 7.0 Начальный курс.-М.:Нолидж,1997;
7. С.A Немнюгин TUPBO PASCAL практикум-Санкт-Петербург “Питер”, 2001;
8. Фаронов В.В. Турбо Паскаль 7.0 Практика программирования.-М.:Нолидж,1997;
9. А.У Муртазина Б.Б Тусупова Основы программирования на языках Паскаль и СИ Методические указания Часть 1 Алматы-2004;
10. Культин С.В Турбо Паскаль в задачах и примерах Алматы 2003;
2. О.П Зеленяк . Практикум программирования на TUPBO PASCAL –М*Санкт-Петербург *Киев,2002;
3. А.И Гусев Учимся программировать:Pascal 7.0 Москва 2002;
4. Алексеев Е.Р., Чеснокова О.А., Павлыш В.Н., Славинская Л.В., ТУРБО ПАСКАЛЬ 7.0 численные методы, Москва 2004;
5. Ж.Қ. Масанов, Б.А. Бельгибаев, А.С. Бижанов Қ.Қ. Мақұлов TUPBO PASCAL Алматы 2004;
6. Фаронов В.В. Турбо Паскаль 7.0 Начальный курс.-М.:Нолидж,1997;
7. С.A Немнюгин TUPBO PASCAL практикум-Санкт-Петербург “Питер”, 2001;
8. Фаронов В.В. Турбо Паскаль 7.0 Практика программирования.-М.:Нолидж,1997;
9. А.У Муртазина Б.Б Тусупова Основы программирования на языках Паскаль и СИ Методические указания Часть 1 Алматы-2004;
10. Культин С.В Турбо Паскаль в задачах и примерах Алматы 2003;
Пән: Информатика, Программалау, Мәліметтер қоры
Жұмыс түрі: Курстық жұмыс
Тегін: Антиплагиат
Көлемі: 33 бет
Таңдаулыға:
Жұмыс түрі: Курстық жұмыс
Тегін: Антиплагиат
Көлемі: 33 бет
Таңдаулыға:
КУРСТЫҚ ЖОБАҒА ТҮСІНІКТЕМЕ ЖАЗБА
Тақырыбы:
„Бәйге”
МАЗМҰНЫ
Кiрiспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 3
1. Есеп
қойылымы ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .
... ... ... ... .4
2. Қолданылған
әдiстер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .
... ...4
3. Есеп алгоритмi.
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .
... ..13
4. Бадағрламаның баяндалуы.
... ... ... ... ... ... ... ... ... ... ... ... ... ... ..14
4.1 Жалпы мағлұмат.
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..1 5
4.2 Функциялардың тағайындалуы.
... ... ... ... ... ... ... ... ... ... ... ..19
4.3 Логикалық құрылымның баяндалуы.
... ... ... ... ... ... ... ... ... .19
4.4 Шақыру және жүктеу.
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..22
4.5 Қажеттi техникалық жабдықтар.
... ... ... ... ... ... ... ... ... ... ... 22
4.6 Kiрiс мәлметтер енгiзу.
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 22
4.7 Шығыс мәлметтер шығару.
... ... ... ... ... ... ... ... ... ... ... . ... ... 22
5. Қорытынды.
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .
... ... ... 28
6. Қолданылған әдебиеттер.
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..29
7. Бағдарлама
листингісі ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... .
... ...30
Кiрiспе
TurboPascal тілі туралы
Паскаль тілі – жоғары дәрежелі программалау тіліне жатады. Бұл тіл
Fortran тілінен бастау алады. Паскаль тілін 1971 жылы швейцар ғалымы
Никлаус Вирт ойлап шығарды. Ол оны ұлы француз ғалымы Блез Паскальдің
құрметіне Паскаль деп атайды. Вирт программалау тілін бас әріптен
басталуын ұсынады. 20-шы ғасырдың 80-інші жылдары Borland фирмасы Паскаль
тілінің MS-DOS операциялық жүйесіне арналған TurboPascal деген версиясын
шығарады. Осы кезден бастап ТР аса танымал болды. Қазіргі кезде графикалық
программалау жүйелері кең тараса да, ТР әсіресе жас программалаушылар
(студенттер) арасында кең танымал. Көп программалаушылар өзінің жұмысын ТР
тілінен бастайды.
TurboPascal тілі стандартты Паскальға қарағанда көп мүмкіндіктер
береді. ТР-да Паскальдағы көптеген шектеулер жоқ.TurboPascal-да
структуралық, процедуралық, обьекті-негізделген программалауды жүзеге
асыруға болады. TurboPascal тіліне көптеген платформаларға арналып
компиляторлар жазылған.
Әрбір Pascal-программада программа атынан және 2 бөлімнен тұрады:
I. баяндау бөлімі
II. программа денесі
Баяндау бөлімінде программада қолданылатын айнымалылар, процедуралар
мен функциялар, типтер, массивтер және тағы басқа конструкциялар
баяндалады.
Мысалы:
program myprog;
const
n=100;
type
matrix=array[1..n] of Integer;
float=Extended;
var
a, b,c: Real;
Мұндағы type, var, const, Real, Integer, array, program TurboPascal-дің
резервті сөздері. Қалған сөздер ол идентификаторлар. Оларды программаулы өз
қалауынша атай алады, бірақ мына ереже сақталу керек:
1)идентификатор әрқашан әріптен басталу керек. Егер
саннан басталса қате саналады.
2)идентификатор резервтелген сөзбен бірдей болмау
керек.
3)идентификатор ұзындығы 63 символдан аспау керек.
Программа денесі begin сөзінен басталып end сөзімен аяқталады және соңына
нүкте қойылады. Begin – end сөздерінің арасында TurboPascal тілінің
операторлары жазылады.
Кез-келген программалау тілінде есепті шығару үшін бір әдіс
қолданылады. Ол әдіс бірнеше этаптардан тұрады:
1) Есеп шартын анықтау
2) Есепті сұрыптау
3) Есеп шығару үшін алгоритм құру
4) Алгоритмді реализациялау
5) Программа құрып, оны тестілеу
6) Программаны қолдап, жаңарту
Есепті шығару үшін оны шығарудың әр қадамын жазып шығу керек. Бұл
алгоритмдеу деп аталады. Ал қадамдарды алгоритмдер деп атайды. Дұрыс
алгоритм құру ең қиын процесс болып табылады. Алгоритм құру үшін есепті
бірнеше кішкентай тапсырмаларға бөледі. Көбінесе, алгоритм құру кезінде
келесі тапсырмалар қолданылады:
1) Мәліметтерді оқу
2) Мәліметтерді өңдеу немесе есептеу
3) Нәтижені шығару
Алгоритмді алгоритмдік тілде құрастырған соң, оны TurboPascal тілінде
құрастырып, программа құрау керек. Программа құраған соң оны тестілеу
керек. Ол үшін нәтижелері белгілі болатын мәндер беру керек. Егер берілген
мәндерден белгілі нәтиже шықса, онда программа дұрыс құрылған болып
саналады.
1.Есеп қойылымы.
“Бәйге” ойыны: Ойыншы жарысқа қатысқан үш аттың бiреуiн таңдайды, егер
сол ат бiрiншi келсе ол жеңiске жетедi.Аттардың жылдамдығы әр этапта
кездейсоқ сандар датчигi арқылы құрылған программа бойынша таңдалады.
2.Қолданылған әдiстер.
Айырбаспен сорттау (“көпiршik” тәсiлiмен)
Тәсiл идеясы рет бойынша массивтiң көршiлес жұптары тексерiлуiнде
құрылған. Егер олар керектi реттiлiкте болмаса, онда көршiлес элементтер
жұбын орындарымен ауыстырамыз. Мұндай бiр өтуден кейiн N номерi орынында
максимал элемент орналасады (бiрiншi көбiкше “қалқып” шықты). Келесi өту N-
1 элементке дейiн қарастыру керек және т.с.с. Барлығы N-1 өту қажет болады.
Айырбаспен сорттаудың есептеу қиындығы O(N*N).
Мысалы: А массивiнiң N бүтiн сандарының өсуi бойынша айырбаспен
сорттау.
program Sort_Obmen1;
var A:array[1..100] of integer;
N,i,k,x : integer;
begin
write('Массив элементтерiнiң саны');
read(N);
for i:=1 to n do
writeln('Массивтi енгiзiңiз');
read(A[i]);
for k:=n-1 downto 1 do { k – салыстырылатын жұптар саны }
for i:=1 to k do
if A[i]A[i+1] then
{көршiлес элементтердi орындарымен ауыстырамыз}
begin x:=A[i]; A[i]:=A[i+1]; A[i+1]:=x; end;
for i:=1 to n do write(A[i],' '); {реттелген массив}
end.
Iздеу алгоритмдерi.
Iздеу алгоритмдерi мысалы массивте белгiлi қасиеттерi бар элементтердi
табу үшiн қолданылады. Әдетте элементтiң алғашқы және соңғы кiрулерiн
iздеудегi есеп берiлгендерiмен ажыратады. Төменде келтiрiлген барлық
алгоритмдерде N бүтiн санды А массивiнде Х-қа тең элемент iздеу керек деп
есептеледi.
Сызықтық iздеу. Сызықтық iздеу екi еселi шарты бар циклмен (while
немесе repeat - until) орындалады. Бiрiншi шарт индекстiң массивке
тиiстiлiгiн тексередi, мысалы, (i=N). Екiншi шарт – бұл iздеудiң шарты.
Бiздiң жағдайда while циклiнде бұл iздеудi жалғастыру шарты: (A[i]X), ал
repeat – until циклiнде бұл iздеудi аяқтау шарты: (A[i]=X). Цикл денесiнде
әдетте тек жалғыз оператор: массивтегi индекстiң өзгеруi ғана жазылады.
Циклдан шыққаннан кейiн қай шарт бойынша шыққанымызды тексеруiмiз
керек. Әдетте if операторында циклдiң бiрiншi шартын қайталайды. Бұл шарт
орындалуын while циклi жағдайында шарттың орындалуын, ал repeat – until
циклiмен оның бұзылуы кезiнде сәттi iздеу деп айтуға болады.
Мысалы: Сызықты iздеу.
program Poisk;
var A:array[1..100] of integer;
N, X, i:integer;
begin
read(N); {N=100}
for i:=1 to N do
writeln('Массивтi енгiзiңiз');
read(A[i]);
writeln('Iзделiнетiн санды енгiзiңiз');
read(X);
i:=1; {i:=0;}
while (i=N) and (A[i]X) do i:=i+1;
{repeat i:=i+1; until (iN) or (A[i]=X);}
if i=N then write(' A массивiне ', i,' орында', X ,' санының бiрiншi
кiруi ')
else write('тапқан жоқпыз');
end.
Соңғы кiрудi iздеу кезiнде енгiзгеннен кейiн келесi операторлар жүру
керек.
i:=N; {i:=N+1;}
while (i=1) and (A[i]X) do i:=i-1;
{repeat i:=i-1; until (i1) or (A[i]=X);}
if i=1 then write(' A массивiне ', i,' орында', X ,' санының соңғы кiруi
')
else write('тапқан жоқпыз');
Тосқауылы бар iздеу. Тосқауылы бар iздеу әрбiр рет массив шекарасымен
байланысқан циклдегi шартты iздей бермеу идеясынан тұрады. Бұны массивке
тосқауыл орнату: iздеу шартын қанағаттандыратын кез-келген элемент орнату
арқылы жүзеге асыруға болады. Бұл жағдайда индекстiң өзгеруiне шек
қойылады.
Ендi тек iздеу шарты ғана қалып, табылған элементте немесе тосқауылда
циклдан шығуға болады. Мұндай жағдайда циклдан шыққаннан кейiн бiз
тосқауылды тапқан жоқ па екендiгi тексерiледi. Тосқауылы бар iздеудi
есептеу қиындығы сызықтыға қарағанда төмен, бiрақ сондай тiзбектi өлшемiдi,
N – массив элемент саны бар.
Тосқауылды орнатудың екi тәсiлi бар: қосымша элемент немесе массивтiң
ең шеткi элементiнiң орнына.
Мысалы: Тосқауылы бар iздеу
program Poisk2a;
var A:array[1..101] of integer;
N,X,i:integer;
begin
read(N); {N=100}
for i:=1 to N do
writeln('Массивтi енгiзiңiз');
read(A[i]);
writeln('Iзделiнетiн санды енгiзiңiз');
read(X);
A[N+1]:=X; {қосымша элемент арқылы тосқауыл қою}
i:=1; {i:=0;}
while A[i]X do i:=i+1;
{repeat i:=i+1; until A[i]=X;}
if i=N then write(' A массивiне ', i,' орында', X ,' санының бiрiншi
кiруi ')
else write('тапқан жоқпыз');
end.
program Poл;
var A:array[1..100] of integer;
N,X,i,y:integer;
begin
read(N); {N=100}
for i:=1 to N do read(A[i]);
read(X);
y:=A[N]; {соңғы элементтi сақтау}
A[N]:=X; {тосқауылды массивтiң соңғы орнына орнату}
i:=1; {i:=0;}
while A[i]X do i:=i+1;
if (iN) or (y=X) then
write(' A массивiне ', i,' орында', X ,' санының бiрiншi кiруi ')
else write('тапқан жоқпыз');
A[N]:=y;
end.
Екiлiк (бинарлы) iздеу. Екiлiк iздеу алгоритмiн берiлген қасиетi бар
элементтi iздеу тек сол қасиет бойынша реттелген массивтен табуға болады.
Сонымен берiлген мәнi бар элементтi элементтерi өспелi не кемiмелi
массивтен табуға болады. Ал, мысалы, берiлген цифрлар қосындысы бар санды
табу үшiн, массив элеметтерiнiң цифрлары қосындысының өсу не кему ретiмен
орналасуы қажет.
Алгоритм идеясы массив әрбiр рет қақ бөлiнiп, берiлген элемент жатуы
мүмкiн бөлiгi алынады. Бөлiну iздеуге арналған массив бөлiгiнiң бiр
элементтен көп болғанша жүрiп, содан кейiн сол қалған элементтi берiлген
iздеу шартына орындалатындығы тексерiледi.
Бұл алгоритмнiң бiрiншi және соңғы кiрулердi iздеуге арналған екi
модификациясы бар. Бұл орташа элемент қалай таңдалынатындығына байланысты:
кiшi не үлкен жаққа қарай дөңгелектенуi. Бiрiншi жағдайда орташа элемент
массивтiң сол жағына, ал екiншi жағдайда оң жағына тиiстi болады.
Екiлiк iздеу алгоритм жұмысы процесiнде iздеу жүргiзiлуi қажеттi
фрагмент бөлiгi әрбiр рет шамамен екi есе азаю керек. Бұл алгоритмнiң
есептеу қиындығы 2 негiзi бар N логарифмдi дәрежеге тең, мұндағы N – массив
элементтерiнiң саны.
Мысалы: Х санының өсу ретiмен орналасқан массивке енуiн iздеу
program Poisk3a;
var A:array[1..100] of integer;
N,X,left,right,i,c:integer;
Begin
Writeln(‘массивтiң өлшемiн енгiз’);
read(N); {N=100}
writeln('өсу ретiмен массив енгiзiңiз');
for i:=1 to N do read(A[i]);
writeln(‘өз элементiңдi енгiз’);
read(X);
left:=1; right:=N;
{iздеуге арналған сол және оң шекара фрагменттерi}
while leftright do
begin
c:=(left + right) div 2;
{кiшi жаққа қарай дөңгелектелiнген орта}
if XA[c] then
{егер массив кему ретiмен енгiзiлсе, онда if XA[c]}
left:=c+1
{left ауыстыра отырып ортасыз оң жағын аламыз}
else right:=c;
{right ауыстыра отырып ортасыз сол жағын аламыз }
end;
if X=A[left] then {мұндағы left = right, бiрақ әрқашан емес = c}
writeln(' A массивiне ', left,' орында', X ,' санының соңғы кiруi ')
else writeln('тапқан жоқпыз');
end.
Сұрыптау алгоритмдерi
Сорттаудың ең қарапайым есебi массив элементтерiнiң өсу не кему
ретiмен орналастыру болып табылады. Басқа есеп болып, берiлген белгiлер
бойынша массив элементтерiн реттеу. Әдетте мұндай белгi ретiнде аргументi
массив элементтерi болып табылатын белгiлi функция мәнi болып табылады. Бұл
функцияны реттеушi функция деп атау қабылданған.
Сорттаудың әр түрлi тәсiлдерi бар. Әрбiр тәсiлдi N бүтiн сандардан
өспелi массивтi сорттау мысалында көрсетемiз.
Таңдау арқылы сұрыптау
Тәсiл идеясы массивтiң максималды элементiн тауып, оны соңғы элемент
(N номерлi) орнымен ауыстырылады. Содан кейiн максималды элемент N-1 орынға
дейiн iзделiп, сол N-1 орынға қойылады және т.с.с. Максимум емес, минимум
элемент iзделiп, оны бiрiншi, екiншi және т.с.с. орынға қоюға болады.
Сонымен қатар бұл әдiстiң модификацияланған түрi – бiр мезетте максимум
және минимум элементтердi iздеу қолданылады. Бұл жағдайда сыртқы циклдың
қадамдар саны N div 2.
Таңдау арқылы сорттаудың есептеу қиындығы - N*N шамасының өлшемi,
әдетте оны O(N*N) деп жазады. Бұл салыстырулар саны бiрiншi максимумды
iздегенде N-1-ге тең, содан кейiн N-2, N-3 және т.с.с. 1-ге дейiн, соымен
N*(N-1)2 болумен түсiндiрiледi.
Мысалы: А массивiнiң N бүтiн сандарының өсуi бойынша таңдау арқылы
сорттау.
program Sort_Vybor1;
var A:array[1..100] of integer;
N,i,m,k,x : integer;
begin
write('Массив элементтерiнiң саны');
read(N);
for i:=1 to n do
writeln('Массивтi енгiзiңiз');
read(A[i]);
for k:=n downto 2 do { k – max-ты iздеуге қажеттi элементтер саны }
begin
m:=1; { m - max орны}
for i:=2 to k do if A[i]A[m] then m:=i;
{ m және k номерлi элементтердi орындарымен ауыстырамыз}
x:=A[m]; A[m]:=A[k]; A[k]:=x;
end;
for i:=1 to n do write(A[i],' '); {реттелген массив}
end.
Мысалы: Жоғарыдағы есеп, бiрақ бiр мезеттегi max пен min таңдау
арқылы.
program Sort_Vybor2;
var A:array[1..100] of integer;
N,i,m,k,x,p : integer;
begin
write('Массив элементтерiнiң саны');
read(N);
for i:=1 to n do
writeln('Массивтi енгiзiңiз');
read(A[i]);
for k:=1 to n div 2 do { k - max және min жұбының орны }
begin
m:=k; { m - max орны }
p:=k; { p – min орны }
{max және min k-дан n-k+1 элементтер арасында iзделедi }
for i:=k+1 to n-k+1 do
if A[i]A[m] then m:=i
else if A[i]A[p] then p:=i;
{ p және k номерлi элементтердi орындарымен ауыстырамыз }
x:=A[p]; A[p]:=A[k]; A[k]:=x;
if m=k then m:=p;
{егер max k орында тұрса, ендi ол p орында тұр }
{ m және n-k+1 номерлi элементтердi орындарымен ауыстырамыз }
x:=A[m]; A[m]:=A[n-k+1]; A[n-k+1]:=x;
end;
for i:=1 to n do write(A[i],' '); {реттелген массив}
end.
Шейкерлi сұрыптау
Бұл алгоритм негiзiнен айырбас арқылы сорттаудың модификациясы болып
табылады. Айырмашылығы айырбас арқылы сорттауда өтулер бiр жақты ғана
болса, мұнда бағыт әрбiр рет сайын өзгерiп отырады. Сонымен қатар шейкерлi
сорттауда айырбас фактi мен айырбастың соңғы орнын анықтауға болады.
Негiзгi алгоритмде екiлiк өтулер саны N div 2-ге теi. Шейкерлi сорттаудың
есептеу қиындығы O(N*N).
Мысалы: N бүтiн сандардан құралған А массивiн Шейкерлi сорттау арқылы
өсу ретiмен орналастыру.
program Shaker;
var A:array[1..100] of integer;
N,i,k,x,j,d : integer;
begin
write('Массив элементтерiнiң саны');
read(N);
for i:=1 to n do
writeln('Массивтi енгiзiңiз');
read(A[i]);
d:=1; i:=0;
for k:=n-1 downto 1 do { k – салыстырылатын жұптар саны }
begin
i:=i+d;
for j:=1 to k do
begin
if (A[i]-A[i+d])*d0 then
{көршiлес элементтердi орындарымен ауыстыру}
begin x:=A[i]; A[i]:=A[i+d]; A[i+d]:=x; end;
i:=i+d;
end;
d:=-d;
{қозғалыс бағытын қарама-қарсыға өзгертемiз}
end;
for i:=1 to n do write(A[i],' '); {реттелген массив}
end.
Қосу арқылы сұрыптау
Берiлген тәсiлдiң идеясы әрбiр рет К элементтен тұратын реттелген
массивке реттеулiгi өзгермейтiндей етiп тағы бiр элемент қосамыз. Сорттаалу
массив енгiзiлумен қатар жүрiп отыруы мүмкiн.
Сорттау алдында массивтiң реттелген бөлiгi тек бiр ғана элементтен
тұрады, ол бөлек енгiзiледi немесе егер массив бар болса және ол жалғыз
және дұрыс орында тұр деп есептеледi.қосылатын элементке орын iздеудiң
әртүрлi тәсiлдерi қосу арқылы сорттаудың түрлi модификацияларына алып
келедi.
Сызықты iздеудi қолданғанда, қосу арқылы сорттаудыi есептеу қиындығы
O(N*N), ал екiлiк iздеу кезiнде - O(N*LogN) (негiзi 2 болатын логарифм)
болады.
Мысалы: N бүтiн сандардан құралған А массивiн сызықты iздеуi бар қосу
арқылы сорттау арқылы өсу ретiмен орналастыру.
program Sort_Include1;
var A:array[1..100] of integer;
N,i,k,x : integer;
begin
write('Массив элементтерiнiң саны ');
read(N);
writeln('Массивтi енгiзiңiз');
read(A[1]); {for i:=1 to n do read(A[i]);}
{k – массивтiң реттелген бөлiгiндегi элементтер саны}
for k:=1 to n-1 do
begin
read(x); {x:=A[k+1];}
i:=k;
while (i0)and(A[i]x) do
begin
A[i+1]:=A[i];
i:=i-1;
end;
A[i+1]:=x;
end;
for i:=1 to n do write(A[i],' '); {реттелген массив}
end.
Мысалы: N бүтiн сандардан құралған А массивiн ... жалғасы
Тақырыбы:
„Бәйге”
МАЗМҰНЫ
Кiрiспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 3
1. Есеп
қойылымы ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .
... ... ... ... .4
2. Қолданылған
әдiстер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .
... ...4
3. Есеп алгоритмi.
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .
... ..13
4. Бадағрламаның баяндалуы.
... ... ... ... ... ... ... ... ... ... ... ... ... ... ..14
4.1 Жалпы мағлұмат.
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..1 5
4.2 Функциялардың тағайындалуы.
... ... ... ... ... ... ... ... ... ... ... ..19
4.3 Логикалық құрылымның баяндалуы.
... ... ... ... ... ... ... ... ... .19
4.4 Шақыру және жүктеу.
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..22
4.5 Қажеттi техникалық жабдықтар.
... ... ... ... ... ... ... ... ... ... ... 22
4.6 Kiрiс мәлметтер енгiзу.
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 22
4.7 Шығыс мәлметтер шығару.
... ... ... ... ... ... ... ... ... ... ... . ... ... 22
5. Қорытынды.
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .
... ... ... 28
6. Қолданылған әдебиеттер.
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..29
7. Бағдарлама
листингісі ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... .
... ...30
Кiрiспе
TurboPascal тілі туралы
Паскаль тілі – жоғары дәрежелі программалау тіліне жатады. Бұл тіл
Fortran тілінен бастау алады. Паскаль тілін 1971 жылы швейцар ғалымы
Никлаус Вирт ойлап шығарды. Ол оны ұлы француз ғалымы Блез Паскальдің
құрметіне Паскаль деп атайды. Вирт программалау тілін бас әріптен
басталуын ұсынады. 20-шы ғасырдың 80-інші жылдары Borland фирмасы Паскаль
тілінің MS-DOS операциялық жүйесіне арналған TurboPascal деген версиясын
шығарады. Осы кезден бастап ТР аса танымал болды. Қазіргі кезде графикалық
программалау жүйелері кең тараса да, ТР әсіресе жас программалаушылар
(студенттер) арасында кең танымал. Көп программалаушылар өзінің жұмысын ТР
тілінен бастайды.
TurboPascal тілі стандартты Паскальға қарағанда көп мүмкіндіктер
береді. ТР-да Паскальдағы көптеген шектеулер жоқ.TurboPascal-да
структуралық, процедуралық, обьекті-негізделген программалауды жүзеге
асыруға болады. TurboPascal тіліне көптеген платформаларға арналып
компиляторлар жазылған.
Әрбір Pascal-программада программа атынан және 2 бөлімнен тұрады:
I. баяндау бөлімі
II. программа денесі
Баяндау бөлімінде программада қолданылатын айнымалылар, процедуралар
мен функциялар, типтер, массивтер және тағы басқа конструкциялар
баяндалады.
Мысалы:
program myprog;
const
n=100;
type
matrix=array[1..n] of Integer;
float=Extended;
var
a, b,c: Real;
Мұндағы type, var, const, Real, Integer, array, program TurboPascal-дің
резервті сөздері. Қалған сөздер ол идентификаторлар. Оларды программаулы өз
қалауынша атай алады, бірақ мына ереже сақталу керек:
1)идентификатор әрқашан әріптен басталу керек. Егер
саннан басталса қате саналады.
2)идентификатор резервтелген сөзбен бірдей болмау
керек.
3)идентификатор ұзындығы 63 символдан аспау керек.
Программа денесі begin сөзінен басталып end сөзімен аяқталады және соңына
нүкте қойылады. Begin – end сөздерінің арасында TurboPascal тілінің
операторлары жазылады.
Кез-келген программалау тілінде есепті шығару үшін бір әдіс
қолданылады. Ол әдіс бірнеше этаптардан тұрады:
1) Есеп шартын анықтау
2) Есепті сұрыптау
3) Есеп шығару үшін алгоритм құру
4) Алгоритмді реализациялау
5) Программа құрып, оны тестілеу
6) Программаны қолдап, жаңарту
Есепті шығару үшін оны шығарудың әр қадамын жазып шығу керек. Бұл
алгоритмдеу деп аталады. Ал қадамдарды алгоритмдер деп атайды. Дұрыс
алгоритм құру ең қиын процесс болып табылады. Алгоритм құру үшін есепті
бірнеше кішкентай тапсырмаларға бөледі. Көбінесе, алгоритм құру кезінде
келесі тапсырмалар қолданылады:
1) Мәліметтерді оқу
2) Мәліметтерді өңдеу немесе есептеу
3) Нәтижені шығару
Алгоритмді алгоритмдік тілде құрастырған соң, оны TurboPascal тілінде
құрастырып, программа құрау керек. Программа құраған соң оны тестілеу
керек. Ол үшін нәтижелері белгілі болатын мәндер беру керек. Егер берілген
мәндерден белгілі нәтиже шықса, онда программа дұрыс құрылған болып
саналады.
1.Есеп қойылымы.
“Бәйге” ойыны: Ойыншы жарысқа қатысқан үш аттың бiреуiн таңдайды, егер
сол ат бiрiншi келсе ол жеңiске жетедi.Аттардың жылдамдығы әр этапта
кездейсоқ сандар датчигi арқылы құрылған программа бойынша таңдалады.
2.Қолданылған әдiстер.
Айырбаспен сорттау (“көпiршik” тәсiлiмен)
Тәсiл идеясы рет бойынша массивтiң көршiлес жұптары тексерiлуiнде
құрылған. Егер олар керектi реттiлiкте болмаса, онда көршiлес элементтер
жұбын орындарымен ауыстырамыз. Мұндай бiр өтуден кейiн N номерi орынында
максимал элемент орналасады (бiрiншi көбiкше “қалқып” шықты). Келесi өту N-
1 элементке дейiн қарастыру керек және т.с.с. Барлығы N-1 өту қажет болады.
Айырбаспен сорттаудың есептеу қиындығы O(N*N).
Мысалы: А массивiнiң N бүтiн сандарының өсуi бойынша айырбаспен
сорттау.
program Sort_Obmen1;
var A:array[1..100] of integer;
N,i,k,x : integer;
begin
write('Массив элементтерiнiң саны');
read(N);
for i:=1 to n do
writeln('Массивтi енгiзiңiз');
read(A[i]);
for k:=n-1 downto 1 do { k – салыстырылатын жұптар саны }
for i:=1 to k do
if A[i]A[i+1] then
{көршiлес элементтердi орындарымен ауыстырамыз}
begin x:=A[i]; A[i]:=A[i+1]; A[i+1]:=x; end;
for i:=1 to n do write(A[i],' '); {реттелген массив}
end.
Iздеу алгоритмдерi.
Iздеу алгоритмдерi мысалы массивте белгiлi қасиеттерi бар элементтердi
табу үшiн қолданылады. Әдетте элементтiң алғашқы және соңғы кiрулерiн
iздеудегi есеп берiлгендерiмен ажыратады. Төменде келтiрiлген барлық
алгоритмдерде N бүтiн санды А массивiнде Х-қа тең элемент iздеу керек деп
есептеледi.
Сызықтық iздеу. Сызықтық iздеу екi еселi шарты бар циклмен (while
немесе repeat - until) орындалады. Бiрiншi шарт индекстiң массивке
тиiстiлiгiн тексередi, мысалы, (i=N). Екiншi шарт – бұл iздеудiң шарты.
Бiздiң жағдайда while циклiнде бұл iздеудi жалғастыру шарты: (A[i]X), ал
repeat – until циклiнде бұл iздеудi аяқтау шарты: (A[i]=X). Цикл денесiнде
әдетте тек жалғыз оператор: массивтегi индекстiң өзгеруi ғана жазылады.
Циклдан шыққаннан кейiн қай шарт бойынша шыққанымызды тексеруiмiз
керек. Әдетте if операторында циклдiң бiрiншi шартын қайталайды. Бұл шарт
орындалуын while циклi жағдайында шарттың орындалуын, ал repeat – until
циклiмен оның бұзылуы кезiнде сәттi iздеу деп айтуға болады.
Мысалы: Сызықты iздеу.
program Poisk;
var A:array[1..100] of integer;
N, X, i:integer;
begin
read(N); {N=100}
for i:=1 to N do
writeln('Массивтi енгiзiңiз');
read(A[i]);
writeln('Iзделiнетiн санды енгiзiңiз');
read(X);
i:=1; {i:=0;}
while (i=N) and (A[i]X) do i:=i+1;
{repeat i:=i+1; until (iN) or (A[i]=X);}
if i=N then write(' A массивiне ', i,' орында', X ,' санының бiрiншi
кiруi ')
else write('тапқан жоқпыз');
end.
Соңғы кiрудi iздеу кезiнде енгiзгеннен кейiн келесi операторлар жүру
керек.
i:=N; {i:=N+1;}
while (i=1) and (A[i]X) do i:=i-1;
{repeat i:=i-1; until (i1) or (A[i]=X);}
if i=1 then write(' A массивiне ', i,' орында', X ,' санының соңғы кiруi
')
else write('тапқан жоқпыз');
Тосқауылы бар iздеу. Тосқауылы бар iздеу әрбiр рет массив шекарасымен
байланысқан циклдегi шартты iздей бермеу идеясынан тұрады. Бұны массивке
тосқауыл орнату: iздеу шартын қанағаттандыратын кез-келген элемент орнату
арқылы жүзеге асыруға болады. Бұл жағдайда индекстiң өзгеруiне шек
қойылады.
Ендi тек iздеу шарты ғана қалып, табылған элементте немесе тосқауылда
циклдан шығуға болады. Мұндай жағдайда циклдан шыққаннан кейiн бiз
тосқауылды тапқан жоқ па екендiгi тексерiледi. Тосқауылы бар iздеудi
есептеу қиындығы сызықтыға қарағанда төмен, бiрақ сондай тiзбектi өлшемiдi,
N – массив элемент саны бар.
Тосқауылды орнатудың екi тәсiлi бар: қосымша элемент немесе массивтiң
ең шеткi элементiнiң орнына.
Мысалы: Тосқауылы бар iздеу
program Poisk2a;
var A:array[1..101] of integer;
N,X,i:integer;
begin
read(N); {N=100}
for i:=1 to N do
writeln('Массивтi енгiзiңiз');
read(A[i]);
writeln('Iзделiнетiн санды енгiзiңiз');
read(X);
A[N+1]:=X; {қосымша элемент арқылы тосқауыл қою}
i:=1; {i:=0;}
while A[i]X do i:=i+1;
{repeat i:=i+1; until A[i]=X;}
if i=N then write(' A массивiне ', i,' орында', X ,' санының бiрiншi
кiруi ')
else write('тапқан жоқпыз');
end.
program Poл;
var A:array[1..100] of integer;
N,X,i,y:integer;
begin
read(N); {N=100}
for i:=1 to N do read(A[i]);
read(X);
y:=A[N]; {соңғы элементтi сақтау}
A[N]:=X; {тосқауылды массивтiң соңғы орнына орнату}
i:=1; {i:=0;}
while A[i]X do i:=i+1;
if (iN) or (y=X) then
write(' A массивiне ', i,' орында', X ,' санының бiрiншi кiруi ')
else write('тапқан жоқпыз');
A[N]:=y;
end.
Екiлiк (бинарлы) iздеу. Екiлiк iздеу алгоритмiн берiлген қасиетi бар
элементтi iздеу тек сол қасиет бойынша реттелген массивтен табуға болады.
Сонымен берiлген мәнi бар элементтi элементтерi өспелi не кемiмелi
массивтен табуға болады. Ал, мысалы, берiлген цифрлар қосындысы бар санды
табу үшiн, массив элеметтерiнiң цифрлары қосындысының өсу не кему ретiмен
орналасуы қажет.
Алгоритм идеясы массив әрбiр рет қақ бөлiнiп, берiлген элемент жатуы
мүмкiн бөлiгi алынады. Бөлiну iздеуге арналған массив бөлiгiнiң бiр
элементтен көп болғанша жүрiп, содан кейiн сол қалған элементтi берiлген
iздеу шартына орындалатындығы тексерiледi.
Бұл алгоритмнiң бiрiншi және соңғы кiрулердi iздеуге арналған екi
модификациясы бар. Бұл орташа элемент қалай таңдалынатындығына байланысты:
кiшi не үлкен жаққа қарай дөңгелектенуi. Бiрiншi жағдайда орташа элемент
массивтiң сол жағына, ал екiншi жағдайда оң жағына тиiстi болады.
Екiлiк iздеу алгоритм жұмысы процесiнде iздеу жүргiзiлуi қажеттi
фрагмент бөлiгi әрбiр рет шамамен екi есе азаю керек. Бұл алгоритмнiң
есептеу қиындығы 2 негiзi бар N логарифмдi дәрежеге тең, мұндағы N – массив
элементтерiнiң саны.
Мысалы: Х санының өсу ретiмен орналасқан массивке енуiн iздеу
program Poisk3a;
var A:array[1..100] of integer;
N,X,left,right,i,c:integer;
Begin
Writeln(‘массивтiң өлшемiн енгiз’);
read(N); {N=100}
writeln('өсу ретiмен массив енгiзiңiз');
for i:=1 to N do read(A[i]);
writeln(‘өз элементiңдi енгiз’);
read(X);
left:=1; right:=N;
{iздеуге арналған сол және оң шекара фрагменттерi}
while leftright do
begin
c:=(left + right) div 2;
{кiшi жаққа қарай дөңгелектелiнген орта}
if XA[c] then
{егер массив кему ретiмен енгiзiлсе, онда if XA[c]}
left:=c+1
{left ауыстыра отырып ортасыз оң жағын аламыз}
else right:=c;
{right ауыстыра отырып ортасыз сол жағын аламыз }
end;
if X=A[left] then {мұндағы left = right, бiрақ әрқашан емес = c}
writeln(' A массивiне ', left,' орында', X ,' санының соңғы кiруi ')
else writeln('тапқан жоқпыз');
end.
Сұрыптау алгоритмдерi
Сорттаудың ең қарапайым есебi массив элементтерiнiң өсу не кему
ретiмен орналастыру болып табылады. Басқа есеп болып, берiлген белгiлер
бойынша массив элементтерiн реттеу. Әдетте мұндай белгi ретiнде аргументi
массив элементтерi болып табылатын белгiлi функция мәнi болып табылады. Бұл
функцияны реттеушi функция деп атау қабылданған.
Сорттаудың әр түрлi тәсiлдерi бар. Әрбiр тәсiлдi N бүтiн сандардан
өспелi массивтi сорттау мысалында көрсетемiз.
Таңдау арқылы сұрыптау
Тәсiл идеясы массивтiң максималды элементiн тауып, оны соңғы элемент
(N номерлi) орнымен ауыстырылады. Содан кейiн максималды элемент N-1 орынға
дейiн iзделiп, сол N-1 орынға қойылады және т.с.с. Максимум емес, минимум
элемент iзделiп, оны бiрiншi, екiншi және т.с.с. орынға қоюға болады.
Сонымен қатар бұл әдiстiң модификацияланған түрi – бiр мезетте максимум
және минимум элементтердi iздеу қолданылады. Бұл жағдайда сыртқы циклдың
қадамдар саны N div 2.
Таңдау арқылы сорттаудың есептеу қиындығы - N*N шамасының өлшемi,
әдетте оны O(N*N) деп жазады. Бұл салыстырулар саны бiрiншi максимумды
iздегенде N-1-ге тең, содан кейiн N-2, N-3 және т.с.с. 1-ге дейiн, соымен
N*(N-1)2 болумен түсiндiрiледi.
Мысалы: А массивiнiң N бүтiн сандарының өсуi бойынша таңдау арқылы
сорттау.
program Sort_Vybor1;
var A:array[1..100] of integer;
N,i,m,k,x : integer;
begin
write('Массив элементтерiнiң саны');
read(N);
for i:=1 to n do
writeln('Массивтi енгiзiңiз');
read(A[i]);
for k:=n downto 2 do { k – max-ты iздеуге қажеттi элементтер саны }
begin
m:=1; { m - max орны}
for i:=2 to k do if A[i]A[m] then m:=i;
{ m және k номерлi элементтердi орындарымен ауыстырамыз}
x:=A[m]; A[m]:=A[k]; A[k]:=x;
end;
for i:=1 to n do write(A[i],' '); {реттелген массив}
end.
Мысалы: Жоғарыдағы есеп, бiрақ бiр мезеттегi max пен min таңдау
арқылы.
program Sort_Vybor2;
var A:array[1..100] of integer;
N,i,m,k,x,p : integer;
begin
write('Массив элементтерiнiң саны');
read(N);
for i:=1 to n do
writeln('Массивтi енгiзiңiз');
read(A[i]);
for k:=1 to n div 2 do { k - max және min жұбының орны }
begin
m:=k; { m - max орны }
p:=k; { p – min орны }
{max және min k-дан n-k+1 элементтер арасында iзделедi }
for i:=k+1 to n-k+1 do
if A[i]A[m] then m:=i
else if A[i]A[p] then p:=i;
{ p және k номерлi элементтердi орындарымен ауыстырамыз }
x:=A[p]; A[p]:=A[k]; A[k]:=x;
if m=k then m:=p;
{егер max k орында тұрса, ендi ол p орында тұр }
{ m және n-k+1 номерлi элементтердi орындарымен ауыстырамыз }
x:=A[m]; A[m]:=A[n-k+1]; A[n-k+1]:=x;
end;
for i:=1 to n do write(A[i],' '); {реттелген массив}
end.
Шейкерлi сұрыптау
Бұл алгоритм негiзiнен айырбас арқылы сорттаудың модификациясы болып
табылады. Айырмашылығы айырбас арқылы сорттауда өтулер бiр жақты ғана
болса, мұнда бағыт әрбiр рет сайын өзгерiп отырады. Сонымен қатар шейкерлi
сорттауда айырбас фактi мен айырбастың соңғы орнын анықтауға болады.
Негiзгi алгоритмде екiлiк өтулер саны N div 2-ге теi. Шейкерлi сорттаудың
есептеу қиындығы O(N*N).
Мысалы: N бүтiн сандардан құралған А массивiн Шейкерлi сорттау арқылы
өсу ретiмен орналастыру.
program Shaker;
var A:array[1..100] of integer;
N,i,k,x,j,d : integer;
begin
write('Массив элементтерiнiң саны');
read(N);
for i:=1 to n do
writeln('Массивтi енгiзiңiз');
read(A[i]);
d:=1; i:=0;
for k:=n-1 downto 1 do { k – салыстырылатын жұптар саны }
begin
i:=i+d;
for j:=1 to k do
begin
if (A[i]-A[i+d])*d0 then
{көршiлес элементтердi орындарымен ауыстыру}
begin x:=A[i]; A[i]:=A[i+d]; A[i+d]:=x; end;
i:=i+d;
end;
d:=-d;
{қозғалыс бағытын қарама-қарсыға өзгертемiз}
end;
for i:=1 to n do write(A[i],' '); {реттелген массив}
end.
Қосу арқылы сұрыптау
Берiлген тәсiлдiң идеясы әрбiр рет К элементтен тұратын реттелген
массивке реттеулiгi өзгермейтiндей етiп тағы бiр элемент қосамыз. Сорттаалу
массив енгiзiлумен қатар жүрiп отыруы мүмкiн.
Сорттау алдында массивтiң реттелген бөлiгi тек бiр ғана элементтен
тұрады, ол бөлек енгiзiледi немесе егер массив бар болса және ол жалғыз
және дұрыс орында тұр деп есептеледi.қосылатын элементке орын iздеудiң
әртүрлi тәсiлдерi қосу арқылы сорттаудың түрлi модификацияларына алып
келедi.
Сызықты iздеудi қолданғанда, қосу арқылы сорттаудыi есептеу қиындығы
O(N*N), ал екiлiк iздеу кезiнде - O(N*LogN) (негiзi 2 болатын логарифм)
болады.
Мысалы: N бүтiн сандардан құралған А массивiн сызықты iздеуi бар қосу
арқылы сорттау арқылы өсу ретiмен орналастыру.
program Sort_Include1;
var A:array[1..100] of integer;
N,i,k,x : integer;
begin
write('Массив элементтерiнiң саны ');
read(N);
writeln('Массивтi енгiзiңiз');
read(A[1]); {for i:=1 to n do read(A[i]);}
{k – массивтiң реттелген бөлiгiндегi элементтер саны}
for k:=1 to n-1 do
begin
read(x); {x:=A[k+1];}
i:=k;
while (i0)and(A[i]x) do
begin
A[i+1]:=A[i];
i:=i-1;
end;
A[i+1]:=x;
end;
for i:=1 to n do write(A[i],' '); {реттелген массив}
end.
Мысалы: N бүтiн сандардан құралған А массивiн ... жалғасы
Ұқсас жұмыстар
Пәндер
- Іс жүргізу
- Автоматтандыру, Техника
- Алғашқы әскери дайындық
- Астрономия
- Ауыл шаруашылығы
- Банк ісі
- Бизнесті бағалау
- Биология
- Бухгалтерлік іс
- Валеология
- Ветеринария
- География
- Геология, Геофизика, Геодезия
- Дін
- Ет, сүт, шарап өнімдері
- Жалпы тарих
- Жер кадастрі, Жылжымайтын мүлік
- Журналистика
- Информатика
- Кеден ісі
- Маркетинг
- Математика, Геометрия
- Медицина
- Мемлекеттік басқару
- Менеджмент
- Мұнай, Газ
- Мұрағат ісі
- Мәдениеттану
- ОБЖ (Основы безопасности жизнедеятельности)
- Педагогика
- Полиграфия
- Психология
- Салық
- Саясаттану
- Сақтандыру
- Сертификаттау, стандарттау
- Социология, Демография
- Спорт
- Статистика
- Тілтану, Филология
- Тарихи тұлғалар
- Тау-кен ісі
- Транспорт
- Туризм
- Физика
- Философия
- Халықаралық қатынастар
- Химия
- Экология, Қоршаған ортаны қорғау
- Экономика
- Экономикалық география
- Электротехника
- Қазақстан тарихы
- Қаржы
- Құрылыс
- Құқық, Криминалистика
- Әдебиет
- Өнер, музыка
- Өнеркәсіп, Өндіріс
Қазақ тілінде жазылған рефераттар, курстық жұмыстар, дипломдық жұмыстар бойынша біздің қор #1 болып табылады.
Ақпарат
Қосымша
Email: info@stud.kz