main.cpp
#include <stdio.h>
#include "bibliot.h" // Ïîäêëþ÷àåì âàøó áèáëèîòåêó
#define MAX_ROWS 100
#define MAX_COLS 3
void print_separator(int col_width) {
for (int i = 0; i < col_width; i++) {
printf("-");
}
}
int main(int argc, char** argv) {
setlocale(LC_ALL, "Russian");
FILE *f;
char data[MAX_ROWS][MAX_COLS][100];
int rows = 0;
float orders[MAX_ROWS]; // Ìàññèâ äëÿ êîëè÷åñòâà çàêàçîâ, òåïåðü òèï float
float income[MAX_ROWS]; // Ìàññèâ äëÿ ÷èñòîãî äîõîäà, òåïåðü òèï float
f = fopen("predpriyatiya.txt", "rt");
if (f == NULL) {
printf("Íå óäàëîñü îòêðûòü ôàéë.\n");
return 1;
}
// ×òåíèå äàííûõ èç ôàéëà
while (rows < MAX_ROWS && fscanf(f, "%[^;];%[^;];%[^\n]", data[rows][0], data[rows][1], data[rows][2]) == 3) {
// Ñ÷èòûâàåì äàííûå â ìàññèâû
orders[rows] = atof(data[rows][1]); // Ïðåîáðàçóåì ñòðîêó âî float è ñîõðàíÿåì â ìàññèâ êîëè÷åñòâà çàêàçîâ
income[rows] = atof(data[rows][2]); // Ïðåîáðàçóåì ñòðîêó âî float è ñîõðàíÿåì â ìàññèâ ÷èñòîãî äîõîäà
rows++;
}
fclose(f);
// Find maximum lengths for each column
int max_lengths[MAX_COLS] = {0};
for (int i = 0; i < rows; i++) {
for (int j = 0; j < MAX_COLS; j++) {
int length = strlen(data[i][j]);
if (length > max_lengths[j]) {
max_lengths[j] = length;
}
}
}
// Print data rows with aligned columns
for (int i = 0; i < rows; i++) {
printf("%-*s %-*s %-*s\n", max_lengths[0], data[i][0], max_lengths[1], data[i][1], max_lengths[2] + 10, data[i][2]);
}
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
// Âû÷èñëÿåì ñòàòèñòèêó äëÿ ìàññèâà êîëè÷åñòâà çàêàçîâ
float Sx, Srx, Somx;
statistic(rows, orders, income, &Sx, &Srx, &Somx);
// Âû÷èñëÿåì ñòàòèñòèêó äëÿ ìàññèâà ÷èñòîãî äîõîäà
float Sy, Sry, Somy;
statistic(rows, income, orders, &Sy, &Sry, &Somy);
// Âûâîäèì ðåçóëüòàòû ñòàòèñòèêè äëÿ ìàññèâà çàêàçîâ
printf("Ðåçóëüòàòû âû÷èñëåíèé â ìàññèâå çàêàçîâ\n");
printf("Ñðåäíåå çíà÷åíèå: %-15.2f\n", Srx);
printf("Ñðåäíåêâàäðàòè÷íîå îòêëîíåíèå: %.3f\n\n", Somx);
// Âûâîäèì ðåçóëüòàòû ñòàòèñòèêè äëÿ ìàññèâà ÷èñòîãî äîõîäà
printf("Ðåçóëüòàòû âû÷èñëåíèé â ìàññèâå ÷èñòîãî äîõîäà\n");
printf("Ñðåäíåå çíà÷åíèå: %-15.2f\n", Sry);
printf("Ñðåäíåêâàäðàòè÷íîå îòêëîíåíèå: %.3f\n\n", Somy);
// Âû÷èñëÿåì êîýôôèöèåíò ïàðíîé êîððåëÿöèè
float r = top(rows, orders, Srx, income, Sry) / ((rows - 1) * Somx * Somy);
// Âûâîäèì êîýôôèöèåíò ïàðíîé êîððåëÿöèè
printf("Êîýôôèöèåíò ïàðíîé êîððåëÿöèè: %.3f\n\n", r);
if (fabs(r) <= 0.5) {
system("color FC"); // Èçìåíåíèå öâåòà òåêñòà â êîíñîëè (F - áåëûé òåêñò, C - êðàñíûé ôîí)
printf("Ñâÿçü ìåæäó x è y ñëàáàÿ!\n"); // Âûâîä ñîîáùåíèÿ î ñëàáîé ñâÿçè ìåæäó x è y
} else {
float a0, a1; // Êîýôôèöèåíòû ðåãðåññèè
float regr1[MAX_ROWS], regr2[MAX_ROWS]; // Ìàññèâû äëÿ çíà÷åíèé ðåãðåññèè
regr(rows, Sy, fi1, orders, &a0, &a1, income); // Âû÷èñëåíèå êîýôôèöèåíòîâ a0 è a1 äëÿ ïåðâîé ðåãðåññèè
for (int i = 0; i < rows; i++)
regr1[i] = a0 + a1 * fi1(orders[i]); // Âû÷èñëåíèå çíà÷åíèé ïåðâîé ðåãðåññèè
printf("Êîýôôèöèåíòû à0 è à1 äëÿ ïåðâîé ðåãðåññèè:\n a0=%.3f\n a1=%.3f\n\n", a0, a1);
regr(rows, Sy, fi2, orders, &a0, &a1, income); // Âû÷èñëåíèå êîýôôèöèåíòîâ a0 è a1 äëÿ âòîðîé ðåãðåññèè
for (int i = 0; i < rows; i++)
regr2[i] = a0 + a1 * fi2(orders[i]); // Âû÷èñëåíèå çíà÷åíèé âòîðîé ðåãðåññèè
printf("Êîýôôèöèåíòû à0 è à1 äëÿ âòîðîé ðåãðåññèè:\n a0=%.3f\n a1=%.3f\n\n", a0, a1);
}
return 0;
}
bibliot.h
#include <stdlib.h>
#include <locale.h>
#ifndef _bibliot_H_
#define _bibliot_H_s_
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <string.h>
#include <math.h>
/* Âû÷èñëåíèå ñðåäíåãî çíà÷åíèÿ è ñðåäíåêâàäðàòè÷åñêîãî îòêëîíåíèÿ */
void statistic(int n, float orders[], float income[], float *S, float *Sr, float *Som) {
int i;
float D = 0; // Ïåðåìåííàÿ äëÿ õðàíåíèÿ ñóììû êâàäðàòîâ îòêëîíåíèé
*S = 0; // Îáíóëåíèå ñóììû ýëåìåíòîâ ìàññèâà
for (i = 0; i < n; i++)
*S = *S + orders[i]; // Ñóììèðîâàíèå âñåõ ýëåìåíòîâ ìàññèâà
*Sr = *S / n; // Âû÷èñëåíèå ñðåäíåãî çíà÷åíèÿ
for (i = 0; i < n; i++)
D += (orders[i] - *Sr) * (orders[i] - *Sr); // Âû÷èñëåíèå ñóììû êâàäðàòîâ îòêëîíåíèé îò ñðåäíåãî çíà÷åíèÿ
*Som = sqrt(D / (n - 1)); // Âû÷èñëåíèå ñðåäíåêâàäðàòè÷åñêîãî îòêëîíåíèÿ
}
/* Âû÷èñëåíèå êîýôôèöèåíòà êîððåëÿöèè */
float top(int n, float orders[], float Sra, float income[], float Srb) {
int i;
float S = 0; // Ïåðåìåííàÿ äëÿ õðàíåíèÿ ñóììû ïðîèçâåäåíèé îòêëîíåíèé
for (i = 0; i < n; i++)
S += (orders[i] - Sra) * (income[i] - Srb); // Âû÷èñëåíèå ñóììû ïðîèçâåäåíèé îòêëîíåíèé
return S; // Âîçâðàùåíèå ñóììû ïðîèçâåäåíèé
}
/* Âû÷èñëåíèå ðåçóëüòàòîâ ïî ðåãðåññèîííûì çàâèñèìîñòÿì */
void regr(int n, float Sy, float (*fi)(float), float orders[], float *a0, float *a1, float income[]) {
int i;
float S1 = 0, S2 = 0, S3 = 0; // Ïåðåìåííûå äëÿ õðàíåíèÿ ñóìì
for (i = 0; i < n; i++) {
S1 += fi(orders[i]) * fi(orders[i]); // Âû÷èñëåíèå ñóììû êâàäðàòîâ çíà÷åíèé ôóíêöèè fi
S2 += fi(orders[i]); // Âû÷èñëåíèå ñóììû çíà÷åíèé ôóíêöèè fi
S3 += income[i] * fi(orders[i]); // Âû÷èñëåíèå ñóììû ïðîèçâåäåíèé çíà÷åíèé income è ôóíêöèè fi
}
float d = n * S1 - S2 * S2; // Âû÷èñëåíèå îïðåäåëèòåëÿ
*a0 = (Sy * S1 - S2 * S3) / d; // Âû÷èñëåíèå êîýôôèöèåíòà ðåãðåññèè a0
*a1 = (n * S3 - S2 * Sy) / d; // Âû÷èñëåíèå êîýôôèöèåíòà ðåãðåññèè a1
}
float fi1(float x) {
return sqrt(x) * (log(x)) * (log(x)); // Âû÷èñëåíèå çíà÷åíèÿ ôóíêöèè fi1
}
float fi2(float x) {
return exp(1 / x); // Âû÷èñëåíèå çíà÷åíèÿ ôóíêöèè fi2
}
/* Âû÷èñëåíèå äèñïåðñèè */
float disp(int n, float orders[], float income[]) {
int i;
float S = 0; // Ïåðåìåííàÿ äëÿ õðàíåíèÿ ñóììû êâàäðàòîâ îòêëîíåíèé
for (i = 0; i < n; i++)
S += (orders[i] - income[i]) * (orders[i] - income[i]); // Âû÷èñëåíèå ñóììû êâàäðàòîâ îòêëîíåíèé
return S / (n - 1); // Âîçâðàùåíèå äèñïåðñèè
}
#endif // Çàâåðøåíèå óñëîâíîé êîìïèëÿöèè