Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тема_23_каз.doc
Скачиваний:
14
Добавлен:
20.05.2015
Размер:
80.38 Кб
Скачать

Ф КГМУ 4/3-07/01

ПП КГМУ 4/01

Қарағанды мемлекеттік медицина университеті

МЕДИЦИНАЛЫҚ БИОФИЗИКА ЖӘНЕ ИНФОРМАТИКА КАФЕДРАСЫ

Оқытушымен орындалатын өздік жұмыстарға арналған әдістемелік нұсқау

Тақырыбы: «Мәліметтер массивтерін программалау»

Мамандғы: 5B110200 «Қоғамдық денсаулық сақтау»

Пән: ООDОO5 Inf 1105 ИНФОРМАТИКА

КУРС: І

Құрастырған: Омарбекова Н. К.

Қарағанды, 2010

Кафедра отырысында бекітілді

№_____ хаттама «____»_______________

Бекітілген

Кафедра меңгерушісі ____________________Б.К. Койчубеков

Тақырыбы: Мәліметтер массивтерін программалау.

Сабақ мақсаты: массивтермен жұмыс істеу кезінде циклдерді қолдану дағдыларын практикалық иелену

Студент білуі керек:

  • Массив түсінігін

  • Массивтерді қолдану

  • Циклдер түрлерін

  • Циклдер сипаттамаларын

  • Цикл операторларын жазу формаларын

  • Цикл операторларының тағайындалуын

  • Сұрыптау түрлерін

Студент істей алуы керек:

  • Цикл операторларын ажырату

  • Бірөлшемді және көпөлшемді массивтер құру

  • Массивтермен жұмыс істеуде циклдерді қолдану

  • Массив элементтерін енгізу және шығаруды ұйымдастыру

  • Массивтердегі мәліметтерді сұрыптау

Базистік сұрақтар:

  • Циклдер түсінігі

  • Циклдер түрлері

  • Циклдер операторлары

  • Программалау орталары

  • Мәліметтер түрлері

Сабақ тақырыбы бойынша сұрақтар:

  1. Массив дегеніміз не?

  2. Массивтерді сипаттау үшін қолданылатын оператор?

  3. Массивтер ЭЕМ жадысында қалай орналасады?

  4. Массив элементтерін жазу формасы қандай?

  5. Массив элементтерінің орналасуын қалай анықтауға болады?

  6. Индекс дегеніміз не?

  7. Массивтің сипаттамасы қалайша беріледі?

  8. Массив элементтерін енгізу және шығару қалай ұйымдастырылады?

  9. Циклдік алгоритмдер дегеніміз не?

  10. Қайталау командасы қалай орындалады?

  11. Массивті сұрыптау дегеніміз не?

  12. Сұрыптаудың қандай тәсілдері бар?

Ақпараттық- дидактикалық блок

1. Массивтер

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

Кестенің әрбір мәніне немесе элементіне оның реттік номері сәйкес келеді. Сонда реттік номерді бергенде кестенің қандай элементі жайлы айтылып отырғанын білеміз.

1 кесте

1

2

3

4

5

2,5

1,5

-6

12

8

Бұл кестенің 5 элементі бар. Бесінші элементтің мәні 8, ал үшіншінің мәні -6. 1,5 мәні екінші элементке тән, ал 12 – төртінші элементтің мәні.

Кестені сақтағанда оның реттік номерін сақтаудың қажеттілігі жоқ: нөмірлену басын біле отырып, санау арқылы кез келген элементті табуға болады. Сонымен қатар, ең үлкен реттік номерді білген жөн, ол кестенің өлшемін білдіреді.

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

Кестелік шамамен жұмыс істеу оның элементтерімен жұмыс істеуге әкеледі. Қазіргі кезде қандай элемент қолданылып отырғанын көрсету үшін оның реттік нөмірін – индексін көрсеткен жеткілікті.

Кестелік шамалармен компьютерде жұмыс істеу үшін массивтер қолданылады.

Массив – жалпы атпен және типпен біріккен, нөмірлері бойынша реттелген мәндер жиынтығы.

Массив құру кезінде компьютер бірдей аттары бар, бірінен соң бірі орналасқан ұяшықтар тізбегін бөліп береді.

Массив элементтері нөмірленеді. Элементтің нөмірі (индексі) – массив басына қатысты элементтің орналасуын көрсетеді.

QBASIC-те массивтер DIM операторының көмегімен сипатталады:

Оператор

Жол формасы

Аты

Тағайындалуы

DIM

DIM массив аты (максимал индекс)

Оператор массив өлшемі

ЭЕМ жадысында массивті орналастырады

