• Почему LeetCode выдаёт ошибку?

    KoshakSB
    @KoshakSB Автор вопроса
    Спасибо за помощь, препод сказал загнать код на проверку в литкод, а я им не пользовался ни разу.
    Написано
  • Как избавить от заданных размеров количества строк и столбцов при считывании из файла?

    KoshakSB
    @KoshakSB Автор вопроса
    txt:
    Приорбанк ОАО;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
    Написано
  • Как избавить от заданных размеров количества строк и столбцов при считывании из файла?

    KoshakSB
    @KoshakSB Автор вопроса
    Заголовочный файл:
    #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 // Завершение условной компиляции
    Написано
  • Почему неправильно считает Коэффициенты регрессии?

    KoshakSB
    @KoshakSB Автор вопроса
    res2001, спасибо, помогла простая замена float на double.
    Написано
  • Почему неправильно считает Коэффициенты регрессии?

    KoshakSB
    @KoshakSB Автор вопроса
    txt

    Приорбанк ОАО;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


    тест в excel:
    66330e0d9c0df112700250.png
    Написано
  • Почему неправильно считает Коэффициенты регрессии?

    KoshakSB
    @KoshakSB Автор вопроса
    main.cpp
    #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;
    }


    bibliot.h
    #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
    Написано
  • Почему не работает подсчёт произведения элементов массива masm32(ассемблер)?

    KoshakSB
    @KoshakSB Автор вопроса
    .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

    Вот рабочий код, ниже скрин, что всё работает.
    6621402f7caf4808517338.jpeg
    Написано
  • Почему '\xDA', '\xc4', и другие управляющие последовательности не работают?

    KoshakSB
    @KoshakSB Автор вопроса
    IvanU7n, подскажите пожалуйста, если не сложно, как здесь тогда реализовать русский язык? Через setlocale(LC_ALL, "");
    и setlocale(LC_ALL, "Russian");
    не работает ввод данных 6587e7fcd6f65963577804.jpeg
    Написано
  • Почему '\xDA', '\xc4', и другие управляющие последовательности не работают?

    KoshakSB
    @KoshakSB Автор вопроса
    IvanU7n, спасибо, проблема оказалась здесь, из-за реализации русского языка не работала псевдографика. Спасибо!
    Написано