Паскаль программалау тілі туралы түсінік

691

Паскаль программалау тілі туралы түсінік

Алғы сөз

9 сыныпта информатика пәнін оқытуда  «программалаумен танысу» тарауының, оның ішінде «Паскаль программалау тілі» тақырыбының маңызы ерекше.Осы тақырыптарды өткен соң, сарамандық сабақтарда оқушылар компьютер көмегімен есептеулер жүргізу мүмкіндігіне ие болады.

Паскаль тілін оқып үйренгенде оның алгоритмдік тілмен ұқсастығын әр уақытта баса көрсетіп, шешу жолдары алгоритмдік тілде қарастырылған есептерге осы тілде программа жазып, оны орындаған тиімді.

Бұл кітапта алгоритм және программа туралы бастапқы түсініктер бере отырып, кейбір есептерге программа құрылып көрсетілді.

Компьютер- тапсырмаңызды орындауға дайын тұратын әмбебап есептеу жүйесі. Бірақ сіздің тапсырмаңызды орындау үшін машинаға программаны енгізу керек. Программа дегеніміз машина тіліне аударылған сіздің есеп-бұйрығыңыз, өйткені әзірше машина кәдімгі адам тілін түсіне алмайды.

Программа клавишті пульт перфокарта, магнитті дискілер арқылы компьютерге енгізеді. Компьютер программада көрсетілген іс-әрекеттерді орындайды. Программа қатесіз жасалу керек, белгілі ережелер сақталмаса, машина ондай программаны орындамайды.

Программа — арнайы мәтін арқылы компьютерге тапсырманың алгоритмін хабарлайды. Алгоритм –арнайы іс-әрекеттердің белгілі кезекте орналасқан тәртібі, алогритм арқылы машина тапсырманы орындайды.                Программа жасау үнемі өсу,өрлеу, жаңару үстінде. Олай дейтініміз алғашқы программалар машина кодтарына жасалады.Бұл өте қиын жұмыс еді. Себебі программалаушы үнемі кодтық операциялар, ақпараттар,  адрестер және командалар арқылы жұмыс істеуге мәжбүр болды.   Сондықтан программалаушылар өз жұмыстарын жеңілдету жолдарын іздестіруге кірісуде. Олар алгоритмдік тілдер мен символдық программалау тәсілдерін жасап шығарды.

Алгоритм түсінігі

Программа құруды жеңілдету үшін түрлі әдіс-тәсілдер пайдалынады. Ол үшін көлемді программаларды бірнеше бөлшектерге бөледі де оларды рет-ретімен орындайды. Мұндай жинақты функциональдық программаларды жеке тіркеп, стандарт программалдарға арналған арнайы кітапханада сақтауға болады. Кіші программалар көлемді  программаның ішінде бірнеше рет  кездесуі мүмкін.

Программа құруды жеңілдету үшін, әдетте, алдымен алгоритмдік схемасын, содан соң осы схема бойынша машина кодына немесе кез келген бір бір алгоритм тілнде программаның өзін жазады.

Алгоритмдік схеманың жәрдемімен ақпаратты өңдеудің егжей-тегжейлі процесі беріледі және орындалатын операциялар реті анықталады. Алгоритмдік схеманы жасау үшін арнайы шартты белгілер қолданады.

Ескерте кететін бір жәйт, бір есепті шешу үшін бір-біріне ұқсамайтын алгоритмді қолдануға болады. Түрлі алгоритмдерді бір-бірімен салыстырып, ішінен ең тиімдісін таңдап алу керек. Бір ғана тапсырманы орындау үшін пайдаланатын барлық жағынан тиімді алгоритм болмайды. Әдетте алгоритмді қадамдарының саны бойынша бағалайды. Компьютер белгілі бір уақытта көлемді тапсырмалар орындау үшін олардың алгоритмдері тиімді әрі қысқа қүрылуы керек. Бұл жағдайда программа мен алгоритм күрделіленеді.

Мысал келтірейік: у= 3х2 +4х-+ 2  функциясы берілген. у-тің мәнін табу керек. Бұл есептің қарапайым алгоритмін құрып шығару үшін:

1)х-ті х-қа көбейтіп, шыққан санды М1 деп белгілейміз;

2)3-тім М1-ге көбейтеміз де, шыққан санды М2 деп белгілейміз.

3)4-ті х-ке  көбейтеміз де, шыққан санды М3 деп белгілейміз.

4)М2-ні М3–ке қосамыз, шыққан санды М4 деп белгілейміз.

5)2 –ге М4 –ті қосамыз, шыққан санды М5 деп белгілейміз

6)ү-ке М5 –тің мәнін меншіктейміз

Осы тәртіпті бұл есептің алгоритмі дейді. Машинаға бұл алгоритм түсінікті болу үшін арнайы тілмен жазамыз. Сонда ол машина програмасы болады.

Программаны орындау үшін машинаның оперативті есте сақтау  құрылғысында 3, х, 4,2 мәндері болуы керек және машинаның жадында есаептеу барысында шығатын М1,М2, М3, М4, М5, у сандары орналастырылуы керек.

Тапсырманың дұрыс орындалуы  алгоритмнің тиімді құрылуына байланысты. Себебі алгоритм шексіз есептеулерден құрылуы мүмкін, ал мұны шешу үшін машинаға ондаған жылдар үздіксіз жұмыс істеу керек болар еді. Тіпті алгоритм тиімді таңдалған күннің өзінде де оның программасын жасау оңай емес. Бұл жерде программаның құрамындағы мыңға дейінгі түрлі символдар мен адрестерді, нұсқауларды, берілетін ақпараттарды қолдан кодтау керек болады. Программаны жасау барысында көптеген қателер де кетуі мүмкін. Олар жөндеу кезінде анықталып түзетіледі, мұндай қателерді түзеу кейде ұзаққа созылады, сондықтан да программаны жазу өте қымбатқа түседі.

 

 

 

 

Turbo Pascal тілінің сипаттамасы

 

