Програмування у середовищі 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