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


 

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

18869. Ле Корбюзье Шарль Эдуар (6.10.1887— 27.8. 1965) 20.12 KB
  Ле Корбюзье Шарль Эдуар 6.10.1887 27.8. 1965 Французский архитектор и теоретик архитектуры создатель архитектуры интернационального стиля а так же живописец в живописи разработал теорию пуризма и писатель публицист. Учился и работал у архитекторов: Йозефа Хофмана Огюс...
18870. Сюрреализм. Манифест 1924г. Происхождение значения термина. С.Дали 28.46 KB
  Сюрреализм. Манифест 1924г. Происхождение значения термина. С.Дали. Сюрреали́зм фр. surréalisme сверхреализм направление в искусстве сформировавшееся к началу 1920х во Франции. Отличается использованием аллюзий и парадоксальных сочетаний форм. Основателем и идеологом
18872. Русский конструктивизм. Веснины. Леонидов. Мельников 75.5 KB
  Русский конструктивизм. Веснины. Леонидов. Мельников. Конструктиви́зм советский авангардистский метод стиль направление в изобразительном искусстве архитектуре фотографии и декоративно-прикладном искусстве получивший развитие в 1920 первой половине 1930 годов. Х...
18873. Исторический жанр изобразительного искусства 23.16 KB
  Исторический жанр один из основных жанров изобразительного искусства посвященный воссозданию событий прошлого имеющих историческое значение. Обращённый в основном к прошлому исторический жанр включает также изображение недавних событий историческое значение кото
18874. Ба́ухаус 26.74 KB
  Ба́ухаус нем. Bauhaus Hochschule für Bau und Gestaltung Высшая школа строительства и художественного конструирования или Staatliches Bauhaus учебное заведение существовавшее в Германии с 1919 по 1933 а также художественное объединение возникшее в рамках этого заведения и соответствующее нап...
18875. Художественная сила Нидерландского искусства 33.95 KB
  Пожалуй ни в одной области мировой культуры Нидерланды не сделали столь значительного вклада как в изобразительном искусстве. Произведения нидерландских мастеров XVI XVII вв. до сих пор восхищают зрителей. Голландская художественная школа оказала огромное влияние на все
18876. Архитекту́ра моде́рна 22.21 KB
  Архитекту́ра моде́рна архитектура арнуво архитектурный стиль получивший распространение в Европе в 1890е 1910е годы в рамках художественного направления модерн. Архитектуру модерна отличает отказ от прямых линий и углов в пользу более естественных природных линий...
18877. Символизм в Русском искусстве рубежа XIX-XX вв. М.А. Врубель 290.82 KB
  Символизм в Русском искусстве рубежа XIXXX вв. М.А. Врубель. Врубель М.А. был предшественником символизма. Личность художника объясняет характерную особенность всего отечественного искусства. Это искусство никогда не полагается на холодный расчёт ума. Оно согрето живым ис...