Разработка алгоритма программы на языке С++, которая вычисляет значения емкости и чувствительности плоского и цилиндрического датчиков

Формулы расчета емкости плоскопараллельного датчика и его чувствительности. Таблица символических имен: макроопределения, абстрактные классы и функции. Текст программы на языке Си. Результаты в виде таблиц и графиков. Анализ работоспособности программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 03.11.2012
Размер файла 988,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Постановка задачи

В измерительной технике широко используются датчики ёмкости. Так для измерения толщины тонкой ленты из диэлектрика применяется плоскопараллельный датчик.

Его ёмкость вычисляется по формуле:

где

- ёмкость датчика(ПФ)

- расстояние между обложками конденсатора (см)

- толщина ленты (см)

- относительная диэлектрическая проницаемость материала ленты.

- площадь обложек конденсатора (см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<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'

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 '"<<s<<"' ne otkrilsja."<<endl;

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:"<<endl;

fout<<" E="<<E<<endl;

fout<<" S="<<S<<endl;

fout<<" d="<<d<<endl;

fout<<" delta="<<delta<<endl<<endl;

fout<<"Rezyltati:"<<endl;

fout<<" V ploskom dat4ike C="<<C<<endl;

fout<<" V ploskom dat4ike Ksi="<<ksi<<endl;

}

void dat4ik_ploskii::vivod_na_ekran_rezylatov()

{

cout<<" V ploskom dat4ike C="<<C<<endl;

cout<<" V ploskom dat4ike Ksi="<<ksi<<endl<<endl;

}

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 '"<<s<<"' ne otkrilsja."<<endl;

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:"<<endl;

fout<<" E="<<E<<endl;

fout<<" H="<<H<<endl;

fout<<" h="<<h<<endl;

fout<<" d1="<<d1<<endl;

fout<<" d2="<<d2<<endl<<endl;

fout<<"Rezyltati:"<<endl;

fout<<"V cilindri4eskom dat4ike C="<<C<<endl;

fout<<"V cilindri4eskom dat4ike Ksi="<<ksi<<endl;

}

void dat4ik_cilindri4eskii::vivod_na_ekran_rezylatov()

{

cout<<" V cilindri4eskom dat4ike C="<<C<<endl;

cout<<" V cilindri4eskom dat4ike Ksi="<<ksi<<endl<<endl;

}

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"<<endl<<endl;

cout<<"Dannie vzjati iz faila"<<endl;

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"<<endl;

x_ymol4aniju.vi4islenie_C_ksi();

x_ymol4aniju.vivod_na_ekran_rezylatov();

cout<<"Dannie vzjati s pomowjiju konstryktora kopirovanija"<<endl;

x_kopirivanie.vi4islenie_C_ksi();

x_kopirivanie.vivod_na_ekran_rezylatov();

cout<<"Dannie vzjati s pomowjiju operacii prisvaivanija"<<endl;

x_prisvaivanie=x;

x_prisvaivanie.vi4islenie_C_ksi();

x_prisvaivanie.vivod_na_ekran_rezylatov();

getch();

//rabota s cilindri4eskim dat4ikom

cout<<"Cilindri4eskiii dat4ik"<<endl<<endl;

cout<<"Dannie vzjati iz faila"<<endl;

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"<<endl;

y_ymol4aniju.vi4islenie_C_ksi();

y_ymol4aniju.vivod_na_ekran_rezylatov();

cout<<"Dannie vzjati s pomowjiju konstryktora kopirovanija"<<endl;

y_kopirivanie.vi4islenie_C_ksi();

y_kopirivanie.vivod_na_ekran_rezylatov();

cout<<"Dannie vzjati s pomowjiju operacii prisvaivanija"<<endl;

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,18653425

d=

5

ksi=

0,03066316

delta=

1

S=

9

Цилиндрический датчик

Исходные данные

E=80

H=100

h=50

d1=5

d2=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++. Специальное издание» Страуструп Б.

3. «Дизайн и эволюция C++» Страуструп Б.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.