№4 зертханалық жұмыс



жүктеу 84.4 Kb.
Дата09.06.2018
өлшемі84.4 Kb.

4 зертханалық жұмыс.

Тақырыбы: Си++ бағдарламалау тіліндегі сілемдер мен белгілер.

Жұмыстың мақсаты: Біршекті және екішекті сілемдердің жұмысының негізгі принциптерімен танысу. Белгілер мен операциялардың жұмысын білу.
1. Теориялық мәлімдеме.

1.1. Сілемдер.

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

Int a [100];

float c [10][20];

Бірінші жолда 100 элементтің ішінен бүтін типті сілемді анықтаймыз: а[0], a[1],…,a[99] (көрсеткіштеу нөлден басталады). Екінщі жолда нақты типтің екішекті сілемі анықталған. Екішекті сілем, элементтері де сілем болатын, біршекті сілем сияқты көрсетіледі. Бірінші төртбұрышты жақшада сілемдегі жол саны көрсетіледі, екіншісінде – бағана саны.

Мысал 1. Он нақты типтің элементінен тұратын біршекті S сілемі берілген. Экранға осы сілемнің элемент мағыналарын кері тізбекпен шығару.

#include

main()


{float s[10];

int i;


for (i=0;i<10;i++)

scanf(“%f”,&s[i]); /*сілем элементтерін кіргізу*/

for (i=9;i>=0;i--)

printf(“%f”,s[i]); /* элементтерді кері тізбекпен шығару*/

}
Мысал 2. Бес жол және бес бағанадан тұратын екішекті а матрица берілген. Осы жолда бірлік саны көп жолдың нөмірін анықтау.

#include

main()