Символдық программалау тілі күрделі кодтар символдармен ауыстырылды. Символдық тілді пайдаланып программалаушы компьютер жадысының ұяшығындағы түрлі нұсқаулар мен ақпараттарды есептеп, тіркеп отырудан құтылды. Ал символ тілінде әрбір санның адресі идентификатормен, белгіленгендіктен  мұндай талаптардың қажеті болмайды. Бұл программаны жасауда сандардыы идентификатор арқылы адрестеуге мүмкіндік береді. Дегенмен, символдық тілді машина түсінуі үшін оған аудармашы керек. Ол машинаға ақпаратты өңдеу программасының кодын жасап береді. Мұндай аудармашы ролін арнайы аудармашы программа – транслятор атқарады, оны ассемблер деп атайды

Символдық тілдерді пайдаланудағы негізгі жетістік- ақпараттар мен нұсқаулар адрестерін қабылдауда автоматтандыру нәтижесінде программаны жасауға кететін уақыттың қысқарғандығы және программаны коллективтік өңдеудің қарапайымдылығы. Себебі мұнда программаның кейбір бөлшектері нақты ес ұяшығына мықтап тиянақталмаған. Сондай – ақ мұнда программаны орындау мен оған түрлі өзгерістер енгізу мәселесі де қарапайым. Осыдан барып стандарттаудың мол мүмкіндігі мен кіші программалардың бөлшектерін жиі пайдалану жолдары шығады.

Символдық тілде программалаудың кемшілігі- оны, негізінен, қарапайым болса да машина тілінде жасауда және бұл программаларды әрбір енгізілген өзгерістер кейін трансляциялап отыруда. Әйтсе де олар практикада кең түрде қолданып келеді. Әрбір компьютерде символдық тілдер- автокод, ассемблер,мнемкод т б қолданылады. Бұл тілдердегі бір операторға, әдетте, бір ғана командаға сәйкес келеді. Оларды машиналық бағытталған тілдер деп атайды. Фортран, Алгол, ПЛ/1, Qbasic, Паскаль т б тілдерінде әрбір оператор өзара байланысты нұсқау қатарын ауыстырады, ал бұл программалауды жеңілдетеді. Бұл тілдерді проблемалық – бағытталған жоғары деңгейлік тілдер деп атайды. Осы тілдерде жазылған программаны машина кодына аударуды арнайы транслятор атқарады.

Транслятор алгоритмдік тілдер операторын оқиды және соған сәйкес машина кодтарын ұсынады. Сондай –ақ транслятор жіберілген түрлі синтаксистік қателерді табады, ал бұл программалаушы жұмысын жеңілдетеді.

Транслятордан басқа машинада арнайы программалар –интерпретаторла бар.Олар кейбір алгоритмдік тілдер үшін жазылған программаны машинаға енгізеді және жұмыс істеу кезінде оларды есте сақтайды.

Паскаль тілін 1968-1971 жылдары швейцариялық ғалым Никлаус Вирт оқып-үйренуге қолайлы программалау тілі ретінде ұсынған болатын. Қазіргі кезде бұл программалау тілі оқып-үйрету үшін ғана емес, басқа да салаларда кеңінен қолданыларды. Паскаль тілінің қазіргідей танымал болуына Турбо Паскаль (Turbo Pascal)  пакетінің пайда болуы өз әсерін тигізді. Бұл программалау тілі алгоритмдерінің тиянақтылығымен, компиляторының жылдам әрекеттілігімен және программаларды құратын

және орындайтын құралдарының қолайлы болуымен ерекшеленеді. Паскаль тілінің басқа программалау тілдерінен басты ерекшелігі ретінде осы тілде жазылған программалардың қарапайым алгоритмдік тілдерге барынша ұқсас келетіндігін айта кету керек.

Өрнектер

Өрнектер кейбір мәндерді есептеу ережесін белгілейді. Өрнектер тұрақтылардан, айнымалылардан, функциялардан, амалдарды орындау белгілерінен және жақшалардан тұрады.

Арифметикалық амалдар Төмендегі кестеде Турбо Паскальдің негізгі арифметикалық амалдары көрсетілген.

 

Белгілер Операция атауы Мысал
* көбейту 2*3 (нәтиже: 6)
/ бөлу 30/2 (нәтиже: 1.5E+01)
+ қосу 2+3 (нәтиже: 5)
азайту 5-3 (нәтиже: 2)
div бүтін бөлу 5 div 2 (нәтиже: 2)
mod бүтін қалдық 5 mod 2 (нәтиже: 1)

Логикалық амалдар

Логикалық типтегі шамаларға мына амалдар қолданылады:

NOT – логикалық терістеу («ЕМЕС»)

AND – логикалық көбейту («ЖӘНЕ»)

OR – логикалық қосу («НЕМЕСЕ»)

XOR — логикалық «Аралас НЕМЕСЕ»

Типтері логикалық болып табылатын А және В айнымалыларымен орындалған осы амалдардың нәтижесі төмендегі ақиқат кестесінде бейнеленген:

A B not A A and B A or B A xor B
ақиқат ақиқат жалған ақиқат ақиқат Жалған
ақиқат жалған   жалған ақиқат Ақиқат
жалған ақиқат ақиқат жалған ақиқат ақиқат
жалған жалған   жалған жалған жалған

 

 

 Қатынас амалдары  Қатынас амалдарына мынадай амал түрлерін жатқызуға болады:

> — үлкен

< — кіші

= — тең

<> — тең емес

>= — үлкен немесе тең

<= — кіші немесе тең    Қатынас амалдарымен тек сандарды ғана емес, символдарды, жолдарды, жиымдарды және белгілерді салыстыруға болады.

 

 

Амалдарды орындау тәртібі

Алгоритмдік тілдерде (Паскаль, Бейсик, Си т.б.) арифметикалық амалдардың орындалу тәртібі олардың математикалық орындалу тәртібіне сәйкес келеді, яғни алдымен жақша ішіндегі амалдар, сонан соң көбейту, бөлу, қосу, азайту т.б. амалдар орындалады. Төмендегі кестеде әр түрлі амалдардың орындалу реті көрсетілген.

 

Реті Амалдар түрі Амалдар немесе оның элементі
1. Жақша ішіндегі өрнектер (     )
2. Функция мәндері Функциялар
3. Көбейту, бөлу түріндегі амалдар *, /, div, mod, and, shl, shr
4. Қосу амалдары +, -, or, xor
5. Қатынас амалдары =, <>, <, >, <=,  >=, in

 

