Коммерциялық емес акционерлік қоғам

АЛМАТЫ ЭНЕРГЕТИКА ЖӘНЕ БАЙЛАНЫС УНИВЕРСИТЕТІ

Компьютерлік технологиялар кафедрасы

  

 

 

АЛГОРИТМДІК ТІЛДЕРДЕ ПРОГРАММАЛАУ

1-бөлім

5В070400 - «Есептеу техникасы және бағдарламалық қамтамасыз ету» мамандығының

барлық оқу  түрінің студенттері үшін зертханалық жұмыстарды  орындауға арналған әдістемелік нұсқаулар

   

 

                                       

Алматы, 2011

ҚҰРАСТЫРУШЫЛАР: З.Қ.Құралбаев, З.А.Акижанова. «Алгоритмдік тілдерде  программалау». 1-бөлім.  5В070400 - «Есептеу техникасы және бағдарламалық қамтамасыз ету» мамандығының барлық  түрінің  студенттері үшін зертханалық жұмыстарды  орындауға арналған әдістемелік нұсқаулар. – Алматы: АЭжБУ, 2011. – 32 б. 

 

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

Әдістемелік нұсқаулар 5В070400 – «Есептеу техникасы және бағдарламалық қамтамасыз ету» мамандығының  барлық оқу түрінің студенттеріне арналған.

Әдеб. көрсеткіші – 11 атау.

 

Пікір беруші: физ.-мат. ғыл.канд., доцент А.А Аманбаев

 

«Алматы энергетика  және байланыс университеті» коммерциялық емес акционерлік қоғамының 2011ж. баспа жоспары бойынша басылады.

 

«Алматы энергетика  және байланыс университеті» КЕАҚ, 2011 ж.

Мазмұны

 

Кіріспе

4

Зертханалық жұмыс № 1. Қайталау саны белгілі циклдардың алгоритмдері мен программаларын құрастыру               

 4

Зертханалық жұмыс № 2. Қайталау саны белгісіз циклдардың алгоритмдері мен программаларын құрастыру

 9

Зертханалық жұмыс № 3. Массивтерге қолданылатын амалдардың алгоритмдері мен программалары

 13

Зертханалық жұмыс № 4. Функциялар мен процедураларды программалауда пайдалану

 17

Зертханалық жұмыс № 5. Таңбалар мен жолдарды өңдеудің алгоритмдері мен программалары

 21

Зертханалық жұмыс №6. Графикалық жұмыстарды орындау

24

Әдебиеттер тізімі

33

  

Кіріспе

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

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

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

1) Зертханалық жұмыстың аты және тапсырманың қойылуы.

2) Есептің алгоритмі.

3) Негізгі белгілеулер.

4) Программаның мәтіні (листингі).

5) Есептің шешімі (нәтижесі).

6) Нәтижені талдау және қорытынды.

 

Зертханалық жұмыс № 1. Қайталау саны белгілі циклдардың алгоритмдері мен программаларын құрастыру

 

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

 

Бақылау сұрақтары:

1) Қандай есептеу процесі циклдық алгоритммен сипатталынады?

2) Қайталау саны белгілі алгоритмнің есептегіші деген не?

3) Есептегіштің өзгеру қадамы қандай болуы мүмкін?

4) Циклдың қайталау саны қалай анықталады?

5) Циклды ұйымдастыру үшін Паскаль тілінде қандай операторлар қолданылады?

6) Цикл денесі деген не?

 Жаттығулар және олардың орындалу үлгілері

Егер қайталану саны алдын-ала белгілі болса, ондай циклды қайталану саны белгілі цикл деп атайды және оны ұйымдастыру үшін арнайы циклдық операторларды (FOR, WHILE, REPEAT), сонымен бірге, шартты өту операторын (IF) пайдалануға болады.

FOR цикл операторы. FOR  циклдық операторының жазылу түрі мынадай:

FOR  [цикл есептегіші] : = [алғашқы мән] TO [соңғы мән] DO

[цикл денесі];

Мұндағы цикл есептегіші дегеніміз бүтін мән қабылдайтын параметр, оның алғашқы және соңғы мәндері беріледі. Цикл денесі дегеніміз цикл есептегіші алғашқы мәнінен соңғы мәніне дейін өзгергенде орындалатын операторлар тобы. Бұл жерде цикл есептегішінің өзгеру қадамы бірге тең болады. Егер өзгеру қадамы -1 болса, онда FOR  операторы былайша жазылады:

FOR [цикл есептегіші] : = [алғашқы мән] DOWNTO [соңғы мән]

DO [цикл денесі];

Енді  қайталау саны белгілі циклдар үшін қарастырылсын.

1 мысал. Теру санын есептеу. Алгоритмі алдыңғы  есепке өте ұқсас, n – нің  k бойынша теру санын  Cтабудың программасы қарастырылсын. Бұл есептің алгоритмінің алдыңғы есептің алгоритмінен айырмашылығы, мұнда, әрбір қадамда,  мәні бірге кеміп отыратын бүтін санға көбейтіліп, бірге өсіп отыратын санға бөлінеді:

         C = . . . .

 Бұл жағдайда программа мәтіні келесі түрде жазылады:

Program TERU;

    Var i,k,n: integer;       m: longint;

    Begin       Read(n,k);       m:=1;

       For i:=1 to k do  m:=m*(n-i+1) div i;

      Writeln(n,  '– нің  ',k, ' бойынша теру саны', m, '- ға тең ');

      Readln;     End. 

Ескертетін жай, жоғарыдағы келтірілген программада  нәтиже Longint типі ретінде қарастырылған. Себебі теру санының  мәндері өте үлкен болуы мүмкін.

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

2 мысал.  Анықталған интегралды есептеу. Келесі анықталған интегралды тіктөртбұрыштар әдісімен шешу керек болсын делік:

                      S =  = (e –x + ex ) dx .

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

                     S = h [f(x1)+f(x2)+f(x3)+ . . . + f(xn)].

Мұндағы:  h – аргументтің өзгеру қадамы;

                  xi = a+h*i, i=1,2,3,...,n, n = .

Бұл есептің  алгоритмі өте қарапайым: интеграл астындағы функцияның мәндерін тауып және  олардың  қосындыларын есептеу керек; осыдан кейін алынған қосынды аргументтің өзгеру қадамына көбейтіледі. Қосындыны табудан бұрын оған нөл деген мән беріледі, себебі нөл болашақ қосындының мәніне әсері болмайды.

 Алгоритмді келесі түрде жазуға болады:

1) S=0, i=1, циклдың басында қосынды сақталынатын ұяшық тазартылуы  керек немесе ол ұяшыққа нөл жіберіледі;

2)  x=a+h*i,   аргументтің жаңа мәні есептелінеді;

3)  интеграл астындағы функцияның f(x) мәні есептелінеді;

4)  S = S + h*f(x),  жаңа қосылғышты қосу;

5)  i=i+1,  жаңа  қосылғышты есептеу үшін келесі нүктеге өту;

6)  егер  i≤n  шарты орындалса, онда 2) жолдан бастап қайталанады;

7)  есептеудің нәтижесі S экранға шығарылады.

Осы алгоритмді жүзеге асыратын программаның мәтіні келесі түрде жазылады:

PROGRAM INTEG;

LABEL  5; CONST n = 100;  VAR x,y,S,a,b,h:real; i:integer;

BEGIN    READ(a,b);    S:=0; h:=(b–a)/n; x:=a; i:=1;

5:    S:=S+h*(Exp(-x)+Exp(x));      i:=i+1; 

IF i<=n THEN GOTO 5;      WRITELN(‘ Интеграл S=’,S:10:4);

END.

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

 WHILE цикл операторы. Берілген шарт бойынша қайталау саны анықталатын циклдарды ұйымдастыру үшін WHILE операторын қолдануға болады. Бұл оператордың жалпы түрі мынадай:

WHILE [логикалық өрнек] DO [цикл денесі];

Егер логикалық өрнектің мәні TRUE  (шындық) болса, онда цикл денесіне енген операторлар орындалады, ал FALSE (жалған) болса, онда цикл аяқталады. Басқаша  айтқанда, егер берілген логикалық шарт орындалса, онда операторлардың орындалуы қайталанады, ал ол шарт орындалмаған жағдайда циклдан шығу орындалады. Мысал қарастырылсын.

 3 мысал. Шектелген қосындыны есептеу. Келесі қосындының мәнін берілген x – тің мәні үшін есептеу керек болсын делік:

  S =  = x + x2/2 + x3/3 + x4/4 + . . . + xn/n,  мұндағы  | x | < 1.

Бұл қосындының мәнін табу үрдісі қайталау саны белгілі циклға жатады. Әрбір жаңа қосылғыштың мәнін есептеу кезінде  x –тің дәрежесін анықтау қажет. Ол үшін қосымша жаңа параметр p енгізіп,  келесі рекурренттік формуланы   p = p * x  пайдаланған жөн.

 Есептің алгоритмін келесі түрде  жазуға болады:

1)  x  пен  n  параметрлерінің мәндерін жадыға енгізу;

2)  циклдың басында алғашқы мәндерді беру: S = 0, p = 1, k =1;

