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


 

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

70368. Педагогическое обоснование оптимизации физических нагрузок профессиональных футболистов в условиях акклиматизации спортсменов на выездных учебно-тренировочных сборах 29.05 KB
  В условиях выездных учебно-тренировочных сборов особенно при значительных отличиях природно-климатических условий организм спортсменов испытывает значительные физиологические нагрузки что может быть причиной дезадаптации и негативного воздействия на здоровье и результаты спортсменов.
70370. ТЕОРИЯ КОНЦЕПЦИИ «ЗЛОУПОТРЕБЛЕНИЕ ГРАЖДАНСКИМИ ПРАВАМИ» 2.39 MB
  Определение и установление внутренних пределов осуществления субъективного гражданского права одна из наиболее запутанных сложных для понимания и разрешения правовых проблем. В этом механизме установления юридических границ ярко выражена основная цель права предоставить обществу...
70371. «ИНЫЕ ФОРМЫ» ЗЛОУПОТРЕБЛЕНИЙ ГРАЖДАНСКИМИ ПРАВАМИ 106 KB
  Итак, исходя из последовательного анализа содержания статьи 10 ГК РФ, законодателем запрещены следующие формы реализации права: а) шикана - действие лица с четким намерением, т.е. с прямым умыслом причинить вред другому лицу (редкое явление в праве)...
70372. РОЛЬ И МЕСТО ПОНЯТИЯ «ЗЛОУПОТРЕБЛЕНИЕ ПРАВОМ» В РОССИЙСКОЙ ПРАВОВОЙ ДЕЙСТВИТЕЛЬНОСТИ 62.5 KB
  С точки зрения воплощения соответствующих теоретических идей представляется небезынтересным обращение к российскому опыту современного регулирования отношений связанных со злоупотреблением правом. В отечественной юридической литературе сформировалось устойчивое мнение...
70373. ВСТРЕЧНЫЙ ИСК: ЗАЩИТА ИЛИ НАПАДЕНИЕ? 38.5 KB
  Предъявление встречного иска осуществляется по общим правилам предъявления иска. Такой способ является самым эффективным и самостоятельным средством защиты ответчика против первоначального иска истца. Условия предъявления встречного иска.
70374. ГРАЖДАНСКО-ПРАВОВАЯ САНКЦИЯ ЗА НАРУШЕНИЕ ЗАПРЕТА ЗЛОУПОТРЕБЛЕНИЯ ПРАВОМ 105.5 KB
  Как известно в самом общем виде злоупотребление гражданским правом является умышленным правонарушением сопряженным с выходом лица за внутренние пределы имеющегося в его распоряжении того или иного гражданского права правомочия...
70375. ЗЛОУПОТРЕБЛЕНИЕ ПРАВОМ: ТЕОРИЯ И ПРАВОПРИМЕНИТЕЛЬНАЯ ПРАКТИКА 169.5 KB
  Основное значение принципа недопустимости злоупотребления правом Жизнь настолько многообразна что законодатель объективно не в состоянии прямо установить пределы проявления интересов через объем корреспондирующих обязанностей установление запретов объем прав управомоченного лица...