Амалдардың орындалу тәртібін өзгерту үшін жақшаларды пайдалануға болады. Мысалы 2*5+10 өрнегінде әуелі көбейту емес, қосуды орындау қажет болса, 5 пен 10 санының қосындысын жақшаға алып жазамыз. Сонда өрнектің нәтижесі 20 емес, 30-ға тең болады. 2*(5+10)=30.

Негізгі математикалық функциялар  Турбо Паскальдің жүйелік кітапханасында алдын ала программалары жасалып стандартты модульге жинақталып қойылған, қажет кезінде пайдалануға болатын объектілер бар. Солардың бірі стандартты функциялар болып табылады. Олар жиі кездесетін математикалық және басқа да функцияларды есептеу үшін қолданылады. Стандартты функцияны жазу үшін міндетті түрде фунцияның аты және жақшаның ішінде аргументі көрсетілуі қажет.

Турбо Паскальдің негізгі математикалық функцияларына мыналар жатады:

Abs(X)—   X-тің абсолюттік шамасын

Cos(X), Sin(X)   -Х санының  косинусын (синусын) береді, мұндағы Х – радиан бұрышы.

Тангенс және котангенс функциялары Турбо Паскаль тілінде жоқ. Оларды есептеу үшін sin(x)/cos(x) (немесе cos(x)/sin(x) – котангенс үшін) өрнегі қолданылады.

ArcTan(X)  -Х санының арктангенcін береді.

Exp(X)  -е-нің Х дәрежесін есептейді.

Ln(x) — Х санының натурал логарифмін есептейді.

Pi-дің мәні, pi = 3.14159265

Sqr(X)— X-тің квадратын есептейді .

Sqrt(X)-X-тің квадрат түбірін есептейді.  Trunc(X)Х нақты санының бүтін бөлігін береді. (Х санының бөлшек бөлігі алынып тасталып, функция нәтижесінің типі Longint болады)

Frac(X)-  X санының бөлшек бөлігін береді.

Int(X) -Х санының бүтін бөлігін береді. Бұл функцияның Trunc функциясынан айырмашылығы есептеу нәтижесінің типі real түрінде болады.

Round(X)— Х нақты санын бүтін санға дөңгелектейді.

Random(X) -0..Х диапазоны арасынан кездейсоқ бүтін санды анықтайды.

Программада Random функциясын қолданбас бұрын, әуелі кейдейсоқ сандардың генераторы Randomize процедурасын іске қосқан жөн. Егер бұл процедура жазылмай кетсе, кездейсоқ сандардың бір тізбегі қайта-қайта шыға беретін болады.

Мысал    .-10..10 диапазоны арасынан кездейсоқ 5 санды шығару.

var i: integer;

begin

   randomize;

for i:=1 to 5 do writeln(random(21)-10);

end.

Inc(X,Y) Х-тің мәнін Y-ке арттырады. Егер Y саны көрсетілмей кетсе, Х-тің мәні автоматты түрде 1-ге артады.

Dec(X,Y) Х-тің мәнін Y-ке кемітеді. Егер Y саны көрсетілмей кетсе, X-тің мәні 1-ге кемиді.

Паскаль тіліндегі программа құрылымы

Паскаль тілінде программа үш бөліктен: тақырыптан, сипаттау бөлімінен және операторлар бөлімінен тұрады.

Программаның тақырыбында программаның аты жазылады, мысалы:

Program ESEP;

Сипаттау бөлімінде:-  кітапханалық модульдерді сипаттау бөлімі;

—      белгілерді сипаттау бөлімі;

—      тұрақтыларды сипаттау бөлімі;

—       типтерді сипаттау бөлімі;

—      айнымалыларды сипаттау бөлімі;

  • процедуралар мен функцияларды сипаттау бөлімдері

Кітапханалық модульдерді сипаттау бөлімі USES түйінді сөзімен басталып, сипаттау бөлімінде басқаларынан бұрын жазылуы керек. Программада қолданылатын модуль атауларының саны бірнеше болса, олардың арасы үтірмен ажыратылып жазылады:

uses CRT, Graph;  Программадағы кез келген операторды белгімен белгілеп қоюға болады.Бұл белгі арқылы қажетті жағдайда программаның кез келген жолынан осы белгісі бар операторға көшіп, оны қайталап кезексіз орындауға болады. Белгі ретінде төрт цифрдан аспайтын кез келген санды немесе сөздерді қолдануға болады. Оператор тек бір белгімен ғана белгіленеді. Бір белгі бірнеше операторды белгілей алмайды. Белгілер операторлар бөлімінде сол оператордың алдына жазылып, арасы қос нүктемен ажыратылады. Сипаттау бөлімінде белгілер label түйінді сөзінен кейін жазылады. Мысалы:

label 3, 471, 29, Quit;  

Программадағы тұрақтылар өз мәнімен (мысалы, 5,14,13.5, т.б.) немесе оған қойылған атау арқылы берілуі мүмкін. Тұрақтылар өз атауы арқылы берілсе, онда оның атауын жаза отырып программаның кез келген жерінде пайдалануға болады, бірақ оның атауы мен мәні тұрақтыларды сипаттау бөлігінде төмендегідей түрде көрсетілуі тиіс. Мысалы:

const p=3.14;  e=2.7;  a=’bol’;  max=1000;

Айнымалыларды сипаттау бөлімінде программада қолданылатын барлық айнымалалыларды және олардың типтерін көрсету қажет:

var  P,Q,R: Integer;

     A,B:   Char;

     F1,F2: Boolean;

Паскаль тілінде программа құрған кезде программада қолданылатын барлық компоненттер (айнымалылар, олардың типтері, тұрақтылар, белгілер т.б. ) сипаттау бөлімінде көрсетіліп кетуі қажет. Олай болмаған жағдайда программа қате деген мәлімет береді.

 Операторлар бөлімінде программа мазмұнына сәйкес бір немесе бірнеше оператордың болуы мүмкін. Операторлар бір-бірінен нүктелі үтір (;) арқылы бөлініп жазылады. Операторлар бөлімі begin түйінді сөзінен басталап, end сөзімен аяқталады. Begin мен end сөздерін операторлық жақшалар деп те атайды. Сәйкесінше begin – ашылатын, end – жабылатын жақшалар. Оператор дегеніміз — алгоритмді жүзеге асыру барысында орындалатын іс-әрекеттерді анықтайтын тілдің қарапайым сөйлемі. Операторлардың жалпы жазылу түрі төмендегідей болады:

