17117

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

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторна робота № 26 Тема: Розробка програм зі складеними типами даних Ціль: виробити практичні навички в написанні програм з використанням комбінованих типів даних. Обладнання: ПКПО Borland C Теоретичні відомості Структури З підтримує визначений корист

Украинкский

2013-06-29

334.5 KB

2 чел.

Лабораторна робота № 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()-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-

/*Висновок елементів структури | Kiev  | Ukr  |    r |  12.300000|    15|

 Висновок елементів структури | Kr    | Ukr  |    t | 134.500000|     2|

 Уведення міста (char array[N])  Don

 Уведення країни (char *)         Ukr

 Уведення коду регіону (char)     t

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

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

    Продовжити введення ? y/n : y

 Уведення міста (char array[N])  Khar

 Уведення країни (char *)         Ukr

 Уведення коду регіону (char)     g

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

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

    Продовжити введення ? y/n : n

 Висновок елементів структур | Don   | Ukr  |    t |  45.669998|     8|

   | Khar  | Ukr  |    g |  67.839996|     4| */

Приклад програми на С++

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

Варіант

Номер і зміст даних

1

2

3

4

5

6

7

6

Назва магазина

Вид товару

Адреса

Час роботи

Кількість продавців

Номер магазина

#include<iostream.h>

struct mn{

 mn(int pnm=20,int pnt=20,int pa=20,int pt=20);

 ~mn();

 void cinr();

 void coutr();

private:

 int nump,numm,cnm,cnt,ca,ct;

 char*nm;

 char*nt;

 char*a;

 char*t;

};

mn::mn(int pnm,int pnt,int pa,int pt)

{cnm=pnm;

cnt=pnt;

ca=pa;

ct=pt;

nm=new char[cnm];

nt=new char[cnt];

a=new char[ca];

t=new char[ct];

}

mn::~mn()

{delete []nm;

delete []nt;

delete []a;

delete []t;

}

void mn::cinr()

{cout<<"Название магазина: ";

cin>>nm;

cout<<"Вид товара: ";

cin>>nt;

cout<<"Адрес: ";

cin>>a;

cout<<"Времьа работы: ";

cin>>t;

cout<<"Колличество продавцов: ";

cin>>nump;

cout<<"Номер магазина: ";

cin>>numm;

}

void mn::coutr()

{cout<<"Название магазина: "<<nm<<'\n';

cout<<"Вид товара: "<<nt<<'\n';

cout<<"Адрес: "<<a<<'\n';

cout<<"Времьа работы: "<<t<<'\n';

cout<<"Колличество продавцов: "<<nump<<'\n';

cout<<"Номер магазина: "<<numm<<'\n';

}

void main()

{int n,i=0;

cout<<"введите число магазинов:\n";

cin>>n;

mn*d=new mn[n];

cout<<"вводите данные о магазинах: \n";

while(i<n)

{cout<<"_____\n";

 d[i].cinr();

 i++;

}

cout<<"-------------------------\n";

for(i=0;i<n;i++)

{d[i].coutr();

 cout<<"_____\n";

}

}

Хід роботи

1.Вивчити теоретичні відомості.

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

3.Розробити програму, набрати програму на комп'ютері, усунути помилки.

4.Одержати результат.

5.Оформити звіт.

6.Підготуватися до захисту лабораторної роботи, вивчивши контрольні питання по даній темі.

Вимоги до змісту звіту приведені в лабораторній   роботі   №1.

Індивідуальне завдання

3.  Скласти програму за індивідуальним завданням. Увести відредагувати, виконати програму, записати на гнучкий диск.

№вар

Завдання

1

y=  ,( k=) де =1.110,=+0.1

2

y=(1+), (k=) де=1.110,

=

3

y=(1+),де=1.1,

=+0.1

4

y=(1+),(k=)де=1.1•10,=

5

y=(2k+p)!(1+),(k=)де=1.1•10,

=(r+2)+0.1

6

y=(1+),(k=)де=1.1•10,

=++0.1

7

y=,(k=)де=1.8, =

8

y=(1+),(k=) де=

9

y=(),(k=) де=1.1•10,

=

10

y=,де=1, =10

11

y=(1+),(k=),де =1.1•10,=

12

y=m,(k=),де=1.1•10,

=

13

y=(1+),(k=),де=1.1•10,

=

14

y=(1+) ,(k=),де=10,

=+0.1r

15

y=(2i+p-k)!plm(1+), де=1.1•10,=+0.1

 

Контрольні запитання

1.Які типи даних можуть бути членами структур?

2.Який синтаксис оголошення структур?

3.Як з'являються перемінні (об'єкти) структурного типу?

4.Які види об'єктів структурного типу можна оголосити?

