Массивтермен жұмыста көрсеткіштерді пайдалану


МАЗМҰНЫ

МАЗМҰНЫ . . . 2

  1. КІРІСПЕ . . . 3
  2. НЕГІЗГІ БӨЛІМ . . . 4Массивтермен жұмыста көрсеткіштерді пайдалану . . . 7Мәліметтер структурасын қолдану арқылы программалар құру . . . 8Есептің қойылымы . . . 10Есептің Си тілінде шығарылуы . . . 12Есептің түсіндірілуі. 13

III. ҚОРЫТЫНДЫ ……. . . . 17

ҚОЛДАНЫЛҒАН ӘДЕБИЕТТЕР ТІЗІМІ . . . 18

Кіріспе.

“Си тілінде программалаудың негіздері“ әдістемелік нұсқауы “Бағдарламалау технололиясы” курсы бойынша лабораториялық жұмыстарға арналып құрастырылған. Нұсқау аталған курс бойынша лаборатория жұмыстарының берілуін құрайтын екі бөлімнен тұрады. Нұсқауда келтірілген лабораториялық жұмыстарды толық түрде орындау қажет. Ол студенттің Си тілінде программалауда оның жабдықтарын қолдана білуге, білімін тереңдету мен жетілдіруге септігін тигізеді.

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

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

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

Массивтермен жұмыста көрсеткіштерді пайдалану.

Жұмыстың мақсаты . Массивтермен жұмыста көрсеткіштерді пайдалануға машықтану.

Көрсеткіш- басқа айнымалы адресін өзіне сақтайтын айнымалы.

Көрсеткіштер мен адрестер . Көрсеткіш объектінің адресін кұрайтын болғандықтан, бұл бізге осы обьектіге көрсеткіш арқылы жанама түрде қарым - қатынаста болуымызға мүмкіндік береді. Мысалға айталық х int типті айнымалы, ал рх әлдекім құрған көрсеткіш. & ұнарлы операциясы обьектінің адресін береді, яғни рх=&x нұсқауы px айнымалысына х адресін меншіктейді, рх х-ке сілтейді деп атайды. &oперациясы тек қана массив элементтері мен айнымалыларға қолданылады, ал келесідей конструкциялар &(x-1) немесе &3 заңды емес болып табылады. Сонымен қатар регистрлік айнымалылар адресін алуға болмайды.

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

TYPE <тип аты>=ARRAY [<индекс тип тізбегі>] of <тип>;

<тип аты> - дұрыс идентификатор.

<индекс тип тізбегі> - бір немесе бірнеше индекстік типтердің тізбегі, үтір арқылы жазылған.

<тип> - элементтер типі.

Си программалау тілінде массив бірдей типтегі айнымалылардың тізбегін бр бүтін етіп сақтай алады. Массивті хабарлау деп оның атауы мен элементтерінің типін анықтауды айтады. Ол сондай-ақ массивтегі элементтер санын да береді. Массив типіндегі айнымалы өрнектерде берілген спецификациядағы тип мәніне тұрақты ретінде қолданылуы мүмкін. Егер де сипатталатын массив типі көрсетілмесе, онда int типін қолдану ұсынылады.

Екі өлшемді массивті сипаттау синтаксисі келесі түрде болады:

[<сипатталатын массив типі>] <айнымалы - идентификатор> [<тұрақты өрнек>] [<тұрақты өрнек>] .

<айнымалы - идентификатордың> соңындағы квадратты жақшалар массив типінің белгісі болып саналады. Квадраттық жақшалардағы әр тұрақты өрнек берілген өлшеудегі массивтің элементтерінің санын анықтайды. Массивтің элементтерін индекстеу нөлден басталады. Сонымен, массивтің соңғы элементінің индексі массивтегі элементтер санынан 1-ге кем болады. Массивке ның элементтерін орналастыратын жады бөлінеді. Массивтің біріншісі элементінен соңғы элементіне дейін барлығы адрестерінің өсу реті бойынша тізбектелген жады ұяшықтарында орналасады. Жадыда массив элементтері арасында бос орындар жоқ.

Массивтерді сипаттағанда элементтердің типі және қажет болса компьютер жадысының класы көрсетіледі.

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

Унарлы операциясы өзінің операндасын соңғы бағыттағы адрес ретінде қарастырады және осы адрестен мәнін алуды көздейді. Бұдан мысалға у int типті айнымалы болса, онда рх айнымалысы сілтеп тұрған адрестің мәнін қабылдайды у=*px: Келесі екі нұсқаудың жұмысы.

Px=&x;

Y=*px;

Y=x; oперациясымен тең мағыналы. Алдымен айнымалыларды міндетті түрде сипаттау қажет болады.

Int x, y:

Int *px;

Көрсеткішті int *px сипаттамасын қарастырайық. Бұл жерде *рх айнымалысының типі int және көрсеткіш. Бұдан шығатыны, егер рх контекстіде * рх болса, онда ол int типті айнымалыға эквивалентті.