BEGIN

       1-оператор;

       2-оператор;

       ……………..;

       n-1-оператор;

       n-оператор

END.

Әдетте программа мәтіні end сөзімен аяқталып, одан кейін нүкте қойылады. Егер программада бір емес, бірнеше операторлық жақшалар қолданылатын болса, онда нүктені тек ең соңғы орналасқан end сөзінен кейін қою қажет. Басқа end сөздерінен кейін нүктелі үтір (;) қойылады.     Паскаль тілінде құрылған қарапайым программалардың біріне мысал келтірейік:

Program bastau;        {программа тақырыбы}

const pi=3.14159;       { π тұрақтысының мәнін беру}

var r, l :real;              {r, l мәндерінің нақты сан екенін сипаттау}

begin                        {Операторлар басы}

readln(r);                  { r мәнін енгізу}

l:=2*pi*r;                   {Шеңбер ұзындығын есептеу}

 

write(‘шеңбердің ұзындығы= ’, l);         {Нәтижені экранға шығару}

 

end.                                                         {Программа соңы}

Мұнда программа мәтіні қарайтылған қаріппен терілген, ал оң жақ шетте пішінді жақша ішінде түсініктеме мәтіні берілген, түсініктеме программа мәтініне ешқандай әсер етпейді, оны түсінуді жеңілдетеді, сондықтан әрбір программа түсініктемемен толықтырылуы тиіс.

1-мысал

program misal; {екі санның қосындысын есептеу}

var

   x,y,s: integer;

begin

  WriteLn(‘Бос орын арқылы екі сан енгіз ‘);

  ReadLn(x,y);

  s := x + y;

  WriteLn(‘Екі санның қосындысы ‘,s);

end.

Бұл программа пернетақтадан екі санның  енгізілуін сұрап, олардың қосындысын есептейді және нәтижесін экранға шығарады. Енді бұл программаға аз ғана өзгерістер жасайық. Программа әуелі экранды тазалап, кейін нәтижені сол мезетте экранға шығару үшін қол данушының кез келген пернені басуын талап ететін болсын.

2-мысал

program misal;     {екі санның қосындысын есептеу}

uses Crt;          {экранды тазалауға және кідіруге қажетті процедураларды орындауға мүмкіндік   беретін модульді іске қосу}

var

  x,y,s: integer;

begin

  ClrScr; {экранды тазалау}

  WriteLn(‘Бос орын арқылы екі сан енгіз ‘);

ReadLn(x,y);

  s := x + y;

  WriteLn(‘Екі санның қосындысы ‘,s);

  ReadKey;         {перненің басылуын күту}

end.

Енгізу және шығару операторлары

   Паскаль тілінде мәліметтерді енгізу және шығару үшін, яғни адам мен компьютер арасында мәлімет алмасу мақсатында алдын ала анықталған Input, Output файлдары қолданылады. Программа берілген мәндерді Input файлынан алады да, алынған нәтижені Output файлына орналастырады. Стандартты енгізу файлы болып пернетақта, ал шығару файлы болып дисплей экраны саналады. Ол үшін енгізу операторы пайдаланылады.

Паскаль тілінде мәлімет енгізетін READ (READ – ағылшынша оқу) операторының жалпы түрі (пішімі) төмендегідей:

      READ(a1, a2, …, an);

      READLN(a1, a2, …, an);

      READLN;

мұндағы a1, a2, …, an – айнымалы атаулары, оларды енгізу операторының параметрлері деп те атайды. Алғашқы оператор көрсетілген айнымалылардың мәндері пернелер арқылы араларына бір бос орын қалдыру арқылы енгізілген соң, курсорды келесі қатарға көшірмейді. Ал readln ( read line – «қатарды оқу» деген сөздің қысқартылуы) алдыңғы оператордағыдай пернелерден мәндер енгізілгеннен кейін курсорды келесі қатарға көшіріп жібереді. Соңғы қатарда жазылған параметрсіз оператор ешбір мән енгізбей, тек курсорды келесі қатарға көшіруді ғана атқарады.

Енгізілетін айнымалылардың мәндері integer, real, char немесе string (сөз тіркесі) типтеріне жатуы мүмкін. Логикалық айнымалылардың мәндері енгізілмейді. Айнымалылар мәндері өз типтеріне сәйкес Паскаль тілінің ережесі бойынша енгізіледі. Егер ол шарт бұзылса (мысалы, а1 типі integer болса, ал енгізгенде char типтес мән терілсе), онда экранға енгізу-шығару қатесі шығады, оның пішімі мынадай болып келеді.

 I/O error XX,

мұндағы XX – бүтін сан түріндегі қатенің сипатына сәйкес коды.

READ операторы орындалғанда параметрлер өздеріне сәйкес мәндерді қабылдайды, бұл міндет INPUT енгізу файлы арқылы жүзеге асырылады. Параметрлер жаңа мән қабылдағанда, оларда бұрын орналасқан (жазылған) ескі мән өшіріліп, орнына жаңа мәндер жазылып отырылады да, программа параметрдің жаңа мәні бойынша жұмыс атқарады.

Мысал.

var

I: real;

J: integer;

K: char;

begin

Read (I, J, K);

Программаға мынадай бастапқы мәндер енгізіледі делік: 212.5    38    ‘п’

Осыдан кейінгі келесі мәндер енгізілсін:   ‘л’    121.35    25

Алғашқы нұсқасында мәлімет енгізу дұрыс орындалады, өйткені енгізілетін мәндер өз ретімен орналасқан айнымалылар типтеріне (I, J, K) сәйкес келіп тұр. Екінші нұсқа коды 10 болып келетін қате бар екенін айтады, себебі real типтес I айнымалысы үшін char типіндегі мән енгізіліп отыр.

Егер енгізілу пернетақта арқылы емес, дискіден немесе файлдан жүзеге асырылса, онда жақша ішіне алдымен файл аты жазылады.

    READ(FN, a1, a2, …, an);

READLN(FN, a1, a2, …, an);