3)  келесі мәндерді табу: p = p*x формуласы арқылы x –тің дәрежесін анықтау, S=S+p/k - жаңа қосылғышты қосу, k=k+1 - келесі қосылғыштың нөмірін анықтау;

4)  егер  k ≤ n шарты орындалса, онда 3) жол қайталанады; ал егер k>n болса, онда есептеу үрдісі аяқталады;

5) есептің нәтижесін немесе қосындының мәнін  S  экранға шығару.

Есептің программасының мәтіні мынадай болады:

PROGRAM SUMMAKON;

  VAR k,n:INTEGER;       S,x,p:REAL;

  BEGIN      READ(x,n);       k:=1; S:=0; p:=1;

      WHILE k<n DO

     BEGIN       p := p*x;  S:=S+p/k;  k:=k+1;     END;

   WRITE(‘ Қосынды S =’, S ) END.

REPEAT цикл операторы.  Циклдың кез-келген түрін жүзеге асыратын оператордың бірі REPEAT операторы. Алдыңғы қарастырылған WHILE операторынан оның айырмашылығы - логикалық шарттың орындалуы әрбір қайталаудан кейін тексеріліп отырады. Оператордың жазылу түрі келесідей:

REPEAT [цикл денесі] UNTIL [логикалық өрнек];

Логикалық өрнектің мәні TRUE (шындық) болғанда цикл денесіндегі операторлар қайталана береді, ал  FALSE (жалған) болғанда, цикл аяқталады.

 

Өз бетімен орындауға арналған тапсырмалар:

№1  Бес шар берілсін. Егер ең кіші шардың радиусы белгілі, ал қалған келесі шардың радиусы алдыңғысынан 10% үлкен болса, онда әр шардың көлемі мен бетінің ауданын табу керек.

№2  Функцияның графигін құру үшін  x және y  мәндерін есептеу керек, 0.1 интервалымен берілген 0 мен 1 арасындағы аргументтерінің мәні үшін:

.

 №3  Берілгені: келесі шамалардың  a, b, n мәндері; төмендегі қосындыны табу керек (Ньютон биномы):

        мұндағы .

№4   Параметр  x-тің мәні берілген,  n элементтен тұратын келесі қосынды түріндегі  функцияның жуық мәнін табу керек:

                                   .

№5  1 мен n арасындағы k-ға және h-қа бөлінетін барлық натурал сандардың қосындысын табу керек.

№6  Сатып алушы алып келе жатқан жұмыртқалар санын (минималды мәнін) анықтау керек. Егер біреуінің жарылып қалғаны және қалғаны оған 2 жұмыртқадан бірнеше аптаға таңғы асына жетеді немесе 10 жұмыртқадан бірнеше рет торт пісіруге және 2 жұмыртқадан төрт таңғы асына жеткені белгілі болса.

№7 Алғашқы бес қарапайым сандарды табу, оларды белгілеу ушін a, b, c, d және e  айнымалыларды қолдану. Айнымалылардың алғашқы мәні 2.

№8 Берілгені:  радиустары r1=1 және  r2=2  шеңбермен шектелген  облыстардағы штрихталған жеріне   кіретін n (n≥4) координаталары берілген кез келген нүктелерді анықтау  керек (мұндағы  түзудің теңдеуін өздеріңіз анықтаңыздар):

  

 

 

 

 

№9   Берілген функцияның  (a, b) интервалындағы h қадамымен анықталған мәндерін есептеп, оларды кесте түрінде шығару керек.

.

№10 Координаталары (x1,y1), (x2,y2) және  (x3,y3) болатын нүктелер өзара байланысып, үшбұрыш құрайды. Герон формуласы бойынша n үшбұрыштың ауданын есептеу керек.

 

 

Зертханалық жұмыс № 2. Қайталау саны белгісіз циклдардың алгоритмдері мен программаларын құрастыру

 

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

Бақылау сұрақтары:

1) Қандай есептеу процесін қайталау саны белгісіз цикл деп атайды?

2) Қайталау саны белгісіз алгоритмде есептегіш пайдаланылады ма?

3) Қайталау саны белгісіз алгоритмде есептеу процесін тоқтату қалай орындалады?

4) Есептеу дәлдігі деген не?

5) Қайталау саны белгісіз циклды ұйымдастыру үшін Паскаль тілінде қандай операторлар қолданылады?

 

 Жаттығулар және олардың орындалу үлгілері

Осы зертханалық жұмысты орындауда қайталау саны белгісіз циклдар қарастырылады.

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

Нақты мысал ретінде  келесі теңдеуді шешу қарастырылсын:

                            F(x) = X- X – 0,2 = 0.

Бұл теңдеудің түбірі жекешеленген немесе бір ғана түбір орналасқан [a,b] аралығы берілсін: a = 1; b = 1,1. Түбірдің мәні берілген дәлдік ε = 0.0001 бойынша анықталуы тиіс.

Бұл әдіс бойынша түбір орналасқан аралық екіге тепе-тең бөлініп (бөлу нүктесі c = (a + b)/2 ), оның түбір орналасқан бөлігі анықталады. Ескеретін жай, теңдеудің түбірінің дәл мәнінің анықталу мүмкіндігін ұмытпау керек; ол мынадай жағдайда болады: F(c) = 0. Егер бұл шарт орындалмаса, онда берілген теңдеудің сол жағында орналасқан функцияның F(x) мәнінің таңбасы бойынша түбірдің қайда орналасқанын анықтау керек. Егер сол жақтағы аралықтың [a,c] шекараларындағы функция F(x) мәндерінің таңбалары  әртүрлі болса (F(a)· F(c) < 0), онда теңдеудің түбірінің сол аралықта [a,c] орналасқанын көрсетеді, ал керісінше жағдайда – басқа [c,b] бөлігінде орналасқаны. Әрбір қайталану нәтижесінде түбір орналасқан аралық екі есе қысқарады. Бұл үрдіс көп қайталануы мүмкін, қайталау саны алдын - ала белгісіз, тек дәлдік шарты орындалғанда ғана тоқтайды. Дәлдік шарты былайша жазылады:        | b - a | < ε.

Есептің алгоритмі қайталау саны белгісіз цикл типіне жатады; оны келесі түрде сипаттауға болады:

1) a, b, ε мәндерін енгізу;

2) [a,b] аралығын тепе-тең екіге бөлу c = (a + b)/2 );

3) бұл мән теңдеуді қанағаттандыратыны тексеріледі F(c) = 0; егер бұл шарт орындалса, онда c – ның мәні теңдеудің түбірі ретінде экранға шығарылады;

4) теңдеудің түбірінің орналасқан бөлігін анықтау; егер ол сол жақ бөлікте  орналасқан болса (F(a)· F(c) < 0), онда  b – ның орнына c – ның мәні жазылады, ал керісінше жағдайда a – ның орнына жазылады;

  5) түбірдің мәнінің дәлдік шарты  |b - a| < ε үшін орындалатындығы тексеріледі; егер бұл шарт орындалмаса, онда 2) жолынан бастап қайталанады; ал ол шарт орындалса, онда  есептің шешілгені.

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

Program  BISSEK;

   Label 5,6;   Const Eps=0.0001;   Var x,y,a,b,c: real;

                     Begin  Read(a,b);

                 5: c:=(a+b)/2;    y:=sqr(sqr(a))*a-a-0.2;

                         if y = 0       then goto 6;     x:=sqr(sqr(c))*c-c-0.2;

                         if x*y<0 then b:=c else a:=c;     if abs(a-b) > eps then goto 5;

                6:  Writeln('Теңдеу түбірін мәні c =', c:8:4);  Readln;   End.

Бұл программаны орындау үшін a мен b параметрлерінің алғашқы мәндері клавиатурадан енгізіледі.

Осы программаны басқа кез-келген теңдеуді шешуге  пайдалануға болады; ол үшін тек теңдеудің сол жағындағы функцияның формуласы өзгертіледі. Сонымен бірге, енгізілетін a мен b мәндері де басқа болады. Бұл программаны құрастыру үшін For операторынан басқа циклдық оператордың кез-келгенін пайдалануға болады.

Ескертетін жай, Паскаль тілінде грек әліппесінің әріптері қолданылмайтындықтан бұл программада ε әрпінің орнына латын әріптерінен құралған  Eps идентификаторы қолданылған. Көп жағдайда ε параметрінің мәні ретінде 0.0001, 0.001, 0.01 және басқа кішкентай сандар пайдаланылады.

2 мысал.  Шексіз қосылғыштардан тұратын қосындыны есептеу. Келесі шексіз қосындыны табу  туралы есеп қарастырылсын:

                          S== ++ + . . .++ . . .  .

Бұл қосындыны табу үшін мынадай шарттар орындалуы тиіс: біріншіден, |x|<1 болуы; екіншіден, қосындының жуық мәні тек белгілі бір дәлдікпен ғана анықталатындығы. Дәлдікті мынадай теңсіздік күйінде беруге болады:  |xn/n!|<ε, мұндағы ε – алдын ала берілген өте кішкене шама. Бұл жерде әрбір келесі қосылғышты табу келесі p=p*x/k  рекурренттік (қайталанатын) формула бойынша есептеледі.  Бұл есепте циклдың қайталануы мен аяқталуы берілген дәлдікпен анықталады. Алгоритмді келесі түрде жазуға болады:

