#include "calc.h"
#include "output.h"main (void)
{length_input_signal = 0, length_output_signal = 0, U =0, ULimit=0, UMax =0, t_n=0 , t_m =0, t_k =0, time[MAXSIZE] , UInput[MAXSIZE], UOutput[MAXSIZE]; n =0, choise, zapolneno =0 ;("chcp 1251 > nul");(choise = menu())
{("cls");(choise)
{1:_data(&U, &ULimit, &UMax, &t_n, &t_m, &t_k, &n, &zapolneno); _calculation (&length_input_signal, &length_output_signal, t_n, _k, n, t_m, time, U, UInput, ULimit, UMax, UOutput);;2: _output_source_data ( ULimit, UMax, U, t_m, t_n, t_k, n ); _table_on_the_console (time, UInput, UOutput, n, _input_signal, length_output_signal, &zapolneno); ;3:_from_file ( &U, &ULimit, &UMax, &t_n, &t_k, &t_m, &n, &length_input_signal,
&length_output_signal, time, UInput, UOutput, &zapolneno);;4:_time_and_UInput_and_UOutput_to_file ( UInput, UOutput, time, n);_table_data_to_file ( time, UInput, UOutput, ULimit, UMax, U, t_m, _n, t_k, n, length_input_signal, length_output_signal);;5:("Длительность входного сигнала = %8.3lf\n\n",length_input_signal);("Длительность выходного сигнала = %8.3lf\n\n",length_output_signal);
break;:("Команда выбранна неверно. Пожалуйста повторите выбор\n");
break;
}("pause");
} 0;
}.c
#include "menu.h"menu ()
{w;("cls");("________________________Menu___________________________\n");("\t 0 - Выход из программы\n");("\t 1 - Ввод данных с клавиатуры\n");("\t 2 - Вывод результатов на консоль \n");("\t 3 - Ввод данных из файла\n");("\t 4 - Сохранение всех данных в текстовые файлы \n");("\t 5 - Вывести только длительность импульса \n");("\n\n\t Ваш выбор: ");
scanf("%d",&w);w;
}.c
#include"calc.h"fill_time_array (double t_n, double t_k, double time[], int n )
{t = t_n, dt;i;= (t_k - t_n)/(n - 1);(i=0 ; i < n; i++)
{[i] = t ;+=dt;
}
}fill_array_input_voltage (double t_n, double t_m, double t_k ,double time[], double U, double UInput[], int n)
{i;(i=0; i < n ; i++)(time[i] <= t_m) [i]= (U * (time[i] - t_n)) / (t_m - t_n);[i]= (U * (t_k - time[i])) / (t_k - t_m)
}fill_array_output_voltage (int n, double ULimit, double UMax, double UInput[], double UOutput[])
{i;(i = 0; i < n ; i++) (UInput[i] <= 0) [i]= 0;if (UInput[i] <= ULimit)[i] = (UMax * UInput[i])/ULimit;[i] = UMax;
}length_signal(double t_k, double t_n, int n, const double signal[])
{i;count = 0;dt = (t_k - t_n)/(n - 1);max_signal = signal[0];(i = 1; i < n ; i++)( signal[i] > max_signal )_signal = signal[i];(i = 0; i < n ; i++)(signal[i] >= max_signal*0.5)++;(count - 1) * dt;
}data_calculation (double *length_input_signal, double *length_output_signal ,double t_n, double t_k, int n, double t_m ,double time[], double U, double UInput[], double ULimit,double UMax, double UOutput[],int *zapolneno )
{_time_array ( t_n, t_k, time, n );_array_input_voltage (t_n, t_m, t_k , time, U, UInput, n);_array_output_voltage (n, ULimit, UMax, UInput, UOutput);
*length_input_signal = length_signal(t_k, t_n, n, UInput);
*length_output_signal= length_signal(t_k, t_n, n, UOutput);
}.c
#include "input.h"enter_data(double*U, double*ULimit, double*UMax, double*t_n, double*t_m, double*t_k, int*n, int *zapolneno )
{("Ввод начального напряжения U =");
if( scanf("%lf", U) ==1)
*zapolneno+=1;("Пороговое напряжение Uporog =");( scanf("%lf", ULimit) ==1)
*zapolneno+=1;("Максимальное напряжение Umax =");
if (scanf("%lf", UMax)== 1)
*zapolneno+=1;("Начальное время =");(scanf("%lf", t_n) ==1)
*zapolneno +=1;
printf("Время в момент максимального напряжения t_m =");
if( scanf("%lf",t_m) == 1)
*zapolneno +=1;("Конечное время =");( scanf("%lf", t_k) == 1)
*zapolneno+=1;("Число точек =");( scanf("%d", n) == 1)
*zapolneno+=1;(*t_n < *t_m && *t_n < *t_k && *t_m < *t_k && *n > 0 && *U >= 0 && *ULimit >= 0 && *UMax >= 0)
printf("Данные корректны \n");
{("Данные не корректны. Программа будет закрыта\n\n");
exit(0);
}
}input_from_file (double *U, double *ULimit, double *UMax, double *t_n, double *t_k, double *t_m, int *n, double *length_input_signal, double *length_output_signal, double time[], double UInput[], double UOutput[],int* zapolneno)
{i; * in_txt; file_name[MLEN];buf[MAXSIZE];
*zapolneno=0;( "Введите имя файла: \n");("%s",file_name);_txt = fopen(file_name, "r");(in_txt != NULL)
{(buf, sizeof(buf),in_txt);( fscanf(in_txt, "%lf%lf%lf%lf%lf%lf%d",U, ULimit, UMax, t_n, t_m, t_k, n) == 7)
{
*zapolneno+=7;
}(buf, sizeof(buf),in_txt);(buf, sizeof(buf),in_txt);(buf, sizeof(buf),in_txt);(buf, sizeof(buf),in_txt);(buf, sizeof(buf),in_txt);(buf, sizeof(buf),in_txt);(i = 0 ; i < *n ; i++)(in_txt,"%*d%lf%lf%lf",&time[i], &UInput[i], &UOutput[i]); (buf, sizeof(buf),in_txt);(buf, sizeof(buf),in_txt);(buf, sizeof(buf),in_txt);(in_txt, "%lf%lf", length_input_signal, length_output_signal ); (in_txt);
}("Файл не удалось открыть %s \n", file_name);
}.c
#include"output.h"printTableHeader()
{("%6s%15s%15s%15s\n", "I", "Time", "Uin", "Uout");("__________________________________________________\n\n");
}output_table_on_the_console (double time[],double UInput[],double UOutput[],int n, double length_input_signal ,double length_output_signal,int*zapolneno )
{(*zapolneno == 7)
{i;
(); (i=0; i < n ; i++)
{("%6i%15.3lf%15.3lf%15.3lf\n", i, time[i], UInput[i], UOutput[i]);
}("___________________________________________________________________\n\n");("Length_in = %8.3lf\n", length_input_signal);("Length_out = %8.3lf\n", length_output_signal);
printf("_________________________________________________\n\n");
}("Не было ввода данных или при вводе произошел сбой. Пожалуйста повторите попытку\n\n");
}console_output_source_data (double ULimit, double UMax, double U, double t_m, double t_n, double t_k, int n )
{("Uporog = %8.3lf\n", ULimit);("Umax = %8.3lf\n", UMax);("U = %8.3lf\n", U);("t_m = %8.3lf\n", t_m);("t_n = %8.3lf\n", t_n);("t_k = %8.3lf\n", t_k);("Kol-vo\ntochek = %8d\n", n);("________________________________________\n\n");
}print_time_and_UInput_and_UOutput_to_file (double UInput[], double UOutput[], double time[],int n)
{* timeFile;* uInFile;* uOutFile;
int i;("Запись массивов в файл... ");= fopen("TableAndDataForPlot\\massiv_t.txt", "wt");= fopen("TableAndDataForPlot\\massiv_u_in.txt", "wt");= fopen("TableAndDataForPlot\\massiv_u_out.txt", "wt");(timeFile==NULL && uInFile==NULL && uOutFile==NULL)
{("Ошибка. Один из запрашиваемых файлов не найден");
exit(0);
}(i = 0; i < n; i++)
{(timeFile, "\n %6.3lf", time[i]);(uInFile, "\n %6.3lf", UInput[i]);(uOutFile, "\n %6.3lf", UOutput[i]);
}(timeFile);(uInFile);(uOutFile);
}print_table_data_to_file ( double time[], double Uin[], double Uout[], double ULimit, double UMax, double U, double t_m, double t_n, double t_k, int n,double length_input_signal, double length_output_signal)
{i;*table_data_file; file_name[MLEN]; ( "Введите имя файла: \n");("%s",file_name);_data_file = fopen(file_name, "wt");(table_data_file == NULL)
{("Ошибка. Файл не обнаружен");
exit(0);
}(table_data_file, "%6s%10s%10s%10s%10s%10s%10s\n", "U", "ULimit", "UMax", "t_n" , "t_m", "t_k", "n" );(table_data_file, "%6.3lf%10.3lf%10.3lf%10.3lf%10.3lf%10.3lf%10d\n", U, ULimit, UMax, t_n , t_m, t_k, n );(table_data_file, "\n");(table_data_file, "_________________________________________________________\n\n");(table_data_file, "%6s%15s%15s%15s\n", "I", "Time", "Uin", "Uout");(table_data_file, "________________________________________________________________\n\n");(i=0; i < n ; i++)
{(table_data_file, "%6i%15.3lf%15.3lf%15.3lf\n", i, time[i], Uin[i], Uout[i]);
}(table_data_file, "______________________________________\n");(table_data_file, "%6s%25s\n","length_input_signal","length_output_signal");(table_data_file, " %6.3lf%25.3lf", length_input_signal, length_output_signal);("ready.\n\n"); (table_data_file);
}
файлы .h.h
#ifndef _MAIN
#define _MAIN
#define MLEN 30
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 400
#include<Windows.h>
#endif .h
#include"main.h"
#ifndef _MENU
#define _MENUmenu ();
#endif.h
#include "main.h"
#ifndef _CALC
#define _CALCfilling_time_array (double t_n, double t_k,double time[], int n );fill_array_input_voltage (double t_n, double t_m, double t_k ,double time[], double U, double UInput[], int n);fill_array_output_voltage (int n, double ULimit, double UMax, double UInput, double UOutput);length_signal(double t_k, double t_n, int n, const double signal[]);data_calculation (double *length_input_signal, double *length_output_signal, double t_n, double t_k, int n, double t_m ,double time[], double U, double UInput[], double ULimit,double UMax, double UOutput[]) ;
#endif.h
#include"main.h"
#ifndef _INPUT
#define _INPUTenter_data(double*U, double*ULimit, double*UMax, double*t_n, double*t_m, double*t_k, int*n, int*zapolneno);input_from_file (double *U, double *ULimit, double *UMax, double *t_n, double *t_k, double *t_m, int *n, double *length_input_signal, double *length_output_signal, double time[], double UInput[], double UOutput[],int* zapolneno);
#endif.h
#include "main.h"
#ifndef _OUTPUT
#define _OUTPUToutput_table_on_the_console (double time[],double UInput[],double UOutput[],int n,double length_input_signal,double length_output_signal, int*zapolneno );printTableHeader();console_output_source_data (double ULimit, double UMax, double U, double t_m, double t_n, double t_k, int n );print_time_and_UInput_and_UOutput_to_file (double UInput[], double UOutput[], double time[],int n);console_output_source_data (double ULimit, double UMax, double U, double t_m, double t_n, double t_k, int n ) ;print_table_data_to_file (const double time[],const double UInput[], const double UOutput[], double ULimit, double UMax, double U, double t_m, double t_n, double t_k, int n,double length_input_signal, double length_output_signal );
#endif
Источники
программа табулирование сигнал
1) Мария Полубенцева Процедурное программирование на языке C/C+
) «Практикум по программированию на языке Си», С. В. Козин, Н. А. Матиясевич, СПб 2008
) «Информатика. Анализ сигнала на выходе электрической цепи. Методические указания к курсовой работе», Л. Н. Бережной, И. О. Воронцова, Д. В. Окунева, СПб 2012