READLN(FN); мұндағы FN – енгізілетін мәндер жазылған дискідегі файлдың аты; аi   айнымалылар идентификаторлары, файлдарда да мәндер бір қатардан немесе келесі қатардан оқыла береді, сол себепті мұнда да жоғарыда көрсетілген операторлардың үш түрі қолданылады. Файлдағы мәліметтер де бір-бірінен «бос орын» не «енгізу» пернесін басу арқылы бөлінуі тиіс, яғни файлға әрбір мән енгізілгеннен кейін «_», ал енгізу соңында «Enter» пернесі басылады. Файлдардан мәлімет енгізу мысалдарын кейінірек қарастыратын боламыз.

READ операторы кез келген сандармен, символдармен және сөз тіркестерімен жұмыс атқара алады.

Сонымен, параметрлердің сандық мәндері бір-бірінен бос орын арқылы ажыратылып жазылады. Мәндерді беріп болдық дегенді білдіру үшін Enter (енгізу) пернесі басылады. Мысалы, енгізу операторы READ(A,B,C); түрінде берілсе, параметрлерге мәндер былай беріледі. 5_6.2_4.5 Enter. Бұл жағдайда A=5, B=6.2, C=4.5 мәндер қабылдайды. Осы мәндер арқылы программа орындалып болған соң, басқа мәндер үшін программаны қайталау қажет болса, онда программаны басынан бастап қайта орындау қажет.

Бүтін айнымалыларға бүтін, нақты айнымалыларға нақты мәндер берілуі қажет.

   Айнымалы сипатталғанда нақты ретінде көрсетілсе, оған нақты да, бүтін де мән беруге болады, себебі нақты сан құрамына бүтін сан енеді. Ал машина «өзі» бүтін санды нақты сан түріне келтіріп алады.

Мысалы:   VAR

A, B: REAL;

BEGIN

READ (A,B);

END.

 

 

 

түрінде беріліп A, B айнымалылары үшін 4 5  Enter орындалса, онда машина оларды А = 4.0, B = 5.0 түрінде қабылдайды.    Сандар арасына бір немесе бірнеше бос орын қалдыруға болады, себебі сан енгізілгенде бос орын есепке алынбайды.   Мәндерді енгізгенде мән енгізілген жолдан келесі жаңа жолға өту үшін параметрсіз немесе параметрге сәйкес READLN; READLN(a1, a2, …, an); операторларын пайдалану қажет. Сонымен READ(a1, a2, …, an); READLN; операторларының орнына бір ғана READLN(a1, a2, …, an) операторын пайдалануға болады.  Шығару операторы. Паскаль тілінде нәтижені экранға шығару үшін WRITE (жазу) операторы (процедурасы деп айтылады) қолданылады:    WRITE (a1, a2, …, an); мұндағы жақша ішінде жай айнымалылар немесе апострофтармен қоршалған символдар тобы болуы мүмкін. Мысалы, егер B =17.15 болып, мына команда орындалғанда:   WRITE (‘B мәні = ’, B);экранда    В мәні = 1.715E+01деген сөз тіркесі көрінеді.   Шығарылатын мәндердің түрі айнымалылардың типі арқылы анықталады, олар integer, real, boolean (true, false), char, string сияқты типтер түрінде беріле береді.    Шығарылатын параметрлер бір-бірімен үтір арқылы ажыратылып, WRITE түйінді сөзінен соң жай жақша ішіне жазылады.   Шығару операторында жақша ішінде қағазға не экранға шығарылатын мәннің пішімін – оның алатын орнын , яғни енін толық көрсетуге болады. Бүтін санды оның енін көрсете отырып экранға шығаруға болады, мысалы: b айнымалысының бүтін түрдегі мәнін көрсету   WRITE (b:n) немесе WRITE (b:5) операторы арқылы жүзеге асырылады. Мұндағы b — айнымалының атауы; n – мәні бүтін сан болып келетін тұрақты түрінде берілген орын саны, оны бірден бүтін санмен де жазуға болады. Егер b:5 пішімі беріліп, ал b = 56 (екі не үш разрядты сан) болса, онда беске дейінгі толтырылмаған орындарға сол жақ шетте бос орын қалдырылады. b = 56 мәні үшін WRITE (b :5) операторы экранға       «   56»тіркесін шығарады.   Нақты сандар үшін оның жалпы енін, сонан соң бөлшегі алатын орынды көрсету қажет, сол себепті аралас сандарды бейнелеуде оның ені қос нүктемен бөлінген екі бүтін сан арқылы жазылады. Сонымен, нақты сан үшін пішім екі саннан тұрады:   I – санға берілетін барлық орын.    II – үтірден кейін алынатын бөлшек цифрлар саны.Мынадай оператор берілсін делік:   WRITE (Y : 5: 2)Мұндағы 5 – нәтижеге берілген барлық орын, 2 – үтірден соңғы бөлшек бөлігіне берілетін орындар саны. Мысалы, C = -145.7865 болғанда WRITE(C:8:3) операторы экранға -145.786 мәнін шығарады, мұндағы жалпы орындар саны – 8, ал бөлшек үш санмен бейнеленетіндіктен соңғы бір цифр жазылмай қалып отыр. C айнымалысының берілген мәнін толық бейнелеу үшін WRITE(C:9:4) операторын жазу керек еді. Жалпы нақты санды экранда бейнелеу операторының жазылу түрі:   WRITE(C : n : m);мұндағы nC мәнінің барлығына берілген орын саны; m — C мәнінің бөлшек бөлігіне белгіленген орын саны. n-нің мәні таңбаны, бүтін мен бөлшекті бөлетін нүктені және бүтін сандар орнын бөлшекке қосып көрсететіндіктен, ол n>m+3 болуы тиіс. Экранға шығаратын сандардың арасында қалдырылатын бос орын санын да осы жолмен көрсетуге болады. Ол үшін екі апостроф жазып, одан кейін қос нүктемен бөлінген бүтін сан арқылы қалдырылатын бос орындар санын өрнектейміз, мысалы:   WRITE (b:8:3, ‘ ‘: 4, c:12:4);Мұндағы 4 – b мен c сандарының арасындағы бос орын саны.    Егер нақты сан үшін: WRITE (‘Y =’, Y:8:3) пішімі берілсе, ал оның мәні Y = 1.76 болса, экраннан Y = 1.760 тіркесі көрінеді.    Егер операторда пішім көрсетілмесе, онда нәтижеде сол сан экспоненциальды түрде экранға шығады.    Паскаль тілінде параметрсіз шығару операторы WRITELN жаңа жолға өту үшін қолданылады.    Егер WRITELN(a1, a2, …, an); операторы қолданылса, онда a1, a2, …, an  мәндерін экранға шығарған соң курсор келесі жолға көшеді.    WRITE операторын түсініктеме беруге қолдануға болады. Мысалы:    WRITE(‘A,B,C мәндерін енгізіңдер:’);        READ(A,B,C);Мұндайда экранға:   A,B,C мәндерін енгізіңдер:Түсініктеме сөзі шығады, сонан кейін үш сандық мән енгізілуі тиіс. Мысалы,   WRITE(‘T= ’, N:3, ‘ ’:4, ‘M =’, M : 4 : 2 )болса, онда T-ның үшорынды мәнінен соң 4 бос орын қалады да, одан соң M-нің нақты мәні жазылады.    Айталық, X = 7, Y = 15, Z = 11, ал R = 450,08 болсын, оларды экранға шығарудың   әртүрлі тәсілдерін төмендегі кестеде көрсетейік: 

