Салыстыру амалы
Жиындарды салыстыру амалына жиындардың теңдігін және теңсіздігін тексеру, сол сияқты бір жиынның екіншісіне тиістілігін тексеру жатады.
Turbo Pascalда бұл амалдардың белгілеулері 5-кестеде көрсетілген.
5-кесте. Жиындарды салыстыру амалдары.
Белгілеулер
|
Әрекеттер
|
=
|
Жиынның теңдігін тексеру
|
<>
|
Жиынның теңсіздігін тексеру
|
<=
|
Сол жақтағы жиынның оң жақтағы жиынға тиістілігін тексеру
|
>=
|
Оң жақтағы жиынның сол жақтағы жиынға тиістілігін тексеру
|
Салыстыру нәтижесі boolean типті (TRUE немесе FALSE) мән болып табылады. Салыстыратын екі жиын бір базалық типке жатуы керек.
= және <> амалдары салыстырылатын жиындағы элементтер жиынтығының беттесетіндігін тексереді. Осы амалдар мысалдарын 6 және 7-кестелерден көруге болады.
6-кесте. Жиын теңдігін тексеру.
Салыстырылатын жиындар
|
Нәтиже
|
[1,2,3]=[1,2,4]
|
FALSE
|
[1,2,3]=[1,2,3]
|
TRUE
|
[1,2,3]=[3,2,1]
|
TRUE
|
[1,2]=[1,1,2,2,3]
|
FALSE
|
7-кесте. Жиын теңсіздігін тексеру.
Салыстырылатын жиындар
|
Нәтиже
|
[1,2,3]<>[1,2,4]
|
TRUE
|
[1,2,3]<>[1,2,3]
|
FALSE
|
[1,2,3]<>[3,2,1]
|
FALSE
|
[1,2]<>[1,1,2,2,3]
|
TRUE
|
<= және >= амалдары бір жиынның екіншісіне тиістілігін тексереді. Сол жақтағы жиын оң жақтағы жиынға тиісті, егер сол жақтағы жиынның барлық элементі оң жақтағы жиынның элементтері арасында кездессе. Сол жақтағы жиынның оң жақтағы жиынға тиістілігін тексеру мысалы 8-кестеде көрсетілген.
8-кесте. Сол жақтағы жиынның оң жақтағы жиынға тиістілігін тексеру.
Салыстырылатын жиындар
|
Нәтиже
|
[1,2,3]<=[1,2]
|
FALSE
|
[1,2,3]<=[1,2,3,4,5]
|
TRUE
|
[1,2,3]<=[4,3,2,1]
|
TRUE
|
[1,2,3]<=[1,3]
|
FALSE
|
Оң жақтағы жиын сол жақтағы жиынға тиісті болады, егер оң жақ жиынның барлық элементтері сол жақ жиын элементтерінің арасында кездессе. Оң жақ жиынның сол жақ жиынға тиістілігін тексеру мысалын 9-кестеден көруге болады.
9-кесте. Оң жақ жиынның сол жақ жиынға тиістілігін тексеру.
Салыстырылатын жиындар
|
Нәтиже
|
[1,2,3]>=[1,2]
|
TRUE
|
[1,2,3]>=[1,2,3,4,5]
|
FALSE
|
[1,2,3]>=[4,3,2,1]
|
FALSE
|
[1,2,3]>=[1,3]
|
TRUE
|
Басқа құрылымданған типтерден айырмашылығы жиындардың практикалық құндылығы айқын көрінбейді. Сол сияқты жиындарды стандартты процедура read, write арқылы пернетақтадан енгізп және экранға шығаруға болмайды.
Жиындарды қолданудың классикалық мысалы ретінде «Эратосфен елегі» тәсілімен қарапайым санды есептеу программасын көрсетуге болады. Мысалы:
Program Prime;
const n=255;
Var
sieve, PRIMES: set of 2..n;
next, i: integer;
begin
writeln;
sieve:=[2..n];
primes:=[ ];
next:=2
repeat
while not (next in sieve) do
next:=next+1;
primes:=primes+[next];
i:=next;
while i<=n do
begin
sieve:=sieve-[i];
i:=i+next;
end
until sieve=[ ];
for i:=2 to n do
if i in primes then write (i:4);
writeln;
end.
6-ДӘРІС. СИМВОЛДАРДАН ЖӘНЕ СӨЗ ТІРКЕСТЕРІНЕН ТҰРАТЫН ШАМАЛАР
Қарастырылатын сұрақтар:
Символдық мәліметтермен жұмыс істеу тәсілдері;
Символдық мәліметтерді енгізу;
Паскаль тілінде мәтіндік ақпараттарды өңдеу;
СИМВОЛДЫҚ МӘЛІМЕТТЕРМЕН ЖҰМЫС ІСТЕУ ТӘСІЛДЕРІ
Бұл тақырыпта символдық мәліметтерді енгізу және шығару ерекшелігі жөнінде сөз болады.
Осы кезге дейін қарастырылған программаларда біз тек сан мәндерімен ғана жұмыс істедік. Ал қазіргі компьютерлердегі программалардың кез келген символдық айнымалыларды өңдеуге толық мүмкіндігі бар. Сондықтан бұл тарауда символдың ақпаратты пернетақтадан енгізу және дисплей экранына шығаруды қарастырамыз.
Пернетақта мен дисплей мәліметтерді енгізу мен шығарудың стандартты құрылғылары болып табылады да, оларды пайдалану үшін INPUT және OUTPUT түйінді сөздері қолданылады. Сандық ақпарат енгізу және шығару кезінде READ және WRITE операторларының көмегімен стандартты процедураларды (INPUT, OUTPUT) пайдаланған тәрізді жұмыс істей береміз.
Символдық мәліметтерді өңдеу символдық (литерлік) типті анықтайтын CHAR (ағылшынның CHARACTER — символ деген сөзінен қысқартылып алынған) түйінді сөзі арқылы жүзеге асырылады. CHAR типіндегі айнымалының мәні компьютерде пайдаланылатын кез келген жеке символ болып, ол мәлімет өрнектеудің кодтық кестесінің белгілі бір мәніне сәйкес келуі тиіс. Әрбір символ 0 мен 255 арасындағы кез келген бір бүтін санмен бейнеленеді, оның негізі болып ASCII кодтары саналады. Оның 0— 127 кодтарына сәйкес символдары әмбебап таңбалар болып табылады, оларға латын әріптері, тыныс белгілері, цифрлар, арифметикалық операция таңбалары, басқару символдары кіреді. Ал 128—255 кодтарына сәйкес символдар арнайы символдар мен ұлттық алфавит әріптері үшін қолданылады. Орыс, қазақ алфавитінің әріптері осы соңғы топта орналасқан.
Символдық немесе литерлік айнымалыға компьютер жадынан бір байт орын беріледі.
Егер программада мынадай сипаттау мысалы болатын болса:
VAR
А,В: CHAR;
BELGI, SYMBOL: CHAR; онда меншіктеу операторларындағы айнымалылар мен тұрақтылар мәні апострофка алынған бір символ болуы тиіс. Мысалы, A:=’k’, В:=’А’, B:=’5’, А:=’;’ тәрізді болуы мүмкін. Символдық мән дисплей экранына немесе принтер арқылы қағазға шыққанда, белгілері алынып тасталады да, тек символдың өзі көрінеді.
Символдық мәліметтер үшін логикалық нәтиже беретін =, <>, >, >=, <, <= қатынас таңбалары бар өрнектер пайдаланылады, өйткені барлық символдар өз кодтарына сәйкес реттеліп орналасқан.
Символ кодына сәйкес ‘a’<’c’; ‘z’>’y’; ‘2’>’1’; ‘x’<>’z’ сияқты теңсіздіктерді жазуға болады.
Е с к е р т у. Қазақ әріптері ASCII кестесінің бос орындарына орналасқандықтан, олар үшін бұл заңдылық сақталмайды.
Әріптерді кодтардың орналасу ретімен алфавит бойынша мына программа арқылы экранға шығаруға болады:
PROGRAM KODTAR;
VAR с:CHAR;
BEGIN
FOR c:=’a’ TO ‘z’ DO
WRITE (c)
END.
Мұның нәтижесінде дисплей экранында a b e d... z символдары көрінеді. Ал алфавитті кері тәртіпте бейнелеу қажет болса, онда FOR операторының алғашқы жолын басқаша мынадай түрде көрсетеміз:
for c:=’z’ downto ‘a’ do
СИМВОЛДЫҚ МӘЛІМЕТТЕРДІ ЕНГІЗУ
Символдық деректерді пернетақтадан енгізу READ (READLN) операторы арқылы жүргізіледі, оларды енгізудің төмендегідей ерекшеліктері бар.
1. Бос орын таңбасы Паскаль тілінде символ орнына жүретіндіктен, символдық айнымалылардың мәндері (символдар) бос орынсыз жазылады.
2. Бір айнымалыға бір ғана символ меншіктеледі.
3. Символдық айнымалыларды енгізудің тағы бір ерекшелігі — тек Enter пернесі басылса да, оны READ операторы бос орын символы ретінде кабылдайды. Мысалы, айнымалыларға: А=3, В=4, C=’W’, D=’F’ мәндерін меншіктеп, оны экранға шығару қажет болса, онда оған мынадай программа жазу керек:
PROGRAM SIM;
VAR А, В : INTEGER;
С, D : CHAR;
BEGIN
WRITELN (‘A, B, C, D мәндерін енгізіңдер’);
READ (A, B);
READ (C,D);
WRITELN (A, B,C,D)
END.
Бұл программа орындалу кезінде пернетақтадан мынадай мәндер енгізілген болса:
3 4
W F
онда А=3, B=4, C=’_’, D =W болады, себебі 4 санынан соң басылған Enter пернесі бос символ ретінде меншіктеледі де, соңғы f символы ешқайда енгізілмейді. Программадағы айнымалылар мәнді дұрыс қабылдауы үшін екі оператордың арасына параметрсіз және бір енгізу операторын мына түрде жазу қажет:
READ (A,B);
READLN;
READ (C,D);
Осылай жазылған үш оператор А=3, В=4, С =’W’, D=’F’ мәндерін дұрыс меншіктеуді қамтамасыз етеді. Символдарды енгізу операторларының алдына міндетті түрде READLN операторын қою қажет. Егер жоғарыдағы программа үзіндісінде символдарды енгізу операторын (READ (C,D);) 1-орынға шығарсақ та, оның алдына READLN операторын қою қажет, яғни айтылған ерекшелікке байланысты жоғарыдағы жолдарды былай да жазуға болады:
READLN;
READ (C,D);
READ (A,B);
Программада сандық және символдық мән қабылдайтын айнымалылар үшін екі рет енгізу операторын жазудың да қажеті жоқ. Жоғарыдағы екі оператор орнына READ (A,B,C,D) операторын ғана жазуға болады. Егер READ (A,B,C,D) операторын орындауда айнымалыларға мәнді былай берсек:
45 31
К N
онда дисплей экранында 4531K көрінеді, демек А =45, В= 31, С=’_’, D=’K’ болғаны, ал егер мәндер былай берілсе:
45 31 K N
онда дисплейден 45 31 K N көрінеді, яғни осылай енгізу дұрыс нәтиже береді.
Егер осы программаның ’Символ енгізіңдер:’ деген хабарламасынан кейін бір символ пернесін басып, оны босатпасақ, онда сол басылған символ бейнесі экранға 127 рет шығады да, одан кейін тек тырсылдаған дыбыс қана естіледі. Бұл 127 символ сақтай алатын пернетақта буферінің енгізілген таңбалармен толып қалғанын көрсетеді.
Негізінде, перне басылғанда бірден екі код қалыптасады, оның алғашқысы — символ коды, ал екіншісі — кеңейтілу немесе сканерлеу коды. Алфавиттік-цифрлық перне басылғанда, олардың символ коды пайдаланылады. Ал кеңейтілу коды басқару пернелері (Ctrl, Shift, CapsLock, Fl, F2 т.б.) үшін өте маңызды. Бұлардың символ коды нөлге тең болып саналады да, программаларда олардың тек сканерлеу коды пайдаланылады. Сканерлеу кодын пайдалану Турбо Паскаль программасының CRT модулінің
ReadKey функциясы арқылы жүзеге асырылады. Символ енгізу кезінде бұл функция курсорды келесі орынға жылжытпай, ол орынға кез келген символ бейнесін шығара алады. Келесі testread2 программасы ReadKey функциясын пайдаланып, кіші латын әріптерін бас әріптерге түрлендіреді.
Program testread2;
uses CRT;
var
ch:char;
begin
writeln(‘Латын алфавитінің кіші әріптерін ентізіңдер (z — программадан шығу):');
repeat
ch := ReadKey;
write(UpCase(ch));
until ch =’z’;
end.
Төмендегі scan_codes программасы басылған пернелердің сканерлеу кодын анықтауға арналған. Ол программамен жұмыс істеу барысында Ctrl + PrtSc (принтерге экрандагы мөліметті шығару) немесе Ctrl + Alt + Del (DOS-ты қайта жүктеу) пернелер комбинациясын басу керек емес, ал Ctrl + Break пернелерін басу программа жұмысын тоқтатады.
Бұл программа кейбір пернелерді басқанда, мысалы, F11 пернесін басқанда еш нәрсе істемейді. Оның символдық және сканерлеу коды болғанмен, Паскаль колданатын DOS жүйесі компьютер пернелерінің кеңейтілмеген ескі нұсқасын пайдаланатындықтан (онда F11 болмаған), программа осындай нәтиже береді.
4. Символдық және сандық мәндерді енгізгенде, кебінесе EOLN (end of line — жол соңы) стандартты функциясын пайдалану қолайлы болады. Бұл функция мәні «жолдың соңы болды» немесе «мәндер беріліп болды» дегенді білдіретін Enter пернесі басылғанда ғана ақиқат (TRUE) болады да, қалған жағдайлардың барлығында жалған (FALSE) болады. Бұл функция көбінесе циклдік операторларда пайдаланылады.
1-мысал. Енгізілуге тиіс бүтін сандардың Enter пернесі басылғанша қаншасы терілгенін есептейтін программа құру керек.
PROGRAM SANAU;
VAR A,I: INTEGER;
BEGIN
І:=0;
READLN;
WHILE NOT EOLN DO
BEGIN
Достарыңызбен бөлісу: |