1)  x  пен  ε  параметрлерінің мәндерін енгізу;

2)  циклдың басында алғашқы мәндерді беру: S=0, p=1, k=1;

3)  келесі ағымдағы  мәндерді табу: p=p*x/k, S=S+p,  k=k+1;

4)  егер  | x n / n! | < ε немесе  | p | < ε шарты орындалса, онда 3) жол қайталанады; ал  керісінше жағдайда  есептеу үрдісі аяқталады;

5) есептің нәтижесін  S  экранға шығару.

Есептің программасының мәтіні мынадай болады:

PROGRAM SUMMABES;

   VAR k : INTEGER;       S,x,p,Eps :  REAL;

   BEGIN      READ(x,Eps);

            k:=1; S:=0; p:=1;

           WHILE Abs(p)> Eps DO

      BEGIN        p :=p*x/k; S:=S+p; k:=k+1;      END;

       WRITE (‘қосындының жуық мәні  S =’, S )   END.

Программаның орындалуы үшін x  пен  ε  параметрлерінің мәндерін клавиатурадан енгізу керек.

 3 мысал. Теңдеуді жанамалар(Ньютон) әдісімен шешу. Теңдеуді берілген дәлдік бойынша Ньютон (жанамалар) әдісімен шешу қарастырылсын. Келесі теңдеу берілгені:   F(x) = 3x3+5x2–2x–7 =0. Теңдеудің шешімін берілген  ε дәлдікпен табу керек.

Ньютон тәсілімен теңдеуді шешу үшін келесі формула қолданылады:

                           xk = xk-1 -F(xk-1)/F′(xk-1),

мұндағы F′(xk-1) – теңдеудің сол жағындағы берілген функцияның туындысы. Осы мысалда ол былайша жазылады:      F′(x) = 9x2 +10x–2.

Cондықтан берілген теңдеудің шешімінің жуық мәнін табуға арналған рекурренттік формула мынадай түрде жазылады:

      xk = xk-1 –(3xk-13 +5xk-12 –2xk-1 –7)/(9xk-12 +10xk-1–2).

Программа құрастыру кезінде ыңғайлы болуы үшін бұл формуладағы индекстерден арылған жөн. Себебі айнымалы шаманың индексі көрсетілсе, онда оны компьютер массив элементі ретінде қарастырады. Сондықтан келесі белгілеулер енгізіледі:     x k = y,  xk-1 = z .

Онда жоғарыда келтірілген рекурренттік формула мынадай түрде  жазылады:

           y = z–(3z3 + 5z2 – 2z –7)/(9 z2 +10z-2),

мұндағы z – шешімнің алдыңғы жуық мәні, ал  y – келесі есептелетін мәні. Ең алғашқы жуық мән ретінде x0 = 2  алуға болады, ал жоғарыда келтірілген  рекурренттік формула бойынша шешімнің жуық мәнін анықтау үрдісі дәлдік орындалғанша |xk – xk-1|<ε  (немесе|y–z|<ε) қайталанады.

 Бұл есептің алгоритмі былайша жазылады:

1)     ε дәлдіктің мәнін енгізу;

2)     шешімнің алғашқы мәнін беру  y = x0;

3)     шешімнің табылған мәнінің  алдыңғы жуық мәні  болуы z = y;

4)     шешімнің келесі жуық мәнін рекурренттік формула бойынша анықтау;

5)     дәлдіктің орындалуын тексеру |y – z|<ε;

6)     есептің жауабын экранға шығару.

Есептің программасының REPEAT операторын пайдаланатын мәтіні келесі түрде жазылады:

PROGRAM  NEUTON; CONST x0=2; Eps=0.0001;VAR y,z :real;

BEGIN   y:=x0;    REPEAT   z:=y; y:=z–(3z*z*z+5z*z–2z–7)/(9z*z +10z-2);

  UNTIL abs(y – z)>Eps;  WRITELN(‘Теңдеудің шешімі x = ‘,y:10:4); END.

Бұл программа әмбебап; себебі оны кез-келген теңдеуді шешуге пайдалануға болады. Ол үшін берілген теңдеудің сол жағындағы функцияны F(x) өзгертсе болғаны.

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

 

Өз бетімен орындауға арналған тапсырмалар:

Тапсырмаларда қайталау саны белгісіз цикл алынады.

№1 Берілген  қосындыны х-тің берілген мәні үшін   дәлдігімен есептеп, сонымен бірге ондағы қосылғыштар санын да анықтау керек.  

                                        .

№2 Берілген  қосындыны х-тің берілген мәні үшін   дәлдігімен есептеп, сонымен бірге ондағы қосылғыштар санын да анықтау керек.  

                                          .

№3 Берілгені х-тің мәні. Ал  тізбегі   заңы бойынша құралған. S= қосындысын келесі дәлдікпен есептеп, қосылғыштар санын k  анықтау керек.

№4  Енгізілген аргументтің мәні  үшін функцияны есептеу. Белгілі бір мәнді енгізген кезде есеп аяқталу керек (мысалы, -9999):

                              .

 

№5   Берілген  a-дан  b-ға дейінгі (аралық 5 градус) Цельсий температурасының мәндерін және Фаренгейт шкаласы бойынша эквиваленттерді     формуласы бойынша есептеп, кесте құру керек. 

         №6     Берілген n натурал саны үшін келесі өрнекті есептеу керек:                            .

№7    n натурал саны берілген.  Келесі өрнекті есептеу керек:

                         .

№8 Төрт цифрдан аспай тұратын  санның егер  p-ші цифр  q-шіден үлкен болса онда p-ші және  q-ші цифрларын ауыстырыңыз.

№9 n және m натурал сандары берілген. n санының басты m цифрларының қосындысын табу керек. Мысалы, n=25781 және m=2 берілген болса, онда  нәтижесі = 2+5=7 болады.

№10 n натурал саны берілген. Цифрлардың орналасу  ретін керісінше ауыстырып жазу керек.

 

Зертханалық жұмыс № 3. Массивтерге қолданылатын амалдардың алгоритмдері мен программалары

 

Жұмыстың мақсаты: векторлар мен матрицаларға қолданылатын амалдарды орындауға арналған алгоритмдер мен программаларды құрастыруға машықтану.

 

Бақылау сұрақтары:

1) Бір өлшемді массив Паскаль тілінде қалай сипатталынады?

2) Екі өлшемді массивті компьютер жадына енгізудің қандай ерекшеліктері бар?

3) Күрделі циклды ұйымдастыру үшін қандай операторларды пайдалануға болады?

4) Массив элементтерін сұрыптау деген не?

5) Екі өлшемді массив элементтерінен бір өлшемді массив құрастыруға бола ма?

Жаттығулар мен оларды  орындау үлгілері

1 мысал. Массивтің ең кіші элементі мен оның нөмірін табу. Берілген бір өлшемді массивтің ең кіші элементі мен оның реттік нөмірін табу керек болсын. Массив элементтері   A = {a[1], a[2], a[3],  . . . ,  a[n]}, ал ең кіші xmin элементі  және оның нөмірі   kmin  деп белгіленсін.

Бұл есептің алгоритмі қайталау саны белгілі циклға жатады, оны былайша сипаттауға болады:

1)     массив элементтерін компьютер жадына енгізу;

2)     алдымен массивтің ең кіші элементі ретінде бірінші элемент алынады:  xmin = a [1], оның нөмірі kmin = 1;

3)     массивтің келесі элементі  шақырылады, k = k + 1;

4)     шақырылған элемент a[k] ең кіші элементпен xmin салыстырылып, кішісі қалдырылады;

5)     массивтің барлық элементтерінің салыстырудан өткендігі  немесе  k <= n  шартының орындалуы тексеріледі; егер ол шарт орындалса; онда 3) жолдан бастап барлық амалдар қайталанады; егер ол шарт орындалмаса немесе  k > n   болса, онда цикл аяқталып, ең соңғы  xmin – нің  мәні массивтің ең кіші элементі ретінде экранға шығарылады.

Бұл есептің программасын жоғарыда келтірілген кез-келген циклдық оператордың көмегімен құрастыруға болады. Егер FOR операторы қолданылатын болса, онда программаның мәтіні келесі түрде жазылады:

PROGRAM MAXMIN;

CONST n =10;  VAR xmin: real;     k, kmin : integer;  a : array [1..n] of real;

BEGIN     FOR k:= 1 TO n DO   READ(a[i]);   xmin:=a[1];  kmin:=1;

FOR k:= 2 TO n DO  

 IF a[k] < xmin   THEN    BEGIN   xmin:=a[k];  kmin:=k      END;

WRITELN(‘ Ең кіші элемент =‘, xmin:8:4);

WRITELN(‘ Ең кіші элементтің нөмірі=’,kmin);   END.

Егер берілген массивтің  ең үлкен элементін табу керек болса, онда осы программадағы IF операторындағы кіші белгісінің <  орнына үлкен > деген белгіні қойса жеткілікті.

