#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 average(int n, float income[]) {
int i;
float sum = 0;
for (i = 0; i < n; i++)
sum += income[i];
return sum / n;
}
float disp(int n, float a0, float income[]) {
int i;
float S = 0;
for (i = 0; i < n; i++)
S += (a0 - income[i]) * (a0 - income[i]);
return S / (n - 1);
}
#endif // Завершение условной компиляции
Приорбанк ОАО;101;249,06
ОАО АСБ Беларусбанк;103;258,01
ОАО Сбер Банк;105;252,94
СП ОАО Брестгазоаппарат;107;247,87
ОАО БЕЛЭНЕРГОРЕМНАЛАДКА;109;250,78
ОАО Магазин № 45.Продтовары;111;249,68
СОАО Гомелькабель;113;269,56
ОАО Гомельская мебельная фабрика Прогресс;115;265,44
ОАО Бабушкина крынка;117;281,30
ОАО Теплицмонтаж;119;277,16
ОАО Березастройматериалы;121;279,00
ОАО МАПИД;123;304,82
ОАО Белорусская валютно-фондовая биржа;125;268,64
ОАО Солигорскводстрой;127;300,45
ОАО Минский молочный завод № 1;129;289,25
ОАО Брест-ВТИ;131;309,03
ОАО Пеленг;133;323,81
МО ОАО Луч;135;296,57
ОАО СТРОЙТРЕСТ №35;137;300,33
ОАО БЕЛАТЭП;139;304,07
ОАО ГУМ;141;306,81
ОАО Ремспецстрой;143;319,53
СТОАО Свiтанак;145;312,24
ОАО Гомельжилпроект;147;318,95
СОАО Беловежские сыры;149;319,65
ОАО Торгуны;151;345,33
ОАО Торговля;153;331,01
ОАО Беловежский;155;346,68
ОАО Белинвестбанк;157;355,34
ГПФ Акцент ОАО;159;362,99
ОАО Лента;161;347,63
ОАО Мозырьсоль;163;350,26
ОАО Любанский завод стеновых блоков;165;343,88
ОАО Заславльстройиндустрия;167;353,50
ОАО Торговый центр;169;353,11
ОАО Знамя индустриализации;171;371,70
ОАО Мекосан;173;366,30
ОАО Фабрика Блауз;175;385,88
ОАО БНБ-Банк;177;384,45
ОАО МИНБАКАЛЕЯТОРГ;179;379,02
ОАО Красносельскстройматериалы;181;404,58
ОАО Туровщина;183;389,13
ОАО Савушкин продукт;185;406,67
ОАО АСиТ;187;407,20
Слонимское ОАО Дом торговли;189;406,73
ОАО Гродноавтосервис;191;403,25
ОАО МИНСКЖЕЛЕЗОБЕТОН;193;425,76
ОАО Брестский мясокомбинат;195;419,27
ОАО ДСТ №2, г. Гомель;197;425,77
ОАО Кобринагромаш;199;443,26
ОАО МИНСКИЙ ЗАВОД ИГРИСТЫХ ВИН;201;437,74
ОАО Заднепровье;203;421,22
ОАО Буровая компания Дельта;205;416,69
ОАО БЕЛТРУБОПРОВОДСТРОЙ;207;437,15
ОАО Продтовары;209;444,61
ОАО ГАЛАНТЭЯ;211;432,05
ОАО Белагропромбанк;213;456,50
СОАО Ляховичский молочный завод;215;444,93
ОАО МШФ НАДЭКС;217;457,36
ОАО Лидастройматериалы;219;453,78
ОАО Фирма Элма;221;450,20
ОАО ПРОМТЕХМОНТАЖ;223;466,61
ОАО Светлогорский ЦКК;225;484,01
ОАО ГМРЗ;227;480,41
ОАО АВТОСПЕЦТРАНС;229;459,80
ОАО Савушкина пуща;231;492,18
ОАО Беларускабель;233;469,56
ОАО ПМК-212 г.Молодечно;235;483,93
ОАО Витебский универмаг;237;484,30
ОАО Гамма вкуса;239;506,66
ОАО САТУРН-1 г. Житковичи;241;477,01
СОАО Коммунарка;243;499,36
ОАО Стройтрест N7;245;496,70
ОАО Торгодежда;247;511,04
СОАО АТЭП-5;249;496,37
ОАО Березовский мясоконсервный комбинат;251;505,70
ОАО Према;253;518,02
ОАО Пуховичский комбинат хлебопродуктов;255;517,33
ОАО Белорусские обои;257;516,64
ОАО Агрокомбинат Скидельский;259;538,94
ОАО УМ N79;261;545,24
ОАО Борисовинтертранс;263;513,53
ОАО Гранд Фэшен Хаус;265;553,81
ОАО Завод сборного железобетона г. Борисов;267;555,10
ОАО Банк БелВЭБ;269;558,37
ОАО Управляющая компания холдинга Могилёвводстрой;271;561,64
ОАО Минскпромстрой;273;552,91
ОАО БЕЛГАЛАНТЕРЕЯ;275;567,17
ОАО ЦУМ МИНСК;277;564,42
ОАО АВТОТОРГСЕРВИС;279;549,67
ОАО СПМК-81;281;575,91
ОАО АНДАРАК;283;551,15
ОАО 10 УПРАВЛЕНИЕ НАЧАЛЬНИКА РАБОТ;285;550,39
ОАО ТАиМ;287;573,62
ОАО ГМРЗ;289;563,84
Белорусско-молдавское СОАО Кодру;291;581,06
ОАО Паритетбанк;293;590,28
ОАО Осиповичский консервный завод;295;584,49
ОАО ЧТЗ-сервис;297;599,69
ОАО ВОСХОД;299;591,89
#include <stdio.h>
#include "bibliot.h" // Подключаем вашу библиотеку
#include <locale.h>
#define MAX_ROWS 101
#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][101];
int rows = 0;
float orders[MAX_ROWS]; // Массив для количества заказов, теперь тип float
float income[MAX_ROWS]; // Массив для чистого дохода, теперь тип float
float a0, a1; // Коэффициенты регрессии
float regr1[MAX_ROWS], regr2[MAX_ROWS]; // Массивы для значений регрессии
f = fopen("predpriyatiya.txt", "rt");
if (f == NULL) {
printf("Не удалось открыть файл.\n");
return 1;
}
float n;
// Чтение данных из файла
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++;
}
n = 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", Sx/100);
printf("Среднеквадратичное отклонение: %.3f\n\n", Somx);
// Выводим результаты статистики для массива чистого дохода
printf("Результаты вычислений в массиве чистого дохода\n");
printf("Среднее значение: %-15.2f\n", Sy/100);
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 {
// Вычисление коэффициентов a0 и a1 для первой регрессии
getParams(fi1, orders, income, rows, &a0, &a1);
// Получение значений первой регрессии
getRegressionValues(fi1, orders, rows, a0, a1, regr1);
// Вывод коэффициентов a0 и a1 для первой регрессии
printf("Коэффициенты a0 и a1 для первой регрессии:\n a0=%.3f\n a1=%.3f\n\n", a0, a1);
// Вычисление коэффициентов a0 и a1 для второй регрессии
getParams(fi2, orders, income, rows, &a0, &a1);
// Получение значений второй регрессии
getRegressionValues(fi2, orders, rows, a0, a1, regr2);
// Вывод коэффициентов a0 и a1 для второй регрессии
printf("Коэффициенты a0 и a1 для второй регрессии:\n a0=%.3f\n a1=%.3f\n\n", a0, a1);
/*float a0, a1; // Коэффициенты регрессии
float regr1[MAX_ROWS], regr2[MAX_ROWS]; // Массивы для значений регрессии
regr(rows, Sy, &fi1, orders, &a0, &a1, income); // Вычисление коэффициентов a0 и a1 для первой регрессии
for (int i = 1; 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 = 1; 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;
}
#ifndef _bibliot_H_
#define _bibliot_H_
#include <locale.h>
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <string.h>
#include <math.h>
/* Объявления функций */
void getParams(float (*func)(float), float *orders, float *income, int size, float *a0, float *a1);
void getRegressionValues(float (*func)(float), float *orders, int size, float a0, float a1, float *regression);
void statistic(int n, float orders[], float income[], float *S, float *Sr, float *Som);
void regr(int n, float Sy, float (*fi)(float), float orders[], float *a0, float *a1, float income[]);
/* Определения функций */
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 / 101;
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,S4 = 0, S3 = 0;
for (i = 0; i < n; i++) {
S1 += income[i];
S2 += fi(orders[i]) * fi(orders[i]);
S3 += fi(orders[i]);
S4 += income[i] * fi(orders[i]);
}
float d = S3 * S1 - S2* S2;
*a0 = (S1 * S2 - S3 * S4) / d;
*a1 = (n * S4 - S3 * S1) / d;
}
void getParams(float (*func)(float), float *orders, float *income, int size, float *a0, float *a1) {
float Sy, Sr, Som;
statistic(size, orders, income, &Sy, &Sr, &Som);
regr(size, Sy, func, orders, a0, a1, income);
}
void getRegressionValues(float (*func)(float), float *orders, int size, float a0, float a1, float *regression) {
for (int i = 0; i < size; i++) {
regression[i] = a0 + a1 * func(orders[i]);
}
}
float fi1(float x) {
return sqrt(x) * (log(x)) * (log(x));
}
float fi2(float x) {
return exp(1 / x);
}
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
.686
.model flat, stdcall ; определяем модель памяти и
; модель вызова функций
option casemap:none ; отключаем регистрозависимость
; Библиотеки и подключаемые файлы проекта
;--------------------------------------------
include C:\masm32\include\windows.inc
include C:\masm32\include\user32.inc
include C:\masm32\include\kernel32.inc
include C:\masm32\include\masm32.inc
includelib C:\masm32\lib\user32.lib
includelib C:\masm32\lib\kernel32.lib
includelib C:\masm32\lib\masm32.lib
; Сегмент данных
;--------------------------------------------
.data
sConsTitle BYTE "Laba №4", 0
Arr DWORD 2, 2, 2, 3 ; двумерный массив 4x4
RowSize = ($ - Arr)
DWORD 2, 2, 2, 2
DWORD 1, 2, 2, 2
DWORD 2, 2, 2, 2
typeArr BYTE TYPE Arr ; размер элемента в байтах
row BYTE 4 ; число строк
col BYTE 4 ; число столбцов
i BYTE 0 ; индекс строки
j BYTE 0 ; индекс столбца
sum DWORD 1 ; переменная для хранения произведения
resultText BYTE "Answer: "
resultStr BYTE 20 DUP(?), 0
buffer BYTE 20 DUP(?), 0
tab BYTE ' ', 0
clrt BYTE 0Ah, 0Dh, 0
; Сегмент кода
;--------------------------------------------
.code
start:
; вывод заголовка консоли
invoke SetConsoleTitle, ADDR sConsTitle
; вывод массива
xor ecx, ecx ; ECX = 0
mov cl, row ; ECX = row - загружаем счётчик строк
mov esi, 0 ; ESI = 0 - указатель на нулевую строку
loop_row_1:
push ecx ; сохраняем счётчик внешнего цикла в стек
xor ecx, ecx ; ECX = 0
mov cl, col ; ECX = col - загружаем счётчик столбцов
mov ebx, 0 ; EBX = 0 - указатель на нулевой столбец
loop_col_1:
mov eax, Arr[esi][ebx] ; EAX <- Arr[i][j]
push ebx ; сохраняем регистры перед
; использованием ltoa и StdOut
push ecx
push esi
invoke ltoa, eax, ADDR buffer ; преобразование Arr[i][j] в строку
invoke StdOut, ADDR buffer ; вывод Arr[i][j]
invoke StdOut, ADDR tab ; вывод TAB
pop esi ; восстанавливаем регистры из стека
pop ecx
pop ebx
add ebx, TYPE Arr ; увеличиваем указатель столбцов на
; размер одного элемента
loop loop_col_1 ; проверяем окончание строки
invoke StdOut, ADDR clrt ; переходим на следующую строку
add esi, RowSize ; увеличиваем указатель строки на
; размер одной строки
pop ecx ; восстанавливаем счётчик внешнего цикла
loop loop_row_1 ; проверяем окончание массива
;--------------------------------------------
; вычисление произведения элементов, делящихся на 2
xor ecx, ecx ; обнуляем счетчик строк
mov cl, row ; загружаем количество строк
mov esi, 0 ; указываем на нулевую строку
mov i, 0
loop_row_2:
push ecx ; сохраняем счетчик внешнего цикла в стек
xor ecx, ecx ; обнуляем счетчик столбцов
mov cl, col ; загружаем количество столбцов
mov ebx, 0 ; указываем на нулевой столбец
mov j, 0
loop_col_2:
mov eax, Arr[esi][ebx] ; загружаем элемент массива в eax
test eax, 1 ; проверяем делится ли текущий элемент на 2
jnz not_divisible ; если не делится, переходим к следующему элементу
; умножаем текущий элемент на произведение
mov edx, sum ; сохраняем текущее произведение в edx
imul eax, edx ; умножаем текущий элемент на произведение
mov sum, eax ; сохраняем результат в sum
not_divisible:
inc j ; увеличиваем индекс столбца
add ebx, TYPE Arr ; увеличиваем указатель столбцов на размер одного элемента
loop loop_col_2 ; проверяем окончание строки
add esi, RowSize ; увеличиваем указатель строки на размер строки
pop ecx ; восстанавливаем счетчик внешнего цикла
loop loop_row_2 ; проверяем окончание массива
;--------------------------------------------
; вывод результата
invoke ltoa, sum, ADDR resultStr ; преобразование SUM в строку
invoke StdOut, ADDR resultText ; вывод результата
invoke Sleep, INFINITE
; завершение процессов Windows
invoke ExitProcess, NULL
; окончание сегмента start
end start
setlocale(LC_ALL, "");
setlocale(LC_ALL, "Russian");