Дүкен чегі



Кіріспе
1. Есептің қойылымы
2. Қолданылған әдістер
3. Есептің алгоритмі
4. Бағдарламаның баяндалуы
4.1 Жалпы мағлұматтар
4.2 Функциялдық тағайындалуы (қолдануы)
4.3 Логикалық құрылымның баяндалуы
4.4 Шақыру және жіктеу
4.5 Қажетті техникалық жабдықтар
4.6 Кіріс мәліметтер (енгізу)
4.7 Шығыс мәліметтер (шығару)
5. Қортынды
6. Қолданылған әдебиеттер
Turbo Pascal тілінде біз массивтермен, файлдармен, процедуралармен және тағыда басқа операциялармен жұмыс істей аламыз.
Менің курстық жұмысымда мен осы операциялардың кейбірін қолдана отырып программа құрдым. Менің программам дүкендегі жалғыз сатушы, кассалық аппараттың орнына компьютермен жұмыс істеуі және тауарлар туралы мәліметтер енгізуі. Сонымен бірге тауар қалдықтарның жалпы бағасын есептеп, оларды инвентаризациялауды ұйымдастыру қажет. Кейіннен Shop.txt тексттік файлына шығаруы туралы программа құруым керек.
1. Фаронов В.В. Turbo Pascal 7.0. Начальный курс: Учебное пособие.-
Москва.:Нолидж, 1998
2. Культин Н.Б. Turbo Pascal в задачах и решениях.- СПб.:БХВ-Петербург, 2003
3. Муртазина А.У., Тусупова Б.Б. Основы программирования на языках Паскаль и Си. Методические указания к лабораторным работам по курсу “Языки и технология программирования”.- Алматы: КазНТУ, 2000

ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ

БIЛIМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛIГI

Қ. И. Сәтбаев атындағы
ҚАЗАҚ ҰЛТТЫҚ ТЕХНИКАЛЫҚ УНИВЕРСИТЕТI

Ақпараттық Технoлогиялар Институты

Техникалық кибернетика кафедрасы

КУРСТЫҚ ЖОБАҒА ТҮСIНIК

Тақырыбы:
Дүкен (чегі)

Орындаған: ВП(б)-04-6к тобының
студенті Мұратов Аслан
Тексерген:
Рахатова Қ. Н.

Алматы 2004

Мазмұны

Кіріспе
1. Есептің қойылымы
2. Қолданылған әдістер
3. Есептің алгоритмі
4. Бағдарламаның баяндалуы
1. Жалпы мағлұматтар
2. Функциялдық тағайындалуы (қолдануы)
3. Логикалық құрылымның баяндалуы
4. Шақыру және жіктеу
5. Қажетті техникалық жабдықтар
6. Кіріс мәліметтер (енгізу)
7. Шығыс мәліметтер (шығару)
5. Қортынды
6. Қолданылған әдебиеттер

Мазмұны

Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ... ... ... ... ... ... ... ... ... ... ... ..4
1. Есептің
қойылымы ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ..5
2. Қолданылған
әдістер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ...6
Сұрыптау
алгоритмдері ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ..6
Таңдау арқылы
сұрыптау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ..6
Айырбаспен
сұрыптау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ...7
Шейкерлі
сұрыптау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ...8
Қосу арқылы
сұрыптау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... .9
Хоар
сұрыптау ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... .11
Іздеу
алгоритмдері ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... 13
Сызықты
іздеу ... ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ...
... ... ... ... ..13
Тосқауылы бар
іздеу ... ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ...
... ... 14
Екілік (бинарлы)
іздеу ... ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ...
... ..15
3. Есептің
алгоритмі ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... 17
4. Бағдарламаның
баяндалуы ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... ... ...
... ... 20
4.1. Жалпы
мағлұматтар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ...20
4.2. Функциялдық тағайындалуы
(қолдануы) ... ... ... ... ... ... . ... ... ... ... ..20
4.3. Логикалық құрылымның
баяндалуы ... ... ... ... ... ... .. ... ... ... ... ... ... .21
4.4. Шақыру және
жіктеу ... ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... ...
... ... 22
4.5. Қажетті техникалық
жабдықтар ... ... ... ... ... ... .. ... ... ... ... ... ... ... ... 22
4.6. Кіріс мәліметтер
(енгізу) ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..
... ..22
4.7. Шығыс мәліметтер
(шығару) ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 23

5.
Қортынды ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... .24
6. Қолданылған
әдебиеттер ... ... ... ... ... ... . ... ... ... ... ... ... ... ... ... ...
... ... ... .25

Кіріспе

Turbo Pascal тілінде біз массивтермен, файлдармен, процедуралармен және
тағыда басқа операциялармен жұмыс істей аламыз.
Менің курстық жұмысымда мен осы операциялардың кейбірін қолдана отырып
программа құрдым. Менің программам дүкендегі жалғыз сатушы, кассалық
аппараттың орнына компьютермен жұмыс істеуі және тауарлар туралы
мәліметтер енгізуі. Сонымен бірге тауар қалдықтарның жалпы бағасын есептеп,
оларды инвентаризациялауды ұйымдастыру қажет. Кейіннен Shop.txt тексттік
файлына шығаруы туралы программа құруым керек.

1.Есептің қойылымы

