Програмування у середовищі Turbo Pascal

Відновлення вхідного сигналу, який заданий графо-аналітично за способом розкладання на гармоніки методом Фур'є. Збереження даних спектрального аналізу у типізованих дискових файлах. Побудова таблиці символьних імен та лістинг програми мовою Turbo Pascal.

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

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

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

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

Міністерство освіти та науки України

Національний Гірничий Університет

Кафедра системного аналізу та управління

Курсова робота

з дисципліни: "Програмування"

Виконав:

Ст. гр. Саіт-10 Александров А.Ю.

Керівник: ас. Гаранжа Д.М.

Дніпропетровськ 2011

Зміст

  • Вступ
  • 1. Постановка задачі
  • 2. Таблиця символьних імен
  • 3. Блок-схеми
  • 4. Лістинг програми
  • 5. Лістинг результатів
  • Висновок
  • Список використаної літератури

Вступ

У науці та техніці часто мають справу з періодичними явищами - явищами, що повторюються через деякий проміжок часу T, який має назву період. Прикладом може бути рух електричної машини, що через певний проміжок часу робить оберт і проходить через своє початкове положення. Цей же принцип використовується і в більшості електротехнічних пристроїв, які базуються на змінному струмі. Наприклад, мережа побутового живлення має частоту 50 Гц. Це означає, що протягом секунди сигнал у мережі повторює своє початкове значення 50 разів.

Ця курсова робота виконана для відновлення вхідного сигналу, який заданий графо аналітично за методом розкладання на гармоніки методом Фур'є. У курсовій роботі наведені алгоритми та блок-схеми програм на мові Turbo Pascal, які реалізують поставлену задачу.

Мета роботи полягає у закріпленні навичок програмування у середі Turbo Pascal .

1. Постановка задачі

У ході виконання курсової роботи потрібно скласти схему алгоритму та програму, яка б обчислювала:

а) миттєве значення імпульсного сигналу на протязі двох періодів з виводом результатів у табличному та графічному вигляді;

б) значення шпаруватості, частоти та коефіцієнта заповнення імпульсів;

в) середнє значення напруги за час тривалості імпульсу;

г) спектральний склад імпульсів та активну ширину спектру;

д) діюче значення напруги за період.

Дані спектрального аналізу потрібно зберегти у типізованих дискових файлах.

Відновити сигнал за усіченим до заданої гармоніки спектрам,

прочитаним з дискового файлу. Спектр усікається за таким принципом:

5 + № варіанта = 5 + 1 = 6.

Активну довжину імпульсу на рівні 0,5А.

Середньоквадратичну похибку відновленого сигналу.

Додаткове завдання.

Конвертувати дані про поточні значення спектру сигналу в текстовий формат і зберегти на диску.

Вхідний сигнал задано формулою:

При: А=10V, =100ms, T=2000ms.

2. Вхідний сигнал

3. Лістинг програми

Program kursovoy;

uses Graph, CRT;

const

A=10;

tau=0.1;

Pr=2;

bigN=10000;

N=200;

N_usech=6;

eps=0.001;

dt=Pr/(n-1);

x0=20;

y0=240;

xz=100;

yz=20;

type

massiv=array [1..n] of real;

var GD, GM, GE: integer;

U1, U2: massiv; tu, k, q, f: real; ua: real;

procedure DFT(a,b: massiv; n,s: integer; var c,d: massiv);

var i, j: integer; arg:real; q,w:massiv;

begin

if s=1 then

for i:=1 to n do begin

c[i]:=0; d[i]:=0;

for j:=1 to n do begin

arg:=-2*pi*(j-1)*(i-1)/n;

c[i]:=c[i]+a[j]*cos(arg);

d[i]:=d[i]+a[j]*sin(arg);

end;

c[i]:=c[i]/n;

d[i]:=d[i]/n;

end

else

for i:=1 to n do begin

q[i]:=0; w[i]:=0;

for j:=1 to n do begin

arg:= 2*pi*(j-1)*(i-1)/n;

q[i]:=q[i]+a[j]*cos(arg)-b[j]*sin(arg);