2 мысал. Статистикалық реттелінген қатар.  Статистика есептерінде немесе тәжірибе нәтижелерін өңдеуде жиі кездесетін есептердің бірі - берілген массив (статистикалық қатар) элементтерін белгілі бір тәртіппен орналастыру. Мысалы, массив элементтерін мәндерінің өсуі бойынша орналастыру қажет болады. Бұл есепті шешуде қайталау саны белгілі цикл арқылы жүзеге асырылады. Айта кететін жай, бұл программада алдыңғы программадағы  массивтің ең кіші элементі мен оның нөмірін табу алгоритмі қолданылады. Циклдың әрбір қайталануы ағымдағы массивтің ең кіші элементін тауып, оны жаңа, реттелінген, массивтің элементі ретінде қарастырады. Программа былайша жазылады:

Program  RETTEU;   {Массив элементтерін өсуі бойынша реттеу }

   Const n=10;   Var  k,i,x,j:integer;      a: array [1..n] of integer;

  Begin     writeln(‘Берілген массив: ');

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

      For i:=1 to n do begin  write(a[i]:5);  end;   Writeln(' ');

      For j:=1 to n-1 do       Begin      x:=a[j]; k:=j;

         For i:=j+1 to n do      if a[i]<x  then     begin x:=a[i]; k:=i; end;

         a[k]:=a[j]; a[j]:=x;        end;

writeln(‘Реттелінген қатар:');

  For i:=1 to n do write (a[i]:5);       readln;   end.

3 мысал. Горнер схемасы. Бір өлшемді массивтің қолдану облысын көрсететін Горнер схемасы бойынша полиномның мәнін есептеу мысал ретінде қарастырылсын. Бұл схема бойынша  полином  алдымен   келесі түрде жазылады:

       y = ( . . .( (a1 xn + a 2 )  x + a 3 ) x + . . . +  a n ) x +  a n+1 .

Горнер схемасы бойынша есептеу де қайталау саны белгілі цикл болады. Оның алгоритмі келесі түрде сипатталынады:

1)     коэффициенттер мен белгісіз айнымалы шаманың мәндерін енгізу;

2)     алдымен қосындыға  немесе y-ке  ең жоғары дәрежелі мүшенің коэффициенті беріледі y = a1;

3)     циклдың басында k = 2 тең болады;

4)     келесі кезеңде қосындының мәні келесі рекурренттік  формула бойынша анықталады: y = y · x + ak;

5)     циклдың соңы k = k + 1 және k < n+1 шартымен анықталады;

6)     есептің нәтижесін экранға шығару.

Бұл есептің программасын да жоғарыда аталынған кез-келген циклдық оператордың көмегімен құрастыруға болады. FOR операторын қолданатын программа былайша жазылады:

PROGRAM  GORNER; CONST n=10;

VAR k: integer;     x: real;    a: array[1..n+1] of real;

BEGIN  READ(x);

  FOR k:=1 TO n+1 DO READ(a[k]);       y:= a[1] ;

      FOR k:=2 TO n+1 DO y:= y * x + a[k];

WRITELN(‘аргумент x=’,x:6:2,‘үшін полином мәні y =’, y );

    END.

4 мысал. Матрицаның ізін табу. Жатық және тік жолдарының сандары бірдей болатын матрицаны квадрат матрица деп атайды. Оның бас диагоналында орналасқан элементтердің қосындысын ізі деп атайды. Бұл жерде қарастырылатын матрица – размері m x m болатын A[m,m] квадрат матрица.  Осы матрицаның әртүрлі дәрежелерінің A, A2, A3, . . . , An  іздерін табу керек.

Бұл есепті шешу үшін келесі белгілеулер енгізілсін: aij – берілген A матрицасының элементі; sk – Ak  матрицасының ізі,  k =  1,2, . . . ,n;  bij, cij – қосымша енгізілген  матрицалардың элементтері,    i=1,2,. . . ,m,  j=1, 2, . . . , m;

Матрицаның белгілі бір дәрежесін табу келесі тәртіп бойынша орындалады:   Ak = Ak-1 · A , k =1,2,. . . ,n.  Бұл жерде матрицалардың көбейтіндісін табудың жоғарыда қарастырылған ережелері орындалуы тиіс. Алдымен берілген матрицаның k дәрежесін тауып, содан кейін оның ізін sk бас диагоналдағы элементтерінің қосындысын табу арқылы анықтауға болады.

Бұл есептің программасының мәтіні мынадай түрде жазылады:

Program SLEDMAT;   Label 5;  Const m=3; n=5;

Var i,j,k,l:integer; p: real;   a,b,c: array [1..m,1..m] of  real;   s: array[1..n] of  real;

  Begin     For i:=1 to m do      For j:=1 to m do

  Begin Read(a[i,j]); b[i,j]:=a[i,j]; end;

     For k:=1 to n do s[k]:=0;     For i:=1 to m do  s[1]:=s[1]+a[i,i];    k:=2;

   { Екі матрицаның көбейтіндісін табу   }

 5: For i:=1 to m do       For j:=1 to m do

       Begin p:=0;

    For l:=1 to m do p:=p+a[i,l]*b[l,j];     c[i,j]:=p;   end;

    For i:=1 to m do     For j:=1 to m do a[i,j]:=c[i,j];

      For i:=1 to m do s[k]:=s[k]+a[i,i];

        k:=k+1;     if k<=n then goto 5;

 For k:=1 to n do writeln('s[',k,']=',s[k]);   readln;    End.

 

Өз бетімен орындауға арналған тапсырмалар:

№1 Спираль бойынша n ретті квадрат матрицаны  1-ден n2 –қа дейін натурал сандармен толтыру. Мысалы, n=4 болғанда келесі матрица алынады:

1

2

3

4

12

13

14

5

11

16

15

6

10

9

8

7

 

 

 

 

 

 

№2 Нақты сандардан тұратын матрица A=  берілген. Әрбір элементі A матрицасының i-ші жолында және  j-ші бағанасында жатқан  элементтерінің қосындысы  болатын B= ,  матрицасын алу  керек.

№3  Квадрат матрицаны транспонирлеудің программасы.

№4  Төртінші ретті  квадрат матрицасының берілген элементі үшін      алгебралық қосымшасын есептеу. 

№5   n  ретті квадрат матрицаның жанама диагоналінің төменгі бөлігінде және жанама диагоналінің бойында жатқан элементтер қосындысын есептеу.

№6  Параллель жалғанған кедергілер тобы теріс емес r1, r2… мәндермен берілген. Осындай топтардың (топта 4 кедергіден көп емес) тізбектей жалғануы былай берілген: бірінші топтың кедергісі, әрі қарай  топты бөлуге арналған теріс сан, содан кейін екінші топтың кедергісі, әрі қарай тағы да  топты бөлуге арналған теріс сан т.с.с. Соңғы кедергінің мәнінен кейін – екі теріс сан. Байланыс кедергісін есептеу.

 

 

 

№7  Байланыс кедергісін есептеу. (Алдыңғы есепті қараңыз, теріс сандар тізбекті бөліп тұрады)

 

 

 

 №8   n  ретті символдық квадрат матрица берілген. Бас диагональдан төмен орналасқан барлық символдарды 0-ге ауыстыру керек.

№9 Тікбұрышты матрица берілген. Бастапқы матрицаның жолының оң элементтерінің қосындысынан тұратын вектор-бағананы есептеу.

№10  Тіктөртбұрышты матрица берілген. Элементтері  0 және 1 болатын вектор-бағананы келесі тәртіп бойынша  құрастыру керек: егер бастапқы берілген  матрицадағы берілген жол оң элементтерден тұрса, мәні=0, ал ішінде теріс элемент болса, онда 1.

 

Зертханалық жұмыс № 4. Функциялар мен процедураларды программалауда пайдалану

 

Жұмыстың мақсаты: күрделі есептерді қарапайым есептерге жіктеуде функциялар мен процедураларды пайдалану  арқылы программа құрастыруға машықтану.

 

Бақылау сұрақтары:

1) Күрделі есептерді қарапайым есептерге жүктеу не үшін орындалады?

2) Функция мен процедураның айырмашылықтарын атаңыз.

3) Функция ішінде процедураны пайдалануға бола ма?

4) Функцияның аты қандай қызмет атқарады?

5) Процедура аты нені білдіреді?

 

Жаттығулар мен оларды  орындау үлгілері

1 мысал.  Көпбұрыштың периметрін табу. Жазықтықта төбелерінің координаталары берілген көпбұрыштың периметрін табу керек. Есепті шешуден бұрын онда пайдаланылатын параметрлерді белгілеу қажет. Олар: iкөпбұрыштың төбесінің реттік нөмірі; xi,yi  – көпбұрыштың i - ші төбесінің координатасы; n төбелер саны; p көпбұрыштың периметрі.

Көпбұрыштың периметрінің мәні оның қабырғаларының ұзындықтарының қосындысынан тұрады:  p = d1 +  d2 + d3 + . . . + dn , мұндағы       di =  (( xi+1 – xi)2 + (yi+1 – yi )2 )1/2  . Әрбір қабырғаның ұзындығын табу функция күйінде қарастырылады; ол функция D деп аталынсын.   

   Program PERIMETR;     Const n = 5;

     Var  i: integer; p:real;      x,y: array[1..n] of real;

     Function D(xa,ya,xb,yb:real): real;         Var  s: real;

         Begin     s:=sqr(xa-xb)+sqr(ya-yb);     D:=sqrt(s);     end;