Оператордың жазылуы Экрандағы нәтижесі
 

Write (X, Y);

Write (X, ’_,_’, Y);

Write (’X =’, X);

Write (X, ’ ’:3,Z );

Write (’X+Y  =’, X+Y);

Write (Z, ’-соңы’);

Write (’бітті’);

 

7 15

7_,_15

X=7

7   11

X+Y = 22

11-cоңы

бітті

 

 

1-мысал. Радиусы R болатын шеңбер ұзындығын есептеу программасын құру қажет.

Шығарылуы:

program B1;

const pi=3.14159;

var

R:real; (*R – шеңбер радиусы*)

L:real; (*шеңбер ұзындығы*)

begin

writeln(‘R мәнін енгізіңдер:’);

read(R);

L:=2*pi*R;

writeln;

writeln;

writeln(‘нәтиже:’);

writeln(‘шеңбер ұзындығы L =’, L:8:3);

end.

Экранда төмендегідей нәтиже көрінеді: R мәнін енгізіңдер: 0.2нәтиже: шеңбер ұзындығы L =1.257

 

Есептер мен жаттығулар жинағы

 

  1. Үш натурал сан берілген. Олардың арасында тең сандар болмаса, «жоқ» деп, егер   олардың екеуі бір-біріне     тең болса, «иє» деп, ал үшеуі де бірдей сан болса, бәрі тең деп жазу керек.
  2. Екі үшбұрыш қабырғалары a, b, c жєне d, e, f  берілген. Қайсы үшбұрыштың ауданы үлкен екенін аңықтау   қажет.
  3. 3. a, b, c және d төрт түзу сызығының ұзындықтары берілген. Осылар квадраттың немесе тікбүрышты      төртбұрыштың қабырғалары бола алады ма? Соны тексеріңдер.

 

  1. Үшбұрыштың қабырғалары x, y және z берілген. Осы үшбұрыштың тікбұрышты үшбұрыш екенін анақтау  керек. Егер солай болып шықса, онда оның қай қабырғасы гепотенуза болатынын табыңдар.
  2. P натурал сан болғанда, a p өрнегін есептейтін программа құрыңдар (программаны while, , for        операторларының әрқайсысын пайдаланып, шығаруға тырысыңдар)
  3. Төмендегі өрнектің мәнің табу қажет:

 

  1. 1-ден 100-ге дейінгі тақ сандардың жєне жұп сандардың қосындыларын табатын программа құрыңдар.

 

8.Әрбір бактерия бір минутта екіге бөлінеді. Басында бір бактерия берілген деп, 5, 7, 9, … 15 минуттан           кейін неше бактерия пайда болатынын табыңдар. Жаңа пайда болған бактериялар да минут сайын         көбейіп отырады.

  1. Бірөлшемді массивтің ішіндегі индексі жұп болатын ең кіші элементті анықтау.
  2. Бірөлшемді массивтің ішіндегі ең үлкен элементті анықтау.
  3. Бірөлшемді массивтің элементтерін өсу реті бойынша сұрыптау.
  4. Бірөлшемді массивтің ішіндегі ең үлкен элементті алып тастау.
  5. Екіөлшемді 5х4 массив берілген. Екінші жолдың бойынан ең кіші элементті анықтау.
  6. Екіөлшемді 5х4 массив берілген. Төртінші бағанда орналасқан элементтердің көбейтіндісін анықтау
  7. Екіөлшемді 3х3 массив берілген. Осы массивтің индекстерінің қосындысы тақ болатын элементтердғ  экранға шығару.
  8. Екіөлшемді 4х5 массив берілген. Осы массивтің жұп элементтерін 0-ге, тақ элементтерін 1-ге айналдыру   қажет.
  9. Екіөлшемді 5х5 матрица берілген. Осы массивтің негізгі диагональ элементтерінің қосындысын табу.
  10. Екіөлшемді 4х4 матрица берілген. Осы массивтің кері диагоналінің астыңғы бөлігіндегі теріс элементтердің         санын табу.

 

  1. Екіөлшемді 5х5 матрица берілген. Осы массивтің негізгі диагоналінің үстіңгі  бөлігіндегі нөлдердің санын          анықтау.
  2. 20 элементтен тұратын бұтін сандар массиві берілген. Осы массивтің әрбір төртінші орында тұрған       элементтерін нөлге айналдыру.

 

  1. 4х5 матрица берілген. Матрицаның әрбір жолын өсу реті бойынша сұрыптаңыз.
  2. 20 элементтен тұратын бұтін сандар массиві берілген. Осы массивтің әрбір төртінші орында тұрған       элементтерін нөлге айналдыру.

 

  1. 4х5 матрица берілген. Матрицаның әрбір жолын өсу реті бойынша сұрыптаңыз.
  2. Алмаста N алма бар. Сыныптағы M бала одан әрқайсысы 1 алма беруден сұрады. Алмасқа әр алманың салмағы қанша грамм екені белгілі. M баланың әрқайсысына бір алмадан бере отырып, Алмас өзінде қалған алмалардың (N-M) жалпы салмағы максимум болуын басты назарда үстауы керек.

Мысал:   Берілгені:  N=10   M=7

25 85 1 6 9 23 41 2 6 10

Нәтиже: 151

  1. Төмендегі өрнекті есептеу:

