Программирование. 3
Мазмұны
Кіріспе.......................
І. ПАСКАЛЬ ТІЛІНДЕГІ МОДУЛЬДЕР
1.1. Модулдер
туралы жалпы түсінік..........
1.2. Пернетақтаны
басқару функциялары...........
1.3. Экранға
мәтін шығару процедуралары
1.4. Дыбыс
генераторын программалау..................
2.1. Турбо Паскальдың
стандарт модулдеріне шолу.....
2.2 Стандартты
модульдерді сұрыптау..........
2.3.Graph модулінің
жалпы сыпаттамсы..............
ІІІ . МОДУЛЬДЕР, МОДЕЛЬДЕР ҚҰРУ
3.1. Модельдер
кезінде дедуктивті және
3.2. Құрылымды және
модульді программалау..................
ҚОРЫТЫНДЫ.....................
ПАЙДАЛАНЫЛҒАН
ӘДЕБИЕТТЕР ..............................
КІРІСПЕ
Бүгінде, дүние жүзінде
Паскаль тілін Швейцария
Турбо Паскаль 7.0 ортасы негізінде
1996 жылдары Borland фирмасы Delphi программалау
жүйесін жасап шығарды. Жүйе
пайдаланатын Object Pascal программалау
тілінде Турбо Паскалдің
Менің жұмысымның мақсаты
Бірінші бөлімде программалық модульдер туралы және оларды пайдалану принциптері сөз етіліп жазылды. Crt және Graph модульдерінің мүмкіндіктері арнайы сөз етіліп, көптеген программалау үлгілері берілген. Турбо Паскаль 7.0 интегралдық ортасында жұмыс жасауға қажетті анықтамалық ақпарат берілген. Паскаль графикасын пайдаланып әртүрлі есептерді шығаруға баса назар аударылған.
Паскаль тілінде кез-келген процедура (ішкі программа), шартты түрде, оператор деп есептелінеді. Күні бұрын сипатталған арнайы процедуралар стандартты модулдар (System, Dos, Crt, Printer, Graph, Overlay, Turbo3, Graph3) мен арнайы кітапханаларда жинақталады.
Модуль
дегеніміз өз алдына компиляцияланатын,
сипаттаудың әртүрлі компоненттерін (типтер,
тұрақтылар, айнымалылар, процедуралар
және функциялар) енгізу арқылы құрылатын
жеке программалық бірлік. Модулдер қолданбалы
программалар кітапханасын жасақтаудың
және модулдік программалаудың қуатты
тетігі болып табылады.
І
. ПАСКАЛЬ ТІЛІНДЕГІ МОДУЛЬДЕР
1.1.
Модулдер туралы жалпы түсінік
Стандартты Паскалда
Модуль
дегеніміз өз алдына компиляцияланатын,
сипаттаудың әртүрлі
Модуль тақырыбы UNIT қызметші
сөзінен және модуль атынан
тұрады. Модуль аты оның коды
сақталатын диск файлының
болса, онда оның мәтіні Modul1.pas файлында сақталуы керек деген сөз.
Модуль аты оны негізгі программамен немесе
басқа модулдермен байланыстыру үшін
өте қажет. Бұл байланыс
анықтауы
арқылы жүзеге асырылады. Мысалы:
USES анықтауын негізгі программаның анықтау бөлімінің басында, ал модулдерде не INTERFACE, не IMPLEMENTATION қызметші сөздерінен кейін жазуға болады (2 рет жазуға да рұқсат етіледі).
Анықтау (интерфейс) бөлімі INTERFACE
қызметші сөзімен ашылады.
Орындау бөлімі IMPLEMENTATION қызметші сөзімен басталады. Онда INTERFACE бөлімінде анықталған процедуралар мен функциялар сипатталады. Қажет болған жағдайда дайындау бөлімінде пайдаланылатын модулдің жергілікті объектілерін (типтерін, тұрақтыларын, айнымалылары мен блоктарын) осы бөлімде анықтауға болады. Егер анықтау бөлімінде ішкі программалардың тақырыптары толық сипатталған болса, онда орындау бөлімінде олардың аттарын ғана жазуға рұқсат етіледі.
Дайындау бөлімі BEGIN қызметші
сөзімен ашылады. Онда негізгі
программаның жұмысына
Ескерту: Модулдің анықтау (орындау) бөлімі бос болуы да мүмкін.
Модулдарды пайдалану үшін оларды компиляциялап алу керек. Компиляция нәтижесі TRU-файлдарда сақталады. Мысалы, Modul1.pas модулін компиляция-лағанда жаңа Modul1.tru файлы пайда болады. Негізгі программаны не модулді компилациялау үшін Турбо Паскаль ортасының MAKE режимін пайдалану өте ыңғайлы екенін ескерген жөн.
Үш өлшемді векторлық
UNIT Vector;
INTERFACE
type
vect = record
x, y, z : real;
end;
Procedure SumV(a,b: vect; var c: vect);
Procedure SubV(a,b: vect; var c: vect);
Procedure MulV(k: real; a: vect; var c: vect);
Function ModV(a: vect): real;
Function ScMulV(a,b: vect): real;
INPLEMENTATION
Procedure SumV;
begin
c.x:=a.x+b.x; c.y:=a.y+b.y; c.z:=a.z+b.z;
end;
Procedure SubV;
begin
c.x:=a.x-b.x; c.y:=a.y-b.y; c.z:=a.z-b.z;
end;
Procedure MulV;
begin
c.x:=k*a.x; c.y:=k*a.y; c.z:=k*a.z;
end;
Function ModV;
begin
ModV:=sqrt(sqr(a.x)+sqr(a.y)+
end;
Function ScMulV;
begin
ScMulV:=a.x*b.x+a.y*b.y+a.z*b.
end;
END.
Мұнда
SumV процедурасы екі векторды қосу,
SubV - азайту, MulV –векторды санға көбейту
амалдарын орындаса, ModV функциясы
вектордың модулін, ал ScMulV - екі
вектордың скаляр көбейтіндісін
табады. Модулдің мәтінін Vector.pas файлында
сақтасақ, оны компиляциялау нәтижесінде
Vector.tru файлын аламыз. Осы модулді пайдалану
арқылы оңай шешілетін белгілі есептің
программасын құрайық.
векторлары берілген.
және
векторларының арасындағы бұрышты
есептеңдер.
Program Prost_51;
uses Vector;
var a, b, c, d, m, n: vect;
ax, ay, az, bx, by, bz, ur, ug: real;
begin
Write('a векторының координаталарын енгіз: '); Readln(ax,ay,az);
Write('b векторының координаталарын енгіз: '); Readln(bx,by,bz);
MulV(3,a,c); MulV(4,b,d); SumV(c,d,m);
MulV(5,a,c); MulV(7,b,d); SubV(c,d,n);
ur:=argtan(sqrt(sqr(ModY(m)*
ug:=ur*180/Pi;
Write('Бұрыш ',ug:6:2,' градусқа тең';
Readln;
end.
1.2. Пернетақтаны
басқару функциялары
MS-DOS
операциялық жүйесінде
| Код | Перне | Код | Перне | ||
| 1-ші байт | 2-ші байт | 1-ші байт | 2-ші байт | ||
| 8 | - | Backspace | 0 | 59..68 | F1..F10 |
| 9 | - | Tab | 0 | 71 | Home |
| 13 | - | Enter | 0 | 72 | ↑ |
| 27 | - | Esc | 0 | 73 | PageUp |
| 32 | - | Үзік | 0 | 75 | ← |
| 42,43,45,47 | - | * + - / | 0 | 77 | → |
| 44,46 | - | , . | 0 | 79 | End |
| 48..57 | - | 0..9 | 0 | 80 | ↓ |
| 60,62 | - | < > | 0 | 81 | PageDown |
| 65..90 | - | A..Z | 0 | 82 | Insert |
| 97..122 | - | a..z | 0 | 83 | Delete |
KeyPressed функциясы Boolean типті - пернетақта буферінің бос не бос емес-тігін білдіреді. Егер функция орындалғанға дейін бірде-бір түйме басылмаса, онда мәні False, әйпесе мәні True болады. Ерекшелігі, фунция программаның орындалуын кідірпейді.
ReadKey функциясы Char типті- мәні пернетақта буферінен оқылған символ. Егер функция орындалғанға дейін бірде бір перне басылмаған болса, онда программаның орындалуы кезкелген бір перне басылғанша кідіртіледі. ReadKey функциясының жәрдемімен кезкелген перненің кодын оқуға болады. Символы бірінші байтқа жазылған перненің кодын оқу үшін ReadKey функциясын 1 рет, ал қалғандарына 2 рет қолдану керек.
Кезкелген перненің
Program Prost_52;
uses CRT;
var ch : char;
begin
repeat
ch := ReadKey;
if ch = #0 then ch := ReadKey;
Writeln(ord(ch));
until ch = #32;
end.
1.3. Экранға мәтін шығару процедуралары мен функциялары
1982
жылдан бастап IBM фирмасы CGA (Color Graphics Adapter)
түсті графикалық адаптерін пайдаланатын
дербес компьютерлерді шығара бастады.
Бұл адаптер монитор экранына 16 түспен
мәтіндік режимде 40х25 не 80х25 символ, ал
графикалық режимде 320х200 не 640х200 пиксел
(нүкте) шығаруға мүмкіндік берді. CGA-ның
мәтіндік мүмкіндіктері IBM фирмасының
кейінгі буын адаптерлерінде (EGA, MCGA, VGA,
SVGA) стандарт ретінде сақталған. CRT
модулі осы типті адаптерге қатысты мүмкіндіктерді
қарастырады.
TextMode процедурасы адаптердің жұмыс режимін анықтайды. Процедура тақырыбы:
Procedure
TextMode (TM: Word);
Мұнда TM - мәтіндік режимнің коды. CRT модулінде оның негізгі 4 тұрақты мәні бар:
const
BW40 = 0; { 40х25 ақ-қара режим }
Co40 = 1; { 40х25 түсті режим }
BW80 = 2; { 80х25 ақ-қара режим }
Co80 = 3; { 80х25 түсті режим }
TextMode процедурасымен қойылған соңғы режимнің коды LastMode жаһанды айнымалысында сақталады. Оны экранның бұрынғы қалпын қайтару үшін пайдаланады. TextMode процедурасы орындалғанда экран тазаланып, оның бұрынғы түсі жойылады және көрсеткіш экранның сол жақ жоғарғы бұрышына қойылады. Мәтіндік режимде экранда бейнеленетін әрбір символдың позициясы жатық (x) және тік (y) кординаталарымен анықталады. Экранның сол жақ жоғарғы бұрышының координаталары (1,1) болады да, x оңға қарай, y төмен қарай өседі:
TextColor процедурасы экранда бейнеленетін
символдың түсін анықтайды. Процедура
тақырыбы:
Procedure TextColor (Color: Byte);
TextBackground процедурасы экран (символ)
төсегінің түсін анықтайды. Процедура
тақырыбы:
Procedure
TextBackground (Color: Byte);
Мұнда Color - түс коды. CRT модулінде оның 17 тұрақты мәні бар:
const
| Black | = 0 | {қара} |
| Blue | = 1 | {көк} |
| Green | = 2 | {жасыл} |
| Cyan | = 3 | {көгілдір} |
| Red | = 4 | {қызыл} |
| Magenta | = 5 | {күлгін} |
| Brown | = 6 | {қоңыр} |
| LightGray | = 7 | {сұрғылт} |
| DarkGray | = 8 | {сұр} |
| LightBlue | = 9 | {ашық көк} |
| LightGreen | = 10 | {ашық жасыл} |
| LightCyan | = 11 | {ашық көгілдір} |
| LightRed | = 12 | {алқызыл} |
| LightMagenta | = 13 | {қызғылт} |
| Yellow | = 14 | {сары} |
| White | = 15 | {ақ} |
| Blink | =128 | {жыпылықтау} |
ClrScr процедурасы экранды (терезені)
тазалайды және оны TextBackground процедурасы
анықтаған төсек түсімен толтырады. Көрсеткіш
экранның сол жақ жоғарғы бұрышына қойылады.
Мысал:
Экран төсегінің түсін өзгерте
отырып, түсті мәтін шығару.
Program Prost_53;
uses CRT;
var ch: char;
begin
TextBackground(1); ClrScr;
TextColor(14); Writeln('Алгоритм'); Ch:=ReadKey;
TextBackground(6); ClrScr;
TextColor(3); Writeln('Программа');
Ch:=ReadKey;
TextBackground(0); ClrScr;
end.
Window процедурасы мәтіндік терезені
(экранның тік төртбұрышты аймағын) анықтайды.
Мәтіндік терезеде экранның барлық қасиеттері
орындалады. Процедура орындалғанда терезе
тазаланып, төсек түсімен толтырылады,
ал көрсеткіш терезенің сол жақ жоғарғы
бұрышына қойылады. Процедура тақырыбы:
Procedure Window (x1, y1, x2, y2: Byte);
Мұнда (x1, y1) - терезенің сол жақ
жоғарғы, ал (x2, y2) - оң жақ төменгі
бұрышының экрандық
GotoXY процедурасы көрсеткішті экранның (терезенің) берілген позиция-сына қояды. Процедура тақырыбы:
Procedure
GotoXY (x, y: Byte);
Мұнда (x, y) - көрсеткіштің жаңа координаталары. Берілген координаталар экранның (терезенің) шекарасынан шығып кеткен жағдайда процедура орындалмайды.
WhereX және WhereY функциялары (типтері: Byte) көрсеткіштің ағымдық x және y координаталарын береді.
ClrEOL процедурасы экранның (терезенің) көрсеткіш тұрған позициясынан бастап жолдың оң жақ бөлігін тазалайды, бірақ көрсеткіштің орны өзгермейді.
DelLine процедурасы экранның (терезенің) көрсеткіш тұрған жолын тазалайды, төменгі жолдар (болса) бір позицияға жоғары көтеріледі.
InsLine процедурасы экранның (терезенің) көрсеткіш тұрған позициясына жаңа жол енгізеді, көрсеткіш тұрған жолдан бастап төменгі жолдардың барлығы бір позицияға төмен түседі.
LowVideo, NormVideo, HighVideo процедураларының көмегімен символдарды экранға сәйкес төменгі, қалыпты және жоғарғы жарықтылықпен шығаруға болады.
AssignCRT процедурасы f файлдық айнымалысын
экранмен (видеожадына тікелей қатысу
арқылы) байланыстырады. Процедура тақырыбы:
Procedure
AssignCRT (f: Text);
Экранда әуелі, ақ түспен "МАТЕМАТИКА" сөзі жазылған жасыл терезе, кейін сары түспен "ИНФОРМАТИКА" сөзі жазылған күлгін терезе шығару.
Program Prost_54;
uses CRT;
var
ch: char;
begin
TextBackground(2); TextColor(15);
Window(15, 5, 45, 13); ClrScr;
GotoXY(7, 5); Write('М А Т Е М А Т И К А');
Ch:=ReadKey;
TextBackground(5); TextColor(14);
Window(30, 11, 62, 19); ClrScr;
GotoXY(7, 5); Write('И Н Ф О Р М А Т И К А');
Ch:=ReadKey;
TextBackground(0); ClrScr;
end.
1.4.
Дыбыс генераторын программалау
Дербес компьютердің дыбыс шығару мүмкіндіктерін
программада пайдалану оның дыбыстық
жиіліктегі электромагниттік тербелістер
шығара алатын дыбыс генераторының
жұмысын басқаруға негізделген. CRT модулінде
дыбыстарды программалауға арналған 3
процедура бар.
Sound процедурасы берілген жиілікпен
дыбыс шығаратын ДК динамигін іске қосады.
Процедура тақырыбы:
Мұнда F- герцпен берілген дыбыс жиілігі.
Процедура программаның орындалуын жалғастыра
береді және динамиктің дыбыс шығаруы
NoSound процеду-расы орындалғанша тыйылмайды.
NoSound процедурасы динамиктің дыбыс шығаруын тияды.
Delay процедурасы программаның орындалуын
берілген уақытқа кідіртеді. Процедура
тақырыбы:
Procedure
Delay (T: Word);
Мұнда T - миллисекундпен берілген
уақыт. Әртүрлі жиіліктегі
4 октавадан тұратын музыкалық гамманы ілгері және кейін орындау.
Program Prost_55;
uses CRT;
const
F: array[1..12] of real = (130.8, 138.6, 146.8, 155.6, 164.8, 174.6,
temp=100;
var i, j: integer;
begin
for i:=0 to 3 do
for j:=1 to 12 do
begin
Sound(Round(F[j]*(1 shl i)));
Delay(temp);
NoSound;
end;
for i:=4 downto 1 do
for j:=12 downto 1 do
begin
Sound(Round(F[j]*(1 shl i)));
Delay(temp);
NoSound;
end;
end.
ІІ.
ПАСКАЛЬ ТІЛІНДЕ СТАНДАРТТЫ МОДУЛЬДЕР
2.1.
Турбо Паскалдың стандарт
Турбо Паскалда көптеген әртүрлі типтерді, тұрақтыларды, процедуралар мен функцияларды жинақтап сақтайтын 8 стандартты модулдер бар. Олар: SYSTEM, DOS, CRT, PRINTER, GRAPH, OVERLAY, TURBO3 және GRAPH3. Турбо Паскаль 7.0 пакетінде GRAPH, TURBO3 және GRAPH3 модулдері бөлек-бөлек TRU-файлдарда жазылған, ал қалғандары TURBO.TPL кітапханалық файлдың құрамына кіреді. Ескеретін бір жағдай, SYSTEM модулінен басқа модулдерді пайдаланғанда міндетті түрде USES анықтауын қолдану керек. Стандартты модулдерді қысқаша сипаттап өтейік.