{       Негізгі программа мәтіні:          }

     Begin         For i:=1 to n do read(x[i],y[i]);

             p:=0;      for i:=1 to n-1 do        p:=p+D(x[i],y[i],x[i+1],y[i+1]);

            p:=p+d(x[1],y[1],x[n],y[n]);       Writeln(' Периметр p= ', p:8:4); 

  end.

2 мысал. Паскаль үшбұрышы. Программа құрастыруды үйренуде  жиі ұсынылатын есептердің бірі – Паскаль үшбұрышын құрастыру. Бұл жерде теру санын  есептеу Soch функциясы ретінде қарастырылған; ал теру санын есептеудің программасы жоғарыда қарастырылған болатын. Ал негізгі программа өте қарапайым болғандықтан оның алгоритмін талдамай, бірден программаны құрастыруға болады:

Program PASCALTR;   Const n=9;

   Var k,j: integer;       c: array [1..n] of integer;

   Function Soch(p,m: integer):integer;      Var i :integer; s: longint;

   Begin

       s:=1;    For i:=1 to m do   s:=s*(p+1-i) div (i); soch:=s;    end;

{    Негізгі программаның мәтіні:        }

  Begin

    writeln('    Паскаль үшбұрышы:');  k:=1;    c[k]:=1; write(' ',c[1]); writeln;

    For k:=1 to n do      begin   c[1]:=1;   

     For j:=2 to k+1 do   begin c[j]:=soch(k,j-1); end;

      For j:=1 to k+1 do write(' ',c[j],' ');

   writeln;    end; readln;  end.

Математика пәнінен белгілі,  p - дан m теру саны келесі формула бойынша анықталады:

SOCH =  = ,

мұндағы p = 1,2,3,. . .,n.  Әрбір p параметрінің мәні үшін Паскаль үшбұрышының бір жолы анықталады. Ескертетін жай, Паскаль үшбұрышының элементтері элементар математикадан белгілі Ньютон биномының коэффициенттеріне тең. Мысалы, осы үшбұрыштың соңғы  (p=9) жолында (a+b)9 көпмүшелігінің коэффициенттері анықталған.

3 мысалЖоғарғы шегі айнымалы интеграл.  Жоғарғы шегі айнымалы шама болатын интегралды функция ретінде қарастыруға болады:

                       u = F(x) =.

Мұндағы x – айнымалы шама болғандықтан u –  функция болып есептеледі; аргумент x – тің өзгеру аралығы берілсін: . Осы аралықтағы аргумент мәндері үшін функцияның мәндерін h0 өзгеру қадамы бойынша табу керек. Интегралды есептеу функция түрінде құрастырылсын. Аргументтің әрбір мәніне сәйкес интегралдың мәнін табу үшін Симпсон формуласы қолданылсын:

                    

мұндағы n -  бүтін жұп сан;  ол [a;x] аралығын h қадамы бойынша бөлу саны; ti=a+i*h  - бөлу нүктелері, yi =f(ti) – интеграл ішіндегі функцияның бөлу нүктелеріндегі мәндері,   i=0,1,2,. . .,n.

  Нақты интеграл қарастырылсын:

                        .

Мұндағы a=0,=0,1. Бұл есептің программасының мәтіні келесі түрде жазылады:

Program INTEGRAL;

   Label 5;  Const h0=0.1;   Var x,u: real;

   Function F(v:real):real;      Const n=101;

            Var k,i:integer; s,h:real;     t,y:array [1..n] of real;

           Function P(z:real):real;     Begin P:=exp(z)*sin(pi*z) end;

   Begin

h:=v/n; For i:=1 to n do begin t[i]:=h*(i-1); y[i]:=P(t[i]); end; S:=y[1]+y[n];  For i:=2 to n-1 do

  begin if (i mod 2)=0 then k:=4 else k:=2;  s:=s+k*y[i]; end;

F:=h*s/3; End; { F функцияның соңы }

Begin

       x:=1;  Writeln('  мәндерінің кестесі:');

 5:   u:=F(x);  Writeln('  x=',x:6:2,'    ' ,'u=',u:8:4);

       x:=x+h0;    if x<=2.001 then goto 5;       readln;  End.

 

Өз бетімен орындауға арналған тапсырмалар:

№1 Төбесінің координаталары (xi,yi), i=1,2,. . . ,5 болатын бесбұрыштың периметрін табу. Екі нүктенің арақашықтығын процедура  ретінде қарастыру керек.

№2 Төбесінің координаталары (xi,yi) i=1,2,. . . ,5 болатын бесбұрыштың ауданын табу. Екі нүкте арақашықтығын функция құрып есептеу және Герон формуласы бойынша үшбұрыш ауданын процедура құрып есептеу. Үшбұрыш 1-ші нүктесімен  және басқа екеуімен байланысуы арқылы құрылған.

 

 

 


№3  Параллель жалғанған кедергілер тобы теріс емес r1, r2,… мәндермен берілген. Осындай топтардың (топта 4 кедергіден көп емес) тізбектей жалғануы былай берілген: бірінші топтың кедергісі, әрі қарай  топты бөлуге арналған теріс сан, содан кейін екінші топтың кедергісі, әрі қарай тағы да  топты бөлуге арналған теріс сан т.с.с. Соңғы кедергінің мәнінен кейін – екі теріс сан. Байланыс кедергісін есептеу. Параллель кедергілердің процедура есептегішін құру.

 

 

 

 

№5  Төртінші ретті квадрат матрица үшін анықтағышты есептеу. Алгебралық толықтауыштың процедура және функция есептегішін құру.

№6  a және b нақты сандары берілген. Келесі өрнекті есептеу керек:   мұндағы  

 №7 q, r, нақты сандары берілген. Келесі өрнектің мәнін табу керек:                                    

мұндағы  

№8 Жазықтықтағы n дөңгелектердің радиусы мен центрлерінің координаттары берілген. Дөңгелектер арасынан өзара екі-екіден қиылысатын дөңгелектерді анықтау.

№9 Жазықтықтағы n дөңгелектердің радиусы мен центрлерінің координаттары берілген. Дөңгелектер арасынан оңаша, яғни қиылыспайтын, басқа дөңгелектерге қосылмайтын және кірмейтін дөңгелектерді анықтау.

№10 Квадрат матрица берілген. Келесі тәртіп бойынша вектор-бағана құрастыру керек: оның элементтері берілген матрицаның штрихталған облыстары жолдың элементтерінің қосындысынан тұрады. Диагональ элементтері қосындының құрамына  кіреді.

 

Зертханалық жұмыс № 5. Таңбалар мен жолдарды өңдеудің алгоритмдері мен программалары

 

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

 

Бақылау сұрақтары:

1) Символдық айнымалылар программаның қай бөлімінде сипатталынады?

2) Жолдар дегеніміз не?

3) Жолдарға қандай амалдарды қолдануға болады?

4) Конкатенция деген қандай амал?

5) Жолдың типі деген не?

 

 Жаттығулар мен оларды  орындау үлгілері

Компьютер сандық информациямен қатар символдық информацияны (таңбаларды) да өңдейтін мүмкіншіліктері бар. Таңбаларды сақтау және өңдеу үшін char типіне жататын айнымалы шамалар қолданылады. Олар Var айнымалыларды сипаттау бөлімінде сипатталынады.

                            Мысалы, Var     A, AT: char;

Мұндағы A және AT – символдық типке жататын айнымалы шамалар, олардың мәндері таңбалар болады. Олар айнымалылар ретінде меншіктеу операторы арқылы мән қабылдайды, олардың мәндерін Read немесе Readln операторы арқылы енгізуге және Write немесе Writeln арқылы шығаруға болады.

Турбо Паскаль ортасында таңбалардың тізбектерін өңдеуге арналған таңбалар жолы және оған сәйкес деректердің жолдық типі туралы түсінік енгізілген. Жолдың ұзындығы программаның орындалу барысында нөлден бастап берілген жоғарғы шектік мәнге дейін өзгереді. Жолдық типті анықтау кезінде квадрат жақшалар ішінде жолдың ең үлкен ұзындығы көрсетіледі. Жол ұзындығы 1–ден 255–ке дейінгі бүтін мәнді тұрақтылармен (константалармен) беріледі.

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

1 мысал. Берілген таңбаның алғашқы орнын табу. Таңбасының саны n болатын мәтіннен белгілі бір таңбаның, мысалы A,  алғашқысының орналасқан орнының нөмірін анықтау керек.

Бұл есепті шешу үшін алдымен келесі белгілеулер енгізілсін:

N – енгізілетін мәтіндегі таңба саны;

A – char типіндегі берілген таңба; бұл программада оның мәні с әрпі;

S – char типіндегі енгізілетін мәтіндегі таңбалар тізбегі;

K – мәтіндегі таңбалар нөмірі немесе цикл есептегіші

