GetDate(<жыл>,<ай>,
<күн>,<апта күні>)
Dos
Процедура. Ағымдағы датаның
мəнін береді
GotoXY(X,Y)
Crt
Процедура. Курсорды экранның
координатасы көрсетілген
жеріне жылжытады
Window(X1,Y1,X2,Y2)
Crt
Процедура. Экрандағы мəтіндік
терезе көлемін анықтайды
(X1,Y1- сол жақ жоғарғы
бұрыш коорди натасы; X2,Y2-
оң жақ төменгі бұрыш коорди-
натасы)
4.6 Енгізу-шығару процедурасы
Турбо Паскаль тілінде мəндерді енгізу стандартты READ
немесе READLN процедуралары (операторлары), ал мəндерді
шығару WRITE немесе WRITELN процедуралары (оператор-
лары) арқылы орындалады. READ жəне READLN процедурала-
ры символдарды (мəндер типі CHAR), сөз тіркестерін (мəндер
типі STRING) немесе сандық мəндерді (мəндер типі INTEGER,
BYTE, REAL жəне т.б.) енгізу үшін қолданылады.
READ процедурасын шақыру:
READ ([<файл аты>,]<айнымалылар тізімі>);
READLN процедурасы үшін сəйкесінше:
READLN ([<файл аты >,]< айнымалылар тізімі >);
Егер <файл аты> көрсетілмесе, онда мəндерді оқу стандартты
INPUT файлынан жүргізіледі, бұл жағдайда стндартты құрылғы
INPUT файлымен байланысқан пернетақта немесе дисплей бо-
лып саналады.
Əр енгізу операторының тізімінде көрсетілген айнымалыларға
меншіктелетін тұрақты мəндері бар өз мəндер жиыны бар. Енгізу
77
тізіміне мəндерді меншіктеу айнымалылардың орналасу ретіне
байланысты, солдан оңға қарай жүргізіледі.
Есте сақтаңыздар:
•
Айнымалылар жəне тұрақтылар типі сəйкес болу керек
(тек REAL типті мəндерін енгізерде, INTEGER типті ай-
нымалылар мен тұрақтыларды көрсетуге болады).
•
Енгізілетін сандық мəндер бір немесе бірнеше бос орын-
мен ажыратылуы керек; санның таңбасын жəне цифрла-
рын бос орын арқылы бөлуге болмайды.
•
Егер сөз тіркесі, яғни жол енгізілетін болса (мəндер типі
STRING), онда READ операторы VAR сипатталуында
көр сетілген мак си мальді ұзындықтан аспайтын символдар
тізбегін ғана оқиды.
•
Символдар тізбегі (мəндер типі CHAR немесе STRING)
олар ен гізілмеген жағдайда, бос орын ретінде қабылданады.
Мысал.
А) Сандық мəндерді енгізу:
VAR B,A,D: REAL;
K:INTEGER;
Енгізілетін мəндер:
. . .
2.5 –4.95 20 1.25Е2
READ(A,D);
Енгізгеннен кейін:
READ(K,B);
A=2.5; D=-4.95; K=20; B=125
Ə) Сандық жəне тіркестік (жолдық) мəндерді енгізу.
VAR A: REAL;
B:INTEGER;
C1,C2,C3: CHAR;
Енгізілетін мəндер:
D: STRING[5];
2.5 10 ЖОЛБАРЫС
. . .
Енгізгеннен кейін:
READ(A,B,C1,C2,C3,D); A=2.5; B=10; C1=’ ’;
C2=’K’;C3=’L’;
D=’
ЛБАРЫ’
Мысалдан көріп отырғандай, мəндерді араластырып (сан-
дық жəне жолдық) енгізу дұрыс орындалмайды. Егер енгізілетін
мəндер тізбегінен кейін бос орын қалдырылмаса, онда енгізуде
қате (ERROR 106) орын алады. Сондықтан сандық мəндер мен
тіркестік немесе символдық мəндерден жеке-жеке бөле отырып
енгізу керек.
78
READ операторын орындаған кезде енгізу жолының соңы
(<Еnter> пернесін басу), мəндер элементтерін ажырататын бос
орын енгізумен бірдей болып саналады, сондықтан енгізудің
келесі жолына көшу орындалмайды. Ал енгізілетін мəндер тізбек
бойынша сəйкес айнымалыға меншіктеледі
Мысалы, ұқсас операторлар үшін енгізілетін мəндер тізбегі əр
түрлі болып келуі мүмкін:
READ(A,B,C);
Енгізілетін мəндер: 2 9 5 3 7 немесе
READ(D,Е);
Енгізілетін мəндер: 1 жол: 2 9 5
2 жол: 3 7
READ оераторының READLN операторынан ерекшелігі,
READ LN операторында соңғы айнымалы оқылғаннан кейін
сөз тіркесінің қалған бөлігі қабылданбайды. Бұдан кейінгі
READ немесе READLN операторы мəндерді жаңа жолдың
басынан бастап оқиды, демек READLN операторы жолдың
соңын (<Еnter> пернесін басу) қабыл дамайды. Жолдың соңына
жетіп, енгізілетін мəндердің келесі жолына ауысуда READLN
операторын параметрсіз қолдануға бола
ды; мұндайда енгізу
мəндерінің келесі жолына шартсыз көшу орындалады.
Мысалы, екі өлшемді жиымның элементтерін енгізудің əр
түрлі тəсілдерін қарастырайық:
1)FOR I:=1 TO 2 DO
BEGIN
FOR J:=1 TO 3 DO
READ (A[I,J]);
READLN
END;
Енгізілетін мəндер: 3 5 1
-4 7 9
2)FOR I:=1 TO 2 DO
FOR J:=1 TO 3 DO
READ (A[I,J]);
Енгізілетін мəндер: 3 5 1
-4 7 9
3)FOR I:=1 TO 2 DO
FOR J:=1 TO 3
READLN(A[I,J]);
79
Енгізілетін мəндер: 3
5
1
-4
7
9
Келесі мысалда READLN операторын қолданғанда, жолдың
соңын
дағы мəндердің қабылданбайтындығын анық көруге бо-
лады.
VAR A,B,C,D:INTEGER;
Енгізілетін мəндер:
1 жол: 10 20 30 40 50
… 2 жол: 60
READLN(A,B,C);
READLN(D); Нəтиже:
A=10;B=20;C=30;D=60
Мəндерді шығару процедурасы
WRITE процедурасы (операторы) келесі типтегі өрнек-
терді шы ға руға арналған: Integer, Byte, Real, Char, String, Boolean
жəне т.б.
WRITE ([< файл немесе құрылғы аты >,] <өрнектер тізімі >);
Егер <файл аты> көрсетілмесе, онда шығару стандартты
OUTPUT файлына (дисплей экранына) орындалады. Егер <файл
аты> көрсетілсе, онда бұл файл сипатталуы немесе алдын ала
дайындалуы қажет.
Баспадан шығару үшін LST логикалық құрылғысы қол-
данылады. Мұндайда стандартты PRINTER модулі іске қосылуы
керек (демек, программа басында Uses Printer сөздері тұруы ке-
рек).
WRITE операторы тізімдегі өрнектердің мəндерін ағымдағы
жолға ол толғанша шығарады. Егер бұдан кейін тағы да шығару
операторы тұрса, ал ағымдағы жол толмаған жағдайда, мəндерді
осы жолға жалғастырып шығара береді.
Мысалы:
X:=5; Y:=10;
WRITE (‘X=’, X);
WRITE (‘ Y=’,Y);
Экранда: X=5 Y=10
80
Турбо Паскаль тілінде стандартты типтегі шамаларды бас-
паға шығару үшін белгілі бір сандар позициясы беріледі. Шыға-
рылатын мəндер үшін өріс енін (позиция санын) формат арқылы
анықтауға болады.
Форматы бар шығару операторының жазылуы:
WRITE ([< файл немесе құрылғы аты >,]R
1
:N
1
,R
2
:N
2
,…, R
m
:N
m
);
мұндағы - R
1
,R
2
,…,R
m
– шығарылатын айнымалылар атаулары;
N
1
,N
2
,…,N
m
– өріс ендері.
Егер өріс ені мəннен үлкен болса, онда мəндердің сол жағында
бос орын қалдырылады. Ал, шығарылатын мəн өріс еніне сыйма-
са, онда формат қабылданбайды да, баспаға нақты мəндер толық
шығарылады.
Нақты мəндерді шығару ерекшеліктері
Егер нақты типтегі айнымалы сипатталса, онда оны шыға-
рудың төмендегідей нұсқаларын пайдалануға болады:
2. Write(R); Шығару қалыпты түрде іске асырылады (экспо-
ненциальды формада):
|
− d.dddddddddd E +|− dd
3. Write(R:N); Бүтін сан шығарудың қалыпты түрі, өріс
ұзындығы N, оң жақ шекарасы бойынша тураланған. N-нің ең
кіші мəні 8-ге тең. Өріс ені бұдан кіші болған жағдайда, компиля-
тор мəндер разрядын 8-ге дейін автоматты түрде өсіреді.
4. Write(R:N:M); Бекітілген нүкте арқылы шығару, нүкте ден
кейін М (0<=M<=24) ондық таңба көрсетіледі, мұнда N>M+2 бо-
луы тиіс (2 орын – сан таңбасы мен ондық нүкте үшін).
Мысалы,
VAR B,D:REAL;
C:INTEGER;
A:STRING[10];
. . .
A:=’КІТАП’;
B:=1253E-5;
C:=12;
D:=1253E2;
WRITE (LST,’B=’,B:10:3,’ C=’,C:8,‘A=’,A:7,’
B1=’,B:8,‘D=’,D:6);
81
Баспаға (мұндағы _ экранда көрінбейтін бос орын символын
білдіреді):
В=_ _ _ _ _ 0.013_С=_ _ _ _ _ _12_А=_ _кітап_B1=_1.3E-02_D=_1.3E+05
түрінде шығарылады.
WRITELN процедурасының шығарылу форматы да осыған
ұқсас:
WRITELN ([<файл немесе құрылғы аты >,]<өрнектер
тізбегі >);
Бұл процедура шақырылғанда, файлдың ағымдағы жолының
құрастырылуы аяқталады. Келесі WRITE немесе WRITELN
опера торы жаңа жол құрастырады. WRITELN операторын па-
раметрсіз қолдануға да болады.
Мысалы, WRITE жəне WRITELN операторларын қатар қол-
дан ғанда, мəндерді жол-жолмен реттеп шығаруға болады:
VAR A,B,C,D,E:INTEGER;
BEGIN
A:=1;B:=2;C:=3;D:=4;E:=5;
WRITELN (‘A=’,A,’B=’,B);
WRITE(‘C=’,C);
WRITELN(‘D=’,D,’E=’,E);
END.
Нəтиже экранда екі жолға шығады:
_A=1_B=2
_C=3_D=4_E=5
A (M,N) бүтін сандар матрицасын экранда тікбұрышты кесте
түрінде шығаруды төмендегідей түрде іске асыруға болады:
. . .
FOR I:=1 TO M DO
BEGIN
FOR J:=1 TO N DO
WRITE(A[I,J]:5);
WRITELN
END;
6–1618
82
A(M,N) нақты сандар матрицасын, үтірден кейін бір разряд-
пен, кесте түрінде принтерге шығару программасы:
USES PRINTER;
VAR A:ARRAY[1..10,1..10]OF REAL;
M,N:INTEGER;
BEGIN
READLN(M,N);
FOR I:=1 TO M DO
FOR J:=1 TO N DO
READ(A[I,J]);
FOR I:=1 TO M DO
BEGIN
FOR J:=1 TO N DO
WRITE(LST,A[I,J]:6:1);
WRITELN(LST)
END;
READKEY
END.
Бақылау сұрақтар
1. Turbo Pascal тілінде жазылған программа қандай бөлімдерден
тұрады?
2. Программаның қандай бөлімдерін міндетті түрде жазу керек?
3. Идентификатор дегеніміз не?
4. Идентификаторға қандай шектеулер қойылады?
5. Өзіңізге белгілі арифметикалық операциялар мен функцияларды
атаңыз.
6. Бүтін жəне нақты айнымалылар қалай хабарланады?
7. Айнымалының мəні қалай анықталады?
8. Мəндерді енгізу операторын сипаттаңыз.
9. Мəндерді шығару операторын сипаттаңыз.
10. Меншіктеу операторын жəне оны қолдану ережелерін сипат-
таңыз.
Тапсырмалар
1. Екі нақты оң сандар берілген. Осы сандардың қосындысын, ай-
ырмасын, арифметикалық орташа мəнін жəне көбейтіндісін
табыңыз.
83
2. Тікбұрышты үшбұрыштың катеттері берілген. Үшбұрыштың ги-
потенузасы мен ауданын табыңыз.
3. Тікбұрышты үшбұрыштың ауданын Герон формуласы бойынша
есептеңіз.
4. Физикалық дененің t уақытының ішінде жүріп өткен арақашық-
тығын есептеңіз. Дененің бастапқы кездегі жылдамдығы v0 жəне
ол бірқалыпты үдеумен қозғалады.
5. Дененің H биіктіктен еркін құлау уақытын анықтаңыз.
6. Биіктігі h, табандары a, b трапецияның ауданын есептеңіз.
7. Жақтаулары a жəне b тікбұрыштың пириметрін жəне ауданын
есептеңіз.
8. Салмағы m сұйықтықты t1-ден t2 температураға дейін қыздыруға
қажет жылу мөлшерін анықтаңыз.
9. Жақтаулары a, b жəне c болып келген параллепипедтің көлемін
есептеңіз.
10. Экранға өз атыңызды шығарыңыз.
11. А жəне В айнымалыларының мəндерін алмастырыңыз. Мəндерді
уақытша сақтау үшін r айнымалысын қолданыңыз.
84
5. ТУРБО ПАСКАЛЬ ТІЛІНІҢ БАСҚАРУ ОПЕРАТОРЛАРЫ
5.1 Шартсыз көшу операторы. Белгілер.
Бос оператор. Құрама оператор
GOTO шартсыз көшу операторы операторлардың рет-ре-
тімен орындалуын бұзып, келесі атқарылуды осында көрсе тілген
белгісі бар операторға ауыстыру ісін орындайды
. Бір оператор
бірнеше белгімен белгіленуі мүмкін. Оператордың жазылуы:
GOTO <белгі> ;
<белгі> – бұл программаның белгіні сипаттау ( LABEL) бөлі-
гінде міндетті түрде көрсетілген таңбасыз бүтін сан немесе иден-
тификатор.
Операторды белгілеу үшін оның алдына белгі жазылып, қос
нүкте қойылады.
< белгі > : [<белгі >: …] <оператор > ;
Программа жазған кезде GOTO операторын қолданбауға ты-
рысу керек. Себебі, бұл оператор программаны түзетуді жəне
тестіден өткізуді қиындатады. Кез келген алгоритмді іске асыру
үшін, тілдің бұдан өзге операторлары да жеткілікті.
Бос оператор программада таңбаланбайды жəне ол ешқан-
дай іс-əрекет атқармайды. Бос оператор программада қосымша
нүктелі үтір түрінде жазылады.
Егер транслятор бірнеше операторлар тобын бір оператор
ретінде қарастыруы керек болса, онда бұндай операторларды
BEGIN жəне END операторлық жақшаларының ішіне алу керек.
Осындай операторлар тобы құрама оператор деп аталады.
Құрама оператор программаның кез келген жерінде қолданылуы
мүмкін.
Программалау теориясы тұрғысынан алғанда, құрылымсыз
болып табылатын басқаруды басқа жерге беретін оператор мен
процедураларды пайдалану “артық”, себебі кез келген алгоритмді
бұларсыз-ақ құрылымды түрге келтіріп орындауға болады. Алай-
да, жылдам құрастырылған алгоритмдер көбінесе құрылымсыз
болып шығады да, оларды жүзеге асыру кезінде де құрылымсыз
85
болып келетін басқаруды беру нұсқаларын қолдануға тура келеді.
Енді құрылымсыз алгоритмдерді жүзеге асырудың артықшылығы
мен кемшілігіне тоқтала кетейік.
Құрылымсыз басқаруды беру түрін ұйымдастыру үшін goto
шартсыз көшу операторы жəне арнайы процедуралар қолда ны-
лады.
Шартсыз көшу операторы. Бұл оператор басқаруды арнайы
белгімен анықталған нүктеге береді (5.1-сурет).
Программадағы барлық белгілер программаның label –
белгілерді сипаттау бөлімінде (5.2-сурет) жариялануы керек.
Белгі программаның кез келген орындалатын операторының
алдына қойылады жəне бір оператордың алдына бірнеше белгі
қоюға болады.
Құрылымсыз басқаруды беруді келесі процедуралар көмегімен
де орындауға болады:
•
Break – кез келген типтегі цикл түрінен шығуды іске асыра-
ды;
•
Continue – цикл тұлғасының қалған операторларын орында-
май-ақ, оның келесі сатысына көшуді атқарады;
•
Halt (<аяқтау коды>) – программадан шығып, операциялық
жүйеге берілген аяқталу кодын қайтару ісін орындайды. Егер
аяқталу коды нөлге тең болса, программа ойдағыдай аяқталды
деп саналады. Ал аяқталу коды нөлден өзгеше болса, програм-
5.1-сурет. Шартсыз көшу операторының синтаксистік диаграммасы
5.2-сурет. Белгіні сипаттау синтаксистік диаграммасы
86
ма кез келген бір қатенің туындауына байланысты аяқталды деп
есептеледі. Аяқталу кодын программалаушының өзі тағайын-
дайды жəне сол код жайлы мəлімет программа құжаттамасына
жазылады;
•
Exit – программадан шығуды іске асырады. Егер ол негізгі
программада қолданыл са, Halt процедурасы тəрізді орындалады.
Құрылымды алгоритмдер нұсқасын құрастыру мəселесі
көбінесе іздеу циклдерімен жұмыс жасаған кезде туындайды.
Алдыңғы тарауларда (1 тарауда) айтылғандай мұндай циклдерде
5.3-сурет. Тізбектегі алғашқы теріс элементті анықтау
алгоритмінің схемасы
87
берілген сипаттамаға сай элемент табылғанша элементтер тізбегі
қайталанып тексеріліп отырады. Іздеу циклінің ерекшелігі, ізделіп
отырған элемент тізбек ішінде болмауы да мүмкін. Сондықтан
циклден шығудың екі нұсқасын қарастыру керек: ізделініп
отырған элемент табылған жағдайда цикл соңына жетпей, одан
ерте шығу жəне тізбектегі барлық элементтерді қарастырып ба-
рып, циклді аяқтап шығу.
5.1-мысал.
)
sin(
n
x
функциясы мəндерінің тізбегі ішінен ал-
ғашқы теріс элементті анықтайтын программа құру керек. Мұнда
n беріліп, x [ a,b] аралығында h қадаммен өзгереді.
Айтылған элементті табу үшін функция мəнін есептеп оның
таңба
сын тексеріп отыру керек. Осы аралықта берілген қадам
бойынша тізбекте неше элемент болатындығын есептеуге бола-
ды. Сондықтан функция мəнін анықтауды санауыш циклі арқылы
жүргіземіз. Бастапқы берілген нақты мəндердің кейбір нұсқасы
үшін тізбекте мұндай элемент болмауы да мүмкін. Демек, цикл
аяқталғаннан кейін экранға осыған сəйкес мəлімет те шығарылуы
тиіс.
Есепті құрылымсыз алгоритм бойынша шешу нұсқасы
5.3 суретте көрсетілген.
Бұл нұсқаны түрлендірусіз тек қана goto операторының кө-
мегімен іске асыруға болады. Себебі бұл оператор басқаруды
программаның кез келген жеріне бере алады, ал break процеду-
расы тек қана цикл соңынан кейін орналасқан операторға береді.
Сондықтан break процедурасы арқылы құрылған нұсқа ізделіп
отырған элементтің табылмағандығы жайлы экранға мəлімет
шығару үшін оны қосымша тексеруді талап етеді (5.4, а сурет).
Құрылымды алгоритм нұсқасын құрастыру үшін цикл түрін
өзгертеміз: санауыш цикл орнына программадан шығудың екі
шартын біріктіретін, күрделі шарты бар “цикл-дейін” циклін
қолданамыз. Программа шарттың қай түрі бойынша циклден
шыққандығы белгісіз болғандықтан, бұл алгоритмде де ізделініп
отырған элементтің табылған, не табылмаған
дығын қосымша
тексеру керек (5.4, ə сурет). Алгоритмдердің сəйкес программа-
ларын қарастырайық.
Goto операторының көмегімен орындалған нұсқа:
88
5.4-сурет. Іздеу циклін ұйымдастыру нұсқалары:
а – break процедурасы көмегімен; ə – құрылымды нұсқа.
Program ex;
Var i,n:integer; x,y,a,b,h:real;
Label konec; {белгіні сипаттаймыз}
Begin
Write(‘ a,b,h енгізіңіз:');
ReadLn(a,b,h);
n:=round((b-a)/h+0.5); {элементтер санын
бүтін
санмен анықтаймыз}
x:=a;
89
for i:=1 to n do
begin
y:=sin(x);
if y<0 then
begin
WriteLn('y=',y:8:6,' x=',x:6:3);
goto konec; {экранға іздеген элемент
табылғандығы жайлы мəлімет шығарғаннан
кейін басқаруды программа соңына береміз}
end;
x:=x+h;
end;
WriteLn('Элемент табылған жоқ.');
konec: {басқару берілетін орын}
End.
Вreak процедурасы көмегімен орындалған нұсқа:
Program ex;
var i,n:integer; x,y,a,b,h:real;
Begin
Write('a,b,h енгіз:');
ReadLn(a,b,h);
n:=round((b-a)/h+0.5); {элементтер санын бүтін
санмен анықтаймыз}
x:=a;
for i:=1 to n do
begin
y:=sin(x);
if y<0 then
begin
WriteLn('y=',y:8:6,' x=',x:8:6);
break; {циклден ерте шығуды орындай-
мыз }
end;
x:=x+h;
end;
{
break процедурасы орындалғанда басқару
90
берілетін орын}
if y>=0 then WriteLn('Элемент табылған жоқ.');
End.
Құрылымды нұсқа:
Program ex;
var x,y,a,b,h:real;
Begin
Write(' a,b,h енгіз:');
ReadLn(a,b,h);
x:=a;
repeat
y:=sin(x);
x:=x+h;
until (x>b) or (y<0); {циклден шығудың
біріктірілген шарты}
if y<0 then WriteLn(‘y=’,y:8:6,’ x=’,x:6:3)
else WriteLn(‘Элемент табылған жоқ.’);
End.
Циклдің құрылымды нұсқасын жасай отырып, біз циклден
шығу шартын жəне ізделіп отырған элементтің табылмағандығы
жайлы шешім шығаратын нақты сипаттаманы анықтадық. Ал,
goto немесе break процедурасы арқылы құрастырылған алго-
ритм, құрылымсыз басқаруды беру кезіндегі кездесетін барлық
жа дайды ескеруді талап етеді. Сонымен бірге құрылымды түрде
жазылған программа ең қарапайым жəне орындалу барысында
қателер саны да аз кездесетін нұсқа болып саналады.
Continue операторын қолданатын программа мысалын қарас-
тырайық.
5.2-мысал. 50-ден аспайтын 10 санның қосындысын анық-
тайтын алгоритм програм масын жазу керек. Теріс сан енгізілген
жағдайда программа оны қабылдамай, экранға хабарлама шыға-
рып, оң мəн енгізгенді күтуі тиіс.
Бұл мысалда циклдің қайталану саны белгісіз болғандықтан,
санауышты циклді қолдану мүмкін емес, сондықтан итерация лық
циклді, мысалы, “цикл-əзірше” түрін қолданамыз. Осы есепті
шғару алгоритмі 5.5-суретте келтірілген. Бұл алгоритмді goto опе-
0>0>0> Достарыңызбен бөлісу: |