Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Примеры работы со структурами




1. Определение структурного типа complex, представляющего комплексные числа, заданные в алгебраической форме, и определение структурных переменных x, y этого типа:

struct complex { float re; //действительная часть числа

float im; //мнимая часть числа

} x, y;

 

При этом x.re – доступ к полю действительной части комплексного числа x,

y.im – доступ к полю мнимой части комплексного числа y,

 

Тогда функции для ввода, вывода, сложения комплексных чисел могут выглядеть так:

struct complex { float re, im;}; //определение структурного типа

 

complex read (); //прототип функции ввода комплексного числа

void print (complex); //прототип функции вывода комплексного числа на экран

void add (complex, complex, complex*); //прототип функции сложения комплексных чисел

void add1 (const complex&, const complex&, complex&);

int main()

{

complex c1, c2, c3,c4; //определение комплексных чисел

c1 = read(); //вызов функции ввода числа

c2 = read();

 

add (c1, c2, &c3);

print(c1); cout << "\t + \t" << endl;

print (c2); cout << " = " << endl;

print (c3);

cout << endl;

 

add1 (c1, c3, c4);

print(c1); cout << "\t + \t" << endl;

print (c3); cout << " = " << endl;

print (c4);

 

_getch();

return 0;

}

 

complex read()

{

complex c;

cout << "re, im:"<< endl;

cin >> c.re >> c.im;

return c;

}

 

void print (complex c)

{

cout << c.re << " + i*" << c.im << endl;

return;

}

 

void add (complex c1, complex c2, complex *c3)

{

c3->re = c1.re +c2.re; //или (*c3).re = c1.re + c2.re;

c3->im= c1.im +c2.im;

return;

}

void add1 (const complex &c1, const complex &c2, complex &c3)

{

c3.re = c1.re +c2.re;

c3.im= c1.im +c2.im;

return;

}

 

2. Определение структурного типа racion, представляющего понятие «рациональное число» и набор функций для сокращения, печати, деления рациональных чисел:

struct racion {int chis, znam;}; //определение структуры

 

void put (racion); //прототипы функций

racion sokr (racion A);

void div (racion A, racion B, racion *C);

 

int main()

{

racion A, B, C;

puts ("racion1, racion2:?");

scanf ("%d%d%d%d", &A.chis, &A.znam, &B.chis, &B.znam); //ввод чисел

div(A, B, &C); //вызов функции деления чисел

printf (":"); put(A);

printf ("\tna\t"); put(B);

printf ("\n="); put(C); //вывод результата

_getch();

return 0;

}

 

void put (racion A) //функция выводит на экран «рациональное число»

{if (A.chis * A.znam <0) printf ("-");

A.chis = abs(A.chis);

A.znam = abs(A.znam);

printf("%d / %d", A.chis, A.znam);

}

 

void div (racion A, racion B, racion *C) //функция делит 2 рациональных числа

{

A=sokr(A);

B= sokr (B);

C->chis = A.chis*B.znam;

C->znam = A.znam*B.chis;

*C= sokr (*C);

}

 

racion sokr (racion A) //функция выполняет сокращение «рационального числа»

{

int i, min;

if (abs(A.chis) > abs(A.znam)) min= abs(A.znam);

else min = abs(A.chis);

for (i=min; i>1; i--)

if(A.chis % i ==0 && A.znam % i ==0) break;

A.chis /=i;

A.znam /=i;

return A;

}

 

3. Рассмотрим программу, позволяющую по паре чисел (год, порядковый номер дня) получить название и число месяца:

struct date {

int d, m, y; //день, месяц, год

char *mname; //название месяца

} md;

 

//двумерный массив с количеством дней в месяце для високосного и невисокосного года

static int dofm[2][12]={{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},

{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};

 

//массив строк с названием месяцев

static char *name[ ]={"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

 

void monthd(date*, int); //прототип функции пересчета

//значение года передается функции в поле «год» структурной переменной,

//пересчитанные значения дня и месяца возвращаются в этой же переменной,

//поэтому значение структурной переменной передается по указателю

 

int main()

{int yd; //порядковый номер дня года

cout << "god, den?";

cin >> md.y >> yd; //ввод значений года и порядкового номера дня

monthd (&md, yd); //вызов функции пересчета

md.mname = name[md.m]; //присваивание названия месяцу

cout << md.d <<" " << md.mname<< endl;

_getch();

return 0;

}

 

void monthd(date *md, int yd)

{int i, v;

v = (!(md->y%4) && (md->y%100) ||!(md->y%400)); //проверка на високосность

if (yd > 365+v)

{cout << "wrong number"; _getch(); exit(1);} //проверка значения дня года

md->d = yd; //подготовка начального значения для поля md->d

 

for (i=0; md->d > dofm[v][i]; i++) //пересчет порядкового значения дня года

md->d -= dofm[v][i]; //в день месяца

md->m=i; //присваивание значения месяцу

}

 





Поделиться с друзьями:


Дата добавления: 2016-10-06; Мы поможем в написании ваших работ!; просмотров: 282 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Так просто быть добрым - нужно только представить себя на месте другого человека прежде, чем начать его судить. © Марлен Дитрих
==> читать все изречения...

2439 - | 2195 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.015 с.