- •1 Модуль. Алгоритмдеу және программалауға кіріспе
- •1 Тақырып. Кіріспе
- •1 Лекция
- •1.1 „Автоматтандыру есептерін программалау" курсының мақсаттары мен міндеттері.
- •1.2 Есептеуіш техника құралдарын пайдаланып ақпаратты өндеу және басқару жүйелерін әзірлеу. Компьютерлік жүйелердің ақпаратты өндеу және басқару әдістері мен міндеттері
- •2 Тақырып.Дербес компьютерді (дк) программалауды автоматтандырудың программалық құралдары
- •2 Лекция
- •2.1 Дербес компьютердің программалық қамтамасыз етілуі туралы
- •2.2 Программалауды автоматтандыру әдістері. Алгоритмдік тілдер және оларға қойылатын талаптар.
- •2.3 Процедуралы–бағытталған тілдер және объектке–бағытталған программалау туралы түсінік.
- •3.1 Программаларды құру құралдары
- •3.2 Программалаудың біртұтас жүйелері.
- •3.3 Техникалық есептер
- •3 Тақырып. Есептерді алгоритмдеу негіздері.
- •4 Лекция
- •4.1 Алгоритм анықтамасы. Алгоритмдерді бейнелеу тәсілдері.
- •4.2 Алгоритмдердің блок-схемаларын безендіру ережелері.
- •4.3 Алгоритм құрылымдарының түрлері.
- •4 Тақырып Негізгі процедураға бағытталған алгоритмдеу тілінде программалау
- •5 Лекция
- •5.1 Оқылатын алгоритмдеу тілінің негізгі түсініктері
- •5.3 Тілдің негізгі объектілерін жазу ережелері
- •5.4 Деректердің типтері
- •5.5 Деректердің стандартты типтері
- •6 Лекция
- •6.2 Өрнектер. Арифметикалық және логикалық өрнектер
- •7 Лекция Құрылымды деректер (типтер)
- •7.1 Массивтер
- •7.2 Жиындар
- •7.3 Жазбалар
- •Модуль 2 Алгоритмдік тілдерде программалаудың арнайы мәселелері
- •5 Тақырып Программадағы басқару құрылымдар
- •8.1 Алгоритмдік тілдің операторлары.
- •8.3 Басқару операторлары. Құрама және бос операторлар
- •8.4 Деректерді енгізу-шығаруды ұйымдастыру
- •8.5 Программаның құрылымы. Алгоритмнің схемасынан программаға өту
- •9 Лекция
- •9.1 Сызықты құрылымды алгоритмдерді программалау
- •9.2 Тармақталған құрылымды алгоритмдерді программалау
- •9.3 Таңдау операторы (case)
- •10 Лекция
- •10.1 Циклдік құрылымды алгоритмдерді программалау. Кейінгі шартты цикл операторы (repeat)
- •10.2 Алдынғы шартты цикл операторлары (while)
- •10.3 Параметрлі цикл операторлары (for)
- •10.4 Ішкі циклдерді құрастыру (массивтерді өндеу, массив компоненттерін реттеу есептерінің мысалдары негізінде)
- •11 Лекция
- •11.1 Жолдық деректер
- •Var s: string;
- •Var s1: string[40];
- •11.2 Символдық және жазбалар түріндегі деректерді өндеу есептерін программалау
- •12 Лекция
- •12.1 Пайдаланушының ішкі программалары (процедуралар) классификациясы. Ішкі программаларды рәсімдеу тәсілдері және оларды программа құрамында пайдалану.
- •13 Лекция
- •13.1 Сыртқы сақтауыш құрылғыларын (файлдық шамаларды) және динамикалық жадыны пайдалану арқылы программалау
- •14 Лекция
- •14.1 Тілдің графикалық мүмкіндіктерін пайдалану
- •Initgraph(var gd:integer, var gm:integer, pt:string);
- •15 Лекция
- •15.1 Объектке-бағдарлы программалау (обп) негіздері
- •15.2 Объекттер және олардың негізгі қағидалары
- •15.3 Объекттерді құру және оларды пайдалану
- •15.4 Өткен материалға шолу
- •15.5 Алған білімдердің студенттің алдағы оқу барысында және болашақ инженерлік тіршілігіндегі тәжірибелік мағынасы. Программалау тілдері мен технологиялардың даму перспективалары.
- •Өрнектер – тұрақтылар. Паскаль өрнектер-тұрақтыларды пайдалануға мүмкіндік береді. Ол өрнекті программаны орындау қажеттіліксіз компилятор орындайды. Өрнектер-тұрақтылардың мысалдары:
- •Түсініктемелер (комментарий)
- •6 Лекция
- •6.1 Блоктар, локальділік және амал жасау облысы
- •6.5 Типтердің үйлесімділігі
- •7.1 Ординалды типтер
- •7.2 Құрама құрылымдар
- •10.4 Жалғау операторы (with)
10.2 Алдынғы шартты цикл операторлары (while)
Алдынғы шартты цикл (while сөзінен басталатын) операторы оператордың (ол құрама оператор да болуы мүмкін) қайталап орындалуын басқаратын өрнекті қамтиды. while операторы кейбір шартты циклдың басында тексеру үшін пайдаланылады.
Ол арқылы оператордың қайталап орындалуын басқару жүзеге асырылатын өрнек бульдік типке ие болуы тиіс. Ол ішкі оператор орындалғанша есептеледі. Өрнек Тruе мәнді қабылдап тұрса ішкі оператор қайталанып орындала береді. Егер өрнек ең басынан False мәнін қабылдаса онда алдынғы шартты цикл операторының ішінде қамтылған оператор орындалмайды. Алдынғы шартты цикл операторының мысалдары: (сонымен қатар, қосымшадағы Р3 және Р10 программалары).
while Data[I] <> X do I := I + 1; |
while I > 0 do begin if Odd(I) then Z := Z * X; I := I div 2; X := Sqr(X); end; |
while sum<1000 do begin I := I + 1; sum:=sum+a; end; |
while not Eof(InFile) do begin Readln(InFile,Line); Process(Line);end; |
while циклының операторы келесі формаға ие:
while шарт do
оператор
Шарт логикалық типтегі өрнек болып табылады, ал do-дан кейінгі оператор цикл тұлғасы деп аталады. Циклдың әр итерациясының алдында шарт есептеледі де егер ол ақихат болса онда цикл тұлғасы орындалады, кері жағдайда циклдан шығу орын алады.
Егер шарт әрдайым ақихат болып қала берсе, онда циклденіп қалу орын алуы мүмкін:
while 2>1 do
write(1);
Циклденіп қалған программаны тоқтату үшін Ctrl-F2 клавиштер комбинациясын немесе кнопкасын басу керек. Pascal ABC-те while циклдың тұлғасы бос болуы мүмкін емес.
while цикл операторының repeat цикл операторынан негізгі ерекшеліктері:
1. while цикл операторының тұлғасында тек жалғыз оператор тұруы мүмкін. Циклде бірнеше операторларды орындау үшін цикл тұлғасы операторлық begin … end жақшаларға алынуы тиіс.
repeat операторында операторлық жақшалар қойылмайды, себебі оларды қызметші repeat … until сөздер алмастырады.
2. while операторында егер логикалық шарт бірден жалған болып табылса цикл тұлғасы бір де бір рет орындалмауы мұмкін.
repeat операторында логикалық өрнек цикл тұлғасынан кейін жазылады. Сондықтан, цикл тұлғасы міндетті түрде кемінде бір рет болса да орындалады.
Блок-схемаларда while цикл операторына 10.2 суретте көрсетілген құрылым сәйкес
Сурет 10.2 - while оператордың жұмыс жасау блок-схемасы
Мысал 10.2 (бұл 10.1 мысал шешімінің екінші нұсқасы). Бір айнымалысы бар функцияны табуляциялау есебін шешу керек, яғни аргументі [-0.5, 2.5] аралықта 0.1 қадаммен өзгеретін функцияның мәндер кестесін есептеу керек. Бұл есепте айнымалы циклдың басқарушы айнымалысы болып табылады.
Алгоритмнің блок-схемасы 10.3 суретте. 10.2 мысалдың программасы:
Program P10_2;
Var a, b, x, y: real;
Begin
writeln(‘Бастапқы деректерді енгізіңіз’); read(a, b);
writeln (‘ x y(x)‘); x := -0.5;
while x <= 2.5 do
begin
y := ln(abs(x))/(a*a - b*b);
writeln(x:8:1, y:8:1)
x := x + 0.1;
end;
End.
Сурет 10.3 - 10.2 мысалға блок-схема
10.3 Параметрлі цикл операторлары (for)
Параметрлі цикл (for сөзінен басталатын) операторы басқарушы айнымалыға мәндердің өспелі тізбектілігі меншіктеліп тұрғанда тұлғасындағы оператордың қайталанып орындалуына әкеледі.
Басқарушы айнымалы ретінде for операторы қамтылған локальды блокта сипатталған айнымалыны белгілейтін идентификатор пайдаланылуы тиіс. Басқарушы айнымалы санақтап шығу типіне ие болуы тиіс. Бастапқы және соңғы мәндері санақтап шығу типімен меншіктеу бойынша үйлесімді болатын типке ие болуы тиіс.
for операторы орындала бастағанда бастапқы және соңғы мәндері жалғыз рет анықталады да сол мәндер for оператордың бүкіл орындалу барысында сақталады.
for оператордың тұлғасында қамтылған оператор бастапқы және соңғы мәндер аралығындағы әр мән үшін бір рет орындалады. Басқарушы айнымалы әрдайым бастапқы мән арқылы инициализацияланады. for оператордың орындалу барысында басқарушы айнымалының мәні әр қайталануда бірлікке өсіп тұрады. Егер бастапқы мән соңғы мәннен асатын болса онда for оператордың тұлғасында қамтылған оператор орындалмайды. Цикл операторында downto кілттік сөзі қолданған жағдайда басқарушы айнымалының мәні әр қайталануда бірлікке азайып тұрады. Егер мұндай оператордағы бастапқы мән соңғы мәннен аз болса онда цикл операторының тұлғасында қамтылған оператор орындалмайды. Егер for цикл операторының тұлғасында қамтылған оператор басқарушы айнымалының мәнін өзгертетін болса, онда ол қате болып саналады. for операторы орындалып аяқталғаннан кейін басқарушы айнымалының мәні анықталмаған болып қалады, егер for оператордың орындалуы өту операторы арқылы үзілмеген болса. Егер осы шектеулерді ескерсек, онда
-
Оператор:
for V := Expr1 to Expr2 do Body;
оператор:
for V := Expr1 downto Exp2 do Body;
Келесі операторларға эквивалентті:
begin
Temp1 := Expr1;
Temp2 := Expr2;
if Temp1 <= Temp2 then
begin
V := Temp1;
Body;
while V <> Temp2 do
begin
V := Succ(V);
Body;
end;
end;
end;
Келесі операторларға эквивалентті:
begin
Temp1 := Expr1;
Temp2 := Expr2;
if Temp1 >= Temp2 then
begin
V := Temp1;
Body;
while V <> Temp2 do
begin
V := Pred(V);
Body;
end;
end;
end;
мұндағы Temp1 және Temp2 - типтері V айнымалының негізгі типіне сәйкес болатын және олар программаның басқа жерлерінде кездеспейтін қосымша айнымалылар. Параметрлі цикл операторына және мысалдар:
for I := 2 to 63 do
if Data[I] > Max then Max := Data[I]
for I := 1 to 10 do
for J := 1 to 10 do
begin
X := 0;
for K := 1 to 10 do
X := X + Mat1[I,K]*Mat2[K,J];
Mat[I,J] := X; end;
for C := red to blue do Check(C);
Кәдімгі жағдайда кейбір айнымалы (индекстелген айнымалы) көрсетілген аралықтағы мәндерді қабылдай бергенше операторлар жиынтығы белгілі бір рет орындалады. Мысалы, ертерек келтірілген P10 программаны келесі түрде модификациялайық:
program P10A;
var
Count : integer;
begin
for Count := 1 to 10 do
Writeln('Сәлеметсіз бе және сау болыңыз!');
Writeln('Бұл соңы!')
end.
Бұл программаның орындалу барысында қарастырылатын цикл while және repeat циклдары сияқты орындалатынына және ол while циклына тіпті эквивалентті екендігіне көз жеткізуге болады.
for циклы келесі программаға эквивалентті:
index := expr1;
while index <= expr2 do
begin
оператор
Inc(индекс)
end;
Сонымен, for циклының операторы екі форманың біреуіне ие:
for айнымалы:=бастапқы мән to соңғы мән do
оператор
немесе
for айнымалы:=бастапқы мән downto соңғы мән do оператор
for сөзінен бастап do сөзіне дейінгі мәтін цикл тақырыбы деп, ал do –дан кейінгі оператор цикл тұлғасы деп аталады. for сөзінен кейінгі айнымалы цикл параметрі деп аталады. to кілттік сөзі бар циклдың бірінші формасы үшін цикл параметрі әрдайым бірлікке өсіп бастапқы мәннен соңғы мәнге дейін өзгереді, ал downto кілттік сөзі бар циклдың екінші формасы үшін цикл параметрі әрдайым бірлікке азаяды. Цикл тұлғасының бір рет қайталануы цикл итерациясы деп аталады. Цикл аяқталғаннан кейін цикл параметрінің мәні анықталмаған болып саналады.
Егер for ... to циклы үшін цикл айнымалысының бастапқы мәні соңғы мәннен үлкен болса немесе for ... downto циклы үшін цикл айнымалысының бастапқы мәні соңғы мәннен аз болса, онда цикл тұлғасы бір де бір рет орындалмайды. Егер цикл процедурада немесе функцияда пайдаланылатын болса, онда циклдың параметр-айнымалысы локальды ретінде сипатталуы тиіс.
for в Pascal ABC –да цикл тұлғасы бос болуы мүмкін емес. Циклдың параметр-айнымалысын цикл ішінде өзгерту логикалық қате болып табылады. Мысалы, бірінің ішіне бірі салынған for операторы бар келесі фрагмент қате болып табылады:
for i:=1 to 10 do
for i:=1 to 5 do
write(i);
Циклдың параметр-айнымалысы кез келген реттік типке ие болуы мүмкін (бүтін, символдық, санақтап шығу немесе аралық). Бұл кезде бастапқы және соңғы мәндердің типтері цикл параметрінің типіне сәйкес болуы тиіс. Мысалы:
var
en: (red,green,blue,white);
c: char;
...
for en:=red to blue do
write(Ord(en):2);
for c:='a' to 'z' do
write(c);
for циклының негізгі кемшілігі ол цикл параметрін тек 1-ге ғана өсіруге немесе азайтуға мүмкіндік беретіндігінде. Оның негізгі артықшылықтары қатарына ықшамдық және мәндер аралығында символдық және санақтап шығу типтерін пайдалану мүмкіндігі жатады.
Бірнеше мысалдарды қарастырайық.
Блок-схемаларда for цикл операторына 10.4 суреттегі құрылым сәйкес.
Сурет 10.4 - for операторың жұмыс жасау блок-схемасы
Мысал 10.4. Есептегішті ұйымдастыру алгоритмі. Кейбір тізбектілік берілген. Тізбектіліктің оң таңбалы мүшелер санын анықтау керек.
Program P10_4;
Var
a: real;
n, L: integer;
Begin
L := 0;
for n := 1 to 50 do
begin
a := cos(2 n - 1);
if a>0 then L := L + 1;
end;
writeln('L=‘, L);
End.