Автор: Пользователь скрыл имя, 26 Февраля 2013 в 18:26, лекция
Егер сіз берілген есепті шешу үшін қандай да бір программалау тілінде программа жазғыңыз келсе, онда алдымен есепті шешудің алгоритмін құруыңыз керек. Алгоритм – математикадағы ең бір іргелі ұғымдардың бірі. Алгоритм сөзі ІХ ғасырда өмір сүрген, адамдардың квадрат теңдеулерді жүйелей құрып оны шеше білуге үйреткен ұлы математик Әл- Хорезмидің атының латынша жазылуы algorithmi сөзінен алынған. Осылайша алгоритм ұғымы математикада ертеден қолданыла бастағанымен, математикалық теорианың объектісі ретінде кейбір проблемаларды зерттеуге байланысты ХХ ғасырдың 30-шы жылдарында зерттеле бастады.
•
•
•
160 FOR І=1 TO 5
170 PRINT A(I)
180 NEXT I
•
•
•
Бұл жағдайда А массиві элементтерінің мәндері баған түрінде баспаға шығарылады. 170 – оператор шығарылатын сандар үшін мынадай:
170 PRINT “A(“;I;”)=”;A(I) мәтінмен толықтыру шығарылған нәтижені түсінуді жақсартады:
A(1)=-7
A(2)=6.3
A(3)=5
•
•
•
А массивінің элементтерін қатар түрінде де баспаға шығаруға болады. Ол үшін 170 – қатардағы PRINT операторын нүктелі үтірмен аяқтау керек.
Қатынас жасау талап етілетін массив элементтерінің индекстерінің мәндерін есептейтін формуланы құру массивтің жеке элементтері жұмыс істеудің басқа маңызды тәсілі болып табылады.
Мысалы, А массивінің барлық жұп элементтеріне 4-ке тең сандық мән меншіктеу талап етілсін.
А массивін хабарлағаннан соң және оның мәндерін компьютер жадына ендіргеннен кейін программаның мынадай үзіндісі пайдаланылуы мүмкін:
•
•
•
70 FOR І=1 TO 2
80 А (2*І)=4
90 NEXT I
•
•
•
80 – оператордағы индексті есептеуші формула А массивінің тек жұп элементтерімен ғана қатынас жасауға мүмкіндік береді.
Бұл жағдайда массивтің хабарланбаған элементтерімен қатынас жасамас үшін барлық уақытта индекс мәндерінің төменгі және жоғары шекараларын қадағалап отыруға тура келеді.
Массивтерді өңдеудің типтік
процедуралары
Массивтермен жұмыс істеу процедуралары әр түрлі және көптеген жағдайларда компьютерде шығарылатын есептердің арнайы ерекшеліктерімен анықталады. Бірақ әр түрлі көп есептердің және оларды шешу үшін пайдаланылатын алгоритмдердің ішінен массивтерді өңдеудің типтік тәсілдерінің және алгоритмдерінің белгілі жиынын бөліп алуға болады.
Осы аталғандардың ішінен бір өлшемді массивке қолданылатын кейбіреулерін қарастырайық.
Массивтермен жұмыс істеу тәсілдерінің өзіне назар аудару үшін хабарлау операциясы, массивтер информациясын ендіру және шығару операциялары түсінік келтірмей беріледі және массив элементтерінің сандық мәндері анықталмайды.
Массив элементтерінің қосындысын есептеу
К элементі бар А массивінің элементтерінің қосындысын есептеу талап етілсін, яғни
Анықтау керек.
Қосындыны есептеу
алгоритмін нәтижесі өсіп
жинау принципі бойынша құрамыз.
S қосындының алғашқы мәнін анықтаймыз.
Әрине алғашқы кезде S=0 болады. Оған
массивтің А(І)-бірінші
Әрбір І-ші қадамда массивтің жаңа элементін мына S=S+A(1) пішінде қоса отырып, К қадамнан соң ізделініп отырған қосындыны аламыз.
Ұсынылған осы процедура
S=S+A(1) шамасын есептеуді К рет
қайталанатын цикл түрінде
S қосындысын есептеу
алгоритімнің блок-схемасын
Математика алгоритм S=A(1)+A(2)+A(3)+
…+A(K) формуласы бойынша тікелей
есептеуді, есептеудің К-
S=(…(((0+A(1))+A(2))+A(3))+…+
1-қадам
2-қадам
• 3-қадам
•
•
Программа қосындыны жинаудың К-қадамды процедурасын К рет қайталанатын цикл түрінде ұйымдастыру ыңғайлы болады.
Программаның түрі мынадай болады:
30 FORI=1 T O K
40 INPUT A(1)
50 NEXT I
60 S=0
70 FORI=1 T O K
80 S=S+A(1)
90 NEXT I
100 PRINT ’’S = ’’; S
110 END
Мұнда, 60 – оператор S қосындының бастапқы мәнін нөлге айналдырады, ал оны есептеу 70-90 – операторлардың тұратын циклде жүзеге асырылады.
Массив элементтерінің көбейтітдісін есептеу
А массив элементтерін мына түрде:
К
P=∏ А(I)
I=1
Массив элементтерінің көбейтіндісін есептеу принцпі жоғарыда қарастырылған массив элементтерінің қосындысын есептеуге ұқсас.
Көбейтіндінің ақтық мәні P=P x A (I) формуласы бойынша есептелетін дербес көбейтінділерді K-рет еселіп жинаудан соң анықталады.
P көбейтіндісінің алғашқы мәні ретінде Р=1 тандап алу керек, өткені ол нәтижесінің сандақ мәніне әсерін тигізбейді. Бұдан соң бірінші қадамда Р=P*A (1)=1*A(1),екінші кадамға P=P*A(2)=A(1)*A(2), үінші қадамға Р=P*A(3)=A(1)*А(2)*А(3), ең соңында К-қадамда Р=P*A(1)*А(2)*...*А(К-1)*А(К) есептеледі.
Бұл алгоритмді жүзеге асырушы программа үзіндісі мына төменде келтірілген:
60 Р=1
70 FOR I=1 TO K
80 P=P*A(I)
90 NTXT I
100 PRINT "P=";P
110 END
Берілген шартты қанағаттандыратын массив
элементтерін санын анықтау
К элементтен тұратын А массивінің қанша элементі берілген шартты қанағаттандыратындығын анықтау талап етілсін.
Нақты болу үшін бұл шарттың түрі А(1)>L болсын.
Берілген шартты қанағаттандыратын массив элементтерінің санын есепке алу үшін N айнымалысын ендірейік. N-нің мәнін есепке алуды А массивінің әрбір элементіне ретімен қатынас жасау және А(I)>L шартының орындалуын тексеру кезінде жүзеге асыруға болады. Шарт орындалған жағыдайда N-нің мәнін бір бірлікке арттыру керек, яғни N=N+1-ді есептеуге массивтің келесі элементін (егер массив аяқталмаған болса) талдауға өтеміз.Бұл шарт орындалмаған жағыдайда массивтің келесі элементіне қатынас жасауды ұйымдастыруға өте керек.
Массив элементтерін талдаудың бұл процедурасын блок-схема түріне көрсетуге болады.
Бұл процедураның А
массивтің ендіру және
60 N=O
70 FOR I=1 TO K
80 IF A(I)>L THEN N=N+1
90 NEXT I
100 PRINT "N="; N
110 END
Бірнеше белгілі массивтер бойынша
жаңа массив алу
Алгоритмнің бұл түрін жүзеге асыру үшін өлшемдерді бірдей А(I) және В(I), (I=1,2,...,К) массивтер бойынша С(I), (I=1,2,....,К) массивтің элементтерін алуға арналған қарапайым есепті қарастырамыз. С(I) массивінің элементтері мына формуламен анықталады: С (I)=A(I)+B(I)
Есепті шешу алгоритмі А(I)және В(I) массивтерінің элементтерін I бойынша 1-ден К-ға дейін өзгеретін цикл арқылы алып, барлық С(I)=A(I)+B(I) массивін есептеуге келіп тіреледі. Сонда бұл есепті шешетін программаның түрі мынадай болады:
10 INPUT"K=";K
20 DIM A(K),B(K),C(K)
30 FOR I=1 TO K
40 INPUT A(I),B(I)
50 NEXT I
60 FOR I=1 TO K
70 C(I)=A(I)+B(I)
80 PRINT C (I)
90 NEXT I
100 END
20-операторда программада пайдаланылатын барлық массивтер хабарланады және оның ішінде есептеу барысында алынатын С массивіне де орын бөлініп қойылатындығына назар аудару керек.
60-тан 90-ға дейінгі операторлар С массивінің элементтерін ретімен монитрр экранына шығаруды ұйымдастырады.
80-операторды массивті есептейтін циклге қосу С массивін баспаға шығаруға арналған арнайы циклді ұйымдастырудан құтқарады.
Массив элементтерін терістеу
К элементтен тұратын А массив элементерінің жазылу ретін керісінше ауыстыру қажет.
Бұл есепті шешу үшін бастапқы массив элементтерінң бірін транзит ретінде сақтаушы қосымша айнымалыны ендіру талап етіледі. Бұл айнымалыны G әріпімен таңбалайық.
Алдымен бірінші және К – элементтердің орындарын өзара алмастыру керек. Ол үшін А (І) элементінің мәнін G(С=А(І)) айнымалысына, содан соң К – элементінің мәнін А(І)=А(К) бірінші элементке, одан кейін бірінші элементтің мәнін G айнымалысынан К- элементке А(К) =G меншіктейміз. Массивтің ортасына жеткенше А(І) және А(К-І+1) элементтердің қалған жұптарымен дәл осыған ұқсас әрекеттер жасаймыз. Алмастырылуға тиісті соңғы элементтер, егер К жұп сан болса А (К/2) және А(К /2), ал егер К жұп сан болса, онда А ([K/2]) және A([K/2]+2) болады. [K/2] операциясы К/2 бөліндінің нәтижесінен бүтін санды алуды бейнелейді. BASIC тілінде бұл үшін INT функциясын пайдалануға болады.
Осылайша, программада
әрқайсында массив
Мына төмендегі программа жоғарыда айтылғандарды жүзеге асырады.
10 INPUT «К=»;К
20 DIM A (K)
30 FOR I=1 TO K
40 INPUT A(I)
50 NEXT I
60 M= INT (K/2)
70 FOM I=1 TO M
80 G=A(I)
90 A(I)=A(K-I+1)
100 A(K-I+10=G
110 NEXT I
120 FOR I = 1 TO K
130 PRINT A(I)
140 NTXT I
150 END
Массив элементінің және онын индексінің
ең үлкенін (ең кішісін) іздеу
К саннан тұратын А массивінің ең үлкен элементін және оның индексін іздеу үшін екі қосымша айнымалы ендіруге тура келеді.
Бұл есептің шешеімі А массивінің әрбір элементін М – нің ағымдағв ең үлкен мәнімен бірінен соң бірін ретімен салыстыру арқылы табылады. Егер А (І) элементінің мәні М –нің мәнінен үлкен болса, онда М ретінде осы элементтің
М=А(І) мәні қабылданады, ал N айнымалысы оның N=І индексінменшіктейді. Осы жоғарыда айтылған жағдайға қарама – қарсы жағдайда, яғни басқаша айтқанда әзірше І< К болса, онда массивтің келесі кезектегі элементін қарастыруға өту жүзеге асырылады.
Мұнда тағы М және N бастапқы мәндерін анықтау талап етіледі.
Егер массив элементінің бастапқы ең үлкен мәні ретін – де оның М = А(1),N=1 бірінші элементін алсақ және онымен екінші элементтен бастап массивтің қалған элементтерін циклді түрде салыстырсақ ол өзін-өзі ақтайды.
Бұ.л алгоритм мына программамен жүзеге асырылады:
10 INPUT “K=”:K
20 DIM A(K)
30 FOR I= 1 TO K
40 INPUT A(I)
50 NTXT I
60 M= A(1):N=1
70 FOR I =2 TO K
80 IF M < A(I) THEN M= A(I):N=1
90 NTXT I
100 PRINT “M=’:M: “N=”:N
110 END
Сонымен, бұл есепті шешу алгоритмінің блок – схемасы мына төменде көрсетілген.
М=A(1) |
N=1 |