Мәтін енгізілгеннен кейін, ондағы таңбалар кезегімен берілген  A айнымалысының мәнімен салыстырылады. Егер теңдік орындалса, онда оның нөмірі шығарылады. Егер ол таңба берілген мәтінде жоқ болса, онда «Бұл таңба жоқ» деген жауап шығады.

Есептің программасының мәтіні келесі түрде жазылады:

 Program ORYN;     Label 1,2,3,4;            Const n=20;

     Var       k,i:integer;       s: array[1..n] of char;       a: char;

  Begin

    a:='c'; i:=0;       For k:=1 to n do Read(s[k]);        k:=1;

 2:   if s[k]=a        then  goto 1;        k:=k+1;

         if k<=n then goto 2 else goto 3;

 1:   i:=k;         writeln('i=',i);       goto 4;

  3:  Writeln(‘Бұл таңба жоқ’);

  4:  readln;   End.

Программаның орындалуын тексеру үшін 20 таңбадан тұратын әртүрлі мәтін беріп көру  керек.

2 мысал. Таңбаның неше рет кездесетінін анықтау. Берілген “Орындалатын  амалдар” деген 20 таңбадан тұратын мәтіннің ішіндегі “а” таңбасы неше рет кездесетінін анықтау керек болсын.  Бұл есептің программасы мынадай түрде жазылады:

PROGRAM KEZDESU;  CONST n = 20;

  VAR  X: string [n];         A: char;         m, k : integer;

  BEGIN      X := ‘Орындалатын  амалдар’;     A :=’a’;  m :=0;            

     FOR  k := 1 TO  n  DO      IF X [k] := ‘a’ THEN  m := m+1;

WRITELN (‘«Орындалатын амалдар» тексте’);

WRITELN (a, таңба ’,  m , ‘ рет кездеседі’);   END.

Жолдық деректерге келесі амалдарды қолдануға болады:

-         жалғау немесе қосу (конкатенация – concatenate) амалының белгісі  +;

-   салыстыру амалдары    =,<>,  <, >, >=, <= белгілерін пайдаланады;

-   меншіктеу операторы := белгісін пайдаланады.

Жалғау (конкатенция) амалы бір жолға басқа жолдарды қосуға арналған. Қосылған жолдардың ұзындығы 255 таңбадан аспауы тиіс.

Салыстыру амалы солдан оңға қарай әрбір таңбаның коды бойынша орындалады. Жолдар ұзындықтары және таңбалар құрамы бірдей болғанда ғана тең деп есептелінеді. Салыстыру нәтижесі логикалық (Буль) типке жатады, ол екі түрлі мән қабылдайды: False (Жалған) және True (Шындық). Таңбаларды салыстыру кезінде латын әліппесінің кіші әріптері өздерінің екілік сан жүйесіндегі коды бойынша өздеріне сәйкес бас әріптерден «үлкен» деп есептелінеді.

Меншіктеу операторында жолдық типке жататын өрнектерді пайдалануға болады.

Мысалы,  Sahat := ‘12’;  Minutes := ‘15’;

Time of day := “It is’ + Sahat +’hours’+ minutes+’minutes now’;

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

3 мысал. Таңбамен толтырылған үшбұрыш сызу. Мысал ретінде тең бүйірлі тікбұрышты үшбұрышты * белгісімен толтыру арқылы құрастыру қарастырылсын. Мұнда қайталау саны белгілі цикл қолданылады; онда алдымен бір белгі, екінші жолға екі және т.б. белгі қою арқылы қажетті үшбұрышты алуға болады. Оның программасы былайша жазылады:

PROGRAM PR41;   CONST  n = 12;

   VAR  x : string[n];        k : byte;

BEGIN  x:=’’;    FOR k:= 1 TO n  DO

  BEGIN    x:= x +’*’;    WRITELN (x);  END; END.

Программа орындалғаннан кейін экранға жұлдызшалармен толтырылған үшбұрыштың шығарылғанына көз жеткізуге болады.

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

функциялардың қолдануын әрбір студент өз бетімен мысалдар қарастыру арқылы машықтануы тиіс.

 

Өз бетімен орындауға арналған тапсырмалар:

№1  a, b, c жолдық айнымалыларында аты-жөні жазылған кісіні стандартты мерекемен құттықтау сөзін экранға  шығару керек болсын, мысалы: «Құрметті Дайыр Ренатұлы, сізді Тауелсіздік мерекесімен құттықтаймыз». Конвертте хат алушыны көрсету керек: «Асқарбек Д. Р.»

№2  n спортшылар бар (аты-жөні, туған жылы). 1-ші топқа (14 жасқа дейін), 2-ші топқа (14-тен 18 жасқа дейін), 3-ші топқа (18жастан үлкен) кіретін спортшылар туралы деректерді экранға шығару керек.

№3  Тауардың бағасы екі жол массиві түрінде жазылсын: «доп 300 тенге», «ракетка 2600 тенге». Тауардың бағасы 50%  төмендегеннен кейін бағасы қанша болатынын анықтап, жауапты жолдық массив ретінде көрсету керек. 

№4 Келесі аралықтағы 20<n<100 натурал сан берілген. Ол санды және оның аталуын  экранға шығару. Мысалы, 25 санын енгізгенде, «25-жиырма бес» деген мәтін шығуы керек. 

№5  Қосу мысалы мәтін ретінде берілген «34+560=». Жауабын экранға шығару керек.

№6 Берілген әріптен басталатын сөйлем сөзін шығару.

 №7 Жолдық әріптен тұратын ағылшын мәтінін шифрлеу және кері шифрлеу. Шифрлеген кезде әріптер өзінен кейнгі әріпке ауыстырылады(«c» «d»-ға, «z» «a»-ға).

№8 Сөйлемде «$150» бағасымен көрсетілген көрсеткіш берілген. Мәтінді  курс бойынша теңгелік эквивалентке ауыстыру. 

№9 Пробелмен (ақ жолмен) бөлінген ағылшын сөздері берілген. Латын «u» әрпі кездесетін сөздерді табу керек.

№10 Мәтін берілген. Ондық сандардың жазбасы немесе идентификатор болып табылатынын анықтау.

 

№ 6 Зертханалық жұмыс. Графикалық жұмыстарды орындау

 

Жұмыс мақсаты: қазіргі заманғы компьютерлердің негізгі қызметтерінің бірі – графикалық информацияны өңдеу. Компьютердің осы мүмкіндіктерін пайдаланып, графикалық информациямен жұмыс істеудің алғашқы әдістерімен танысу және машықтану.

 

Бақылау сұрақтары:

1) Графикалық информация қандай құрылғының көмегімен құрастырылады?

2) Видеоадаптер дегеніміз не?

3) Пиксель дегеніміз не?

4) Нүктені орнату үшін қандай процедура қолданылады?

5) Line процедурасы не үшін қолданылады?

6) Координаталар жүйесін орнату үшін қандай амалдарды орындау керек?

7) Delay процедурасы қандай функцияны орындайды?

 

Жаттығулар мен оларды  орындау үлгілері

Егер программа экранға графиктерді шығара алатын болса, онда программа графикалық режимде жұмыс істейді деп аталады. Графикалық режимде жұмыс істеу үшін  графикалық режим орнатылуы тиіс. Ол үшін Graph модулінің  InitGraph процедурасын пайдаланады.  Сондықтан программадағы оның атынан кейін жазылатын алғашқы нұсқау Uses Graph болуы тиіс. Программа орындалғаннан кейін мәтіндік режимді қайта орнату үшін CloseGraph (модульді жабу) процедурасы қолданылады. InitGraph процедурасын қосудың форматы мынадай:

InitGraph (драйвер, режим, жол);

Мұндағы:

драйвер –  графикалық драйвер мен адаптердің типін анықтайтын Integer типіне жататын айнымалы параметр;

режим – графикалық адаптердің жұмыс режимін анықтайтын Integer типіне жататын айнымалы параметр;

жол –  графикалық драйвер орналасқан каталогқа жететін жолды көрсететін String типінде жазылған дерек; егер драйвер ағымдағы каталогта болса, онда бұл параметр бос жол болады.

Мысалы,  InitGraph ( var d, m: integer;  p: string);

мұндағы  d - графикалық адаптер типі;      m графикалық адаптердің жұмыс режимі;     p – графикалық адаптердің орналасқан жеріне баратын жол.

Адаптерді автоматты түрде таңдау үшін d:=detect меншіктеу операторы орындалуы тиіс.  Егер компьютерде VGA адаптері орнатылған болса, онда  d:= VGA; параметрі орнатылады.  Бұл жерде m  мен p  параметрлерінің мәндері анықталмайды.

Графикалық режимді алғаш қосу (инициалдау) кезінде кездейсоқ қателер болуы ықтимал. Осындай жағдайда, жіберілетін қатенің кодын анықтайтын функциялар Graph модулінің құрамына енгізілген. Мысалы, GraphResult: integerфункциясы графикалық режимді қосу (инициалдау) кезінде жіберілген қатенің кодын көрсетеді. Егер ол кодтың мәні 0-ге тең болса, онда қате жіберілмегені, ал басқаша жағдайда қате бар болғаны. Қателердің кодтары -1, -2, . . . ,-15   болуы мүмкін.

