упражнение №6

СТРУКТУРИ

 

Структурите в С++ са набори от данни, включваща определен брой елементи, които могат да бъдат от различен тип. Структурите са аналогични на записите в Паскал, а елементите им съответстват на полета. Елементите на структурите могат да бъдат от всеки допустим в С++ тип. Всеки елемент на структура има свое име.

Описанието на структура може да се направи по два начина:

-       При дефинирането на променливи от типа на структурата. Тогава самата структура остава без име, а за описаните променливи се заделя необходимото количество памет. Те могат да бъдат инициализирани при дефинирането.

Синтаксисът е следния:

 

struct    { дефиниция на елемент;

              дефиниция на елемент;

                                    . . .

               дефиниция на елемент;}една или повече променливи структури;

 

-        Чрез деклариране на самата структура. Тогава тя получава име, което не е име на променлива, а идентифицира самата структура на бъдещите променливи, които могат да се дефинират веднага след структурата или по-късно. Името на структурата е име на нов тип данни, дефиниран от програмиста. Той задава само формата на данните, без да резервира памет за променливи.;

Синтаксисът е следния:

struct  име на структура

            { дефиниция на елемент;

              дефиниция на елемент;

                                    . . .

               дефиниция на елемент;}[една или повече променливи структури];

Всяка дефиниция на елемент е обикновена дефиниция на променлива.

 

 

 

 

 

Rounded Rectangular Callout: Име на структуратаПримери:

1)     struct      сustomer

Rounded Rectangular Callout: Начало на декларацията на структурата                   {

          int x;

Rounded Rectangular Callout: Деклариране на данните в структурата          long y;

Rounded Rectangular Callout: Край на декларацията на структурата          float z;

          float u[10];

          char v;

          }  a,b[20];

Rounded Rectangular Callout:  Деклариране на променливи                 

 

2)                     struct   //няма име

            {char title[20],autor[20],izd[20];

int god;}book1,book2;

 

 

3)     struct staff

                        {char fam[15];

char pol;

float zap ;} rab[30];

   

 

 

 

За обръщение към елементите на структурата за обработка трябва да се укажат името на променливата-структура и името на елемента на структурата, разделени с точка, т.е. чрез така нареченото уточнено име.

 

Примери:

1)  a.x

2)  a.u[1]

3)  PSN1.TS

4)  Book1.title

5)  Rab[20].pol

Над елементите на структурата могат да се изпълняват всички операции, допустими за типа им.

 

Въвеждането и извеждането на данни за променливата-структура се извършва поотделно за всяко от полетата.

 

 

 

 

 

Задача: Да се въведат следните данни за служителите на дадена фирма: фамилия, пол, трудов стаж, заплата. Да се изведе на екрана списък на служителките на фирмата със заплата над 200 лв и трудов стаж под 10 години.

Решение

Данните за служителите се съхраняват в масив от структури a. Всяка от структурите включва данните за един служител. Ще решим задачата с функции на две стъпки:

1)      въвеждане данните за служителите – функция Input;

2)      обработка на данните и извеждане на резултата – функция Output.

И двете функции имат по два формални параметъра: n, предаван по стойност и m, предаван по стойност във функцията Output и предаван по адрес  във функцията Input. По този начин данните, въведени в масива a с функцията Input, се предават за обработка на функцията Output. Функцията Output намира крайните резултати и ги извежда на екрана без да ги съхранява в паметта.

Типът на структурираните параметри не може да се описва в заглавието на процедурата. Той трябва да е деклариран като тип с име преди това.

 

#include <iostream.h>

struct  student

{

char family[10];

char pol[2];

int st;

  float salary ;}a[100];

void input(int n,student m[100])

{int i;

cout<<"input  data "<<'\n';

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

{ cout<<"input student data "<<'\n';

cout<<"pol: "; cin>>m[i].pol;

cout<<"stage: "; cin>>m[i].st;

cout<<"family: "; cin>>m[i].family;

cout<<"salary: "; cin>>m[i].salary;}};

void output(int n,student m[100])

{int i;

cout<<"women ts<10,zapl>200"<<'\n';

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

  {

              if ((m[i].st<10) &&(m[i].salary>200)) {

cout<<"w family  "<<m[i].family<<'\n';

}}}

 

void main()

 

{ int n;

do

{cout <<"input n= ";cin>>n;}

while ((n<=0)||(n>100));

 

input(n,a);

output(n,a);}

 

Задачи за упражнение

 

Зад. 1            Да се напише програма, която:

1) въвежда следните данни за N телефонни абоната (N£100): име, презиме, фамилия, адрес, телефонен номер;

2) търси абонат по дадена фамилия;

3) търси абонат по даден телефонен номер.

Зад. 2            Да се напише програма, която:

1) въвежда следните данни за учениците от един клас: номер в класа, име, презиме, фамилия, успех;

2) изчислява средния успех на класа и го извежда на екрана.

Броят на учениците е не по-голям от 30.

Зад. 3          Да се напише програма, която:

1) въвежда следните данни за учениците от един клас: номер в класа, име, презиме, фамилия, успех;

2) извежда имената на всички ученици с отличен успех.

3) извежда имената на всички ученици с много добър успех;

Броят на учениците е не по-голям от 30.

 

 

à   Ä   Ç     œ