Айнымалыны сипаттау синтаксисі бұл айнымалының кездесуі мүмкін өрнектерді имитациялайды. Бұл ескертуді күрделі сипаттаулардың барлық жағдайында ескерген жөн. Мысалы, double atof(), *DF өрнегіндегі Atof () *DF айнымалыларының типтері бірдей екндігін көрсетеді.

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

8=*px + 1 Нұсқауында УХ -тен 1-ге артық мәнді меншіктейді. Printf(“% D\N”, * PX) өрнегінің ағымдағы мәнін басады.

d=sqrt ((double ) *px) өрнегі double X типіне айналдырып, X-тен квадрат түбір алады.

Y=*px+1 өрнегін қарастырайық, ондағы * және & унарлы операциялары арифметикалық операндаларымен салыстырғанда, өзінің операндасымен өте тығыз байланысты болады. Сондықтан, бұл өрнек рх сілтеп тұрған мәнді алып, ол мәнді бірге арттыра нәтижесін у-ке меншіктейді.

Көрсеткіштерді сол операнда етіп те пайдалануға болады. Егер *px=0 сілтеп тұрса, онда дегеніміз x=0, *px+=1 бірге арттырады, (*px) ++ өрнегі де соған сәйкес. Ақырғы өрнекте жақшалар міндетті түрде болуы тиіс. Егер оларды қоймаса, онда унарлы операциялар *, ++ оңнан солға орындалатындықтан, РХ бірге артады да, ол сілтеп тұрған айнымалы сол күйінде қалады.

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

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

Int a [10] өлшемі 10-ға тең бір өлшемді массмвті сипаттайды.

Егер ра бүтін мәнді көрсеткіш болып сипатталса, онда pa=&a[0] дегеніміз А массивінің 0-дік элементінде ра сілтейді. Бұл деген ра өзінде А элементінің адресін сақтайды деген сөз. Ал енді x=*pa мәнін Х өзіне көшіреді.

Массивтің анықталған бір элементіне көрсетсін делік, егер Pa+1 болса, онда ол келесі элементті көрсетеді. Керісінше Pa-1 бір позиция кем тұрған элементті көрсетеді, ал Pa+1 бір позиция кейін тұрған элементті көрсетеді.

Мысалға, Ра А-ны көрсетсін делік, онда * (pa+1) мәнін A көрсетеді. Ал көрсеткішке 1-ді қосудың және көрсеткішке басқа арифметикалық операциялардың таралуының мағынасы мынада. Көрсеткіш көрсетіп тұрған обьектінің өсуі жады көлемінің масштабталуына байланысты. Сондықтан, Pa+1 қосылар алдында 1 Ра көрсеткен обьекті көлеміне көбейтіледі.

Индекстеу мен көрсеткіш арифметикасы арасында өте жақын байланыс бар. Компилятор негізінде көрсеткішті массивтің басты элементіне сілтейді. Бұдан массив көрсеткішті болады. Яғни, көрсеткіш массив басына көрсететін болғандықтан былай жазуға болады: pa=a.

Екінші жағынан көрсеткішті индекс арқылы *(а+і) деп сипаттағанда, ол а(і) ге эквивалентті болатындығын көруге болады. Тек массив атауы мен көрсеткіш арасында айырмашылық бар. Көрсеткіш айнымалы, сондықтан ра=а және ра++орынды, ал массив атауы үшін а = ра және а++. P=&a oрынсыз, себебі массив атауы константа.

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

Strlen(s) /*return length of string s */

Char *s;

{ int n;

for ( n=0; *s!=’\0’; s++) n++;

return (n) ;

}

s++ өсу операциясы заңды, себебі айнымалысы көрсеткіш. STRLEN функциясын шақырғанда, символдық тізбекке қатысы болмайды. Функцияны сипаттағанда, формальді параметрлерді анықтау мынандай түрде болады.

Char s [] ;

Char*s;

Бұлар өзара тең мағыналы және ыңғайына қарап пайдалана аламыз.

Массивті бөліп жартысын функцияға беруге болады. Егер ішкі массив аргументі басын көрсеткіш ретінде алсақ.

Мысалға, а массив болсын, онда f(&a[2] ) және f(a+2) f функцияға a[2] элементінің адресін береді. Себебі, &a[2], a+2, 3-I а элементіне сілтелінген көрсеткішті өрнектер.

F Функциясына келсек, оның аргументтері тек қана үлкен массивтің бір бөлігіне көрсетеді және ол функцияға ешқандай әсері жоқ.

Көп өлшемді массивтер. Си тілінде тік бұрышты индексі көп өлшемді массивтер қолданылады. Тәжірибе жүзінде оларға қарағанда көрсеткішті массивті көп қолданады. Айлық күнді жылдық күнге және керісінше ауыстыру есебін қарастырайық.

Мысалға, 1-ші наурыз ауыр емес жылдың 60-шы күні, ал ауыр жылдың 61- ші күні.

Day of year aйлық күнді жылдық күнге айналдыратын функция.