w[i]:=w[i]+b[j]*cos(arg)-a[j]*sin(arg);

end;

c[i]:=sqrt(sqr(q[i])+sqr(w[i]));

if q[i]<=0 then

c[i]:=-c[i];

end;

end;

function F_U(t: real): real;

begin

if t <= (Pr/2) then

F_U:=-A*(1-exp(-1*t/tau))

else

F_U:=A*(1-exp(-1*(Pr-t)/tau));

end;

function Simpson_F9(sn: integer): real;

var a, b, h, s: real; i: integer;

begin

a:=Pr/2;

b:=Pr;

h:=(b-a)/(sn-1);

s:=0;

for i:=1 to sn-1 do

s:=s+4*F_U(a+i*h)+2*F_U(a+(i+1)*h);

Simpson_F9:=h*(s+F_U(a)-F_U(b))/3;

end;

function Simpson_F12(sn: integer): real;

var a, b, h, s: real; i: integer;

begin

a:=0;

b:=Pr;

h:=(b-a)/(sn-1);

s:=0;

for i:=1 to sn-1 do

s:=s+4*sqr(F_U(a+i*h))+2*sqr(F_U(a+(i+1)*h));

Simpson_F12:= h*(s+sqr(F_U(a))-sqr(F_U(b)))/3;

end;

procedure Graphic;

var x,y: real;

i: integer;

begin

x:=0;

y:=F_U(x);

U1[1]:=y;

MoveTo(x0+round(x*xz), y0-round(y*yz));

for i:=2 to n do begin

x:=x+dt;

y:=F_U(x);

U1[i]:=y;

LineTo(x0+round(x*xz), y0-round(y*yz));

end;

x:=0;

y:=F_U(x);

LineTo(x0+Pr*xz+round(x*xz), y0-round(y*yz));

for i:=2 to n do begin

x:=x+dt;

y:=F_U(x);

LineTo(x0+Pr*xz+round(x*xz), y0-round(y*yz));

end;

end;

procedure Graphic2;

var x,y: real;

i: integer;

begin

x:=0;

y:=U2[1];

MoveTo(x0+round(x*xz), y0-round(y*yz));

for i:=2 to n do begin

x:=x+dt;

y:=U2[i];

LineTo(x0+round(x*xz), y0-round(y*yz));

end;

x:=0;

y:=U2[1];

LineTo(x0+Pr*xz+round(x*xz), y0-round(y*yz));

for i:=2 to n do begin

x:=x+dt;

y:=U2[i];

LineTo(x0+Pr*xz+round(x*xz), y0-round(y*yz));

end;

end;

procedure Parametri_Impulsa;

var x, y, tx: real;

i, l: integer;

begin

l:=0;

x:=0;

tx:=Pr/(bigN-1);

for i:=1 to bigN do begin

if F_U(x) > 0 then inc(l);

x:=x+tx;

end;

tu:= round(100*(Pr*l/bigN))/100;

f:=1/Pr; {F7}

q:=Pr/tu; {F8}

k:=1/q;

writeln('Parametry impulsa:');

writeln('Chastota impulsa = ', f:0:2);

Writeln('');

writeln('Skvaznost = ', q:0:2);

Writeln('');

writeln('Koeficient zapolneniya impulsa = ', k:0:2);

end;

procedure Sr_Napryazenie;

var a, b, h1, h2: real;

sn1, sn2: integer;

begin

a:=Pr/2;

b:=Pr;

h1:=sqrt(eps);

h2:=h1/2;

sn1:=round((b-a)/h1)+1;

sn2:=round((b-a)/h2)+1;

while (Simpson_F9(sn2)-Simpson_F9(sn1)) > eps do

begin

sn1:=sn2;

h1:=h2;

h2:=h1/2;

sn2:=round((b-a)/h2)+1;

end;

writeln('Srednie napriajenie za vremea dlitelnosti impulsa = ', Simpson_F9(sn2)/tu:0:5);

Writeln('');

end;

procedure Parametri_Impulsa2;

var fr: file of real;

i, m: integer;

c, d, b: massiv;

