Разработка алгоритма программы на языке С++, которая вычисляет значения емкости и чувствительности плоского и цилиндрического датчиков
Функция, которая выводит результирующие данные на экран. Чистая виртуальная функция. Функция, которая вычисляет значения параметров С и о. Чистая виртуальная функция. Значения, использующиеся в конструкторе с инициализацией для плоского датчика. Функция, которая выводит исходные E, d, delta, S и результирующие С, о данные в файл. Функция, которая выводит исходные E, H, h, d1, d2 и результирующие… Читать ещё >
Разработка алгоритма программы на языке С++, которая вычисляет значения емкости и чувствительности плоского и цилиндрического датчиков (реферат, курсовая, диплом, контрольная)
Постановка задачи
В измерительной технике широко используются датчики ёмкости. Так для измерения толщины тонкой ленты из диэлектрика применяется плоскопараллельный датчик.
Его ёмкость вычисляется по формуле:
где
— ёмкость датчика (ПФ)
— расстояние между обложками конденсатора (см)
— толщина ленты (см)
— относительная диэлектрическая проницаемость материала ленты.
— площадь обложек конденсатора (см2)
Чувствительность датчика:
где
— чувствительность (ПФ/см) Ещё один датчик ёмкости применяется для измерения уровня жидкости. Его ёмкость измеряется по формуле:
где
— ёмкость датчика (ПФ)
— высота электрода (см)
— уровень жидкости (см)
— относительная диэлектрическая проницаемость жидкости.
— диаметры внутреннего и внешнего электродов датчика (см2)
Чувствительность датчика:
Описать абстрактный класс «Датчик» с элементами данных С, о. Предусмотреть чистые виртуальные функции:
1) Чтение данных из файла
2) Расчеты параметров С, о.
3) Занос в файл результатов и входных данных.
Описать походные от абстрактного классы «Датчик_плоский» «Датчик_цилиндр». Предвидеть в них необходимые элементы данных.
Кроме виртуальных функций предвидеть перевантажену операцию присвоения, а также конструкторы: пустой, с инициализацией и копирования.
Привести пример программы, в которой применить все конструкторы, члены функций и оператор присвоения.
Для воды =80. Для полихлорвинила =3,4. Другие данные задать самостоятельно.
Таблица символических имен
Макроопределения #define | ||
E_ymol4aniju_p | Значения, использующиеся в конструкторе с инициализацией для плоского датчика. | |
d_ymol4aniju | ||
delta_ymol4aniju | ||
S_ymol4aniju | ||
E_ymol4aniju_c | Значения, использующиеся в конструкторе с инициализацией для цилиндрического датчика. | |
H_ymol4aniju | ||
h_ymol4aniju | ||
d1_ymol4aniju | ||
d2_ymol4aniju | ||
Абстрактный класс Dat4ik | ||
C | Ёмкость датчика. Это значение нужно вычислить. | |
ksi | Чувствительность датчика. Это значение нужно вычислить. | |
E | Относительная диэлектрическая проницаемость материала ленты. Это значение дано в условии. | |
vvod_dannih_iz_faila | Функция, которая читает исходные данные из файла. Чистая виртуальная функция. | |
vi4islenie_C_ksi | Функция, которая вычисляет значения параметров С и о. Чистая виртуальная функция. | |
vivod_v_fail_rezyltatov | Функция, которая выводит исходные и результирующие данные в файл. Чистая виртуальная функция. | |
vivod_na_ekran_rezylatov | Функция, которая выводит результирующие данные на экран. Чистая виртуальная функция. | |
Класс dat4ik_ploskii | ||
S | Площадь обложек конденсатора. Это значение дано в условии. | |
d | Расстояние между обложками конденсатора. Это значение дано в условии. | |
delta | Толщина ленты. Это значение дано в условии. | |
dat4ik_ploskii () | Пустой конструктор. Параметры E, S, d, delta, C, ksi обнуляются. | |
dat4ik_ploskii (float E_ymol4a, float S_ymol4a, float d_ymol4a, float delta_ymol4a) | Конструктор с инициализацией. Параметрам E, S, d, delta присваиваются необходимые пользователю значения. А параметры C, о обнуляются. | |
dat4ik_ploskii (dat4ik_ploskii &a) | Конструктор копирования. | |
vvod_dannih_iz_faila | Функция, которая читает исходные данные E, d, delta, S из файла. | |
vi4islenie_C_ksi | Функция, которая вычисляет значения параметров С и о по заданным формулам. | |
vivod_v_fail_rezyltatov | Функция, которая выводит исходные E, d, delta, S и результирующие С, о данные в файл. | |
vivod_na_ekran_rezylatov | Функция, которая выводит результирующие данные С, о на экран. | |
dat4ik_ploskii&operator= (const dat4ik_ploskii&a) | Перевантажена операция присваивания. | |
Класс dat4ik_cilindri4eskii | ||
H | Высота электрода. Это значение дано в условии. | |
h | Уровень жидкости. Это значение дано в условии. | |
d1 | Диаметр внутреннего электрода датчика. Это значение дано в условии. | |
d2 | Диаметр внешнего электрода датчика. Это значение дано в условии. | |
dat4ik_cilindri4eskii (); | Пустой конструктор. Параметры E, H, h, d1, d2, C, о обнуляются. | |
dat4ik_cilindri4eskii (float E_ymol4a, float H_ymol4a, float h_ymol4a, float d1_ymol4a, float d2_ymol4a); | Конструктор с инициализацией. Параметрам E, H, h, d1, d2 присваиваются необходимые пользователю значения. А параметры C, о обнуляются. | |
dat4ik_cilindri4eskii (dat4ik_cilindri4eskii &b); | Конструктор копирования. | |
vvod_dannih_iz_faila | Функция, которая читает исходные данные E, H, h, d1, d2 из файла. | |
vi4islenie_C_ksi | Функция, которая вычисляет значения параметров С и о по заданным формулам. | |
vivod_v_fail_rezyltatov | Функция, которая выводит исходные E, H, h, d1, d2 и результирующие С, о данные в файл. | |
vivod_na_ekran_rezylatov | Функция, которая выводит результирующие данные С, о на экран. | |
dat4ik_cilindri4eskii&operator= (const dat4ik_cilindri4eskii&b); | Перевантажена операция присваивания. | |
емкость датчик чувствительность программа
Функция main | ||
x | Параметры типа dat4ik_ploskii. С их помощью показываем работу всех конструкторов, операторов и функций класса dat4ik_ploskii. | |
x_ymol4aniju (E_ymol4aniju_p, d_ymol4aniju, delta_ymol4aniju) | ||
x_kopirivanie (x_ymol4aniju) | ||
x_prisvaivanie | ||
y | Параметры типа dat4ik_cilindri4eskii. С их помощью показываем работу всех конструкторов, операторов и функций класса dat4ik_cilindri4eskii. | |
y_ymol4aniju (E_ymol4aniju_c, H_ymol4aniju, h_ymol4aniju, | ||
y_kopirivanie (y_ymol4aniju) | ||
y_prisvaivanie; | ||
Текст программы на языке Си. Результаты в виде таблиц и графиков
Текст программы на языке Си.
# include
# include
# include
# include
# include
//zna4enija po ymol4aniju dlja parametrov ploskogo dat4ika
# define E_ymol4aniju_p 3.4
# define d_ymol4aniju 5
# define delta_ymol4aniju 1
# define S_ymol4aniju 9
//zna4enija po ymol4aniju dlja parametrov cilindri4eskogo dat4ika
# define E_ymol4aniju_c 80
# define H_ymol4aniju 100
# define h_ymol4aniju 50
# define d1_ymol4aniju 5
# define d2_ymol4aniju 10
//Abstraktnii klass 'Dat4ik'
class dat4ik
{
protected:
float C;
float ksi;
float E;//zadano v faile
public:
virtual void vvod_dannih_iz_faila (char*s)=0;
virtual void vi4islenie_C_ksi ()=0;
virtual void vivod_v_fail_rezyltatov (char*s)=0;
virtual void vivod_na_ekran_rezylatov ()=0;
};
//Proizvodnii klass 'Dat4ik_ploskii'
class dat4ik_ploskii:public dat4ik
{
protected:
float S; //zadano v faile
float d; //zadano v faile
float delta;//zadano v faile
public:
dat4ik_ploskii ();
dat4ik_ploskii (float E_ymol4a, float S_ymol4a, float d_ymol4a, float delta_ymol4a);
dat4ik_ploskii (dat4ik_ploskii &a);
virtual void vvod_dannih_iz_faila (char*s);
virtual void vi4islenie_C_ksi ();
virtual void vivod_v_fail_rezyltatov (char*s);
virtual void vivod_na_ekran_rezylatov ();
dat4ik_ploskii&operator=(const dat4ik_ploskii&a);
};
dat4ik_ploskii:dat4ik_ploskii ()
{
E=0;
S=0;
d=0;
delta=0;
C=0;
ksi=0;
}
dat4ik_ploskii:dat4ik_ploskii (float E_ymol4a, float S_ymol4a, float d_ymol4a, float delta_ymol4a)
{
E=E_ymol4a;
S=S_ymol4a;
d=d_ymol4a;
delta=delta_ymol4a;
C=0;
ksi=0;
}
dat4ik_ploskii:dat4ik_ploskii (dat4ik_ploskii &a)
{
E=a.E;
S=a.S;
d=a.d;
delta=a.delta;
}
void dat4ik_ploskii:vvod_dannih_iz_faila (char*s)
{
ifstream fin (s);
if (!fin)
{
cout<<" Izvinite, no k sogaleniju fail '" <<" ' ne otkrilsja." <
exit (1);
}
fin>>E;
fin>>d;
fin>>delta;
fin>>S;
}
void dat4ik_ploskii:vi4islenie_C_ksi ()
{
C=0.089*S/(d-(1−1/E)*delta);
ksi=0.089*S*(1−1/E)/pow ((d- (1−1/E)* delta), 2);
}
void dat4ik_ploskii:vivod_v_fail_rezyltatov (char*s)
{
ofstream fout (s);
fout<<" Ishodanie dannie:" <
fout<<" E="<
fout<<" S="<
fout<<" d="<
fout<<" delta="<
fout<<" Rezyltati:" <
fout<<" V ploskom dat4ike C="<
fout<<" V ploskom dat4ike Ksi="<
}
void dat4ik_ploskii:vivod_na_ekran_rezylatov ()
{
cout<<" V ploskom dat4ike C="<
cout<<" V ploskom dat4ike Ksi="<
}
dat4ik_ploskii&dat4ik_ploskii:operator=(const dat4ik_ploskii&a)
{
E=a.E;
S=a.S;
d=a.d;
delta=a.delta;
return *this;
}
//Proizvodnii klass 'Dat4ik_cilindri4eskii'
class dat4ik_cilindri4eskii:public dat4ik
{
protected:
float H; //zadano v faile
float h; //zadano v faile
float d1, d2;//zadano v faile
public:
dat4ik_cilindri4eskii ();
dat4ik_cilindri4eskii (float E_ymol4a, float H_ymol4a, float h_ymol4a, float d1_ymol4a, float d2_ymol4a);
dat4ik_cilindri4eskii (dat4ik_cilindri4eskii &b);
virtual void vvod_dannih_iz_faila (char*s);
virtual void vi4islenie_C_ksi ();
virtual void vivod_v_fail_rezyltatov (char*s);
virtual void vivod_na_ekran_rezylatov ();
dat4ik_cilindri4eskii&operator=(const dat4ik_cilindri4eskii&b);
};
dat4ik_cilindri4eskii:dat4ik_cilindri4eskii ()
{
E=0;
H=0;
h=0;
d1=0;
d2=0;
C=0;
ksi=0;
}
dat4ik_cilindri4eskii:dat4ik_cilindri4eskii (float E_ymol4a, float H_ymol4a, float h_ymol4a, float d1_ymol4a, float d2_ymol4a)
{
E=E_ymol4a;
H=H_ymol4a;
h=h_ymol4a;
d1=d1_ymol4a;
d2=d2_ymol4a;
C=0;
ksi=0;
}
dat4ik_cilindri4eskii:dat4ik_cilindri4eskii (dat4ik_cilindri4eskii &b)
{
E=b.E;
H=b.H;
h=b.h;
d1=b.d1;
d2=b.d2;
}
void dat4ik_cilindri4eskii:vvod_dannih_iz_faila (char*s)
{
ifstream fin (s);
if (!fin)
{
cout<<" Izvinite, no k sogaleniju fail '" <<" ' ne otkrilsja." <
exit (1);
}
fin>>E;
fin>>H;
fin>>h;
fin>>d1;
fin>>d2;
}
void dat4ik_cilindri4eskii:vi4islenie_C_ksi ()
{
C=0.6*(H+(E-1)*h)/(log (d2/d1));
ksi=0.56*(E-1)/(log (d2/d1));
}
void dat4ik_cilindri4eskii:vivod_v_fail_rezyltatov (char*s)
{
ofstream fout (s);
fout<<" Ishodanie dannie:" <
fout<<" E="<
fout<<" H="<
fout<<" h="<
fout<<" d1="<
fout<<" d2="<
fout<<" Rezyltati:" <
fout<<" V cilindri4eskom dat4ike C="<
fout<<" V cilindri4eskom dat4ike Ksi="<
}
void dat4ik_cilindri4eskii:vivod_na_ekran_rezylatov ()
{
cout<<" V cilindri4eskom dat4ike C="<
cout<<" V cilindri4eskom dat4ike Ksi="<
}
dat4ik_cilindri4eskii&dat4ik_cilindri4eskii:operator=(const dat4ik_cilindri4eskii&b)
{
E=b.E;
H=b.H;
h=b.h;
d1=b.d1;
d2=b.d2;
return *this;
}
void main ()
{
dat4ik_ploskii x, x_ymol4aniju (E_ymol4aniju_p, S_ymol4aniju, d_ymol4aniju, delta_ymol4aniju), x_kopirivanie (x_ymol4aniju), x_prisvaivanie;
dat4ik_cilindri4eskii y, y_ymol4aniju (E_ymol4aniju_c, H_ymol4aniju, h_ymol4aniju, d1_ymol4aniju, d2_ymol4aniju), y_kopirivanie (y_ymol4aniju), y_prisvaivanie;
//rabota s ploskim dat4ikom
cout<<" Ploskii dat4ik" <
cout<<" Dannie vzjati iz faila" <
x.vvod_dannih_iz_faila («polihlor.txt»);
x.vi4islenie_C_ksi ();
x.vivod_v_fail_rezyltatov («rez_p.txt»);
x.vivod_na_ekran_rezylatov ();
cout<<" Dannie vzjati po ymol4aniju" <
x_ymol4aniju.vi4islenie_C_ksi ();
x_ymol4aniju.vivod_na_ekran_rezylatov ();
cout<<" Dannie vzjati s pomowjiju konstryktora kopirovanija" <
x_kopirivanie.vi4islenie_C_ksi ();
x_kopirivanie.vivod_na_ekran_rezylatov ();
cout<<" Dannie vzjati s pomowjiju operacii prisvaivanija" <
x_prisvaivanie=x;
x_prisvaivanie.vi4islenie_C_ksi ();
x_prisvaivanie.vivod_na_ekran_rezylatov ();
getch ();
//rabota s cilindri4eskim dat4ikom
cout<<" Cilindri4eskiii dat4ik" <
cout<<" Dannie vzjati iz faila" <
y.vvod_dannih_iz_faila («voda.txt»);
y.vi4islenie_C_ksi ();
y.vivod_v_fail_rezyltatov («rez_v.txt»);
y.vivod_na_ekran_rezylatov ();
cout<<" Dannie vzjati po ymol4aniju" <
y_ymol4aniju.vi4islenie_C_ksi ();
y_ymol4aniju.vivod_na_ekran_rezylatov ();
cout<<" Dannie vzjati s pomowjiju konstryktora kopirovanija" <
y_kopirivanie.vi4islenie_C_ksi ();
y_kopirivanie.vivod_na_ekran_rezylatov ();
cout<<" Dannie vzjati s pomowjiju operacii prisvaivanija" <
y_prisvaivanie=y;
y_prisvaivanie.vi4islenie_C_ksi ();
y_prisvaivanie.vivod_na_ekran_rezylatov ();
getch ();
}
Результаты в виде таблиц и графиков.
Плоский датчик
Исходные данные:
E=3.4
d=5 см
delta=1 см
S=9 см2
Результаты программы:
Результаты в Excel:
Е= | 3,4 | C= | 0,18 653 425 | |
d= | ksi= | 0,3 066 316 | ||
delta= | ||||
S= | ||||
Цилиндрический датчик
Исходные данные
E=80
H=100
h=50
d1=5
d2=10
Результаты программы:
Результаты в Excel:
E= | C= | 3505,74 895 | ||
H= | ksi= | 63,8 248 286 | ||
h= | ||||
d1= | ||||
d2= | ||||
Выводы
Выполняя курсовую работу, разработан алгоритм программы на языке Си++, которая вычисляет значения ёмкости и чувствительности плоского и цилиндрического датчиков.
Исходные данные берутся из файлов «polihlor.txt» и «voda.txt» соответственно.
Результаты программы заносятся в файлы «REZ_P.txt» и «REZ_V.txt» соответственно.
Работоспособность алгоритма и программы проверена на контрольных примерах.
1. Курс дистанционного бучения по предмету «Системное программирование». Авраменко Виктор Васильевич
2. «Язык программирования C++. Специальное издание» Страуструп Б.
3. «Дизайн и эволюция C++» Страуструп Б.