Month day, kерісінше, ол функцияның аргументтері екі мәнді қайтарады. Айды және күнді көрсететін аргументтері көрсеткіш болуы міндетті:

Month day (1977, 60, &m, &d)

Айталық, m=3, d=1 - ге болсын (яғни 1-ші наурыз) .

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

Static int day _tab[2] [13] ={

(0. 31, 28, 31, 30, 31, 30, 31, 31, 3031, 30, 31) ;

(0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) };

day_ of_year(year, month, day) /*set day of year*/

int year, month, day; /*from month & day*/

{ int i, leap;

leap=year%4= = 0 &&year % 100 ! = 0\!\! year % 400= = 0;

for( i=1; i<month; i++)

day+= day_ tab[ leap] [i] ;

return (day) ;

{

month_ day (year, yearday, pmonth, pday)

/* set month, day*/

int year, yearday, *pmonth, *pmonth, *pday;

/* from day of year*/

{

leap=year%4= = 0 && year % 100! =0 \!\! year % 400 = = 0;

for (i=1; yearday -= dat_ tab [leap] [i] ;

*pmonth=I;

*pday=yearday;

day_ tab Біз кездестіріп отырған 1-ші өлшемді массив.

Си тілінде day_ tab[i] [g] болып жазылады, себебі әрбір жол бір өлшемді массив ретінде қарастырылады. Яғни элементтері, жолдар бойынша орналастырылады. Массивтің әрбір жолы жақшаға алынған және нөлден басталады. Себебі, айлардың табиғи белгіленуімен сәйкес болу үшін. Егер екі өлшемді массив функцияға берілсе, онда міндетті түрде сәйкес аргумент бағандар санымен сипатталуы қажет. Жолдар үшін маңызды емес. Себебі ол көрсеткішке беріледі. Біздің жағдайды қарастырсақ, өлшемі 13-ке тең int типті массив. Сондақтан day_tab массивін f функциясында шақырсақ, онда f түрі былай жазылады.

F(day_ tab)

Int day_ tab[2] [13] ;

{

….

}

Жолдар саны маңызды болмағандықтан аргументтің сипатталуы:

Int day_tab[] [13] ; Hемесе int (*day _ tab ) [13] ;

Бұл жерде аргумент өлшемі 13-ке тең массив көрсеткіш және () міндетті түрде, өйткені[] приоритеті жоғары.

Көрсеткіштер мен көп өлшемді массивтер.

Кейбір жағдайларда, Си тілін енді үйреніп жүргендер, екі өлшемді массивпен көрсеткіш массив арасындағы айырмашылықты байқамауы мүмкін.

Int a [10] [10] ;

Int *b [10] деп сипатталған а мен в бірдей деп ұйғарушы едік, a[5] [5] b [5] [5] деп алсақ, онда бір типті, бірақ әртүрлі мәнді меншіктейді деп есептер едік.

Бөлінген, әрбір элементіне индекстер арқылы байланыс орнатуға болатын нағыз массив. В массиві үшін тек қана 10 көрсеткіш бөлінеді, өз кезегінде әр бір көрсеткіш массиві көрсетіп тұрады. Олай болған жағдайда, жадыдан 100 ұяшық массивке оған қосымша 10 ұяшық көрсеткішке бөлінер еді. Бұл жадыдан үлкен орын қажет етеді және тиімді жүзеге асыру жолдарын тиянақты қарауды талап етеді. Бірақ екі басымдылығы бар. Көрсеткіш арқылы массив элементтерін оңай табуға болады және массив жолдары әр түрлі өлшемде болар еді. Яғни, В массивінің әр бір элементі өлшем 10-ға тең векторды көрсетіп тұруы шарт емес, біреуі екі өлшемді векторды, екіншісі он өлшемді векторды, енді біреуі мүлдем көрсетпеі мүмкін.

Мәліметтер структурасын қолдану арқылы программалар құру.

Жұмыстың мақсаты . Мәліметтер структурасымен жұмыс жасап машақтану.

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

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

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

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

Struct{. . }x, y, z cәйкесінше INT X, Z, Y,

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

Struct person {

Char name [namesize] ;

Char address [adrsize] ;

Long zipcode;

Long ss_ number;

Double salary;

Struct date birthdate; };

Struct date hiredate;

Person Мәліметтер структурасында date типті екі мәліметтер структурасы бар. Егер emp былай анықталса:

Struct person emp; Emp. birthdate. Туған айды анықтайды.

5. Есептің қойылымы. 6 есеп.

... жалғасы

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



Реферат Курстық жұмыс Диплом Материал Диссертация Практика Презентация Сабақ жоспары Мақал-мәтелдер 1‑10 бет 11‑20 бет 21‑30 бет 31‑60 бет 61+ бет Негізгі Бет саны Қосымша Іздеу Ештеңе табылмады :( Соңғы қаралған жұмыстар Қаралған жұмыстар табылмады Тапсырыс Антиплагиат Қаралған жұмыстар kz