s, f, sum: real;

begin

DFT(u1, b, n, 1, c, d);

assign(fr, 'save.dat');

rewrite(fr);

m:=0;

sum:=0;

for i:=1 to n do begin

s:=sqrt(sqr(c[i])+sqr(d[i]));

f:=-arctan(d[i]/c[i]);

write(fr, s, f);

sum:=sum+s/2;

if sum < 0.95*ua then inc(m);

end;

m:=m+1;

writeln('Aktivna shirina spektra m = ', m);

writeln('Parametry spektra sohraneny na disk');

close(fr);

end;

procedure Deistvyushee_Naprazenie;

var a, b, h1, h2: real;

sn1, sn2: longint;

begin

a:=0;

b:=Pr;

h1:=sqrt(eps);

h2:=h1/2;

sn1:=round((b-a)/h1)+1;

sn2:=round((b-a)/h2)+1;

while (Simpson_F12(sn2)-Simpson_F12(sn1)) > eps do begin

sn1:=sn2;

h1:=h2;

h2:=h1/2;

sn2:=round((b-a)/h2)+1;

end;

ua:=sqrt(Simpson_F12(sn2)/Pr);

writeln('Effectivnoe znachenie napryazeniya za period = ', ua:0:5);

end;

procedure Vostanovlenie_Signala;

var fr: file of real;

i: integer;

c, d, b: massiv;

s, f, sum: real;

begin

assign(fr, 'save.dat');

reset(fr);

for i:=1 to N_usech do begin

read(fr, s, f);

c[i]:=s*cos(f);

d[i]:=s*sin(f);

end;

for i:=N_usech+1 to n do begin

c[i]:=0;

d[i]:=0;

end;

DFT(c, d, n, -1, u2, b);

close(fr);

end;

procedure Impuls_Pri_05A;

var z: real;

i, l: integer;

begin

l:=0;

for i:=1 to n do begin

if U2[i] >= A/2 then inc(l);

end;

if l<>0 then z:=round(100*Pr *l/n)/100;

writeln('Aktivnaya dlina impulsa na urovne 0,5A = ', z:0:2);

end;

procedure SK_Oshibka;

var er: real;

i: integer;

begin

er:=0;

for i:=1 to n do

er:=er+sqr(u1[i]-u2[i]); {F16}

er:=sqrt(er/(n-1)/n);

writeln('Srednekvadraticheskaya oshibka = ', er:0:5);

end;

procedure Sohranenie;

var ft: text;

i: integer;

begin

assign(ft, 'save.txt');

rewrite(ft);

for i:=1 to n do writeln(ft, u2[i]:0:5);

close(ft);

end;

var i, j: integer;

x: real;

begin

ClrScr;

GD:=Detect;

InitGraph(GD, GM, '');

GE:=GraphResult;

if GE<>GrOk then

begin

writeln('Graph mode error!');

end;

SetColor(red);

Line(0, y0, 640, y0);

Line(x0, 0, x0, 480);

OutTextXY(5, 5, 'U');

OutTextXY(630, 245, 'T');

OutTextXY(5, 245, '0');

OutTextXY(x0+5+xz*2 div 2, 250, 'T/2');

OutTextXY(x0+5+xz*4 div 2, 250, 'T');

OutTextXY(x0+5+xz*6 div 2, 250, '3T/2');

OutTextXY(x0+5+xz*8 div 2, 250, '2T');

outTextXY(5, y0-yz*A, 'A');

outTextXY(0, y0+yz*A, '-A');

Line(15, y0-yz*A, 25, y0-yz*A);

Line(15, y0+yz*A, 25, y0+yz*A);

for i:=1 to 10 do begin

Line(x0+(xz*2*i) div 2, 235, x0+(xz*2*i) div 2, 245);

end;

SetColor(white);

Vostanovlenie_Signala;

graphic;

SetColor(green);

graphic2;

readln;

CloseGraph;

ClrScr;

Parametri_Impulsa;

Writeln('');

Sr_Napryazenie;

Writeln('');

Parametri_Impulsa2;

Writeln('');

Deistvyushee_Naprazenie;

