Лабораторна робота № 26

Тема: Розробка програм зі складеними типами даних

Ціль: виробити практичні навички в написанні програм з використанням комбінованих типів даних.

Обладнання: ПК, ПО Borland C++

Теоретичні відомості

Структури

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

Оголошення структур

У С++ ключове слово struct використовується не тільки для оголошення об'єктів структурного типу, але і для оголошення нового (структурного) типу. Оголошений тип структури можна використовувати для оголошення об'єктів структурного типу.

Представимо загальний синтаксис для оголошення структури типу (stt) і приведемо кілька прикладів структур

struct sttype

{

type1 dataMember1;

type2 dataMember2;

//інші дані члени

}[<ім'я_об'єкта 1>, <ім'я_об'єкта 2>]; // оголошення типу структури і необов'язкове

// оголошення об'єктів

struct Point

{

float x;

float y;

} Apoint, Bpoint, *Ppoint, Mpoint[10]; оголошення типу й об'єктів

struct Person

{char firstname[12];

char lastname[15];

int birthday;

float weight;

}; // оголошення

// типу структури

Після оголошення типу (<strucType>), його можна використовувати для оголошення об'єктів, наприклад

НЕ нашли? Не то? Что вы ищете?

sttype Astr, Mstr[5], *pstr;

Оголошено об'єкти структурного типу:

Astr- структура;

Mstr[5]- масив з 5-ти структур;

pstr- покажчик на структуру даного типу.

Структура типу Point має два член-даних типи float.

Структура типу Person - приклад структури, що містить дан-члени, що є масивами:

firstname []- масив з 12 символів, у якому зберігається ім'я.

lastname []- масив з 15 символів, у якому зберігається прізвище.

birthday типу int, у якому зберігається рік народження.

weight типу float, у якому зберігається вага.

Оголошення структур-перемінної (об'єкта структурного типу) не відрізняється від оголошення перемінних з базовими чи попередньо визначеними типами.

Загальний синтаксис оголошення

Приклад оголошення об'єктів (перемінних) структурного типу

//оголошення єдиної перемінний

// sttype

sttype structVar;

//оголошення масиву структур sttype

sttype stArray[Kol_elem];

Point Origin, StartPoint, Points[10];

Person You, Me, Us[30], *PYou;

У цьому прикладі оголошені перемінні структури Origin, StartPoint типу Point, масив Points [10], що має 10 елементів - структур типу Point, перемінні Me і You типу Person, масив Us [30], що має 30 елементів структур типу Person і покажчик на тип Person.

З дозволяє ініціювати дані члени структур. Ініціалізація здійснюється подібно ініціалізації масивів і випливає тим же правилам. Загальний синтаксис для ініціалізації дані членів структури:

sttype strucVar ={value1,value2,...};

Компілятор привласнює значення value1 першому дані члену структури strucVar, value2- другому дані члену структури strucVar і т. д. С++ вимагає дотримання наступних правил :

Значення, що привласнюються, повинні бути сумісні з відповідними їм дані членами по типі, діапазону і кількості ( для масивів ).

Можна повідомляти менша кількість значень, що привласнюються, чим кількість даних. Компілятор привласнює нулі іншим даними членам структури.

Не можна вказувати більше ініціюючих значень, чим кількість дані членів.

Значення зі списку ініціалізації послідовно привласнюються даним членам вкладених структур і масивів.

Приклад ініціалізації структури - Point fPoint={12.4,34.5};

У цьому прикладі оголошена перемінна fPoint типу Point і ініційовані дані члени х, у значеннями 12.4 і 34.5.

Доступ до дані членів здійснюється за допомогою операції (.)"крапка".

Загальний синтаксис для доступу до дані членів структури

Приклади доступу до даних - членам структури

StrucVar. dataMember

<Ім'я_структури> . <даний_член>;

Point myPoint; // оголошення

MyPoint. x=10.9; // доступ до х

MyPoint. y=21.89;

myPoint - структурний перемінна, доступ до її даних членів х, у здійснюється за допомогою вираження myPoint. x і myPoint. y відповідно.

Приклад

/* ЗАНЯТТЯ N 14

Розробив

Оголосити складені типи даних, виконати їхній

ініціалізацію. Масив структур ініціювати з

використанням операторів організації циклу. Одержати доступ

до елементів структур. Вивести значення елементів масиву

структур на екран із застосуванням функції. */

#include <stdio. h>

#include <string. h>

#include <conio. h>

#include <alloc. h>

#define N 20

#define M 5

typedef struct Adr //Adr -тип структури

{ char town[N]; char *country;

char region; float indeks; int kolvo;

} adr; //adr -теж тип структури (синонім Adr)

//input_st() -функція для ініціалізація структури типу adr

adr input_st(char *town, char *coun, char reg, float ind, int kol);

void print_st(adr adr3); //Функція висновку елементів структури

int main(void)

{ clrscr();

int a; float f1;

char str[125]; //Буфер для введення рядка символів

adr adress[M]; //Масив структур

adr adr1,adr2={"Kiev","Ukr",'r',12.3,15}; //Явна ініціалізація

adr1=adr2; //Ініціалізація adr1 присвоюванням

printf("Висновок елементів структури ");

print_st(adr1); //Висновок adr1

adr1=input_st("Kr","Ukr",'t',134.5,2); //Ініціалізація adr1

printf("Висновок елементів структури ");

print_st(adr1); //Висновок adr1

int і=0,j;

while (a&&і<M) //Введення елементів масиву структур

{ printf("Уведення міста (char array[N]) ");

scanf("%s",&adress[і].town); fflush(stdin);

printf("Уведення країни (char *) ");

scanf("%s",str); fflush(stdin);

adress[i].country=(char*)malloc(strlen(str)+1);

strcpy(adress[i].country, str);

//adress[і].country=strdup(str); //Можливий варіант ініціалізаціі

printf("Уведення коду регіону (char) ");

scanf("%c", &adress[і].region); fflush(stdin);

printf("Уведення цифрового коду (float) ");

scanf("%f",&f1); fflush(stdin);

adress[і].indeks=f1;

printf("Уведення кількості (int) ");

scanf("%і",&adress[і].kolvo); fflush(stdin);

printf("\n\t\t\t Продовжити введення ? y/n : ");

char c=getche(); printf("\n");

if (c=='n' || c=='N') a=0;

і++;

} //end while-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-

printf("Висновок елементів структур\n ");

j=i;

for(i=0;i<j;i++) print_st(adress[i]);

getche();

return 0;

} //end main()---

adr input_st(char *t, char *c, char r, float f, int k)

{ adr ad; //Оголошення локальної структури

strcpy(ad. town, t); //Копіювання "t" у "ad. town"

ad. country=(char*)malloc(strlen(c)+1); //Виділення пам'яті

strcpy(ad. country, c); //Копіювання "c" у "ad. country"

// ad. country=strdup(c); //Можливий варіант ініціалізації

ad. region=r; ad. indeks=f; ad. kolvo=k;

return ad; //Повернення структури з функції

} //end input_st ()-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-

void print_st(adr adr3) //Функція висновку елементів структури

{ printf("| %s ", adr3.town);

printf("| %s ", adr3.country);

printf("| %4c | %10f|%6i|\n",adr3.region, adr3.indeks, adr3.kolvo);

} //end print_st()-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-

Из за большого объема этот материал размещен на нескольких страницах:
1 2