ЗНАЕТЕ ЛИ ВЫ?

Загальна характеристика структури



Структури дають можливість групувати дані і працювати з цими даними як із єдиним цілим.

Структура являє собою множину, що складається з декількох значень, кожна з який може мати свій тип даних. Елементи структур можуть мати різні типи даних.

Для визначення структури використовується синтаксис:

 

struct [тег структури]

{

} поля структури
визначення члена структури;

визначення члена структури;

} [одна або декілька змінних-структур];

 

тег-ім’я структури.

 

Приклад структури з інформацією про компакт-диски:

 

struct cd_info

{

char title [25]; //назва

char artist [28]; //виконавець

int num_song; //число пісень

float price; //вартість

char date_bought [8]; //дата покупки

} cd1, cd2, cd3;

 

Тут описані три структурні змінні: cd1, cd2, cd3;

Існує два засоби ініціалізації структур:

– при оголошенні;

– окремо в тілі програми.

 

Приклад 1. Ініціалізація при оголошенні

 

struct cd_info

{

char title[25];

char artist[28];

int num_song;

float price;

char date_bought[8];

 

} cd1=

{

“Red Moon Men”,

“Пугачова”, 12, 20.55,

“02/13/98”

};

 

Приклад 2. Присвоювання в тілі програми.

 

#include <iostream.h>

#include <string.h>

 

Void main()

{

struct cd_info

{

char title [25];

char artist [28];

int num_song;

float price;

char date_bought [8];

} cd1;

 

strcpy(cd1.title, “Red Moon Men”);

cd1.num_song = 12;

cd1.price = 11.95;

strcpy(cd1.artist, “Пугачова”);

cout << “Title: “ << cd1.title << “\n”;

cout << “Artist: “ << cd1.artist << “\n”;

cout << “Number of songs: “ << cd1.num_song

<< “\n”;

cout << “Price: “ << cd1.price << “\n”;

}

 

Як очевидно з прикладу до полів структури можна звертатися, вказуючи ім’я змінної-структури, ім’я поля і розділяючи ці імена точкою.

У загальному вигляді:

 

 

Struct bb

{

int field_1;

char field_2;

} c, a;

int value1 = c. field_1;

char value2 = a. field_2;

 

Якщо змінна ptr визначена як вказівка на структуру, то для доступу до полів структури можна використовувати операцію ->.

Наприклад:

 

bb *ptr;

int value1 = ptr->field_1;

char value2 = ptr->field_2;

 

Оператор ptr->field_1 еквівалентний виразу (*ptr).field_1.

 

Приклад:

 

#define COMPLEX struct complex_type

 

COMPLEX

{

float real;

float image;

};

 

Операція додавання С1 і С2 для одержання С3.

 

#define COMPLEX struct complex_type

 

COMPLEX

{

float real;

float image;

};

COMPLEX C1, C2, C3;

C3. real = C1. real + C2. real;

C3. image = C1. image + C2. image;

або

COMPLEX* C1, C2, C3;

C3->real = C1->real + C2->real;

C3->image = C1->image + C2->image;

Структури можуть бути вкладеними, тобто одним із полів структури може бути інша структура.

Приклад:

#include <iostream.h>

struct address_info

{

char addr[25]; //Інформація про адресу

char state[20];

};

Struct add

{

char name[25];

address_info *address;

double zarp;

};

 

Void main()

{

add t;

cin >> t.zarp;

cin >>t.name;

cin >>t.address->state;

cin >>t.address->addr;

}


Вкладена структура має вигляд:

Резюме:

Структури дозволяють групувати дані більш гнучкою образом, ніж масиви. Вони можуть містити елементи різноманітних типів даних. Ініціалізувати структури можна двома засобами: під час оголошення, або за допомогою операторів «точка»(.) або "->" у тілі програми. Структури аналогічні записам бази даних, а їхні елементи - полям записів.

 

Масиви структур

Припустимо, що ви працюєте в компанії замовлення поштою, що продає дисководи. Перед Вами стоїть задача написати програму для обліку 25 видів пристроїв. По дисководу є така інформація:

– місткість пристрою, що запам’ятовує;

– час доступу в мілісекундах;

– код постачальника;

– ціна.

Дані зручно розмістити в масиві структур

 

struct inf_d

{

long int ob;

int vr;

int kod;

double cena;

} drive[25];

 

або окремим рядком:

 

inf_d drive[25];

 

Структури зручно записувати на диск (спробуйте самостійно)

 

Приклад:

 

#include <iostream.h>

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

 

struct inf_d //Глобальне визначення

{

long int ob;

int vr;

int kod;

double cena;

};

 

inf_d v_dan()

{

inf_d disk;

cin >> disk.ob;

cin >> disk.vr;

cin >> disk.kod;

cin >> disk.cena;

return disk;

}

 

Void menu()

{

clrscr(); //(у Visual C++ використовується system("cls"))

cout << "1. введення даних про дисковод\n";

cout << "2. Відображення даних\n";

cout << "3. Вихід\n";

}

void pros(inf_d disk[25], int num)

{

for(int ctr = 0; ctr < num; ctr++)

{

cout <<"\n" << disk[ctr].ob ;

cout <<"\n" << disk[ctr].vr;

cout <<"\n" << disk[ctr].kod;

cout <<"\n" << disk[ctr].cena<<"\n";

}

getch();

}

 

Void main ()

{

inf_d disk[25];

int ans;

int num = 0;

do

{

do

{

menu();

cin >> ans;

} while ((ans < 1) || (ans>3));

 

switch(ans)

{

case 1:

disk[num] = v_dan();

num++;

break;

case 2:

pros(disk,num);

break;

default:

break;

}

}

while(ans!=3);

}

 

 





Последнее изменение этой страницы: 2017-02-10; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.232.146.10 (0.012 с.)