Writeln('');

Impuls_Pri_05A;

Writeln('');

SK_Oshibka;

readln;

x:= 0;

for j:=1 to n div 20 do begin

ClrScr;

writeln('-------------------------------');

writeln('| t | U(t) | U2(t) |');

writeln('-------------------------------');

for i:=(j-1)*20+1 to j*20 do begin

writeln('| ', x:0:2, ' | ' ,U1[i]:0:2, ' ', '| ' ,U2[i]:0:2, ' |');

x:= x+dt;

end;

writeln('-------------------------------');

readln;

end;

Sohranenie;

end.

таблиця лістинг программа pascal

4. Блок-схеми

Рис.1. Блок-схема процедури DFT. Робить пряме та зворотне перетворення Фур'є

Рис.2. Блок-схема процедури F_U. Задає функцію

Рис.3. Блок-схема процедури Simpson_F9. Формулі Сімпсона для значення середньої напруги

Рис.4. Блок-схема процедури Simpson_F12. Формулі Сімпсона для значення ефективної напруги

Рис.5. Блок-схема процедури Graphic. Малює графік функції

Рис.6. Блок-схема процедури Graphic2. Малює графік відновленої функції

Рис.7. Блок-схема процедури Parametri_Impulsa. Розраховує шпаруватість, коефіцієнт та частоту заповнення імпульсу

Рис.8. Блок-схема процедури SR_Napryzenie. Розраховує значення середньої напруги

Рис.9. Блок-схема процедури Parametri_Impulsa2. Розраховує активну ширину спектра і зберігає данні про спектральній аналіз на диск у файл Save.dat

Рис.10. Блок-схема процедури Deistvyushee_Naprazenie. Розраховує значення ефективної напруги

Рис.11. Блок-схема процедури Vostanovlenie_Signala. Відновлює сигнал за данними з файла Save.dat

Рис.12. Блок-схема процедури Impuls_Pri_05A. Активну довжину імпульсу на рівні 0,5А

Рис.13. Блок-схема процедури SK_Oshibka. Розраховує помилку

Таблиця символьних імен

Змінна

Фізична величина

Что обозначает

1

A

V

Наруга

2

tau

mHz

Частота

3

Pr

Ms

Період

4

bigN

-

Кількість точок для розрахунку імпульса

5

N

-

Кількість точок

6

N_usech

-

Кількість гармонік

7

dt

-

Змінна кроку дискретизації

8

eps

-

Точність для формули Сімпсона

9

y0

-

Зміщення по у

10

x0

-

Зміщення по х

11

xz

-

Масштаб по х

12

yz

-

Масштаб по у

13

U1

Значення заданої функції

14

U2

Значення усіченої функції

15

n

-

Кількість точок дискретизації

16

s

-

Значення вектора S

17

i

-

Змінна циклу

18

j

-

Змінна циклу

19

GD

-

Graph Driver

20

GM

-

Graph Mode

21

GE

-

Graph error

22

sn

-

Значення за формулою Сімпсона

23

l

-

Кількість точок функції >0

24

fr

-

Файл

25

er

%

Середньоквадратична похибка

26

m

-

Активная ширина спектра

27

sum

-

Активна довжина спектра

28

z

Ms

Активна довжина імпульсу на рівні 0,5А

29

h

-

Величина кроку у формулі Сімпсона

30

x

-

Координата х

31

y

-

Координата у

32

tx

-

Крок при підрахуванні імпульсу

33

t

-

Змінна t

34

tu

Ms

Довжина імпульсу

35

k

-

Коефіцієнт заповнення імпульсу

36

q

Ms-1

Шпаруватість

37

f

mHz

Частота імпульсу

38

ua

V

Ефективна напруга

39

a

-

Границя інтегрування

40

b

-

Границя інтегрування

5. Лістинг результатів

Скріншоти розрахунків

Скріншоти значень сигналу

Завдання для MC Excel

Рис. 16. Функція у MC Excel

Висновок

