Структуры и функции

Переменные типа структура могут быть параметрами функций. Функции могут возвращать в качестве результата величину структурного типа. Допустимо присваивание структурных переменных.

// Пример 6.1.2

// Пример программы с простой структурой языка С и функциями

#include <iostream>

using namespace std;

// объявление структуры для карандаша

// члены-данные, свойства, поля (data members, properties, fields)

// длина-см.; диаметр-мм.; резинка; цвет; цена; подпись

typedef unsigned short int USHORT;

enum MyColor {Red, Yellow, Green, Blue, Black, Simple};

struct Pencil {

USHORT itsLength;

USHORT itsRadius;

bool itsLastic;

MyColor itsColor;

float itsPrice;

char itsCaption[31];

};

// объявление функций

void ViewPencil(Pencil); // просмотр сведений карандаша

// определение сведений карандаша

Pencil SetPencil(USHORT, USHORT, bool, MyColor,float, char []);

// главная функция

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

Pencil p1,p2,p3; // объявление структурных переменных(объектов)

// просмотр сведений - мусор

ViewPencil(p1);

ViewPencil(p2);

ViewPencil(p3);

cin.get();

// определение данных

p1=SetPencil(100,8,false,MyColor::Red,0.9,"KOHINOOR");

p2=SetPencil(40,10,true,MyColor::Green,0.25,"FRANCE");

p3=SetPencil(80,6,false,MyColor::Yellow,0.8,"ABCD");

// просмотр сведений

ViewPencil(p1);

ViewPencil(p2);

ViewPencil(p3);

cin.get();

// вычисление средней стоимости

double avg;

avg=(p1.itsPrice + p2.itsPrice + p3.itsPrice)/3.;

cout << "Средняя цена (AVG) =" << avg << endl;

cin.get();

// вычисление количества с резинкой

int k=0;

if (p1.itsLastic == true) k++;

if (p2.itsLastic) k++;

if (p3.itsLastic) k++;

cout << "k=" << k << endl;

cin.get();

// присваивание структур

p1=p2;

 

 

// просмотр сведений после присваивания

ViewPencil(p1);

ViewPencil(p2);

cin.get();

return 0;

}

 

// реализация функций

// просмотр сведений карандаша

void ViewPencil(Pencil p) {

cout << "Длина : " << p.itsLength << endl

<< "Радиус : " << p.itsRadius << endl

<< "Резинка : " << p.itsLastic << endl

<< "Цвет : " << p.itsColor << endl

<< "Цена : " << p.itsPrice << endl

<< "Надпись : " << p.itsCaption << endl << endl << endl;

}

// определение сведений карандаша

Pencil SetPencil(USHORT l, USHORT r , bool la, MyColor c ,float pr, char ca[]) {

Pencil p;

p.itsLength=l;

p.itsRadius=r;

p.itsLastic=la;

p.itsColor=c;

p.itsPrice=pr;

//p.itsCaption=ca; // Ошибка!!!

strcpy(p.itsCaption,ca);

return p;

}


 

// Пример 6.1.3

// Пример программы с простой структурой языка С и функциями

# include <iostream>

using namespace std;

// структура с данными о сотруднике

struct Sotrudnic {

long int number; // номер

char name[11]; // фамилия

char gender; // пол

int age; // возраст

float weight; // вес

bool smoke; // курит?

float salary; // зарплата

};

// объявление функций

void ToScreen(Sotrudnic s); // вывод данных на экран

Sotrudnic FromKey(); // ввод данных с клавиатуры

// определение данных

Sotrudnic SetSotr(long int, char [], char, int, float, bool, float);

// главная функция

int main() {

setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста

Sotrudnic s1,s2; // s1,s2-структурные переменные (объекты)

// размер структурных переменных

cout << "Размер = " << sizeof(Sotrudnic) << endl; // имя типа

cout << "Размер = " << sizeof(s1) << endl; // имя объекта

// вывод данных на экран - мусор

ToScreen(s1);

ToScreen(s2);

 

// определение данных

s1=SetSotr(1000,"Ivanov",'m',25,70.5,true,500.5);

s2=SetSotr(2000,"Petrova",'w',22,60.5,false,400.5);

// вывод данных на экран

ToScreen(s1);

ToScreen(s2);

// ввод данных с клавиатуры

s1=FromKey();

s2=FromKey();

// вывод данных на экран

ToScreen(s1);

ToScreen(s2);

// вычисление среднего возраста

float avg=(s1.age + s2.age)/2.;

cout << "Средний возрамт (AVG) =" << avg << endl << endl;;

cin.get();

return 0;

}

// реализация функций

// вывод данных на экран

void ToScreen(Sotrudnic s) {

cout<<"Номер: "<<s.number<<'\n'<<"Фамилия: "<<s.name<<'\n'
<<"Пол: "<<s.gender<<endl;

cout<<"Возраст: " <<s.age <<'\n'<<"Вес: "
<<s.weight<<" кг."<<'\n'<<"Курение: "<<s.smoke<<endl;

cout<<"Зарплата: "<<s.salary<<"\n\n\n"<<endl;

cin.get();

}

// ввод данных с клавиатуры

Sotrudnic FromKey() {

Sotrudnic s;

cout<<"Номер: "<<endl;

cin>>s.number;

cout<<"Фамилия: "<<endl;

cin>>s.name;

cout<<"Пол: "<<endl;

cin>>s.gender;

cout<<"Возраст: "<<endl;

cin>>s.age;

cout<<"Вес: "<<endl;

cin>>s.weight;

cout<<"Курение?(1-да,0-нет): "<<endl;

cin>>s.smoke;

cout<<"Зарплата: "<<endl;

cin>>s.salary;

return s;

}

// определение данных

Sotrudnic SetSotr(long int tn, char fam [], char p, int a, float w, bool k, float st) {

Sotrudnic s;

s.number=tn;

strcpy(s.name,fam);

s.gender=p;

s.age=a;

s.weight=w;

s.smoke=k;

s.salary=st;

return s;

}