Массив элементтерінің басты индексі болып ноль саналады. DIM A(3) операторы орындалғанда, QBASIC массивке 4 ұяшық бөліп, оларға нольдік мән береді.

А(0)

А(1)

А(2)

А(3)

0

0

0

0

Ыңғайлылық үшін бірінші элементтің нөмірін 1-ге өзгертуге болады, ол үшін OPTION BASE 1: OPTION BASE 1 DIM A(3)операторы қолданылады. Бұл жағдайда массивке 3 ұяшық бөлінеді.

А(1)

А(2)

А(3)

0

0

0

Массив элементтерін енгізу және шығару FOR және NEXT операторларының көмегімен ұйымдастырылған цикл көмегімен жүзеге асырған ыңғайлы.

1.1 Массивтерге орындалатын әрекеттер

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

1.2 Массив элементтеріне орындалатын әрекеттер

Массивті құрған соң оның әрбір элементін өңдеуге болады, ол үшін массивтің идентификаторын (атын) және элементінің индексін дөңгелек жақшада көрсетіп жазу керек. Мысалы, Mas(2), VectorZ(10) жазбасы Mas массивінің екінші элементімен және VectorZ массивінің оныншы элементімен жұмыс істеуге болатынын көрсетеді. Екіөлшемді массивтермен жұмыс істегенде екі индекс көрсетіледі, n-өлшемді массивтерде n индекс жазылады. Мысалы, MatrU(4,4) жазбасы MatrU массивтің төртінші жолында және төртінші бағанында орналасқан элемент мәнін өңдеуге мүмкіндік береді.

Массивтің индекстелген элементтері индекстелген айнымалылар деп аталып, қарапайым айнымалылар сияқты қолданыла алады. Мысалы, олар for, while, repeat операторларында, PRINT, INPUT операторларының параметрлері ретінде қолданыла алады, оларға типтеріне сәйкес келетін кез келген мән беруге болады.

2. МАССИВТЕРДІ СҰРЫПТАУ

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

2.1 Сызықтық сұрыптау (таңдау арқылы сұрыптау)

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

QBASIC – те массивті сызықтық сұрыптау программасын мысалға келтірейік:

REM сызықтық сұрыптау

CLS

INPUT «Введите размер массива»; razmer

razmer= razmer-1

DIM Massiv(razmer)

PRINT «Введите числа в массив»

FOR i=0 TO razmer

INPUT Massiv(i)

NEXT i

REM массивті сұрыптау

max=Massiv(0)

nomer=0

DO

FOR i=nomer TO razmer

IF Massiv(i)>max THEN

Massiv(nomer)=Massiv(i)

Massiv(i)=max

max=Massiv(nomer)

END IF

NEXT i

nomer=nomer+1

max=Massiv(nomer)

LOOP WHILE nomer< razmer

PRINT «Максимальное число»; Massiv(0)

FOR i=0 TO razmer

PRINT Massiv(i)

NEXT i

END

Программаны қосу үшін RUN=>Start менюін немесе Shift+F5 пернелер комбинациясын қолдану керек.

Бұл конструкция келесідей жұмыс істейді. Алдымен CLS операторы экранды тазартады. Содан кейін INPUT операторы орындалады, оның көмегімен массивтің ұяшық саны орнатылады. Массив элементтерінің барлығы нөлден бастап нөмірленетіндіктен, razmer айнымалысында массив өлшемін 1-ге азайтып беру керек.

Келесі қадамда DIM операторының көмегімен массивті белгілейді және оның өлшемін береді. «Введите числа в массив» хабарламасы шыққан соң және цикл операторларының көмегімен пернетақтадан массив ұяшықтарының барлығы толтырылады.

Сұрыптаудың өзі max айнымалысына массивтің бірінші элементінің мәні берліген соң және nomer айнымалысына оның массивтегі нөмірі берліген соң басталады.

Қайталанулар саны алдын ала белгісіз циклді DO, LOOP WHILE қолданып, массивтің қарастырылып жатқан учаскесінің әрбір элементін қарап шығамыз және оны бірінші элементпен салыстырамыз. Қарастырылып жатқан учаскенің өлшемі FOR, TO операторлар көмегімен анықталады.

i айнымалысына nomer айнымалысының мәнін береміз, бұл талданатын учаскенің басын анықтау үшін қажет, учаскенің аяғы razmer айнымалысымен анықталады.

Содан кейін шарт тексеріледі, егер Massiv(i)-дің кезектегі мәні max айнымалысынан үлкен болса, онда массивтің тексеріліп жатқан мәні мен қарастырылып жатқан учаскенің бірінші элементінің мәндерін алмастырамыз. Бұл операцияны массивтің барлық элементтері бір-бірімен салыстырылып өткенше орындалады.