{int i,j,p,q=0,f=0,a[5][5];



for (i=0;i<5;i++)

for (j=0;j<5;j++)

scanf(“%d”, &a[i][j]); /*матрицаны енгізу*/

/*а матрицасында ең үлкен бірлік саны бар жолды іздеу*/

for (i=0;i<5;i++)

{p=0;


for (j=0;j<5;j++)

if (f[i][j]==1) p++;

if (q

}

/*f – ең үлкен бірлік саны бар жолдың нөмірі; q – f-й жолының бірлік саны*/



printf(“%d %d”,f,q);

}
Мысал 3. Басты және жанама Д(6.6) сілемнің диагональ элементтерінің орындарын ауыстыру. Алынған матрицаны экранға шығару.

#include

main()


{int i,j,a,d[6][6];

for (i=0;i<6;i++)

for (j=0;j<6;j++)

scanf(“%d”, &d[i][j]); /*матрицаны енгізу*/

/*басты және жанама сілемнің диагональ элементтерінің орындарын ауыстыру*/

for (i=0; i<5; i++)

{a=d[i][i];

d[i][i]=d[i][6-i];

d[i][6-i]=a;

}

for (i=0; i<6; i++)



for (j=0; j<6; j++)

printf(“%d%c”, d[i][j], (j==5)?”\n”:” “);

/*матрица элементтерін жол арқылы шығару*/

}
Матрица элементтерін жол арқылы шығару үшін терпарлық операция ?: қолданылады. Бұл операцияның мағынасы келесі: егер j=5 (жол арқылы элементтерді шығару аяқталады), онда белгіше келесі жолдың басына ауысады (символдық константа «\n» жұмыс істейді), керісінше жағдайда бір ара – қашықтық шығарылады. Шығару операторында символдық константа қолданылса, онда %c спецификациясы қолданылған.

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

int a[5]= { 0, 0, 0, 0, 0};

Бұл сілем элементтері нөлдік белгі алады дегенді білдіреді. Екішекті сілемді келесідей инициализациялауға болады:

int a[3][3] = {{10,20,30},

{40,50,60},

{70,80,90}};


Инициализациялау кезінде элементтер санын көрсетпеуге болады, өйткені бұндай жағдайда ол меншіктелген белгілер саны арқылы (ирек жақшада) есептелуі мүмкін, мысалы:

int a[ ] = {10,20,30,40,50};



1.2. Белгілер

1.2.1. Белгілер мен біршекті сілемдер.

Белгілер – айнымалының мекен – жайын сақтайтын айнымалы. Белгі – бірнеше объектің мекен – жайы болғандықтан, ол арқылы берілген объектіге хабарлауға болады.

Си++ бағдарламасында белгілер мен сілемдер арасында тығыз байланыс бар. Кез – келген сілем элементі белгісінің көмегімен орындалуы мүмкін.

Декларация

int a[10];

өлшемі 10 болатын а сілемін анықтайды, яғни мына аттармен a[0], a[1], … ,a[9] суретте көрсетілген он тізбектелген объектің блогы.
a
[i] бізді і сілем элементіне жібереді. Егер Ра белгі болса, яғни int *pa арқылы анықталса, онда қорытындыда меншіктеу pa = &a[0] болады;

Ра нөлдік а сілем элементіне бағытталады немесе ра а[0] элементінің мекен- жайын сақтайды (сур.қара)

Енді меншіктеу x=*pa;

Х ішіндегі а[0]- ді көптейді.

Егер ра бірнеше сілем элементіне бағытталса, онда ра+1 анықталуы бойынша келесі элементке бағытталады (сур.қара). Сондықтан, егер ра а[0]- ге бағытталса, онда *(ра+1) а[1]- ның сақтаушысы болады, ра+1 – мекен- жайы а[1]; *(ра+1)- сақтаушы а[i].

Сілем аты оның бастапқы элементінің мекен жайы болғандықтан, меншіктеу pa=&a[0];

Мына түрде де жазуға болады ра=а;

Ра – белгі болғандықтан, оны көрсеткішпен қолдануға болады, бұл деген ра [1] жазуы *(ра+і) жазуына эквивалентті. Сілем элементін біркелкі қысқан белгі түрінде және көрсеткішпен жазылған сілем аты түрінде жазуға болады.

Сілеме мен белгі арасында бір айырмашылық бар. Белгі – бұл айнымалы, сондықтан ра=а немесе ра++ деп жазуға болады. Бірақ сілем аты айнымалы емес, сондықтан а=ра деп жазылмайды.

Мына түрлерді ажырата білу керек *(а+2) және *а+2:

*(а+2)-а сілемнің үшінші элементі;

*а+2 – 2 санын бірінші сілем элементіне қосу.


Мысал 4. Біршекті сілемнің мағынасын қарапайым түрмен және белгі арқылы шығару.

#include

int a[6]={10,20,30,40,50,60};

/*сілемнің анықталуы мен инициализациялануы*/

main ()

{int i, *p;



for (i=0; i<6; i++)

printf(“%d”,a[i]); /*қарапайым түрмен сілемнің шығарылуы*/

for (p=&a[0];p<=&a[5];p++)

printf(“%d”,*p); /*белгіні қолдану арқылы сілемнің шығарылуы*/

for (p=&a[0],i=0; i<6; i++)

printf(“%d”,p[i]); /*белгі қоланудың тағы бір нұсқасы*/

}

Тағы бір анықтаулар берейік. Р++ операциясы белгі мағынасын бірлікке арттырады. Егер p=&a[i], онда р++ операциясынан кейін р-да а[і+1] элементінің мекен – жайы сақталады.


Мысал 5. Белгіні пайдаланып, 6 элементтен тұратын арифметикалық сілемнің орта мағынасын табу;

#include

int a[]={10,20,30,40,50,60}

main()

{int i,*p;



float s;

p=a; /*белгі нөлдік сілемнің элемент адресінің мағынасын алады*/

for (s=0,i=0; i<6; i++)

s+=*(p+i); /*сілем элементінің қосындысын алу*/

s=s/6; /*сілемнің орта арифметикалық мағынасы*/

printf(“%f”,s);

}
Мысал 6. Белгіні пайдаланып, 1- мысалдағы есепті шығару.

#include

main()

{float s[10];



int *p,i;

for (i=0;i<10;i++)

scanf(“%f”,s[i]);

p=&s[9]; /*белгі сілемнің элемент мекен – жайының ақырғы мағынасын алады*/

for (i=0; i<10; i++)

printf(“%f”,*(p-i)); /*элементтерді кері тізбекпен шығару*/

for (p=&a[9]; p>=&a[0]; p--) /*элементтерді кері тізбекпен шығарудың тағы бір нұсқасы*/

printf(“/n%d”,*p);

}

1.2.2. Белгілер мен екішекті сілемелер.

Бізде сыпаттау бар деп ойлайық.

int z[4][2]; /**/

int pz; /**/

Онда pz=z нөлдік жолдың нөлдік бағанасына бағыттайды, яғни pz=&z[0][0];
Мысал 7. Экранға нөлінші, екінші және төртінші сілем элементінің мағынасын шығару.

#include

int a[]=(10,20,30,40,50,60); /*а сілемінің инициализациялауы мен хабарлануы*/

main()


{

for (p=a,i=0; p+i<=a+4; p++, i++)

printf(“%d”; (p+i)); /*Экранға нөлінші, екінші және төртінші элементтің мағынасын шығару */

}
Циклда бір уақытта р белгі және і көрсеткіші бңрлңкке артады. Соның арқасында экранға нөлінші элементтен кейін екінші, содан кейін төртінші элемент шығады. Екішекті сілемнің элементтері ЭВМ-де жолдар бойынша сақталатындықтан,

pz+1 = &z[0][1], pz+2 = &z[1][0], pz+3 = &z[1][1] және т.б болады.

Екішекті сілем сілемдердің сілемі сияқты бейнеленеді. Егер Z сілем аты болса, онда әрбір екі элементтің сілемі бар басқа 4 жолдың аты қалай?

Бірінші жолдың аты Z[0], екіншісінікі – Z[1] т.б. Бірақ сілем аты осы сілмге белгі болады, өйткені ол оның бірінші элементіне келеді.

Сондықтан:

z[0]=&z[0][0], z[1]=&z[1][0], z[2]=&z[2][0], z[3]=&z[3][0].
Мысал 8. а матрицасы берілген. Экранға белгілерді қолдана отырып, басты диагональдің, бірініші жолдың жіне матрицаның әрбір жолының бірінші элементтерінің мәнін шығару.

#include

int a[3][3]={{10,20,30},

{40,50,60},

{70,80,90}};

/*екішекті сілемді инициализациялау және хабарлау*/

int *pa[3]={a[0],a[1],a[2]};

/*а сілемінің жолына ра белгінің хабарлануы мен инициализациялауы және алғашқы мәндердің меншіктенуі: pa[0]=a[0]; pa[1]=a[1]; pa[2]=a[2]*/

int p=a[0]; /* белгіні а сілемінің нөлдік жолының нөлдік элементіне хабарлау */

main ()


{int i;

for (i=0;i<9;i+=4)

printf(“%d”,*(p+i)); /*Экранға басты диагональдарының элементтерін шығару*/

for (i=0; i<3; i++)

printf(“%d”,*p[i]); /*бірініш жолдың элементтерін экранға шығару*/

for (i=0; i<3; i++)

printf(“%d”,pa[i]); /*әрбір матрица жолының бірінші элементтерін экранға шығару*/

}
Бірінші цикл опертаорына сипаттама берейік. Матрицаны жол арқылы жазылған біршекті сілем ретінде қарастырайық.

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

2. Тапсырма.

Кестеден сәйкес нұсқаны ал. Бағдарламалаудың екі нұсқасын жазу керек: белгі қолдану арқылы және белгісіз.




Нұсқа №

Тапсырма



Берілген квадраттық А(5,5) матрицасының басты диагоналі симметриялы екенін анықтау.



В(4,4) матрицасы берілген. Бірінші бағананың барлық элементтері өсу ретімен орналасқанын анықтау.



С(5,5) матрицасы берілген. Әрбір жолдың максималды элементін орындарымен ауыстыру.



В сілемінде 10-нан артық болатын D(3,3) матрицасының әрбір жолының бірінші элементін көшіріп алу.



Q(5,5) матрицасы берілген. Әрбір жолдағы ақырғы нөлді 5-ке ауыстыру.



D(4,4) матрицасы берілген.қанағаттандыратындардың ішінен максималды, қанағаттандырмайтындардың ішінен минималды мәнін анықтау және оларды орындарымен ауыстыру.



А(4,4) матрицасы берілген.Әрбір бағанадағы бірніші нөлді осы бағанадағы нөлдер санына ауыстыру.



F(9,3) матрицасы берілген. Бірінші бағанадағы барлық элементтер басты диагональдің элементтеріне тепе – тең екенін анықтау.егер жоқ болса, оларды орындарымен ауыстыру.



C(5,5) матрицасы берілген. Матрица бағанасында тұрған әрбір элементі нөлдер санына тең В векторын алу.



В(4,4) матрицасы берілген. Егер жолда бір бірлік болса да, ол жолды нөлдермен ауыстыру.



Q(3,3) матрицасы берілген.егер басты диагональда нөл тұрса, онда керек жолды бірліктермен ауыстыру.



D(4,4) матрицасы берілген. Егер матрицаның максималды элементі басты диагональда тұрса, онда басты диагональдың барлық элементтерін максималды мәнге теңестіру.



С(5,5) матрицасы берілген. Егер минималды элемент бірінші жолда тұрса, онда одан кейін орналасқан барлық элементтерді нөлмен ауыстыру.



А(4,4) матрицасы берілген. Егер матрицаның максималды элементі бірінші жолдың элементтерінің қосындысына тең болса, онда бірінші жолды максималды элемент орналасқан жолмен ауыстыру.



А(4,4) матрицасы берілген. Егер матрицаның максималды элементі бірінші жолдың элементтер қосындысына тең болса, онда бірінші жолды максималды элемент орналасқан жолмен ауыстыру.

Литература.



  1. Подбельский В.В. Язык Cu ++ : Учебное пособие. - М.: Финансы и статистика,1995, - 560 с.

  2. Страуструп Б. Язык программирования Сг ++. - М.: Радио и связь, 1991. - 352 стр.

  3. Собоцинский В.В. Практический курс Turbo Cu ++. Основы объктно- ориентированного программирования. - М.: Свет, 1993. - 236 с.

  4. Романов В.Ю. Программирование на языке Cu ++. Практический подход. - М.: Компьтер, 1993. - 160 с.

  5. Уинер Р. Язык турбо Cu . - М.: Мир, 1991. - 384 с.

  6. Юлин В.А., Булатова И.Р. Приглашение к Cu. - Мн.: Высш. Шк., 1990,- 224 с.

  7. Котлинская Г.П., Галиновский О.И. Программирование на языке Cu. -Мн.: Высш. Шк., 1991. - 156 с.

Каталог: arm -> upload -> umk
umk -> Жұмыс бағдарламасы қазақстан тарихының тарихнамасы пәні бойынша 050203-Тарих мамандығының студенттеріне арналған
umk -> Программа дисциплины Форма для студентов ф со пгу 18. 2/07
umk -> Жұмыс бағдарламасы шет елдер тарихының тарихнамасы пәні бойынша 050203-Тарих мамандығының студенттеріне арналған Павлодар
umk -> АќША, несие, банктер
umk -> Жұмыс оқу бағдарламасының титулдық парағы
umk -> Web-технологияныњ ±ѓымдары
umk -> Программа дисциплины для студентов
umk -> Ф со пгу 18. 2/05 Қазақстан Республикасының Білім және ғылым министрлігі
umk -> Јдістемелік нўсќаулыќ


Достарыңызбен бөлісу:


©kzref.org 2019
әкімшілігінің қараңыз

    Басты бет