За допомогою методу розкладання на гармоніки, було відновлено вхідний сигнал за 6 гармоніками. При збільшенні числа гармонік, за якими відновлюється сигнал, різниця між вхідним та відновленним сигналом наближається до нуля. При зменшенні числа гармонік графік відновленного сигналу поступово відхиляється від вхідного.

У ході роботи був побудований графік вхідного та відновленого сигналу, виведені дані вхідного та відновленого сигналів та розрахунки згідно варіанту.

Дані вхідного сигналу, фазового спектру збережені у типізовані файли з назвою "Save.dat". Додатково, фазовий спектр збережений у текстовий файл "Save.txt" для побудови у Microsoft Excel заданого сигналу у функції часу.

Список використаної літератури

1. Аладьев В.З. Тупло В.Г. Turbo Pascal для всех. -К.: Техника, 1993. -176с.

2. Немнюгін С.А. Turbo Pascal.-М.:Питер, 2000. -491стр.

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


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

  • Створення програми в середовищі програмування TURBO PASCAL 7.0, за допомогою якої можливо здійснювати шифровку та розшифровку інформації у файлах з розширенням doc, txt. Програма працює з машинописом англійського тексту, який відповідає стандартам ASCII.

    курсовая работа [304,6 K], добавлен 23.12.2008

  • Особливості мови програмування Turbo Pascal. Текстовий редактор Word: набір, редагування та форматування тексту, вставка графічних об'єктів та таблиці в документ, використання редактора формул. Електронні таблиці Excel. Робота з шаблонами документів.

    курсовая работа [2,1 M], добавлен 06.09.2012

  • Структура и основные элементы языка Turbo Pascal. Алгоритм составления простейших программ на Turbo Pascal. Применение условного оператора и сильноветвящихся алгоритмов. Циклы с предусловием и постусловием, сочетание циклических и условных операторов.

    реферат [64,0 K], добавлен 20.03.2016

  • Теоретичні аспекти програмування мовою Pascal. Основні поняття та елементи мови. Розділи оголошення сталих і змінних. Стандартні та нестандартні типи даних. Основні операції, стандартні функції та процедури, прості програми. Розгалуження, цикли, масиви.

    курсовая работа [122,5 K], добавлен 21.10.2012

  • Три типи файлів, які містять програми на Turbo Pascal. Призначення модулів та їх структура: заголовок, інтерфейсна частина та кінець. Стандартні модулі, їх особливості. Компіляція програм, які використовують модулі. Підключення модулів до програм.

    контрольная работа [19,6 K], добавлен 18.05.2009

  • Завантаження системи Turbo Pascal. Робота в середовищі Delphi у режимі консолі. Обчислення значення функції, заданої умовно. Табуляція функції і пошук екстремумів. Селективна обробка масиву. Побудова графічних зображень. Обробка двомірних масивів.

    учебное пособие [867,3 K], добавлен 22.02.2010

  • Значення функції, типи елементів масиву та їх кількість. Побудова інтерполяційного багаточлена Лагранжа. Апроксимування залежності багаточленом другого ступеня і обчислення коефіцієнту варіації. Обчислення рівняння за методом Рунге-Кути, лістинг програми.

    контрольная работа [222,4 K], добавлен 17.02.2011

  • Алгоритмічна мова програмування універсального призначення Turbo Pascal. Розробка і створення програми для гри "Шибениця". Алгоритм функціонування программи, блок-схема алгоритму. Використання додаткових модулів Graph та Crt у процессі створення програми.

    курсовая работа [2,0 M], добавлен 23.06.2010

  • Основы работы на языке высокого уровня Turbo Pascal. Основное оборудование и программное обеспечение. Операторы, необходимы для работы в графической среде Turbo Pascal. Запуск графического режима. Текст программы в графической среде Turbo Pascal.

    лабораторная работа [12,7 K], добавлен 14.05.2011

  • Розробка програми реєстрації автомобілів для збереження та перегляду інформації про модель машини, рік її випуску, об'єм двигуна і витрати палива. Складання алгоритмів розв'язання поставленої задачі та написання тексту програми в середовищі Turbo Pascal.

    курсовая работа [29,7 K], добавлен 13.10.2010

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