Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lektsii_OP / T13.doc
Скачиваний:
91
Добавлен:
17.03.2016
Размер:
364.54 Кб
Скачать

Особливості обробки комбінованих даних Доступ до полів структур

Більшість мов програмування підтримують тільки деякі операції, що працюють із комбінованими даними, як цілісною структурою. Це операції присвоєння одному запису значення іншого однотипного запису, порівняння двох однотипних записів на рівність або нерівність. Зокрема, у Pascal допустимі усі зазначені вище операції, тоді як у С/С++ структури можна тільки присвоювати. Наприклад,

TStudent stud;

TStudent stud_new = stud;

У випадках, коли такі операції не підтримуються мовою програмування явно, вони можуть виконуватися над окремими полями записів або ж записи можуть копіюватися і порівнюватися як неструктуровані області пам'яті.

Усі інші дії виконуються з полями структур (записів) відповідно до їх типів.

Для звертання до поля запису (структури), зазвичай, використовується складене ім’я виду:

змінна_структура .поле { .полe } ,

де "." - операція доступу до елемента (поля) структури. Вона обчислюється зліва направо і є характерною практично для всіх сучасних алгоритмічних мов програмування. Так, для структури stud конструкція stud.group буде забезпечувати звертання до її поля group.

Поля, як самостійні програмні об'єкти, поза записом не існують, хоча доступ до них здійснюється саме по іменах.

Якщо запис має ієрархічну структуру, то у звертанні до полів нижнього рівня такого запису вказується весь ланцюжок імен від ідентифікатора комбінованої змінної до ідентифікатора необхідного поля (через селектор “.”):

ім'я_змінної .поле_ 1-го_рівня . ... . поле_n-го_рівня.

Наприклад,

stud. marks. OP = 5.

Якщо задано покажчик на комбінований тип, то для доступу до полів структури використовується складене ім'я, яке утворюється за допомогою операції “->” (символи "–" і ">"):

покажчик_на_структуру -> поле.

Наприклад,

cout<<”Input FIO,year: \n“); cin>>ps->FIO>> ps->year.

У випадку визначення покажчика на комбінований тип звернутися до поля структури можна також наступним чином:

(*покажчик_на_структуру). поле.

Наприклад,

struct TStudent

{ сhаr FIO[20];

int year;

} stud,*рs;

рs = &stud;

(*ps).FIO;

Доступ до полів масиву структур аналогічний доступу до елементів цифрових і рядкових масивів. Зокрема, формат доступу за індексом елемента:

ім'я_масиву[індекс].поле.

Наприклад,

cout<<group[7].FIO; // прізвище 7-го студента

cout<< group[25]. FIO[0] // перша літера прізвища 25-го студента.

Щоб ввести або вивести запиc (структуру), треба ввести-вивести відповідні поля. Для введення-виведення масиву записів використовують цикл.

Полями структур можуть бути, зокрема, поля бітів (розряди двійкового коду). Опис поля бітів складається з опису типу поля, його імені та зазначеного після двокрапки розміру поля в бітах:

struct [тип_структури]

{ тип поле_1 : довжина_в_бітах;

...

тип поле_n : довжина_в_бітах;

};

В якості типу полів можуть використовуватися специфікатори int, unsigned, signed.

Наприклад, структура бітових полів:

struct TByte

{ int b1:1;

int b2:1;

int b3:1;

int b4:1;

int b5:1;

int b6:1;

int b7:1;

int b8:1;

};

Приклад. Ввести масив структур з даними про книги (назва книги та її автор, ціна книги). Відсортувати отриманий масив за алфавітом прізвищ авторів.

struct TBook // книга

{ char title[20]; // назва книги

char author[20]; // автор книги

}

TBook katalog[10]; // масив книг

void input(TBook[], int); // введення масиву книг

void print(TBook[], int); // виведення масиву книг

void sort(TBook[], int); // сортування масиву книг

//----------------------- головна функцiя --------------------------------------------------

int main()

{ int kol= input(katalog,);

puts ("list of books");

print(katalog, kol);

sort(katalog, kol); // сортування книжок по автору

puts("sorted books list ");

print(katalog, kol);

system("pause");

}

//----------------------- введення масиву книжок -----------------------------------------

int input(TBook mas[ ])

{ cout<<"input number of books:"; cin>> n;

for (int j=0; j<n; j++)

{ cout<<"input titles:"; cin>>mas[j].title;

cout<<"input autor:"; cin>>mas[j].author;

}

return n;

}

//----------------------- виведення масиву книжок ----------------------------------------

void print(TBook mas[ ], int n)

{ for (int j=0; j<n; j++)

printf("%-22s %-22s \n", mas[j].title, mas[j].author);

}

//---------------------- сортування книжок по автору ------------------------------------

void sort (TBook mas[ ], int n)

{ TBook temp;

for (int k=0; k<n-1; k++)

for (int j=k+1; j<n; j++)

if (strcmp(mas[k].author, mas[j].author)>0)

{ temp=mas[k];

mas[k]=mas[j];

mas[j]=temp;

}

}

Соседние файлы в папке lektsii_OP