Z=(a n+b m)c r-d k

  1. Берілген жолдың ішіндегі сөздердің санын анықтау.
  2. Берілген жолдың ішіндегі 3 символдан тұратын сөздерді экранға шығару.

Шығарылуы:

1.

program esep1;

var a,b,c:integer;

begin

writeln(’үш сан енгіз’);

read(a,b,c);

if (a<>b) and (b<>c) and (a<>c) then writeln(‘жоќ’)

else if (a=b) and (b=c) and (a=c) then writeln(‘бәрі тең’)

else writeln(‘екеуі тең’);

end.

 

2.

program esep2;

var a,b,c,d,e,f,p1,p2,S1,S2:real;

begin

writeln(’1-ші үшбұрыш қабырғаларын енгіз:’);

readln(a,b,c);

writeln(’2-ші үшбұрыш қабырғаларын енгіз:’);

readln(d,e,f);

p1:=(a+b+c)/2;

p2:=(d+e+f)/2;

S1:=sqrt(p1*(p1-a)*(p1-b)*(p1-c));

S2:= sqrt(p2*(p2-d)*(p2-e)*(p2-f));

if S1>S2 then writeln(‘үлкені 1-үшбұрыш, ауданы =’, S1:8:2)

else writeln(‘үлкені 2-үшбұрыш, ауданы =’, S2:8:2)

end.

 

 3.

program esep3;

var a,b,c,d:integer;

begin

writeln(’үзындықтарды енгіз:’);

write(’a=’); read(a);

write(’b=’); read(b);

write(’c=’); read(c);

write(’d=’); read(d);

if (a=b) and (a=c) and (a=d) and (b=c) and (b=d) and (c=d)

then writeln(‘Квадрат қабырғалары бола алады’);

if (a=c) and (b=d) then writeln(‘Тікбұрышты төртбұрыштың қабырғалары бола алады’)

else writeln(‘Тікбұрышты төртбұрыштыњ да, квадраттың да қабырѓалары бола алмайды’)

end.

 

4.

program ushburish;

uses crt;

var x, y, z:real;

begin

clrscr;

writeln;

writeln(‘үшбұрыш қабырғаларын енгіз:’);

write(‘x=’); readln(x);

write(‘y=’); readln(y);

write(‘z=’); readln(z);

if (z<>sqrt(sqr(x)+sqr(y))) and (x<>sqrt(sqr(z)+sqr(y))) and (y<>sqrt(sqr(x)+sqr(z)))

then writeln(‘тік бұрышты үшбұрыш бола алмайды’);

if (z=sqrt(sqr(x)+sqr(y)))

then writeln(‘тік бұрышты үшбұрыш бола алады, гипотенузасы z=’,z:6:2);

if (x=sqrt(sqr(z)+sqr(y)))

then writeln(‘тік бұрышты үшбұрыш бола алады, гипотенузасы x=’,x:6:2);

if (y=sqrt(sqr(x)+sqr(z)))

then writeln(‘тік бұрышты үшбұрыш бола алады, гипотенузасы y=’,y:6:2);

end.

 

     5.

             for to do

program esep;

var i,n:integer;

p,a,S:real;

begin

writeln(‘шекарасын көрсет: ‘);

readln(n);

a:=5;

S:=1; p:=1;

for i:=1 to n do

begin

S:=S*exp(p*ln(a));

writeln(‘a= ‘,a:8:2,’   p= ‘,i:5, ‘ S =’,S:8:2);

end;

end.

      

    While do

program esep;

var i,n:integer;

p,a,S:real;

begin

writeln(‘шекарасын көрсет: ‘);

readln(n);

a:=5;

S:=1; p:=1;

while i<n do

begin

i:=i+1;

S:=S*exp(p*ln(a));

writeln(‘a= ‘,a:8:2,’   p= ‘,i:5, ‘  S =’,S:8:2);

end;

end.

     6.

 

  1. a)  program esep;

var  i,n:integer;

S: real;

begin

writeln(‘n-ді енгіз:’);

readln(n);

S:=0;

for i:=1 to n do

S:=S+1/i;

write(S:8:4)

end.

є)  program esep;

var  i,n:integer;

S:real;

begin

readln(n);

S:=0;

for i:=2 to n do

S:=S+1/((i-1)*i);

write(S:8:4)

end.

б) program esep;

var  i,n:integer;

S:real;

begin

readln(n);

S:=0;

for i:=1 to n do

if i mod 2=0 then S:=S+(-1)/i else S:=S+1/i;

write(S:8:4);

end.

 

в)  program esep;

var  i,n:integer;

S:real;

begin

readln(n);

S:=1;

for i:=1 to n do

S:=S*(1+1/(sqr(i)));

write(S:8:4);

end.

г)  program esep;

var  i,n:integer;

S:real;

begin

readln(n);

S:=0;

for i:=0 to n do

S:=S+(1/(sqr((2*i)+1)));

write(S:8:4);

end.

 7.

program esep;

var i, k, t,n,S1,S2 :integer;

begin

writeln(‘n-ді енгіз:’);

readln(n);

t:=0; k:=0;

for i:=1 to n do

if i mod 2=1 then begin t:=i; S1:=S1+i; end else begin k:=i; S2:=S2+i; end;

write(‘1-ден ‘, n, ‘ -ге дейінгі тақ сандардың қосындысы ‘, S1:6, ‘ жұп сандардың қосындысы’, S2:6);

end.

 8.

program bakterialar;

var a,S:real;

begin

writeln(‘минут санын енгіз:’);

readln(a);

S:=exp(a*ln(2));

writeln(a:6:2,’-минуттан кейін бактериялардың саны ‘,S:6:2, ‘ болады’ );

end.

9.

program massiv;

var a,b:array[1..10] of integer;

i:integer;

min:integer;

begin

for i:=1 to 10 do

read(a[i]);

for i:=1 to 10 do

min:=a[1];

for i:=2 to 10 do

if (i mod 2 =0) and (a[i] < min) then  min:=a[i];

write(min:8);

end.

10.

program massiv;

var a:array[1..10] of integer;

i:integer;

max:integer;

begin

for i:=1 to 10 do

read(a[i]);

for i:=1 to 10 do

max:=a[1];

for i:=2 to 10 do

if a[i] > max then  max:=a[i];

write(max:8);

end.

11.

program suriptau;

const n=10;

var z:array[1..n] of integer;

i,j,k:integer;

begin

