упражнение
№6
Структурите в С++ са набори от данни, включваща определен брой елементи, които могат да бъдат от различен тип. Структурите са аналогични на записите в Паскал, а елементите им съответстват на полета. Елементите на структурите могат да бъдат от всеки допустим в С++ тип. Всеки елемент на структура има свое име.
Описанието на структура може да се направи по два начина:
- При дефинирането на променливи от типа на структурата. Тогава самата структура остава без име, а за описаните променливи се заделя необходимото количество памет. Те могат да бъдат инициализирани при дефинирането.
Синтаксисът
е следния:
struct {
дефиниция на
елемент;
дефиниция
на елемент;
. . .
дефиниция
на елемент;}една или
повече
променливи
структури;
- Чрез деклариране на самата структура. Тогава тя получава име, което не е име на променлива, а идентифицира самата структура на бъдещите променливи, които могат да се дефинират веднага след структурата или по-късно. Името на структурата е име на нов тип данни, дефиниран от програмиста. Той задава само формата на данните, без да резервира памет за променливи.;
Синтаксисът е следния:
struct име на структура
{ дефиниция на елемент;
дефиниция на елемент;
. . .
дефиниция на елемент;}[една или повече променливи структури];
Всяка дефиниция на елемент е обикновена дефиниция на променлива.
Примери:
1) struct сustomer
{
int x;
long y;
float z;
float u[10];
char v;
}
a,b[20];
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.