C++: Л/Р№5 Описание класса
Лабораторная работа № 5
<br/>Объектно-ориентированное программирование (ООП). Описание класса (2 часа)
<br/><br/>Цель работы: изучение правил описания и использования классов и объектов.
<br/><br/>Порядок выполнения работы
<br/>1.Провести анализ примеров. Программы из примеров копируются в файлы С++ и выполняются.
<br/>2.Выполнить задания.
<br/>3.Защитить выполненную работу.
<br/><br/>Контрольные вопросы
<br/>1.Как работают программы примеров?
<br/>2.Какие преимущества даёт использование ООП?
<br/><br/>
<br/>Пример Демонстрация использования классов для работы с тригонометрическими функциями.
<br/>#include <iostream.h>
<br/>#include <math.h>
<br/>
<br/>#define ANG_TO_RAD 0.0174532925
<br/>
<br/>class angle {
<br/> double deg_value;
Лабораторная работа № 5
Объектно-ориентированное программирование (ООП). Описание класса (2 часа)
Цель работы: изучение правил описания и использования классов и объектов.
Порядок выполнения работы
1.Провести анализ примеров. Программы из примеров копируются в файлы С++ и выполняются.
2.Выполнить задания.
3.Защитить выполненную работу.
Контрольные вопросы
1.Как работают программы примеров?
2.Какие преимущества даёт использование ООП?
Пример Демонстрация использования классов для работы с тригонометрическими функциями.
В приведенном примере описан новый тип – класс angle. В состав класса включена внутренняя переменная deg_value типа double. Четыре функции являются функциями-членами: set_value(), print (), get_sinus() и get_rad(). С классом angle связан объект данных, имя которого – degree.
Переменная deg_value является внутренней для класса angle и доступ к ней возможен только через функции-члены. Каждая из функций-членов связывается с классом angle оператором ::. Инициализацию переменной выполняет функция set_value(). Обращение к ней выполняется из функции main (). Оператор '.' связывает функцию с конкретным объектом типа angle. Функция set_value (), получив управление, выводит на стандартный вывод приглашение и принимает значение введенного угла. После этого функция main() передает управление функции печати print(), которая оператором . связывается с конкретным экземпляром класса angle, в данном случае – с degree. Функция print() из своих пределов обращается к еще одной функции-члену класса angle – get_rad(). Функция get_rad() вычисляет значение угла deg_value в радианах. Самой последней в main() вызывается функция-член get_sinus() для определения синуса угла deg_value.
Заданиe
Задание лабораторной работы 4 реализовать с использованием объектно-ориентированного программирования.
Решение by 4upuk
Решение by Алексей Борисенко:
Объектно-ориентированное программирование (ООП). Описание класса (2 часа)
Цель работы: изучение правил описания и использования классов и объектов.
Порядок выполнения работы
1.Провести анализ примеров. Программы из примеров копируются в файлы С++ и выполняются.
2.Выполнить задания.
3.Защитить выполненную работу.
Контрольные вопросы
1.Как работают программы примеров?
2.Какие преимущества даёт использование ООП?
Пример Демонстрация использования классов для работы с тригонометрическими функциями.
#include <iostream.h>
#include <math.h>
#define ANG_TO_RAD 0.0174532925
class angle {
double deg_value;
public:
void set_value(void);
void print (void);
double get_sinus(void);
double get_rad (void); } degree;
void angle::set_value(void)
{
cout << "Введите угол в градусах: ";
cin >> deg_value;
}
void angle:: print(void)
{
cout << "Угол в градусах - " << deg_value << '\n';
cout << "Угол в радианах - " << get_rad() << '\n';
}
double angle::get_sinus(void)
{
double int_var;
int_var = sin(ANG_TO_RAD * deg_value);
return (int_var);
}
double angle::get_rad(void)
{
return (ANG_TO_RAD * deg_value);
}
void main(void)
{
degree.set_value();
degree.print();
cout << "Синус угла равен " << degree.get_sinus() << '\n';
}Примечание. В приведенном примере описан новый тип – класс angle. В состав класса включена внутренняя переменная deg_value типа double. Четыре функции являются функциями-членами: set_value(), print (), get_sinus() и get_rad(). С классом angle связан объект данных, имя которого – degree.
Переменная deg_value является внутренней для класса angle и доступ к ней возможен только через функции-члены. Каждая из функций-членов связывается с классом angle оператором ::. Инициализацию переменной выполняет функция set_value(). Обращение к ней выполняется из функции main (). Оператор '.' связывает функцию с конкретным объектом типа angle. Функция set_value (), получив управление, выводит на стандартный вывод приглашение и принимает значение введенного угла. После этого функция main() передает управление функции печати print(), которая оператором . связывается с конкретным экземпляром класса angle, в данном случае – с degree. Функция print() из своих пределов обращается к еще одной функции-члену класса angle – get_rad(). Функция get_rad() вычисляет значение угла deg_value в радианах. Самой последней в main() вызывается функция-член get_sinus() для определения синуса угла deg_value.
Заданиe
Задание лабораторной работы 4 реализовать с использованием объектно-ориентированного программирования.
Решение by 4upuk
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct time { int den;
long int chas;
long int minuta;
long int sekunda;};
class date { public:
struct time Time;
int perevod(long int);
} t_date;
void main(void)
{
int Q,sv,c;
long int sek;
char* nedelja[7] = { "понедельник"вторник","среда",
"четверг","пятница ","суббота","воскресенье"};
clrscr();
printf("Vibirete format vremeni:");
printf("V sekundah(press1)");
printf("V 4asah, minutah, sekundah(press2)");
scanf("%d",&sv);
switch(sv)
{ case 1: printf("vvedite vremja v secundah");
scanf("%li",&(sek));
t_date.perevod(sek);
printf("\nperevedennoe is sekund vremja %lichas(a) %liminut(y) %lisekund(y)",
t_date.Time.chas,t_date.Time.minuta,t_date.Time.sekunda);
printf("\nDen' nedeli %s,\nego nomer %d",nedelja[t_date.Time.den],t_date.Time.den+1);
getch();break;
case 2: printf("vvedite den'");
scanf("%d",&t_date.Time.den);
printf("vvedite chas");
scanf("%li",&(t_date.Time.chas));
printf("vvedite min");
scanf("%li",&(t_date.Time.minuta));
printf("vvedite sek");
scanf("%li",&(t_date.Time.sekunda));
printf("\nOmskoe vremja %lichasa(ov) %liminut(i) %lisekund(i) ",
t_date.Time.chas,t_date.Time.minuta,t_date.Time.sekunda);
printf("\nDen' nedeli %s",nedelja[t_date.Time.den-1]);
getch(); break;
}
}
int date:: perevod(long int sek)
{
Time.den=sek/86400;
Time.chas=sek/3600-Time.den*24;
Time.minuta=(sek-(Time.den-1)*86400)%3600/60;
Time.sekunda=(sek-(Time.den-1)*86400)%3600%60;
return(0);
} Решение by Алексей Борисенко:
#include<stdio.h>
#include<conio.h>
#include<time.h>
enum WEEK { pon=1,
vtor,
sred,
chetv,
pjatn,
subb,
voskr};
struct TIME{
int hours;
int min;
int sec;};
class DATE{ public:
enum WEEK data;
struct TIME m_time;
int perevod(unsigned int);
void vvod(struct DATE* ptr);
void timer(void);
} m_date,*ptr;
int d_dat;
void main()
{
clrscr();
// struct DATE
int index,d_kon,t_tim,a,b,c,ipon,f;
unsigned int res;
char *d_ned[7]={"ponedelnik","vtornik","sreda","chetverg","pjatnitsa",
"subbota","voskresen'e"};
printf("vvedite den' nedeli ");
scanf("%d", &d_dat);
printf("vvedite vremja:v sekundah(press1)\n"
"v formate hours, min, sec(press2)\n"
"mozhno vospolzovatsja sistemnim timerom(press3)");
scanf("%d",&index);
switch(index)
{ case 1: printf("vvodite ");scanf("%u",&res);m_date.perevod(res); break;
case 2: ptr=&m_date; m_date.vvod( ptr ); break;
case 3: m_date.timer(); break;
default: return;
}
ipon=m_date.data=pon;
f=m_date.data=voskr;
d_kon=f-d_dat;
t_tim=d_kon*24;
a=t_tim+(23-m_date.m_time.hours);
b=59-m_date.m_time.min;
c=60-m_date.m_time.sec;
printf("\nPonedelnik %d den nedeli.\nSejchas %d den nedeli. Tochnee %s\n"
"Do kontsa nedeli %d dnej(dnja).\nTochnee %d chasov %d min %d sec",
ipon, d_dat,d_ned[d_dat-1],d_kon,a,b,c);
getch();
}
int DATE::perevod(unsigned int sec)
{
unsigned int ch,m,s;
// printf("vvedite vremja v sekundah ");
// scanf("%u",&sec);
printf("%u\n",sec);
ch=sec/3600;
m=(sec%3600)/60;
s=(sec%3600)%60;
printf("%u chasov %umin, %usec",ch,m,s);
m_date.m_time.hours=ch;
m_date.m_time.min=m;
m_date.m_time.sec=s;
return 0;
}
void DATE::vvod(struct DATE* ptr)
{ printf("vvedite vremja: hours, min, sec ");
scanf ("%d,%d,%d",&ptr->m_time.hours,&ptr->m_time.min,&ptr->m_time.sec);
//printf ("%d,%d,%d",ptr->m_time.hours,ptr->m_time.min,ptr->m_time.sec);
}
void DATE::timer(void)
{time_t ltime;
time(<ime);
tm *ptr;
ptr=localtime(<ime);
m_date.m_time.hours=ptr->tm_hour;
m_date.m_time.min=ptr->tm_min;
m_date.m_time.sec=ptr->tm_sec;
d_dat=ptr->tm_wday;
printf("sys timer %d:%d:%d",m_date.m_time.hours,m_date.m_time.min,m_date.m_time.sec);
}
По материалам ОмГУПС, все права защищены... :P Лента материалов
Правила размещения комментариев
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.


Сейчас обсуждают