Дүкендегі жалғыз сатушы, кассалық аппараттың орнына компьютермен жұмыс
істейді. Тауарлар туралы мәліметтер базасы келесі параметрлер: тауар аты,
өлшем бірлігі, бірлік бағасы, саны арқылы сипатталады. Сатып алу
рәсімдеуін: чек жазып беру және базаны түзетудіұйымдастыру керек. Сонымен
бірге тауар қалдықтарының жалпы бағасын есептеп, оларды
инвентаризациялауды ұйымдастыру керек. Нәтижесін Shop.txt тексттік файлына
шығару керек.

2. Қолданылған әдістер

Сұрыптау алгоритмдер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.

Мысалы: a массивiнiң N бүтiн сандарының өсуi бойынша таңдау арқылы
сорттау.

Program Sort_Tandau1;
Var a:array[1..20] 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_Tandau2;
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лес
элементтер жұбын орындарымен ауыстырамыз. Мұндай бiр өтуден кейiн N номерi
орынында максимал элемент орналасады (бiрiншi көбiкше “қалқып” шықты).
Келесi өту N-1 элементке дейiн қарастыру керек және т.с.с. Барлығы N-1 өту
қажет болады.

Мысалы: a массивiнiң N бүтiн сандарының өсуi бойынша айырбаспен
сұрыптау. (Негiзгi вариант)

Program Sort_Auis1;
Var a:array[1..20] 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к өтулер саны N div 2-ге теi.

Мысалы: N бүтiн сандардан құралған А массивiн Шейкерлi сорттау арқылы
өсу ретiмен орналастыру.

Program Shaker;
Var a:array[1..20] 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.

Мысалы: N бүтiн сандардан құралған А массивiн сызықты iздеуi бар қосу
арқылы сұрыптау арқылы өсу ретiмен орналастыру.

Program Sort_Include1;
Var a:array[1..20] 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к iздеуi бар қосу
арқылы сұрыптау арқылы өсу ретiмен орналастыру.

Program Sort_Include2;
Var a :array[1..20] of integer;
N,i,k,x,c,left,right : 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];}
left:=1; right:=k;
{iздеуге керектi фрагменттiң оң және сол шекарасы}
while leftright do
{соңғы кiрудiң екiлiк iздеуi}
begin
c:=(left+right+1) div 2;
{ үлкен жаққа дөңгелектенген ортасы }
if x=a[c] then left:=c
{ортасы мен оң жағын аламыз}
else right:=c-1; {ортасыз сол жағын аламыз}
end;
if x=a[left] then left:=left+1;
{х қосылуға орын босата отырып, массивтi 1 орынға оңға жылжытамыз}
for i:=k downto left do a[i+1]:=A[i];
a[left]:=x;
end;
For i:=1 to n do write(A[i],' '); {реттелген массив}
end.

Хоар сұрыптауы

Бұл сұрыптауды жылдам сұрыптау деп те атайды. Әдiстi 1962 жылы Оксфорд
университетiнiң профессоры К.Хоар жасаған болатын. N бүт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 элементтер санына пропорционал.

Мысалы: N бүтiн сандардан құралған А массивiн жылдам сұрыптау арқылы
өсу ретiмен орналастыру.

Program Quick_Sort;
Var a:array[1..20] of integer;
N,i : integer;
{Процедураға сұрыпталатын үзiндiнiң оң және сол шекаралары берiледi}
Procedure QSort(L,R:integer);
Var X,y,i,j:integer;
Begin
X:=a[(L+R) div 2];
i:=L; j:=R;
while i=j do
Begin
while a[i]X do i:=i+1;
while a[j]X do j:=j-1;
if i=j then
Begin
y:=a[i]; a[i]:=a[j]; a[j]:=y;
i:=i+1; j:=j-1;
end;
end;
if Lj then QSort(L,j);
if iR then QSort(i,R);
end;
Begin
write('Массив элементтерiнiң саны');
read(N);
For i:=1 to n do
writeln('Массивтi енгiзiңiз');
read(a[i]);
QSort(1,n); {бiрiншiден n-шiге дейiнгi элементтердi реттеу}
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н санды a массив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 Poisk1;
Var a:array[1..20] of integer;
N, X, i:integer;
begin
read(N); {N=20}
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..20] of integer;
N,X,i:integer;
Begin
read(N); {N=20}
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 Poisk2b;
Var a:array[1..20] of integer;
N,X,i,y:integer;
Begin
read(N); {N=20}
For i:=1 to N do read(a[i]);
read(X);
y:=a[N]; ... жалғасы

Сіз бұл жұмысты біздің қосымшамыз арқылы толығымен тегін көре аласыз.
Ұқсас жұмыстар
Сауда-саттық
Мейрамхана бизнесі нарығында қазақ тағамдарын ілгерлету ерекщеліктері
Банктік шоттарындағы ақша қаражаттарының есебі
Тапсырысты жіберу нысаны
Банк клиенттерінің әртүрлі төлемдерді орындауы үшін тіркелудің автоматты жүйесін жасау
Ақшаның теориялық аспектілері және оның түрлері
Қолма-қол ақшасыз есеп айырылысу нышандары
Мәміле түсінігі
Ақша нарығының құрылымы мен құралдары
Ақшаның қажеттілігі, мәні және қызметтері
Пәндер