GraphErrorMsg(GraphResult: integer): string; функциясы қате туралы хабар жазылған мәтін орналасқан жолды шығарады; ол оны GraphResult параметрі арқылы берілетін номері бойынша шығарады.

Орнатылған адаптердің графикалық режимінің ең үлкен және ең кіші үйлесімді мәндері туралы мәлімет алу үшін

      GetModeRange(GraphDrive:integer;     VarLoMode,HiMode: integer);

процедурасын пайдалануға болады.

Мұндағы:  GraphDriver – графикалық адаптердің мәнін көрсететін параметр;

LoMode адаптердің жұмыс режимінің ең кіші мәнін анықтайтын айнымалы;

HiMode – адаптердің жұмыс режимінің ең үлкен мәнін анықтайтын айнымалы.

Сонымен, Graph графикалық режимінде жұмыс істеу қажет болса, онда программаның атын жазғаннан кейін, сипаттау бөліміне Uses Graph операторын көрсету керек. Мысалы,  Program PR20; Uses Graph;

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

Графикалық информация экран бетінде нүктелердің жиыны ретінде бейнеленеді. Экрандағы пиксельдің орналасуы оның тік (вертикаль) және көлбеу (горизонталь) координаталарына байланысты. Қарапайым геометриялық объектілерді құрастыру үшін арнайы процедуралар графикалық режимнің құрамына енгізілген. Ең қарапайым геометриялық объект  нүкте болып есептеледі. Ал PutPixel(x,y:integer;Pixel:word); процедурасы координаталары (x,y),  ал  түсі Pixel болатын нүктені экранға шығарады. Координаталарының мәндері мен нүктенің түсінің номерін беру арқылы қажетті нүктені экранға орнатуға болады.

Graph модулінде түзуді жүргізу үшін үш түрлі процедура қолданылады:

1)LineTo(x,y:integer); процедурасы ағымдағы нүктеден координатасы (x,y) болатын нүктеге дейін түзу жүргізеді;

2) LineRel(Dx,Dy: integer); процедурасы ағымдағы координатасы (x,y) болатын    нүктеден координаталарының мәндерінің өсімдері Dx, Dy болатын нүктеге дейін түзу жүргізеді, ал одан кейін соңғы нүкте ағымдағы болып есептелінеді;

3) Line(x1,y1,x2,y2: integer); процедурасы координаталары (x1,y1) және (x2,y2) болатын екі нүкте арасын қосатын түзуді сызады.

Осы қарастырылған процедуралардыктерін көрсету үшін төменде қарапайым  мысалдар  келтірілген.

1 мысал. Бірінің ішіне бірі орналасқан, әрбір келесінің қабырғасы алдыңғы үлкенінің қабырғасынан екі есе кіші болатын квадраттарды салу керек. Ең кіші квадрат боялсын.

Есептің программасын құрастырудан бұрын мынадай белгілеулер енгізіледі:

xc, yc алғашқы ең үлкен квадраттың бір төбесінің координаталары;

aалғашқы ең үлкен квадраттың қабырғасының ұзындығы;

x1,y1- ағымдағы квадраттың бір төбесінің координаталары;

x2,y2 ағымдағы квадраттың екінші төбесі;

k – цикл параметрі;

n сызылатын квадраттар саны.

Квадраттарды сызу үрдісі n рет қайталанатын цикл болады. Программаның мәтіні былайша жазылады:

Program KVADRAT;   Uses Graph;

  Const xc=100; yc=100; a=300; n=5;  Var x1,x2,y1,y2,k,d,m: integer;

Begin   d:=detect;    InitGraph(d,m, ‘  ‘);   MoveTo(0,0);  

{    Координаталар жүйесінің бас нүктесін орнату      }

  Line(0,0,600,0);  Line(0,0,0,400); {  Координаталар осьтерін сызу   }

 x1:=xc; y1:=yc; x2:=xc+a; y2:=yc+a;

{ Алғашқы квадраттың төбелерін табу      }

  For k:=1 to n do

   begin  {  Келесі квадраттың төбелерін анықтау  циклы  }

        Rectangle(x1,y1,x2,y2);    {        Квадратты сызу                           }

  x1:=  x1+(x2-x1) div 4;   y1:=y1+(y2-y1) div 4;

  x2:= x2-(x2-x1) div 4;    y2:= y2-(y2-y1) div 4;   end;

  SetFillStyle(0,1);   

{   Бояу үлгісін орнату       }   Bar(x1,y1,x2,y2); 

{   Соңғы ең кіші квадратты бояу  процедурасы        }  Readln;   CloseGraph;    

