(2 сағат)
-
Массив. Масссив синт аксисі
-
Көп өлшемді массивтерге мысалдар
Пайдаланылатын әдебиеттер:
а) негізгі
а) негізгі
1. К.Паппас, У.Мюррей “Программирование на С и С++”, Киев, 2000
2. А.Кетков, Ю.Кетков “Практика программирования Бейсик,
Си, Паскаль”, М.: 2001
б) қосымша
3. Шилдт Г. “Теория и практика С++”, Санкт-Петербург, 1996
4. Березин Б.И., Березин С.Б. “Начальный курс С и С++”, М.:1999
1. Массив. Массив синт аксисі
Си тілінде массив, бұл бір типтік элементтер жиыны (тізбегі) есептеледі. Программада массивты анықтау үшін мынадай синтаксис істетіледі:
int Array[10]; // 10 бүтін саннан тұратын массив
double D_array[1000]; // 1000 нақты саннан тұратын массив
char Buffer[80]; // 80 байттан тұратын массив
Массивтың жеке бір элементін істету үшін индекс түсінігі яғни массив элементінің номері анықталған. Мұнда N элементті массивтың индексі 0 ден N – 1 дейін өзгереді .
Мысал үшін
int Arr[3];
көріністегі массив
Arr[0], Arr[1], Arr[2] элементтерден құрылған.
Берілген бүтін сандар тізбегінің орта мәнін анықтайтын программаға мысал келтіреміз.
Мысал
#include
#include
int main()
{
int Arr[10];
int i,m;
for (i=0; i<10; i++)
{
scanf("%d", &Arr[i]);
}
m=0;
for (i=0; i<10; i++)
{
m+=Arr[i];
}
printf("Result = %10.5lf", (double)m / 10.0);
getch();
return 0;
}
Бұл мысалда массив элементтерінің саны 10 болса да, оның индекстерінің жоғары шекарасы 9 ға тең. Тағы да бір жағдайды айтып кету керек , массив анықталғанда компьютер жадының толық бір бөлігін иеленеді.
Және бұл мысалда біз қарастырған массивтың олшемі 1 ге тең. Си тілінде массивтың өлшемі 1 ден жоғары болама деген сұрақты қойсақ, бұл сұраққа жауап –болады.
Си тілінде массивтың элементі және массив болуы мүмкін. Тілдің стандарты 31 олшемге дейін массив құру мүмкіншілігін береді. Бірақ практикада 3 олшемнен жоғары олшемді массивтарды көрмейміз.
2. Массивтерді сипаттау.
Жеке айнымалыларды сипаттау сияқты , массивтарды сипаттау кезінде оның элементтеріне анық мән беру мүмкін. Демек массив элементтерін сипаттау кезінде оларды бейнелеу және мән беру амалын орындауға болады. Массив элементтеріне мән беру оны анықтау форматын өзгертеді. Мысал үшін бір өлшемді массивтың элементтер санын көрсетпей олардың бастапқы мәндерінің тізімін жазып шығу мүмкін:
double seq [] = {1.0, 2.1, 3.2, 4.3, 5.0};
Бұл мысалда элементтерінің саны 5 болған бір өлшемді массив анықталады, мұнда
seq[0]=1.0 seq[1]=2.1 seq[2]=3.2 seq[3]=4.3 seq[4]=5.0
Егер массив анықтамасында оның көлемі көрсетілмеген болса, онда оның элементтері мәнінің бастапқы саны, массив элементтерінің барлық санынан көп болуы мүмкін емес (егер керісінше болса онда компиятор "too many initializers" көріністегі қателік туралы мәлімет шығарады). Егер массив анықтамасында элементтері мәнінің бастапқы саны массив элементтерінің барлық санынан кем болса , онда массивке элементтерінің бірінші тобы меншіктеледі (яғни индекстері кіші болған элементтер меншіктеледі) :
int seq [4] = {1, 2};
Бұл мысалда массивтың seq[0]=1 және seq[1]=2 элементтері ғана анықталып, seq[2] және seq[3] элементтер анықталмайды.
Осы мысалдардан бір өлшемді массивтың элементтері мәнін анықтау үшін ол мәндер тізбегін фигуралық жақша ішіне жазу керектігін біліп алдық. Екі өлшемді массивтерде бұл жағдай төмендегі көріністе болады:
int matr[3][2] = {{2,3}, {4,5}, {6,7}};
Бұл жазу томендегі меншіктеу операторларының тізбегіне эквивалент екендігін айта кетеміз :
matr[0][0]=2 matr[0][1]=3 matr[1][0]=4 matr[1][1]=5 matr[2][0]=6 matr[2][1]=7
Осы нәтіжені
int matr[3][2] = {2, 3, 4, 5, 6, 7};
формадағы анықтамадан да алуымыз мүмкін
Бір өлшемді массивтегідей, көп өлшемді массив элементтерінің барлық мәндері берілуі шарт емес:
Мысал үшін
double M[4][6] = { {1.0}, {2.2}, {44.2}, {8.0} }
көріністегі M массивта бастапқы мәндерді оның бірінші бағандағы элементтері ғана қабылдайды.
Лекция 20.
(1 сағат)
1. Символдар массиві
2. Көп өлшемді массивтерге мысал:
Пайдаланылатын әдебиеттер:
а) негізгі
1. К.Паппас, У.Мюррей “Программирование на С и С++”, Киев, 2000
2. А.Кетков, Ю.Кетков “Практика программирования Бейсик,
Си, Паскаль”, М.: 2001
б) қосымша
3. Шилдт Г. “Теория и практика С++”, Санкт-Петербург, 1996
4. Березин Б.И., Березин С.Б. “Начальный курс С и С++”, М.:1999
1. Символдар массиві
С және С++ тілдерінде берілгендердің char типі бар болса да, бұл типтегі айнымалы текст қөатарын емес тек қана бір типті символды сақтай алады.
Егер программада қатарлармен жұмыс істеу керек болса, онда оларды символдар массиві ретінде құруға болады. Мұндай массивте қатардың әрбір символы үшін ұяшық бөлінеді, ал ең соңғы элемент қаар соңы - \0 символын сақтайды.
Төмендегі мысалда 3 символдық массив құрылады. s1 массиві меншіктеу операторы арқылы символдармен толтарылады. Ал s2 массивінің берілгендері scanf() функциясы арқұылы ендіріледі. s3 қатарлық константамен инициализация жасалынады.
# include
main()
{
char s1[7], /*машина*/
s2[8]; /*саморлет*/
static char s3[8]=” корабль” /*корабль*/
s1[0]=’м’;
s1[1]=’а’;
s1[2]=’ш’;
s1[3]=’и’;
s1[4]=’н’;
s1[5]=’а’;
s1[6]=’\0’;
printf(“n\n\t Самолет сөзін ендіріңіз”);
scanf(“%s”, s2);
printf(“%s\n”,s1);
printf(“%s\n”,s2);
printf(“%s\n”,s3);
return(0);
}
s1 массивінде сақталған “машина” сөзі 6 әріптен тұрғанымен, s2 массиві 7 элементтен тұрады: әрбір әріп үшін бір-бір элемент және қатар соңы символы үшін де бір элемент. Бұл айтылған келесі 2 массив үшін де бір дұрыс. s3 массивін фигуралық жақшаға алынған символдар тізбегі ретінде де беруге болады.
static char s3[8]={‘к’, ’о’, ’р’, ’а’, ’б’, ’л’, ’ь’, ’\0’};
Мұндай түрде сипаттаған уақытта қатар соңы символын міндетті түрде қосу қажет. Ал мысал келтірілген түрінде қатар соңы символы автоматты түрде қосылады. Массивті тағы мынадай түрде анықтауға болады:
static char s3[]=”корабль”;
Бұл жағдайда массив көлемін компилятор автоматы түрде өзі анеықтайды. Массив берілгендерін scanf функциясы көмегімен пайдаланушыдан сұрау жиі кездеседі. Біздің мысалда scanf() функциясына %s форматы қолданылады. Бұл қатар ендіру дегенді білдіреді. Функция басында келген пробельді литерлерді (пробел символы, табуляция, абзац соңы символдары) өткізіп жіберіп, символ тізбектерін келесі робелді литерді кездестіргенші массивке ендіре береді. Символдар теріліп болған соң автоматы түрде қатар соңы \0 символы тіркеліп қойылады. Қарастырған мысалымыздың
scanf(“%s”, s2);
жазуында s2 атауының алдынан & адресін алу белгісі қойылмады. Өйткені массив атауы басқа айнымалылар атауларынан айырмашылығы оның өзі бірінші элементінің адресі болып табылады.
printf() функциясына %s форматы берілсе, онда аргумент қатар адресі түрінде қарастырылады. Текст қатары экранға нольдік символсыз толық шығарылады. Жорғарыда қарастырылған мысалдағы программа С++ тілінде былай жазылады:
# include
main()
{
char s1[7], /*машина*/
s2[8]; /*саморлет*/
static char s3[8]=” корабль” /*корабль*/
s1[0]=’м’;
s1[1]=’а’;
s1[2]=’ш’;
s1[3]=’и’;
s1[4]=’н’;
s1[5]=’а’;
s1[6]=’\0’;
cout<<“n\n\t Самолет сөзін ендіріңіз”;
cin>> s2;
cout<
cout<
cout<
return(0);
}
Бұл программаны іске түсірген соң экранға мыналар шығады:
машина
Самолет
корабль
2. Көп өлшемді массивтерге мысал:
int matrix[10][20]; // элементтері бүтін сан болған 10х20 матрица.
double points[50][50][50]; // 3-өлшемді пространства
//*********************** Middle project
#include
#include
void main()
{
int i,j;
int matrix[3][4];
double sum=0;
for (i=0; i<3; i++) // элементтерді енгізу
for (j=0; j<4; j++)
scanf("%d", &matrix[i][j]);
for (i=0; i<3; i++) // Есептеу
for (j=0; j<4; j++)
sum +=(double)matrix[i][j];
printf("Sum = %10.0lf", sum); // Нәтижені шығару
getch();
}
int matr [2][3];
Жоғарыда қарастырған мысалдағы сияқты бұл мысалдағы массив элементтері компьютер жадының бір тұтас бөлігін иеленіп, бірінен кейін бірі турады:
matr[0][0] : matr[0][1] : matr[0][2] : matr[1][0] : matr[1][1] : matr[1][2]
Достарыңызбен бөлісу: |