for i:=1 to n do read(z[i]);

for j:=1 to n-1 do

begin

for i:=1 to n-1 do

if z[i]>z[i+1] then begin k:=z[i];

z[i]:=z[i+1];

z[i+1]:=k;

end;

end;

for i:=1 to n do write(z[i],’ ‘);

end.

12.

program massiv;

label 1;

const n=5;

var a,b:array[1..5] of integer;

i,k:integer;

max:integer;

begin

for i:=1 to 5 do

read(a[i]);

for i:=1 to 5 do

max:=a[1]; k:=1;

for i:=2 to 5 do

if a[i] > max then  begin max:=a[i]; k:=i; end;

if k=1 then  begin for i:=2 to n do  write(a[i],’ ‘); goto 1; end;

for i:=1 to k-1 do

write(a[i],’ ‘);

for i:=k+1 to 5 do

write(a[i],’ ‘);

end.

13.

program matrica;

var a:array[1..5,1..4] of integer;

min:integer;

i,j:integer;

begin

for i:=1 to 5 do

for j:=1 to 4 do

read(a[i,j]);

min:=a[2,1];

for j:=2 to 4 do

if a[2,j]<min then min:=a[2,j];

write(min:8);

end.

14.

program matrica;

var a:array[1..5,1..4] of integer;

p:integer;

i,j:integer;

begin

for i:=1 to 5 do

for j:=1 to 4 do

read(a[i,j]);

p:=1;

for i:=1 to 5 do

p:=p*a[i,4];

write(p:8);

end.

15.

program matrica;

var a:array[1..3,1..3] of integer;

p:integer;

i,j:integer;

begin

for i:=1 to 3 do

for j:=1 to 3 do

read(a[i,j]);

for i:=1 to 3 do

begin

for j:=1 to 3 do

if (i+j) mod 2=1 then

write(a[i,j],’ ‘);

writeln;

end;

end.

16.

program matrica;

var a:array[1..4,1..5] of integer;

p:integer;

i,j:integer;

begin

for i:=1 to 4 do

for j:=1 to 5 do

read(a[i,j]);

for i:=1 to 4 do  begin

for j:=1 to 5 do

if a[i,j] mod 2=1 then a[i,j]:=1 else a[i,j]:=0;

end;

for i:=1 to 4 do begin

for j:=1 to 5 do

write(a[i,j],’ ‘);

writeln;

end;

end.

 

17.

program matrica;

var a:array[1..5,1..5] of integer;

S:integer;

i,j:integer;

begin

for i:=1 to 4 do

for j:=1 to 4 do

read(a[i,j]);

S:=0;

for i:=1 to 4 do

for j:=1 to 4 do

if i=j then  S:=S+a[i,j];

write(S:8);

end.

18.

program matrica;

const n=4;

var a:array[1..n,1..n] of integer;

S:integer;

i,j:integer;

begin

for i:=1 to n do

for j:=1 to n do

read(a[i,j]);

S:=0;

for i:=1 to n do

for j:=1 to n do

if ((i+j)>(n+1)) and (a[i,j]<0) then  S:=S+1;

write(S:8);

end.

 

    19.

program matrica;

const n=5;

var a:array[1..n,1..n] of integer;

S:integer;

i,j:integer;

begin

for i:=1 to n do

for j:=1 to n do

read(a[i,j]);

S:=0;

for i:=1 to n do

for j:=1 to n do

if (i<j) and (a[i,j]=0) then  S:=S+1;

write(S:8);

end.

   20.

program auistiru;

const n=20;

var a:array[1..n] of integer;

i:integer;

begin

for i:=1 to n do

read(a[i]);

for i:=1 to n do

if i mod 4=0 then  a[i]:=0;

for i:=1 to n do write(a[i],’ ‘);

end.

21.

program suriptau;

const n=4; m=5;

var a:array[1..n,1..m] of integer;

i,j,s,k:integer;

BEGIN

for i:=1 to n do

for j:=1 to m do

read(a[i,j]);

for i:=1 to n do begin

for j:=1 to n do  begin

for s:=1 to n do

if a[i,s]>a[i,s+1] then

begin

k:=a[i,s];

a[i,s]:=a[i,s+1];

a[i,s+1]:=k;

end;

end;

end;

for i:=1 to n do begin

for j:=1 to m do

write(a[i,j],’ ‘);

writeln;

end;

END.

  22.

program almalar;

const n1=100;

var a:array[1..n1] of integer;

i,j,k,m,n:integer;

f1,f2:text;

S:integer;

BEGIN

Writeln(‘Алмалардың санын енгіз:’);

Readln(n);

Writeln(‘балалардың санын санын енгіз:’);

readln(m);

if (m>n) or (m=n) then writeln(‘балалардың саны алмалардың санынан аспауы немесе тең болмауы керек’);

for i:=1 to n do  read(a[i]);

for j:=1 to n-1 do

begin

for i:=1 to n-1 do

if a[i]>a[i+1] then

begin

k:=a[i];

a[i]:=a[i+1];

a[i+1]:=k;

end;

end;

S:=0;

for i:=m+1 to  n do S:=S+a[i];

writeln(S:8);

END.  

23.

program darezhesepteu;

var a,b,c,d,n,m,r,k,Z,f1,f2,f3,f4:real;

procedure darezhe(s,t:real; var q:real);

begin

q:=exp(t*ln(s));

end;

BEGIN

read(a,n,b,m,c,r,d,k);

darezhe(a,n,f1);

darezhe(b,m,f2);

darezhe(c,r,f3);

darezhe(d,k,f4);

Z:=(f1+f2)*f3-f4;

write(Z:8:2);

END.       

 

24.

program sozder;

var S:string;

k,i:integer;

BEGIN

read(S);

k:=0;

for i:=1 to length(S) do

if S[i]=’ ‘ then k:=k+1;

write(k+1:8,’ сөз’);

END.

25.

program esep;

var s:string; i,k:integer;

begin

read(S); k:=0; i:=1;

while i<=length(S) do

begin

if s[i]<>’ ‘ then begin

k:=k+1;

i:=i+1;

end

else begin

if k=3 then begin

writeln(copy(S,i-k,k));

k:=0; i:=i+1;

end

else begin

k:=0;

i:=i+1;

end;

end; end;

if k=3 then writeln(copy(S,i-k,k));