Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kurs_progr_final.docx
Скачиваний:
19
Добавлен:
15.03.2015
Размер:
79.56 Кб
Скачать

Исходный код

mainheader.h

#pragma once

#include <stdio.h>

#include <math.h>

#include <stdlib.h>

#define N 11

enum front

{

DECREASING = 0,

INCREASING = 1,

NOFRONT

};

enum frontside

{

LEFT = 0, //передний фронт

RIGHT //задний

};

extern double time[N];

extern double Uvx[N];

extern double Uvix[N];

extern double t_begin, t_end, t_1;

extern double a, b, c;

extern double U1, U2;

extern double timedelta;

void read_data();

void write_data();

void output_arrays();

void form_time();

void form_Uvx();

void form_Uvix();

void getfront( double arr[N], frontside side );

main.cpp

#include "mainheader.h"

double time[N];

double Uvx[N];

double Uvix[N];

double t_begin = 0, t_end = 20, t_1 = 10;

double a = 50, b = 0.75, c = 5;

double U1 = 20, U2 = 100;

double timedelta=0;

void display_data()

{

printf("%25s%20s%20s\n\n", "time", "Uvx", "Uvix");

for (int i = 0; i < N; i++)

{

printf( "%5d%20.3lf%20.7lf%20.7lf\n", i+1, time[i], Uvx[i], Uvix[i] );

}

}

void input_data()

{

printf("1) T_begin: %10.3lf\n", t_begin);

printf("2) T_end: %10.3lf\n", t_end);

printf("3) T_1: %10.3lf\n", t_1);

printf("4) a: %10.3lf\n", a);

printf("5) b: %10.3lf\n", b);

printf("6) c: %10.3lf\n", c);

printf("7) U1: %10.3lf\n", U1);

printf("8) U2: %10.3lf\n", U2);

printf("\nEnter variable number and value. 0 to exit menu.\n");

char op = '1';

while ( op != '0' )

{

scanf("%c", &op);

switch (op)

{

case '1':

{

scanf("%lf", &t_begin);

printf("OK\n");

break;

}

case '2':

{

scanf("%lf", &t_end);

printf("OK\n");

break;

}

case '3':

{

scanf("%lf", &t_1);

printf("OK\n");

break;

}

case '4':

{

scanf("%lf", &a);

printf("OK\n");

break;

}

case '5':

{

scanf("%lf", &b);

printf("OK\n");

break;

}

case '6':

{

scanf("%lf", &c);

printf("OK\n");

break;

}

case '7':

{

scanf("%lf", &U1);

printf("OK\n");

break;

}

case '8':

{

scanf("%lf", &U2);

printf("OK\n");

break;

}

default:

//printf("Unrecognised");

break;

}

}

}

int _tmain(int argc, _TCHAR* argv[])

{

char op;

while(true)

{

printf("\n\nEnter charachter:\n\n1) Form arrays\n2) Determine fronts\n3) Output arrays to files\n4) Read data from file\n5) Input variables manually\n6) Write data to file\n7) Display data\n8) Exit\n\n");

scanf(" %c", &op);

switch (op)

{

case '1':

{

form_time();

form_Uvx();

form_Uvix();

display_data();

break;

}

case '2':

{

printf("Uvx:\n");

getfront(Uvx, LEFT);

getfront(Uvx, RIGHT);

printf("\nUvix:\n");

getfront(Uvix, LEFT);

getfront(Uvix, RIGHT);

break;

}

case '3':

{

output_arrays();

printf("\nDone.\n");

break;

}

case '4':

{

read_data();

printf("\nDone.\n");

break;

}

case '5':

{

input_data();

break;

}

case '6':

{

write_data();

printf("\nDone.\n");

break;

}

case '7':

{

display_data();

break;

}

case '8':

{

exit(0);

break;

}

default:

{

printf("\nUnrecognised command\n");

break;

}

}

}

return 0;

}

Calc.cpp

#include "mainheader.h"

void form_time()

{

timedelta = (t_end - t_begin) / double(N - 1);

for (int i = 0; i < N; i++) // Формирование массива времени t

{

time[i] = t_begin + i * timedelta;

}

}

void form_Uvx()

{

for (int i = 0; i < N; i++) // Формирование массива Uvx

{

if (time[i] <= t_1)

{

Uvx[i] = a * ( 1.0 - exp(-b * time[i]) );

}

else

{

Uvx[i] = a * ( 1.0 - exp(-b * time[i]) ) * exp(-c * ( time[i] - t_1 ));

}

}

}

void form_Uvix()

{

for (int i = 0; i < N; i++) // Формирование массива Uvix

{

if (Uvx[i] < U1)

{

Uvix[i] = U2 / U1 * Uvx[i];

}

else

{

Uvix[i] = U2;

}

}

}

void getfront( double arr[N], frontside side )