5.Як виробляється ініціалізація дан-членів структури? Які особливості ініціалізації масивів і структур-членів структури (вкладених структур)?

6.Чи можна робити неповну ініціалізацію структури (не для всіх членів структури)?

7.Які правила ініціалізації дан-членів структур Ви знаєте?

8.Як розташовуються дан-члени структур у пам'яті?

9.Що таке об'єднання (union)?

10.Як розташовуються в пам'яті дан-члени об'єднання?

11.Який синтаксис оголошення типу й об'єктів типу об'єднання?

12.У чому відмінність об'єднання від структури?

13.Як здійснюється доступ до дан-членів структури, об'єднання?

14Як здійснюється доступ до дан-членів структури, розташованої в масиві структур?


 

А также другие работы, которые могут Вас заинтересовать

15756. КАМЧАТКА КАК СОСТОЯНИЕ ДУШИ: К ВОПРОСУ О МЕТОДАХ ИССЛЕДОВАНИЯ РУССКОЙ РОК-ПОЭЗИИ 62 KB
  С.А. ПЕТРОВА СанктПетербург КАМЧАТКА КАК СОСТОЯНИЕ ДУШИ: К ВОПРОСУ О МЕТОДАХ ИССЛЕДОВАНИЯ РУССКОЙ РОКПОЭЗИИ Как известно романтизм третьей волны1 не смог бы образоваться без своих предшественников. И при исследовании литературных творений этой традиции конц
15757. ЕКОНОМІЧНА ЕФЕКТИВНІСТЬ РОСЛИННИЦЬКИХ ГАЛУЗЕЙ ТА ШЛЯХИ ЇЇ ПІДВИЩЕННЯ ТОВ «НАТАЛКА» ЯМПІЛЬСЬКОГО РАЙОНУ 676.5 KB
  Питаннями підвищення економічної ефективності виробництва сільськогосподарської продукції займається велика група науковців. Ними розроблені стратегічні аспекти зміцнення сільськогосподарського виробництва в країні, структурної перебудови галузі, підвищення економічної ефективності використання земельних, матеріально-технічних і трудових ресурсів, ціноутворення, формування і функціонування ринків зерна.
15758. История Советской архитектуры 113.5 KB
  Социалистическая революция уничтожила частную собственность на землю и средства производства. Впервые в истории архитектуры не на словах, а на деле стала архитектурой для всего народа, архитектор – государственным деятелем, что в корне изменило социально-идеологическую направленность, а следовательно, и все ценностные критерии архитектуры.
15759. Особенности работы школы по формированию гражданской идентичности младших школьников 199.5 KB
  На основе анализа психолого-педагогической литературы определить теоретическое значение понятия “гражданская идентичность”. Проанализировать психологические особенности младших школьников в контексте развития гражданских качеств личности. Рассмотреть формирование гражданских и патриотических качеств младших школьников как основы гражданской идентичности на уроках.
15760. Объект, предмет, метод и организация статистики промышленности 43 KB
  Тема 1. Объект предмет метод и организация статистики промышленности. Промышленность является основой экономики. Она создает материальнотехническую базу научнотехнического прогресса и средства производства для других отраслей производит большую часть продуктов...
15761. Статистика продукции промышленности 70 KB
  Тема 2. Статистика продукции промышленности Экономический потенциал страны определяется масштабом развития ее промышленности. Цель деятельности любого промышленного предприятия производство продукции. 2.1. Под продукцией промышленности понимают прямой полезный р...
15762. СТАТИСТИКА ЧИСЛЕННОСТИ РАБОТНИКОВ И ИСПОЛЬЗОВАНИЯ РАБОЧЕГО ВРЕМЕНИ 73.5 KB
  ТЕМА 3. СТАТИСТИКА ЧИСЛЕННОСТИ РАБОТНИКОВ И ИСПОЛЬЗОВАНИЯ РАБОЧЕГО ВРЕМЕНИ Персонал предприятия фирмы это совокупность физических лиц отношения которых с предприятием регулируются договором найма. Согласно общероссийскому классификатору профессии рабочих должн
15763. СТАТИСТИКА ПРОИЗВОДИТЕЛЬНОСТИ ТРУДА 76.5 KB
  Тема 4. СТАТИСТИКА ПРОИЗВОДИТЕЛЬНОСТИ ТРУДА. Под производительностью труда понимают результативность живого конкретного труда его способность производить в единицу времени определенное количество продукта. На практике уровепроизводительности труда ха
15764. Статистика заработной платы 95.5 KB
  ТЕМА 5. Статистика заработной платы Статистика использует различные категории для характеристики оплаты труда наемных работников. Наиболее обобщенной является стоимость труда или затраты на рабочую силу. Согласно классификации расходов на рабочую силу используем