Главная страница
Навигация по странице:

  • Расчет характеристик электрических цепей

  • Курсовая работа по дисциплине вычислительная техника и программирование


    Скачать 104.5 Kb.
    НазваниеКурсовая работа по дисциплине вычислительная техника и программирование
    Дата17.04.2023
    Размер104.5 Kb.
    Формат файлаdoc
    Имя файлаpascal 1k .doc
    ТипКурсовая
    #1068507

    Министерство связи Российской Федерации по связи и информации
    Санкт-Петербургский государственный университет телекоммуникаций

    им. проф. М.А. Бонч-Бруевича


    Курсовая работа по дисциплине

    «ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА И ПРОГРАММИРОВАНИЕ»

    Расчет характеристик электрических цепей

    Выполнил: Волков А. (гр. МИ-19)

    Проверила: Груздева Л. А.

    Санкт-Петербург

    2002

    Постановка задачи
    Необходимо по заданной передаточной характеристике электрической цепи и известному входному сигналу Uвх(t) построит выходной сигнал Uвых(t), а затем определить длительность импульса на уровне 0.5 Uвых max

    Входной сигнал ( А – 35 )



    U


    tn t1 t2 tk
    U = 30 В

    tn = 12 с

    t1 = 20 с

    t2 = 60 с

    tk = 70 с


    Передаточная характеристика ( Б – 01 )
    Uвых(t) = a Uвх(t)


    Определить длительность импульса на уровне 0.5 Uвых max ( В - 07 )

    Блок-схема





    Графики полученные в среде MathCad


    Графики полученные в среде Turbo Pascal


    Таблица идентификаторов



    Обозначение в программе

    Обозначение в задаче

    Назначение

    U

    U

    Максимальное значение входного сигнала

    U1

     

    Половина максимального значение выходного сигнала

    tn

    tнач

    Время начала импульса

    tk

    tкон

    Время окончания импульса

    t1, t2

    t1,t2

    Точки перегиба

    a

    A

    Коэффициент передачи

    s

     

    Переменная для вывода текста из файла на экран

    n

    N

    Количество точек

    Tm[i]

    T

    Массив времени

    h

     

    Шаг изменения времени

    t

     

    Вспомогательная переменная времени

    i

     

    Счетчик цикла

    U_InP[i]

    Uвх(t)

    Массив входного сигнала

    U_OutP[i]

    Uвых(t)

    Массив выходного сигнала

    sym

     

    Переменная для определения нажатой клавишы

    k

     

    Вспомогательная переменная для задержки вывода

    Gd, Gm

     

    Переменные для инициализации графичиского режима

    f, f1, f2, f3

     

    Переменные файлового типа

    m

     

    Вспомогательная переменная для нахождения максимального значения в массиве

    a

     

    Вспомогательная переменная

    v, w

     

    Переменные для расчета погрешности

    e

    E

    Требуемая точность

    p

    p

    Погрешность расчета



    Описание процедур и функций
    Procedure Logo - Процедура вывода заставки

    Procedure Time - Процедура формирования массива времени

    Procedure U_In - Процедура формирования массива Uвх

    Procedure U_Out - Процедура формирования массива Uвых

    Procedure Out - Процедура вывода таблицы результатов

    Procedure Pic - Процедура вывода графиков

    Procedure Save - Процедура сохранения массива в файл

    Function Max - Функция определения максимального элемента массива

    Function GT - Функция определения времени

    Текст программы

    Program KypcoBuK;
    Uses CRT,Graph;
    Const

    U=30;

    tn=12;

    tk=70;

    t1=20;

    t2=60;

    a=3.5;

    Type

    ArrayType=Array[1..800]of Real;
    (****************************************************************************)

    (****************************************************************************)

    (****************************************************************************)
    Procedure Logo;

    Var

    f:Text;

    s:String;

    Begin

    Window(1,1,80,25);

    TextBackGround(2);

    ClrScr;

    Assign(f,'logo.txt');

    Reset(f);

    While Not EOF(f) Do

    Begin

    ReadLn(f,s);

    WriteLn(s)

    End;

    Close(f);

    ReadKey

    End;
    {----------------------------------------------------------------------------}
    Procedure Time(n:Integer; Var Tm:ArrayType);

    Var

    h,t:Real;

    i:Integer;

    Begin

    h:=(tk-tn)/(n-1);

    t:=tn-h;

    For i:=1 To n Do

    Begin

    t:=t+h;

    Tm[i]:=t

    End

    End;
    {----------------------------------------------------------------------------}
    Procedure U_In(n:Integer; Tm:ArrayType; Var U_InP:ArrayType);

    Var

    i:Integer;

    Begin
    For i:=1 To n Do

    Begin

    If (Tm[i]>tn) and (Tm[i]
    Then U_inp[i]:=U/(t1-tn)*(Tm[i]-tn)

    Else

    If (Tm[i]>=t1) and (Tm[i]<=t2)

    Then U_inp[i]:=U

    Else

    If (Tm[i]>t2) and (Tm[i]
    Then U_inp[i]:=U/(t2-tk)*(Tm[i]-tk)

    End

    End;
    {----------------------------------------------------------------------------}
    Procedure U_Out(n:Integer; U_InP:ArrayType; Var U_OutP:ArrayType);

    Var

    i:Integer;

    Begin

    For i:=1 To n Do

    U_OutP[i]:=a*U_InP[i]

    End;
    {----------------------------------------------------------------------------}
    Procedure Out(n:Integer; Tm,U_InP,U_OutP:ArrayType);

    Var

    i:Integer;

    sym,k:Char;

    Begin

    Window(1,1,80,25);

    TextBackGround(Black);

    TextColor(White);

    ClrScr;

    Repeat

    GoToXY(25,13);

    Write('Do you want to see a table ? (Y/N) ');

    Sym:=ReadKey;

    Write(sym);

    Until (sym='y')or(sym='n')or(sym='Y')or(sym='N');

    If (sym='y')or(sym='Y') Then

    Begin

    ClrScr;

    Window(20,1,55,2);

    TextBackGround(LightGray);

    TextColor(Blue);

    ClrScr;

    WriteLn(' # Tm(i) U_InP(i) U_OutP(i)');

    Window(20,2,55,23);

    TextBackGround(Black);

    TextColor(Yellow);

    ClrScr;

    For i:=1 To n Do

    Begin

    If i mod 21=0

    Then

    Begin

    WriteLn(i:3,Tm[i]:9:2,U_InP[i]:9:2,U_OutP[i]:11:2);

    k:=ReadKey

    End

    Else

    WriteLn(i:3,Tm[i]:9:2,U_InP[i]:9:2,U_OutP[i]:11:2)

    End;

    k:=ReadKey

    End;

    Window(1,1,80,25);

    TextBackGround(Black);

    TextColor(White);

    ClrScr

    End;
    {---------------------------------------------------------------------------}
    Procedure Pic(n:Integer; Tm,U_InP,U_OutP:ArrayType);

    Var

    Gd,Gm,i:Integer;

    k,sym:Char;

    Begin

    Repeat

    GoToXY(25,13);

    Write('Do you want to see graphics? (Y/N) ');

    Sym:=ReadKey;

    Write(sym);

    Until (sym='y')or(sym='n')or(sym='Y')or(sym='N');

    If (sym='y')or(sym='Y') Then
    Begin

    Gd:=Detect;

    InitGraph(Gd, Gm, 'c:\utils\pascal\bgi');

    If GraphResult <> grOk Then

    Halt(1);
    ClearDevice;
    SetColor(Green);

    SetTextStyle(2,0,6);

    OutTextXY(595,423,'t, c');

    OutTextXY(15,25,'U, B');
    SetColor(Yellow);

    OutTextXY(300,80,'U output');

    SetColor(White);

    OutTextXY(300,305,'U input');
    SetColor(Red);

    Line(5,420,610,420); {oX}

    Line(5,420,5,30); {oY}
    Line(5,30,3,40); {Arrows}

    Line(5,30,7,40);

    Line(600,418,610,420);

    Line(600,422,610,420);
    SetTextStyle(2,0,5);
    Line(Round(5+tn*8),417,Round(5+tn*8),424); {tn}

    OutTextXY(Round(5+tn*8)-6,430,'12'); {tn}
    Line(Round(5+t1*8),417,Round(5+t1*8),424); {t1}

    OutTextXY(Round(5+t1*8)-6,430,'20'); {t1}
    Line(Round(5+t2*8),417,Round(5+t2*8),424); {t2}

    OutTextXY(Round(5+t2*8)-6,430,'60'); {t2}
    Line(Round(5+tk*8),417,Round(5+tk*8),424); {t3}

    OutTextXY(Round(5+tk*8)-6,430,'70'); {t3}
    Line(2,Round(420-U*a*3),8,Round(420-U*a*3)); {U_Out}

    OutTextXY(15,Round(412-U*a*3),'105');
    Line(2,420-U*3,8,420-U*3); {U_In}

    OutTextXY(15,Round(412-U*3),'30');
    For i:=1 To n-1 Do

    Begin

    SetColor(White);

    Line(5+Round(Tm[i]*8),420-Round(U_InP[i])*3,5+Round(Tm[i+1]*8), 420-Round(U_InP[i+1])*3);

    SetColor(Yellow);

    Line(5+Round(Tm[i]*8),420-Round(U_OutP[i])*3,5+Round(Tm[i+1]*8),420-Round(U_OutP[i+1])*3)

    End;

    SetColor(Red);

    Line(5,420,610,420); {oX}

    k:=ReadKey;

    CloseGraph

    End

    End;
    {----------------------------------------------------------------------------}
    Procedure Save(n:Integer; Tm,U_InP,U_OutP:ArrayType);

    Var

    i:Integer;

    f1,f2,f3:Text;

    Begin

    Assign(f1,'Tm.txt');

    Assign(f2,'U_in.txt');

    Assign(f3,'U_out.txt');

    Rewrite(f1);

    Rewrite(f2);

    Rewrite(f3);

    For i:=1 To n Do

    Begin

    WriteLn(f1,Tm[i]:7:2);

    WriteLn(f2,U_InP[i]:7:2);

    WriteLn(f3,U_OutP[i]:7:2)

    End;

    Close(f1);

    Close(f2);

    Close(f3)

    End;
    {----------------------------------------------------------------------------}
    Function Max(n:Integer; U_OutP:ArrayType):Real;

    Var

    i:Integer;

    m:Real;

    Begin

    m:=U_OutP[1];

    For i:=2 To n Do

    If U_OutP[i] > m Then m:=U_OutP[i];

    max:=m;

    End;
    {----------------------------------------------------------------------------}
    Function GT(n:Integer; a:Char; m:Real; Tm,U_OutP:ArrayType):Real;

    Var

    i:Integer;

    t:Real;

    Begin

    Case a Of

    'U' :

    For i:=1 To (n div 2) Do

    If U_OutP[i] < m

    Then

    Begin

    If abs(U_OutP[i]-m) < abs(U_OutP[i+1]-m)

    Then t:=Tm[i]

    Else t:=Tm[i+1]

    End;

    'D' :

    For i:=n DownTo n-(n div 2) Do

    If U_OutP[i] < m

    Then

    Begin

    If abs(U_OutP[i]-m) < abs(U_OutP[i-1]-m)

    Then t:=Tm[i]

    Else t:=Tm[i-1]

    End
    End;

    GT:=t

    End;
    (****************************************************************************)

    (****************************************************************************)

    (****************************************************************************)
    Var

    U_Inp,U_OutP,Tm:ArrayType;

    k:Char;

    w,e,p,v:Real;

    i,n:Integer;
    Begin
    ClrScr;

    Logo;

    v:=100000;

    e:=0.1;

    n:=12;

    Time(300,Tm);

    U_In(300,Tm,U_InP);

    U_Out(300,U_InP,U_OutP);

    Out(300,Tm,U_InP,U_OutP);

    Pic(300,Tm,U_InP,U_OutP);

    Save(300,Tm,U_InP,U_OutP);
    ClrScr;
    Repeat

    Time(n,Tm);

    U_In(n,Tm,U_InP);

    U_Out(n,U_InP,U_OutP);

    w:=U_OutP[1];

    For i:=2 To (n div 2) Do

    If (U_OutP[i] > w) and (U_OutP[i] < Max(n,U_OutP)/2)

    Then w:=U_OutP[i];

    p:=abs(w-v);

    n:=n*2;

    v:=w;

    Until (p < e) or (n >= 801);
    ClrScr;

    If p < e

    Then

    Begin

    WriteLn('Impulse Time = ', GT(n div 2,'D',Max(n div 2,U_OutP)/2,Tm,U_OutP)

    - GT(n div 2,'U',Max(n div 2,U_OutP)/2,Tm,U_OutP):7:2,'sec');

    WriteLn('Pogreshnost = ',p:6:4,' pri n = ',n div 2);

    WriteLn

    End

    Else

    If n >= 801 Then

    WriteLn('Trebuemaya tochnost ne dostignuta');
    WriteLn('Press any key to continue...');

    ReadKey
    End.


    написать администратору сайта