{

front front = NOFRONT;

int frontlength = 0; //длина в шагах

int first = 0, second = 0; //индексы элементов для определения типа фронта

double Umax, Umin, UH, UL;

if ( side == LEFT )

{

first = 0; second = 1;

}

else if ( side == RIGHT )

{

first = N-2; second = N-1;

}

if ( arr[first] < arr[second] )

{

front = INCREASING;

}

else if ( arr[first] > arr[second] )

{

front = DECREASING;

}

if ( side == LEFT )

{

for (int i = 1; i < N; i++)

{

if ( (front == INCREASING && arr[i-1] < arr[i]) || (front == DECREASING && arr[i-1] > arr[i]) )

{

frontlength++;

}

else

{

break;

}

}

}

if ( side == RIGHT )

{

for (int i = N-1; i > 0; i--)

{

if ( (front == INCREASING && arr[i-1] < arr[i]) || (front == DECREASING && arr[i-1] > arr[i]) )

{

frontlength++;

}

else

{

break;

}

}

}

if ( side == LEFT )

{

if ( front == INCREASING ) { Umin = arr[0]; Umax = arr[frontlength]; }

else if ( front == DECREASING ) { Umin = arr[frontlength]; Umax = arr[0]; }

}

else if ( side == RIGHT )

{

if ( front == INCREASING ) { Umin = arr[N-frontlength-1]; Umax = arr[N-1]; }

else if ( front == DECREASING ) { Umin = arr[N-1]; Umax = arr[N-frontlength-1]; }

}

UH = Umin + 0.9*(Umax-Umin);

UL = Umin + 0.1*(Umax-Umin);

double fronttime = 0;

if ( side == LEFT )

{

for (int i = 0; i < frontlength; i++)

{

if ( arr[i] >= UL && arr[i] <= UH ) fronttime += timedelta;

}

}

else if ( side == RIGHT )

{

for (int i = N-1; i > N-frontlength; i--)

{

if ( arr[i] >= UL && arr[i] <= UH ) fronttime += timedelta;

}

}

char *frontside = ( side == LEFT ? "Forward" : "Back" );

char *fronttype = ( front == DECREASING ? "decreasing" : "increasing" );

if ( front == NOFRONT )

{

printf("There is no %s front.\n", frontside);

return;

}

else

{

printf ( "%s front is %s, duration is %20.15lf steps %d \n", frontside, fronttype, fronttime, frontlength );

}

}

File_io.cpp

#include "mainheader.h"

using namespace std;

void skipchars(FILE* f, int number )

{

for( int i = 0; i <= number; i++)

{

fgetc(f);

}

}

void read_data()

{

FILE *f;

char dummy[70];

fopen_s(&f, "data.txt", "r");

fscanf(f, "%s %lf", &dummy, &t_begin);

fscanf(f, "%s %lf", &dummy, &t_end);

fscanf(f, "%s %lf", &dummy, &t_1);

fscanf(f, "%s %lf", &dummy, &a);

fscanf(f, "%s %lf", &dummy, &b);

fscanf(f, "%s %lf", &dummy, &c);

fscanf(f, "%s %lf", &dummy, &U1);

fscanf(f, "%s %lf", &dummy, &U2);

char temp[255];

fgets(temp, 255, f);

fgets(temp, 255, f);

//fgets(temp, 255, f);

for(int i=0; i<N; i++)

{

skipchars(f, 16);

fscanf_s( f, "%lf", &(time[i]) );

fscanf_s( f, "%*c%lf", &(Uvx[i]) );

fscanf_s( f, "%*c%lf%*c", &(Uvix[i]) );

fgets(temp, 255, f);

}

fclose(f);

}

void write_data()

{

FILE *f;

fopen_s(&f, "data.txt", "w");

fprintf(f, "tbegin %14.5lf\n", t_begin);

fprintf(f, "tend %14.5lf\n", t_end);

fprintf(f, "t1 %14.5lf\n", t_1);

fprintf(f, "a %14.5lf\n", a);

fprintf(f, "b %14.5lf\n", b);

fprintf(f, "c %14.5lf\n", c);

fprintf(f, "U1 %14.5lf\n", U1);

fprintf(f, "U28 %14.5lf\n", U2);

fprintf(f, "-------------------------------------------------------------");

fprintf(f, "| # | time | Uvx | Uvix |\n");

fprintf(f, "-------------------------------------------------------------");

for(int i = 0; i < N; i++)

{

fprintf(f, "|%14d|",i+1);

fprintf(f, "%14.2lf|",time[i]);

fprintf(f, "%14.5lf|",Uvx[i]);

fprintf(f, "%14.5lf|",Uvix[i]);

fprintf(f, "\n");

}

fclose(f);

}

void output_arrays()

{

FILE *f1,*f2,*f3;

fopen_s(&f1,"array_time.txt","w");

fopen_s(&f2,"array_Uvx.txt", "w");

fopen_s(&f3,"array_Uvix.txt", "w");

for (int i=0;i<N;i++)

{

fprintf(f1,"%20.7f\n",time[i]);

fprintf(f2,"%20.7f\n", Uvx[i]);

fprintf(f3,"%20.7f\n", Uvix[i]);

}

fclose(f1);

fclose(f2);

fclose(f3);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]