{     Графикалық режимдегі жұмысты аяқтау           End.

Әртүрлі жиі кездесетін қисықтарды сызуға арналған бірнеше процедураларды қарастыруға болады.

 Мысалы,  Arc(x,y: integer; StAngle, EndAngle, Radius: word);

процедурасы ортасы (x,y) нүктесінде орналасқан, радиусы Radius, бастапқы бұрышы StAngle, соңғы бұрышы  EndAngle болатын доғаны сызады. Мұндағы бұрыш  градуспен өлшенеді, ал есептеу бағыты - абсцисса осінен бастап сағат тіліне қарсы.

Шеңберді сызу үшін Circle(x,y:  integer; Radius: word); процедурасы қолданылады. Мұндағы (x,y) – шеңбердің ортасының координатасы, ал Radius – оның радиусы. Дөңгелектің секторын бояу үшін келесі процедураны пайдалануға болады:  PieSlice(x,y: integer; StAngle, EndAngle, Radius: word);

Эллипсті сызуға арналған  процедураның жазылу форматы мынадай:

 Ellipse(x,y:integer;StAngle,EndAngle:word;XRadius,  YRadius: word);

Мұндағы (x, y) – эллипс ортасының координатасы, XRadius, YRadius эллипстің жарты осьтері,  StAngle, EndAngle – алғашқы және соңғы бұрыштар. Эллипсті бояу үшін FillEllipse(x,y: integer; XRadius, YRadius: word); процедурасы, ал оның секторын бояу үшін Sector(x, y: integer; StAngle, EndAngle, XRadius, YRadius: word); процедурасы пайдаланылады.

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

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

 SetLineStyle(LineStyle:word; Pattern:word; Thick:word);

Мұндағы LineStyle – сызықтың типі. Ол параметрдің мынадай мәндері болуы мүмкін:  Solidln=0 – үзіліссіз; Dottedln =1- нүктелік; Centerln =2 – үзілісті, штрихпунктир;  Dashedln = 3 – үзілісті, штрих; UserBitln – пайдаланушы анықтайды.  Pattern параметрі сызықтың типін, ал Thick параметрі сызықтың қалыңдығын белгілейді. Егер NormWidth=1  болса, онда сызық қалыңдығы қалыпты, ал ThickWidth=3 болса, онда үш есе қалың болады.

Шығарылатын суретті әртүрлі түске бояуға болады. Суреттің түсі SetColor(Color: word); процедурасының көмегімен орнатылады. Егер монохроматикалық экран пайдаланылатын болса, онда қара экранға ақ түсті сызулар сызылады. Ағымдағы сурет түсінің мәнін анықтау үшін GetColor: word; функциясы қолданылады. Дисплей экранының арт жағының фонының түсін (реңін) орнату  SetBkColor(Color: word); процедурасының көмегімен орындалады. Ағымдағы фонның түсі немесе оған сәйкес сан номері SetBkColor: word; функциясы арқылы  анықталады.

2 мысал.  Спиральді  сызу. Берілген нүктенің айналасына n орамнан  тұратын спираль сызу керек. Оның алғашқы бағыты абсцисса осімен α бұрышын құрайды. Спиральдің параметрлік теңдеулерін келесі түрде жазуға болады:  x = xc + r cost, y = yc + r sint, r = at, α ≤ t ≤ 2nπ.   Мұндағы  a параметрінің мәні клавиатурадан енгізіледі. Оның мәні үлкен болған сайын спиральдің де үлкен болатындығына көз жеткізуге болады.

Спиральді сызу кезінде оның графигін кішігірім кесінділер күйінде құрастырылатын болғандықтан t параметрінің өзгеру қадамы мен алғашқы мәні берілуі тиісті; оның өзгеру қадамын p6 = π/180, ал  α =π/4 тең деп алынған. Программада спиральдің ортасының координаталары xc =320, yc = 250, ал орам саны n = 20. Әрине, бұл мәндерді өзгертуге болады.

Осы есептің программасының мәтінін келесі түрде жазуға болады:

Program  SPIRAL;

   Uses Graph;  

       const xc=320; yc=250; n=20;    pi=3.1415926;  alf=pi/4; 6=pi/180;

       var   t,r,a: real;       k,d,m,i,x,y:integer;

   begin     readln(a);       d:=detect;  InitGraph(d,m,'  ');       t:=alf;

         MoveTo(xc,yc);       writeln(' Спираль для значения  a=',a:4:2);

         for i:=1 to n do         begin      for k:=1 to 360 do

         begin    t:=t+p6; r:=a*t;  x:=round(r*cos(t))+xc;     y:= round (r*sin(t))+yc;                    LineTo(x,y);     end;     end;

          Circle(xc,yc,round(r));       readln;       CloseGraph;   end.

3 мысал. Функцияның графигін сызу. Практикада жиі кездесетін қарапайым есептердің бір түрі – берілген функцияның графигін сызу. Ол үшін Graph, CRT  стандартты модульдерін пайдалануға болады. Функцияның әрбір нүктедегі мәнін есептеп, графикті нүктелердің жиыны ретінде қарастыру керек. Бұл жерде PutPixel процедурасы пайдаланылады. Бұл процедураның орындалу нәтижесінде экранға берілген координаталары бойынша, нақты  түсі анықталған нүкте пайда болады. Төменде тригонометриялық функциялардың графиктерін сызуға арналған программа келтірілген. Егер басқа функцияның графигін сызу керек болса, оның программасы да осыған ұқсас болады; тек функцияның формуласы ғана басқаша жазылады.

Program FUNGRAF;

Uses Graph, CRT;

  Var    a,g,Error,s:integer;    i,x,y: real;    Fv: File;    p: pointer;

  Begin    Assign(Fv,'Zaugraf');    a:=detect; g:=Detect; InitGraph(a,g,'');

    Error:=GraphResult;     If Error<>GrOK then

   begin Writeln (GraphErrorMsg(Error)); Halt(1); end;

     Rewrite(Fv,1); x:=-2*Pi; SetColor(1);

   Line(0,175, 640, 175); Line(640,175,625,172);

   Line(640,175,625,178); Line(300,0,300,350);

   Line(300,350,303,335); Line(300,350,297,335);

       While x<2*Pi do

         begin    y:=sin(x);    PutPixel(Round(x*50)+300, Round(y*80)+175, 10);

        Y:=cos(x);   PutPixel(Round(x*50)+300, Round(y*80)+175, 3);     x:=x+0.05;

         end;

     SetTextStyle(0,0,2); OutTextXY(285,340,'  Y ');

     SetTextStyle(0,0,2); OutTextXY(590,150,'  X ');

     SetTextStyle(0,0,2); OutTextXY(280,150,'  O ');

        s:=ImageSize(0,0,400,200);  GetMem(p,s);

        GetImage(0,0,400,200,p^); PutImage(0,0,p^,0);

        Blockwrite(Fv,p^,s);        Delay(500);        Close(Fv);         Readln;

       CloseGraph;    End.

Жоғарыда айтылғандай, Graph стандартты модулінің құрамында инициалдау кезінде қатенің жіберілгендігін тексеруге арналған

GraphResult:integer;

деген функция бар. Оның беретін мәні бүтін сан болады; егер ол сан нольге тең болса, онда инициалдаудың қатесіз орындалғаны, ал  ол басқа мәнге тең болса  (-1, -2, . . . -15), онда қатенің жіберілгені. Ондай жағдайда қате туралы хабарды келесі функция береді:

       GraphErrorMsg(GraphResult:integer):string;

Ескеретін жай, нүктелердің координаталарының мәндері немесе PutPixel процедурасының параметрлері тек бүтін мәндерді қабылдайтындықтан, Round функциясының көмегімен бүтін мәндер алынған.

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

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

Бұл есепте келесі белгілеулер енгізілген:

xc, yc - дөңгелек ортасының алғашқы сәттегі координаталары;

R - дөңгелектің алғашқы сәттегі радиусы;

x,y - дөңгелек ортасының ағымдағы координаталары.

Алғашқы сәтте дөңгелектің ортасы (xc, yc) нүктесінде орналасып, радиусы R = 60 болса, одан кейін оның ортасының координаталары өзгеріп, радиусы кішірейеді. Дененің (дөңгелектің) алдыңғы суреті өшіріліп, жаңа суретінің пайда болуы адам көзіне  дөңгелектің алыстап бара жатқан қозғалысы сияқты әсер етеді. Ол үшін программада Delay (тежеу)  және  Cleardevice (өшіру) процедуралары қолданылған. Программаның мәтіні келесі түрде жазылған:

Program SHARIK;

      Uses Graph, Crt;

        Const  xc=50; yc=50;        Var x,y,d,m,i,r:integer;

    Begin                                          

        d:=detect; InitGraph(d,m,' ');       x:=xc; y:=yc; R:=60;       SetBkColor(3);

     repeat        Line(40,40,40,400); {Горизонталь осьті сызу}

{Горизонталь осьтің стрелкасын сызу:     }

        Line(40,400,37,385);      Line(40,400,43,385);

{Вертикаль осьті сызу:       }        Line(40,40,600,40);

{Вертикаль осьтің стрелкасын сызу:       }

        Line(600,40,585,33);       Line(600,40,585,43);

{Осьтер мен система басының белгілерін орнату: }

        SetTextStyle(0,0,2);      OutTextXY(15,360,'Y');

 

Өз бетімен орындауға арналған тапсырмалар:

№1 Аргументтің мәндері  [0.1] интервалында берілген; осы интервалдағы  аргументтің мәндері үшін  функциясының  нақты графигін шығаратын программа жазу. Координаттар осін шығару, координаталар басы экран ортасында орналасатын болсын.

1

2

3

4

12

13

14

5

11

16

15

6

10

9

8

7

№2 n квадрат матрицаның өлшемін енгізу. Матрица элементтерінің мәнін шығару үшін тор салу. 1-ден n2 –қа дейінгі натурал сандармен толтыру. Мысалы:

 

 

 

№3 Дөңгелектің центрлерінің және радиустарының координаталарын енгізу, түзу теңдеуінің a және b коэффиценттерін енгізу. Экранға  сызбаны шығару.

 

 

 

 

Кез келген х және у нүктесін енгізгенде нүкте пайда болады. Берілген нүкте штрихталған облысқа енетінін және қайсысына енетінін анықтау. 999 мәнін енгізгенге шейін программамен жұмыс жасау.

 №4 Жерді айналатын Айды және Жерді салу. Жерді және Айды нүкте немесе дөңгелек түрінде бейнелеу.

№5 Жерді, Күнді және Айды бейнелеу. Жер Күнді айналады, Ай Жерді айналады. Нүкте немесе дөңгелек түрінде бейнелеуге болады.

№6  Таяқшаны кесінді ретінде бейнелеу. Таяқша экран бойымен жылжиды: бір шеті жерде, ал екінші шеті басқа жаққа көтеріліп және түсіп тұрады. Содан кейін керісінше. Сөйтіп экранның бір шетінен екінші шетіне жылжып отырады.

№7 Алыстан (нүкте болып көрінеді) бізге қарай жақындап (үлкейеді) келе жатқан шарды бейнелеу және экранның соңына дейін солға қарай ығыстырылады.

№8 11х11 матрицасы үшін тор салу керек. 121 әріптен тұратын дайын мәтінмен қатар бойымен толтыру (әрбір торкөзде бір символ орналасады).

а) Кері шифрлеу үшін мәтінді ортасынан бастап, спираль бойымен оқу. (элемент индексі 6,6). Шифрді  экранға шығару.

б) Шифрді кері шифрлеу.  Экранға шығару.

№9 Аяғының түсі әртүрлі қозғалып бара жатқан клоунды салу. Қозғалыс бас киімнің, бастың, дененің бірқалыпты қозғалыс есебінен болады. Аяқтарды орнымен ауыстыру (адымдайды). 

№10 (xi,yi) төбелерінің координаталары берілген бесбұрыштың суретін салып, ауданын табу.

        


 

Әдебиеттер тізімі 

1. Абрамов С.А., Гнездилова Г.Г., Капустина Е.Н., Селюн М.И. Задачи по программированию. – М.: Наука. Гл. ред. физ.-мат. лит, 1988.  - 224 с.

2. Аляев Ю.А., Козлов д.А. Алгоритмизация и языки программирования Pascal, C++, Visual Basic: Учебно-справочное пособие.- М.: Финансы и статистика, 2004.-320 с.

3. Бөрібаев Б. Программалау тілдеріне кіріспе: Оқулық – Алматы: Алматы экономика және статистика академиясы, 2008. – 380 б.

4. Зелковиц М., Шоу А., Гэннон Дж. Принципы разработки программного обеспечения / Пер. с англ. – М.: Мир, 1982. – 386 с.

5. Инструментальные средства персональных ЭВМ. В 10 кн. 4. Программирование в среде Турбо Паскаль: Практическое пособие / Л.А. Агабеков и др.; Под ред. Б.С.Трусова.- М.: Высшая школа, 1993. – 142 с.

6. Климова Л.М. PASCAL 7.0. Практическое программирование. Решение типовых задач. – М.: КУДИЦ-ОБРАЗ, 2000. – 528 с.

7. Культин Н.Б. Программирование в Turbo Pascal 7.0 и  Delphi. -  2-ое изд., перераб. и доп. – СПб.: БХВ – Петербург, 2004. – 416 с.

8. Культин Н. Turbo Pascal  в задачах и примерах. – СПб.: БХВ-Петербург, 2008. – 256 с.: ил.

9. Құралбаев З.  Алгоритмдеу және программалау тілдері. –Алматы, 2008.- 353 бет.

  

2011 ж. жиынтық жоспары, реті 256