Перейти к основному содержимому

Для программ на C

#include <stdio.h>
#include <locale.h>
#include <string.h>

#define COLUMN_NUMBER 4 // число столбцов таблицы


struct I_print { // данные для печати результатов интегрирования
char *name; // название функции
double i_sum; // значение интегральной суммы
double i_toch; // точное значение интеграла
int n; // число разбиений области интегрирования при котором достигнута требуемая точность
};

void printDividingLine(const char horizontalSybmol, const char connectorSybmol, const int m, const int *wn) {
putchar(connectorSybmol);
for (int line_i = 0; line_i < m; line_i++) {
for (int line_j = 0; line_j < wn[line_i]; line_j++) {
putchar(horizontalSybmol);
}
putchar(connectorSybmol);
}
putchar('\n');
}

void PrintTabl(struct I_print i_prn[], int k) {
const char SIDE_SYBMOL = '|';
const char HORIZONTAL_SYBMOL = '-';
const char CONNECTOR_SYBMOL = '+';

int wn[COLUMN_NUMBER] = {12, 18, 18, 10}; // ширина столбцов таблицы
char *title[COLUMN_NUMBER] = {(char *) "Function", (char *) "Integral", (char *) "IntSum", (char *) "N "};
int size[COLUMN_NUMBER];
for (int i = 0; i < COLUMN_NUMBER; i++) {
size[i] = (int) strlen(title[i]);
}

// шапка таблицы
printDividingLine(HORIZONTAL_SYBMOL, CONNECTOR_SYBMOL, COLUMN_NUMBER, wn);

putchar(SIDE_SYBMOL);
for (int line_i = 0; line_i < COLUMN_NUMBER; line_i++) {
int half = (wn[line_i] - size[line_i]) / 2;
for (int line_j = 0; line_j < half; line_j++) {
putchar(' ');
}
printf("%s", title[line_i]);
for (int line_j = 0; line_j < half; line_j++) {
putchar(' ');
}
putchar(SIDE_SYBMOL);
}
putchar('\n');

printDividingLine(HORIZONTAL_SYBMOL, CONNECTOR_SYBMOL, COLUMN_NUMBER, wn);

// заполнение таблицы
for (int i = 0; i < k; i++) {
putchar(SIDE_SYBMOL);
printf("%12s", i_prn[i].name);
putchar(SIDE_SYBMOL);

char i_toch[15];
sprintf(i_toch, "%.10f", i_prn[i].i_toch);
printf("%18s", i_toch);
putchar(SIDE_SYBMOL);

char i_sum[15];
sprintf(i_sum, "%.10f", i_prn[i].i_sum);
printf("%18s", i_sum);
putchar(SIDE_SYBMOL);

printf("%10d", i_prn[i].n);
putchar(SIDE_SYBMOL);
putchar('\n');
printDividingLine(HORIZONTAL_SYBMOL, CONNECTOR_SYBMOL, COLUMN_NUMBER, wn);
}
}


int main() {
setlocale(LC_ALL, "Russian");
struct I_print a;
a.name = (char *) "y=x^4";
a.i_sum = 1;
a.i_toch = 2;
a.n = 3;

struct I_print b;
b.name = (char *) "y=sin(22x)";
b.i_sum = 4;
b.i_toch = 5;
b.n = 6;

struct I_print f[2];
f[0] = a;
f[1] = b;

PrintTabl(f, 2);
return 0;
}