Лаборатори №7
Даалгавар:
№
Даалгавар
Оноо
1
strlen(), strchr()функцүүдийг судлах
2
Өгөгдсөн тоон дараалалд 0 тэнцүү тоо хэд байгааг тоол
0.5
3
Өгөгдсөн үгэнд өгөгдсөн тэмдэгт хэд орсонг тоол
0.5
4
A[n][n] эсрэг диогналын элементүүдийг хэвлэ
0.5
5
A[n] массивын элементүүдийн дундаж утгыг ол.
0.5
Жич: 3бодлого сонгож бодоорой
1.
ОНОЛЫН ХЭСЭГ
Массив
Нэг ижил төрөлтэй элементүүдийг индекслэн нэг цогц болгохыг массив гэнэ. Массивийн зарлалтуудыг доор үзүүлэе.
Бичигдэх хэлбэр:
<төрөл> <хувьсагчийн нэр>[<индекс>];
<төрөл> <хувьсагчийн нэр>[<индекс1>][<индекс2>];
<төрөл> -массивийг төлөөлөх хувьсагчийн төрөл буюу өөрөөр хэлбэл массивын элементүүдийн төрөл байна.
<хувьсагчийн нэр>- массивийн нэр байна.
<индекс>-массивт байж болох элементийн тоо (1 хэмжээст)
<индекс1><индекс2>-2 хэмжээст массивыэ мөр багана дугаар болно.
Жишээ:
int mass[10]; //1 хэмжээст mass нэртэй бүхэл тоон массив
float mass[4][4]; //2 хэмжээст mass нэртэй бүхэл тоон массив
Жишээ:
int i_mass[ ]={1,2,3,4,5}; //Массивын хэмжээг 5 гэж авна.
/*массивыг хэмжээ 4 байна*/
double d_mass2[4]={2.1, 4.5, 8.3, 1.6};
float f_mass[3]={{1.1, 1.2, 1.3}, {2.1, 2.2, 2.3}, {3.1, 3.2, 3.3}};
/*массивыг хэмжээ 3, 4 юм*/
int mass[][4]={{1, 2, 3, 4}, {5, 6, 7, 8}, {1, 2, 3, 4}};
Дээрх жишээний хувьд mass нь дараах байдалтай болно.
mas00=1 mas01=2 mas02=3 mas03=4
mas10=5 mas11=6 mas12=7 mas13=8
mas20=1 mas21=2 mas22=3 mas23=4
массивын хэмжээг тодорхойлж өгөхгүйгээр утга олгосон үед хэдэн утга оноосон байна түүний тоогоор массивын элементийн хэмжээг зарласан гэж үзнэ. Үүнийг дээр өгсөн жишээнээс харж болно.
Массивыг зарлах үед түүнийг санах ойн тодорхой заагдсан зайд байрлуулдаггүй ба динамик санах ойн хэрэглэгдээгүй чөлөөтэй хэсгийн хаягийг нэрээр нь заалгана. Иймд массивын нэр нь массивын эхний элементийг зааж байгаа хаяг байдаг. Өөрөөр хэлбэл 1 хэмжээст массивын нэр нь массивын 0-р элементийн заагч, 2 хэмжээст массивын нэр нь [0][0] –р элементийн заагч болно.
Тэмдэгтэн массив зарлах нь тоон тогтмолон массив зарласантай адил байна.
Жишээ: char a_char[]={‘a’, ‘b’, ‘c’, ‘d’ };
char a_char 1[4][3]= {‘b’, ‘i’, ‘g’ }, {‘b’, ‘a’, ‘d’},
{‘b’, ‘u’, ‘t’}, {‘b’, ‘e’, ‘g’};
char a_char 2[4][3]= {‘abc’, ‘def’, ‘abc’, ‘asd’ }; гэх мэт.
Тэмдэгтэн массивыг тэмдэгтэн мөр гэж ойлгож болно. Харин a_char1 массив ‘abcd’ гэмэн тэмдэгтэн мөр болно. Харин char 1 массив маань ‘big’, ‘bad’, ‘but’, ‘beg’ гэсэн үгнүүдийг агуулж байна. Тэмдэгтэн массивын хойно тэмдэгтэн мөрийн төгсгөлийн тэмдэг автоматаар тавигдана.
Заагч ба хаяг
Заагч гэдэг бол объектийг заах хувьсагч. Заагч төрлийн хувьсагчийг зарлахдаа өмнө нь (*) од тавина. Жишээ нь: int *a, *i ; гэх мэт. &-үүний тусламжтай операндын хаяг өгөгдөнө.
(*)-Үүний тусламжтайгаар тухайн хаяг дээрх өгөгдлийг авч болно. Энэ үед операнд нь заагч төрөлтэй байх ёстой.
Жишээ нь: int y; int p*=8;
Энэ үед y=*p утга оноох үйлдэл нь y хувьсагчид p заагчийн зааж байгаа санах ойн үүрийн утгыг авна. Үйлдлийн үр дүн нь операндын зааж байгаа утга болно. Заанчийн төрөл нь тэр заагчаар заалгаж байгаа төрөл болно.
“&” тэмдээр хувьсагчийн хаягийг авна. Тэгвэл p=&y
үйлдэл нь y-ийн хаягийг p-д олгоно. Харин &(y+1) эсвэл &3 үйлдлүүд байж болохгүй. Мөн 2 заагчийг нэмэх, үржүүлэх, хуваах зэрэг үйлдлүүд хийгддэггүй. Заагч нь нэгээр нэмэгдүүлэх (++)8 нэгээр
хорогдууулах (--), хэмэх (+), хасах (-) үйлдэлд ашиглагдана. Заагч нь нэгээр нэмэгдэж байгаа тохиолдолд заагч нь объектын хэмжээгээр хорогддог. Жишээ нь: int *count_point=4; count_point++; *count_point=19;
Дээрх жишээний хувьд cont_point заагч нь заагч байдлаар өөрчлөгдөнө.
Эхлээд Төгсгөлд
count_ count_point
4
4
Массив ба заагч
Заагчийн операнд нь массивын индентификатор байж болно.
Заагчийн заагч
Заагчийн хаягийг заах үйлдлийг заагчийн заагч гэнэ. Үүнийг заагчид хамаарах массив ба мөр тэмдэгтийн хувьд хэрэглэхэд тохиромжтой. Доорх жишээнүүдийг хар.
2.
ЖИШЭЭ ПРОГРАММ
/*Массивт санамсаргүйгээр 0-5 хүртэлх утгуудыг оруулж хэвлэх программ*/
#include
#include
#include
main()
{ /*Массив ба хувьсагч зарлах хэсэг.*/
int i,j,N=4,i_mas1[10],i_mas2[10][10];
clrscr();
printf("i_mas2\t i_mas1\n\n");
for(i=0;i
#include
#include
main()
{ /* 20-н тэмдэгт агуулах тэмдэгтэн массив зарлах хэсэг*/
char input_word[20];
/* Зуун тэмдэгт агуулж болох тэмдэгтэн массив зарлах */
char old_sentence[100];
/* Массивийн индексүүдийг зарласан байдал */
int cmp_symbol, j=0, I; clrscr();
/* Гараас өгөгдөх үг*/
printf(“Input word sentence”); gets(old_sentence);
/* Гараас өгөгдөх үг*/
printf(“Input word=”); gets(input_word);
I=0, cmp_symbol=0;
while(old_sentence[i]!=’\0’)
/* Өгөгдсөн өгүүлбэрийг төгсгөл мөн эсэх*/
{
/*Өгөгдсөн өгүүлбэрийн үг бүрийн таслал авч байгаа хэсэг*/
if((old_sentence[i]= =’’|| old_sentence[i]= =’.’||
old_sentence[i]= =’,’|| old_sentence[i+1]= =’\0’||
input_word [i]= =’ ’|| input_word [i]= =’.’||
input_word [i]= =’,’))
{
if(!cmp_symbol&&j!=0) printf(“This sentence has<%s>\n,input_word);
/* Өгөгдсөн үг байвал хэвлээд тоолуур болон индексыг 0 болгоно.*/
cmp_symbol=0, j=-1;
}
Else /* үсгүүд нь ялгаатай бол cmp_symbol хувьсагчийн утга нэмэгдэнэ.*/
If(old_sentence[i]!=input_word[j]) cmp_symbol++;
i++; j++ //индексүүдийг нэмэгдүүлнэ.
}
getch();
}
Дэлгэцэнд:
Input your sentence. // Гараас өгүүлбэр оруул. Жишээ: “this is.”
Input word = // Гараас үгээ оруул. Жишээ нь: is
This sentence has
Жишээ программ:
#include
#include
#include
main()
{ int *a;int x;
//Хувьсагч а нь бүхэл тоон заагч, х нь бүхэл тоон хувьсагч
clrscr();
*a=2; printf("%i",*a);= //а заагчийн утгыг 2 болгох
/*а заагчийн хаягийг 1-ээр нэмэгдүүлж утгыг нь 5 болгох*/
a++; *a=5;
/*а заагчийн хаягийг 1-ээр хорогдуулж утгыг нь хэвлэх*/
printf("%i", *(--a));
/*а заагчийн хаягийг 1-ээр нэмэгдүүлээд, утгыг нь 6 болгох*/
a++; *a=6;
x=*a; printf("%i",x); //а заагчийн утгыг х хувьсагчид олгох
getch();
}
Дэлгэцэнд:
2 2 6 //Дэлгэцэнд гарах үр дүн
Жишээ программ:
#include
#include
#include
main()
{ int *pa, x, a=4, *d; //Заагч болон хувьсагчуудыг зарлах хэсэг
clrscr(); pa=&a; //а хувьсагчийн хаягийг pa заагчид олгож байна.
x=*pa; //pa заагчийн зааж байгаа утгыг х хувьсагчид олгох
if(x= =*&x) printf("True");
else
printf("False");
d=&x;
/*Заагчийн утгыг хэвлэх*/
printf("\nAddress=%u\tAddress++=%u", d,d+1);
getch();
}
Дэлгэцэнд:
True
/*int төрөл 2 байт учир d+1 –н хаяг нь мөн 2 байтаар хэмэгдэнэ.*/
Address=65524 Address+1=65526
Жишээ программ:
/*Заагч ашиглан a[6] массивын элементүүдийг хэвлэх*/
#include
#include
#include
a
main()
{
int a[]={1, 3, 3, 4, 9, 6};
int *p; //р-бүрэл тоон заагч
1
3
3
4
int n=6,i;
clrscr();
p=a; //р нь хаяг авна.
for(i=0;i
#include
#include
void main()
{
int a[3][3]={{1, 3, 3},{3, 35, 6},{1, 2, 3}};
int *p; int n=3, i;
clrscr();
p=a[0]; //*p нь массивын эхний мөрийг заана.
for(i=0;i
/*Массивын эхний мөрийн элементүүдийг хэвлэх хэсэг*/
printf("%i", *p++);
getch();
}
3 a[3][3] 1 3 3 4 35 6 a[0] p 1 2 3
Даалгавар:
№
Даалгавар
Оноо
1
strlen(), strchr()функцүүдийг судлах
2
Өгөгдсөн тоон дараалалд 0 тэнцүү тоо хэд байгааг тоол
0.5
3
Өгөгдсөн үгэнд өгөгдсөн тэмдэгт хэд орсонг тоол
0.5
4
A[n][n] эсрэг диогналын элементүүдийг хэвлэ
0.5
5
A[n] массивын элементүүдийн дундаж утгыг ол.
0.5
Жич: 3бодлого сонгож бодоорой
1.
ОНОЛЫН ХЭСЭГ
Массив
Нэг ижил төрөлтэй элементүүдийг индекслэн нэг цогц болгохыг массив гэнэ. Массивийн зарлалтуудыг доор үзүүлэе.
Бичигдэх хэлбэр:
<төрөл> <хувьсагчийн нэр>[<индекс>];
<төрөл> <хувьсагчийн нэр>[<индекс1>][<индекс2>];
<төрөл> -массивийг төлөөлөх хувьсагчийн төрөл буюу өөрөөр хэлбэл массивын элементүүдийн төрөл байна.
<хувьсагчийн нэр>- массивийн нэр байна.
<индекс>-массивт байж болох элементийн тоо (1 хэмжээст)
<индекс1><индекс2>-2 хэмжээст массивыэ мөр багана дугаар болно.
Жишээ:
int mass[10]; //1 хэмжээст mass нэртэй бүхэл тоон массив
float mass[4][4]; //2 хэмжээст mass нэртэй бүхэл тоон массив
Жишээ:
int i_mass[ ]={1,2,3,4,5}; //Массивын хэмжээг 5 гэж авна.
/*массивыг хэмжээ 4 байна*/
double d_mass2[4]={2.1, 4.5, 8.3, 1.6};
float f_mass[3]={{1.1, 1.2, 1.3}, {2.1, 2.2, 2.3}, {3.1, 3.2, 3.3}};
/*массивыг хэмжээ 3, 4 юм*/
int mass[][4]={{1, 2, 3, 4}, {5, 6, 7, 8}, {1, 2, 3, 4}};
Дээрх жишээний хувьд mass нь дараах байдалтай болно.
mas00=1 mas01=2 mas02=3 mas03=4
mas10=5 mas11=6 mas12=7 mas13=8
mas20=1 mas21=2 mas22=3 mas23=4
массивын хэмжээг тодорхойлж өгөхгүйгээр утга олгосон үед хэдэн утга оноосон байна түүний тоогоор массивын элементийн хэмжээг зарласан гэж үзнэ. Үүнийг дээр өгсөн жишээнээс харж болно.
Массивыг зарлах үед түүнийг санах ойн тодорхой заагдсан зайд байрлуулдаггүй ба динамик санах ойн хэрэглэгдээгүй чөлөөтэй хэсгийн хаягийг нэрээр нь заалгана. Иймд массивын нэр нь массивын эхний элементийг зааж байгаа хаяг байдаг. Өөрөөр хэлбэл 1 хэмжээст массивын нэр нь массивын 0-р элементийн заагч, 2 хэмжээст массивын нэр нь [0][0] –р элементийн заагч болно.
Тэмдэгтэн массив зарлах нь тоон тогтмолон массив зарласантай адил байна.
Жишээ: char a_char[]={‘a’, ‘b’, ‘c’, ‘d’ };
char a_char 1[4][3]= {‘b’, ‘i’, ‘g’ }, {‘b’, ‘a’, ‘d’},
{‘b’, ‘u’, ‘t’}, {‘b’, ‘e’, ‘g’};
char a_char 2[4][3]= {‘abc’, ‘def’, ‘abc’, ‘asd’ }; гэх мэт.
Тэмдэгтэн массивыг тэмдэгтэн мөр гэж ойлгож болно. Харин a_char1 массив ‘abcd’ гэмэн тэмдэгтэн мөр болно. Харин char 1 массив маань ‘big’, ‘bad’, ‘but’, ‘beg’ гэсэн үгнүүдийг агуулж байна. Тэмдэгтэн массивын хойно тэмдэгтэн мөрийн төгсгөлийн тэмдэг автоматаар тавигдана.
Заагч ба хаяг
Заагч гэдэг бол объектийг заах хувьсагч. Заагч төрлийн хувьсагчийг зарлахдаа өмнө нь (*) од тавина. Жишээ нь: int *a, *i ; гэх мэт. &-үүний тусламжтай операндын хаяг өгөгдөнө.
(*)-Үүний тусламжтайгаар тухайн хаяг дээрх өгөгдлийг авч болно. Энэ үед операнд нь заагч төрөлтэй байх ёстой.
Жишээ нь: int y; int p*=8;
Энэ үед y=*p утга оноох үйлдэл нь y хувьсагчид p заагчийн зааж байгаа санах ойн үүрийн утгыг авна. Үйлдлийн үр дүн нь операндын зааж байгаа утга болно. Заанчийн төрөл нь тэр заагчаар заалгаж байгаа төрөл болно.
“&” тэмдээр хувьсагчийн хаягийг авна. Тэгвэл p=&y
үйлдэл нь y-ийн хаягийг p-д олгоно. Харин &(y+1) эсвэл &3 үйлдлүүд байж болохгүй. Мөн 2 заагчийг нэмэх, үржүүлэх, хуваах зэрэг үйлдлүүд хийгддэггүй. Заагч нь нэгээр нэмэгдүүлэх (++)8 нэгээр
хорогдууулах (--), хэмэх (+), хасах (-) үйлдэлд ашиглагдана. Заагч нь нэгээр нэмэгдэж байгаа тохиолдолд заагч нь объектын хэмжээгээр хорогддог. Жишээ нь: int *count_point=4; count_point++; *count_point=19;
Дээрх жишээний хувьд cont_point заагч нь заагч байдлаар өөрчлөгдөнө.
Эхлээд Төгсгөлд
count_ count_point
4
4
Массив ба заагч
Заагчийн операнд нь массивын индентификатор байж болно.
Заагчийн заагч
Заагчийн хаягийг заах үйлдлийг заагчийн заагч гэнэ. Үүнийг заагчид хамаарах массив ба мөр тэмдэгтийн хувьд хэрэглэхэд тохиромжтой. Доорх жишээнүүдийг хар.
2.
ЖИШЭЭ ПРОГРАММ
/*Массивт санамсаргүйгээр 0-5 хүртэлх утгуудыг оруулж хэвлэх программ*/
#include
#include
#include
main()
{ /*Массив ба хувьсагч зарлах хэсэг.*/
int i,j,N=4,i_mas1[10],i_mas2[10][10];
clrscr();
printf("i_mas2\t i_mas1\n\n");
for(i=0;i
#include
#include
main()
{ /* 20-н тэмдэгт агуулах тэмдэгтэн массив зарлах хэсэг*/
char input_word[20];
/* Зуун тэмдэгт агуулж болох тэмдэгтэн массив зарлах */
char old_sentence[100];
/* Массивийн индексүүдийг зарласан байдал */
int cmp_symbol, j=0, I; clrscr();
/* Гараас өгөгдөх үг*/
printf(“Input word sentence”); gets(old_sentence);
/* Гараас өгөгдөх үг*/
printf(“Input word=”); gets(input_word);
I=0, cmp_symbol=0;
while(old_sentence[i]!=’\0’)
/* Өгөгдсөн өгүүлбэрийг төгсгөл мөн эсэх*/
{
/*Өгөгдсөн өгүүлбэрийн үг бүрийн таслал авч байгаа хэсэг*/
if((old_sentence[i]= =’’|| old_sentence[i]= =’.’||
old_sentence[i]= =’,’|| old_sentence[i+1]= =’\0’||
input_word [i]= =’ ’|| input_word [i]= =’.’||
input_word [i]= =’,’))
{
if(!cmp_symbol&&j!=0) printf(“This sentence has<%s>\n,input_word);
/* Өгөгдсөн үг байвал хэвлээд тоолуур болон индексыг 0 болгоно.*/
cmp_symbol=0, j=-1;
}
Else /* үсгүүд нь ялгаатай бол cmp_symbol хувьсагчийн утга нэмэгдэнэ.*/
If(old_sentence[i]!=input_word[j]) cmp_symbol++;
i++; j++ //индексүүдийг нэмэгдүүлнэ.
}
getch();
}
Дэлгэцэнд:
Input your sentence. // Гараас өгүүлбэр оруул. Жишээ: “this is.”
Input word = // Гараас үгээ оруул. Жишээ нь: is
This sentence has
Жишээ программ:
#include
#include
#include
main()
{ int *a;int x;
//Хувьсагч а нь бүхэл тоон заагч, х нь бүхэл тоон хувьсагч
clrscr();
*a=2; printf("%i",*a);= //а заагчийн утгыг 2 болгох
/*а заагчийн хаягийг 1-ээр нэмэгдүүлж утгыг нь 5 болгох*/
a++; *a=5;
/*а заагчийн хаягийг 1-ээр хорогдуулж утгыг нь хэвлэх*/
printf("%i", *(--a));
/*а заагчийн хаягийг 1-ээр нэмэгдүүлээд, утгыг нь 6 болгох*/
a++; *a=6;
x=*a; printf("%i",x); //а заагчийн утгыг х хувьсагчид олгох
getch();
}
Дэлгэцэнд:
2 2 6 //Дэлгэцэнд гарах үр дүн
Жишээ программ:
#include
#include
#include
main()
{ int *pa, x, a=4, *d; //Заагч болон хувьсагчуудыг зарлах хэсэг
clrscr(); pa=&a; //а хувьсагчийн хаягийг pa заагчид олгож байна.
x=*pa; //pa заагчийн зааж байгаа утгыг х хувьсагчид олгох
if(x= =*&x) printf("True");
else
printf("False");
d=&x;
/*Заагчийн утгыг хэвлэх*/
printf("\nAddress=%u\tAddress++=%u", d,d+1);
getch();
}
Дэлгэцэнд:
True
/*int төрөл 2 байт учир d+1 –н хаяг нь мөн 2 байтаар хэмэгдэнэ.*/
Address=65524 Address+1=65526
Жишээ программ:
/*Заагч ашиглан a[6] массивын элементүүдийг хэвлэх*/
#include
#include
#include
a
main()
{
int a[]={1, 3, 3, 4, 9, 6};
int *p; //р-бүрэл тоон заагч
1
3
3
4
int n=6,i;
clrscr();
p=a; //р нь хаяг авна.
for(i=0;i
#include
#include
void main()
{
int a[3][3]={{1, 3, 3},{3, 35, 6},{1, 2, 3}};
int *p; int n=3, i;
clrscr();
p=a[0]; //*p нь массивын эхний мөрийг заана.
for(i=0;i
/*Массивын эхний мөрийн элементүүдийг хэвлэх хэсэг*/
printf("%i", *p++);
getch();
}
3 a[3][3] 1 3 3 4 35 6 a[0] p 1 2 3
