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Як здійснюється доступ до дан-членів структури, розташованої в масиві структур?


 

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

75540. Даниель Дефо, автор «Робінзона Крузо». Контроль позакласного читання 91.5 KB
  Обладнання: підручник текст для читання The uthor of Robinson Crusoe HO1 True or Flse H02 Personlity Quiz H03 Finish the Sentences H04. Т: The topic of our lesson is Dniel Defoe the uthor of Robinson Crusoe. Пред\'явлення тексту для читання Dniel Defoe the uthor of Robinson Crusoe . Т: Hve you ever red Robinson Crusoe Wht do you know bout the uthor of this book Is the book Robinson Crusoe still red by children nd grownups 2 WhileReding ctivities.
75541. Вибір професії. Плани на майбутнє, План-конспект уроку з англійської мови для учнів 9-х класів 38.5 KB
  By the end of the lesson you should be ble: to mtch the English words nd word combintions with their Ukrinin equivlents Level 1; to define different kinds of films by their description Level 2; to sk questions to show your bility of operting the grmmr: the building of the questions of different kinds Level 3; to write bout your plns for the future to check your skills in communictive writing Level 4. Т: Our test consists of 4 levels. You\'ll get 3 points for ech level if you cope with it properly. Level 1 Scope: 3 Mtch the English words...
75542. Літні канікули. Знов у школу. Повторення. Простий минулий час (Past indefinite Tense) 23.77 KB
  So you hve not only to study well but lso to choose wht to do when you leve school. I hope you will choose wht to do in the future so tht you will be useful to our country nd be hppy in your life. Т: Wht things do you ssocite with the words Summer Holidys Write them on the blckbord nd in your vocbulries plese. re you gld to be t school Why Wht did you pln to do during your summer holidys Did your plns come true Where did you go Do you like to spend your holidys in town in the country 4.
75543. Літні канікули. Повторення розділових запитань (Disjunctive Questions) 22.06 KB
  Повторення розділових запитань Disjunctive Questions. Обладнання: підручник тематична картина Літні канікули граматична таблиця Disjunctive Questions 37 Reference Grmmr; українськоанглійські словники речення і розділові питання для гри Find your prtner НО1. We hve to review the grmmr the building of the disjunctive questions to use them in our speech mking it more nturl. By the end of the lesson you should be ble: to use the tgquestions in your dilogues; to use your imgintion describing pictures.
75544. Україна. Географічне положення. Загальна характеристика. Нові ЛО 24.58 KB
  Ввести нові ЛО та відпрацювати їх вживання в мові. Практикувати учнів у читанні тексту з метою отримання загального уявлення (skimming) та з метою максимально повного й точного розуміння всієї інформації, що в ньому міститься (scanning)
75545. Географічне положення та державний устрій України 24.82 KB
  Т: We re going to tlk bout the politicl structure of Ukrine nd its geogrphicl position. By the end of the lesson you should be ble: to recognize nd understnd new words nd word combintions from the topic: The politicl structure of Ukrine in the text; to listen for the min ide nd specific informtion; to tlk bout the politicl structure of Ukrine in brief. One student from the clss is selected who thinks of geogrphicl plce in Ukrine tht must be guessed by the rest of the clss. Exmple: Is it river Is it mountin Is it one of the lrgest cities...
75546. Україна. Життя молоді, План-конспект уроку з англійської мови для учнів 9-х класів 23.9 KB
  People Підтема: Україна. re ll young people like Of course not. Thts why teengers esily come under the influence of other people. Young people re crzy bout music.
75547. Культура та наука в Україні, План-конспект уроку з англійської мови для учнів 9-х класів 22.03 KB
  Обладнання: підручник текст Culture nd Science in Ukrine HO1 Who is who H02. Т: We continue our work on the topic Ukrine. We re going to tlk bout culture nd science in Ukrine. By the end of the lesson you should be ble: to prticipte in common converstionl exchnges nd tell bout this topic using tl text nd wordcombintions s pln; to operte fcts bout Ukrine in new situtions.
75548. Київ - столиця України. Повторення ЛО теми Town Features 25.32 KB
  Обладнання: підручник слайди фотографії комплект учбових картин з видами міста Києва роздавальний матеріал round Kyiv НО1 картки з коротким описанням визначних місць Києва Н02 Mtch the English words nd word combintions with their Ukrinin equivlents H03 Which sentences do not fit to the text bout Kyiv HO4. Т: The topic of our...