Разработка алгоритма программы на языке С++, которая вычисляет значения емкости и чувствительности плоского и цилиндрического датчиков
Постановка задачи
В измерительной технике широко используются
датчики ёмкости. Так для измерения толщины тонкой ленты из диэлектрика
применяется плоскопараллельный датчик.
Его ёмкость вычисляется по формуле:
где
- ёмкость датчика(ПФ)
- расстояние между обложками
конденсатора (см)
- толщина ленты (см)
- относительная диэлектрическая
проницаемость материала ленты.
- площадь обложек конденсатора (см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 обнуляются.
|
Конструктор
с инициализацией. Параметрам 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<math.h>
# include<fstream.h>
# include<stdlib.h>
# include<stdio.h>
# include<conio.h>
//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'dat4ik
{:C;ksi;E;//zadano v faile:void
vvod_dannih_iz_faila(char*s)=0;void vi4islenie_C_ksi()=0;void
vivod_v_fail_rezyltatov(char*s)=0;void vivod_na_ekran_rezylatov()=0;
//Proizvodnii klass
'Dat4ik_ploskii'dat4ik_ploskii:public dat4ik
{:S; //zadano v failed; //zadano v
failedelta;//zadano v faile:ik_ploskii();ik_ploskii(float E_ymol4a,float
S_ymol4a, float d_ymol4a, float delta_ymol4a);ik_ploskii(dat4ik_ploskii
&a);void vvod_dannih_iz_faila(char*s);void vi4islenie_C_ksi();void
vivod_v_fail_rezyltatov(char*s);void vivod_na_ekran_rezylatov();ik_ploskii&operator=(const
dat4ik_ploskii&a);
};ik_ploskii::dat4ik_ploskii()
{=0;=0;=0;=0;=0;=0;
}ik_ploskii::dat4ik_ploskii(float
E_ymol4a,float S_ymol4a, float d_ymol4a, float delta_ymol4a)
{=E_ymol4a;=S_ymol4a;=d_ymol4a;=delta_ymol4a;=0;=0;
}ik_ploskii::dat4ik_ploskii(dat4ik_ploskii
&a)
{=a.E;=a.S;=a.d;=a.delta;
}dat4ik_ploskii::vvod_dannih_iz_faila(char*s)
{fin(s);(!fin)
{<<"Izvinite, no k
sogaleniju fail '"<<s<<"' ne
otkrilsja."<<endl;(1);
}>>E;>>d;>>delta;>>S;
}dat4ik_ploskii::vi4islenie_C_ksi()
{=0.089*S/(d-(1-1/E)*delta);=0.089*S*(1-1/E)/pow(
(d- (1-1/E)* delta) ,2);
}dat4ik_ploskii::vivod_v_fail_rezyltatov(char*s)
{fout(s);<<"Ishodanie
dannie:"<<endl;<<"
E="<<E<<endl;<<"
S="<<S<<endl;<<"
d="<<d<<endl;<<"
delta="<<delta<<endl<<endl;<<"Rezyltati:"<<endl;<<"
V ploskom dat4ike C="<<C<<endl;<<" V ploskom
dat4ike Ksi="<<ksi<<endl;
}dat4ik_ploskii::vivod_na_ekran_rezylatov()
{<<" V ploskom dat4ike
C="<<C<<endl;<<" V ploskom dat4ike
Ksi="<<ksi<<endl<<endl;
}ik_ploskii&dat4ik_ploskii::operator=(const
dat4ik_ploskii&a)
{=a.E;=a.S;=a.d;=a.delta;*this;
}
//Proizvodnii klass
'Dat4ik_cilindri4eskii'dat4ik_cilindri4eskii:public dat4ik
{:H; //zadano v faileh; //zadano v
failed1,d2;//zadano v faile:ik_cilindri4eskii();ik_cilindri4eskii(float
E_ymol4a,float H_ymol4a, float h_ymol4a, float d1_ymol4a,float
d2_ymol4a);ik_cilindri4eskii(dat4ik_cilindri4eskii &b);void
vvod_dannih_iz_faila(char*s);void vi4islenie_C_ksi();void
vivod_v_fail_rezyltatov(char*s);void
vivod_na_ekran_rezylatov();ik_cilindri4eskii&operator=(const
dat4ik_cilindri4eskii&b);
};ik_cilindri4eskii::dat4ik_cilindri4eskii()
{=0;=0;=0;=0;=0;=0;=0;
}ik_cilindri4eskii::dat4ik_cilindri4eskii(float
E_ymol4a,float H_ymol4a, float h_ymol4a, float d1_ymol4a,float d2_ymol4a)
{=E_ymol4a;=H_ymol4a;=h_ymol4a;=d1_ymol4a;=d2_ymol4a;=0;=0;
}ik_cilindri4eskii::dat4ik_cilindri4eskii(dat4ik_cilindri4eskii
&b)
{=b.E;=b.H;=b.h;=b.d1;=b.d2;
}dat4ik_cilindri4eskii::vvod_dannih_iz_faila(char*s)
{fin(s);(!fin)
{<<"Izvinite, no k
sogaleniju fail '"<<s<<"' ne otkrilsja."<<endl;(1);
}>>E;>>H;>>h;>>d1;>>d2;
}dat4ik_cilindri4eskii::vi4islenie_C_ksi()
{=0.6*(H+(E-1)*h)/(log(d2/d1));=0.56*(E-1)/(log(d2/d1));
}dat4ik_cilindri4eskii::vivod_v_fail_rezyltatov(char*s)
{fout(s);<<"Ishodanie
dannie:"<<endl;<<" E="<<E<<endl;<<"
H="<<H<<endl;<<"
h="<<h<<endl;<<"
d1="<<d1<<endl;<<"
d2="<<d2<<endl<<endl;<<"Rezyltati:"<<endl;<<"V
cilindri4eskom dat4ike C="<<C<<endl;<<"V
cilindri4eskom dat4ike Ksi="<<ksi<<endl;
}dat4ik_cilindri4eskii::vivod_na_ekran_rezylatov()
{<<" V cilindri4eskom
dat4ike C="<<C<<endl;<<" V cilindri4eskom dat4ike
Ksi="<<ksi<<endl<<endl;
}ik_cilindri4eskii&dat4ik_cilindri4eskii::operator=(const
dat4ik_cilindri4eskii&b)
{=b.E;=b.H;=b.h;=b.d1;=b.d2;*this;
}main()
{ik_ploskii x,
x_ymol4aniju(E_ymol4aniju_p, S_ymol4aniju, d_ymol4aniju,
delta_ymol4aniju),x_kopirivanie(x_ymol4aniju),x_prisvaivanie;ik_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<<"Ploskii
dat4ik"<<endl<<endl;<<"Dannie vzjati iz
faila"<<endl;.vvod_dannih_iz_faila("polihlor.txt");.vi4islenie_C_ksi();.vivod_v_fail_rezyltatov("rez_p.txt");.vivod_na_ekran_rezylatov();<<"Dannie
vzjati po ymol4aniju"<<endl;_ymol4aniju.vi4islenie_C_ksi();_ymol4aniju.vivod_na_ekran_rezylatov();<<"Dannie
vzjati s pomowjiju konstryktora
kopirovanija"<<endl;_kopirivanie.vi4islenie_C_ksi();_kopirivanie.vivod_na_ekran_rezylatov();<<"Dannie
vzjati s pomowjiju operacii prisvaivanija"<<endl;_prisvaivanie=x;_prisvaivanie.vi4islenie_C_ksi();_prisvaivanie.vivod_na_ekran_rezylatov();();
//rabota s cilindri4eskim
dat4ikom<<"Cilindri4eskiii
dat4ik"<<endl<<endl;<<"Dannie vzjati iz
faila"<<endl;.vvod_dannih_iz_faila("voda.txt");.vi4islenie_C_ksi();.vivod_v_fail_rezyltatov("rez_v.txt");.vivod_na_ekran_rezylatov();<<"Dannie
vzjati po
ymol4aniju"<<endl;_ymol4aniju.vi4islenie_C_ksi();_ymol4aniju.vivod_na_ekran_rezylatov();<<"Dannie
vzjati s pomowjiju konstryktora kopirovanija"<<endl;_kopirivanie.vi4islenie_C_ksi();_kopirivanie.vivod_na_ekran_rezylatov();<<"Dannie
vzjati s pomowjiju operacii
prisvaivanija"<<endl;_prisvaivanie=y;_prisvaivanie.vi4islenie_C_ksi();_prisvaivanie.vivod_na_ekran_rezylatov();
getch();
}
Результаты в виде таблиц и графиков.
Плоский датчик
Исходные данные:
E=3.4
d=5 см=1
см=9
см2
Результаты программы:
Результаты в Excel:
Е=
|
3,4
|
C=
|
0,18653425
|
d=
|
5
|
ksi=
|
0,03066316
|
delta=
|
1
|
|
|
S=
|
|
|
Цилиндрический
датчик
Исходные данные
E=80=100=50=5=10
Результаты
программы:
Результаты в Excel:
E=
|
80
|
C=
|
3505,74895
|
H=
|
100
|
ksi=
|
63,8248286
|
h=
|
50
|
|
|
d1=
|
5
|
|
|
d2=
|
10
|
|
|
Выводы
Выполняя курсовую работу, разработан алгоритм
программы на языке Си++, которая вычисляет значения ёмкости и чувствительности
плоского и цилиндрического датчиков.
Исходные данные берутся из файлов «polihlor.txt»
и «voda.txt»
соответственно.
Результаты программы заносятся в файлы «REZ_P.txt»
и «REZ_V.txt»
соответственно.
Работоспособность алгоритма и программы
проверена на контрольных примерах.
Список использованной литературы
1. Курс
дистанционного бучения по предмету «Системное программирование». Авраменко
Виктор Васильевич
2. «Язык
программирования C++. Специальное издание» Страуструп Б.
<http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D0%B0%D1%83%D1%81%D1%82%D1%80%D1%83%D0%BF,_%D0%91%D1%8C%D1%91%D1%80%D0%BD>
3. «Дизайн и
эволюция C++»
Страуструп Б.
<http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D0%B0%D1%83%D1%81%D1%82%D1%80%D1%83%D0%BF,_%D0%91%D1%8C%D1%91%D1%80%D0%BD>