nomer мәнін 1-ге артырып отыру массивтің қарастырылып отырған учаскесінің өлшемін азайтып отыруға мүмкіндік береді.

Аяғында массивтің максимал мәнін және оның барлық мәндерін бір жолға шығарып береміз.

2.2 Пузырек (көпіршік) әдісімен сұрыптау

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

QBASIC – те массивті көпіршікті сұрыптау программасын мысалға келтірейік:

REM көпіршік әдісімен сұрыптау

CLS

INPUT «Введите размер массива»; razmer

razmer= razmer-1

DIM Massiv(razmer)

PRINT «Введите числа в массив»

FOR i=0 TO razmer

INPUT Massiv(i)

NEXT i

REM массивті сұрыптау

DO

schetchik2= schetchik

FOR i=0 TO razmer-1

IF Massiv(i)< Massiv(i+1) THEN

buf=Massiv(i)

Massiv(i)= Massiv(i+1)

Massiv(i+1)=buf

schetchik= schetchik+1

END IF

NEXT i

LOOP WHILE schetchik<>schetchik2

FOR i=0 TO razmer

PRINT Massiv(i)

NEXT i

END

Программа жұмысын сипаттау:

Программа басында массив өлшемін анықтап алу керек, себебі жадыда массвике орын бөлу керек. Массив өлшемін razmer айнымалысына жазамыз. Сосын масситі белгілеп, DIM процедурасының көмегімен массив үшін жады көлімен бөлеміз. Құрылған массивке пернетақтадан мәндер енгіземіз. Массивтің бір емес, бірнеше ұяшығы болғандықтан, қайталанылар саны алдын ала белгілі цикл операторларын FOR, TO қолданамыз.

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

3. РЕТТЕЛГЕН МАССИВТЕРДЕГІ БИНАРЛЫҚ ІЗДЕУ

Компьютерлерді қолдану тиімділігін қандай да бір тізімде ақпаратты іздеуді жүзеге асыратын есептер көрсетеді. Үлкен сұрыпталған массивтерде іздеу әдістерінің ең тиімдісінің бірі бинарлық іздеу немесе екіше бөлу әдісімен іздеу болып табылады. Бұл әдістің негізінде ізделінетін элементтің жобаланған орналасуы туралы болжамдардың бағытталған тізбегі идеясы жатыр. Мысал ретінде Африкада арыстанды іздеу әзіл есебін келтіруге болады. Алдымен Африканы екіге бөлеміз. Арыстан бір бөлігінде ғана орналасқаны белгілі. Арыстан орналасқан бөлікті тағы да екіге бөлеміз, т.с.с. Африканың ауданы шамамен 30 млн.км2. яғни біз 45 рет ауданды бөлеміз де, 1 м2-тан аспайтын ауданшық аламыз. Бұл ауданда арыстан табу қиын емес.

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

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

QBASIC – те массивтің элементін бинарлық іздеу программасын мысалға келтірейік:

REM бинарлық іздеу

CLS

DIM massiv$(31)

FOR i=0 TO 31

massiv$(i)=CHR$(128+i)

NEXT i

INPUT «Введите заглавную букву русского алфавита для поиска»; a$

nachalo=0

konec=31

middle=konec\2

DO

IF a$<massiv$(middle) THEN

konec=middle

middle=middle\2

ELSE

IF a$>massiv$(middle) THEN

nachalo=middle

middle=(konec+nachalo)\2

END IF

END IF

LOOP WHILE a$<>massiv$(middle)

FOR i=0 TO 31

PRINT “ ”;massiv$(i)

NEXT i

PRINT

PRINT “Порядковый номер элемента”; middle+1

END

Программа келесідей жұмыс істейді:

32 ұяшықтан тұратын массив белгілейміз (ұяшықтар нөмірленуі 0-ден басталады). Масивті пернетақта кодировкасының мәндерімен толтырамыз, олар кез келген пернені басқанда пернетақтамен генерацияланады және нақты символға сәйкес келеді. Біздің жағдайымызда массивті ASCII кодироваксының 128-159 диапазонында орналасқан орыс алфавитінің бас әріптерімен толтыру керек.

Массивті толтырған соң, ізделінетін символды анықтап, оның мәнін a$ айнымалысына береміз. Массивтің қарастырылатын учаскесінің шекарасын береміз, басында бұл массивтің бірінші және ақырғы мәндері. Ортасын анықтаймыз.

Массивтен элементті іздеуді цикл арқылы орындаймыз. Цикл ізделінетін элемент=массивтің ағымдағы элементі шарты орындалғанша жүреді.

Аяғында массивті және ізделінген элементтің массивтегі реттік нөмірін экранға шығарамыз.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]