Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/30: Рейтинг темы: голосов - 30, средняя оценка - 4.50
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676

Добавить к коду подсчет яркостей

22.09.2020, 09:49. Показов 7799. Ответов 124
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
                foreach (var p in source)
                {
                    //get pixel from dithering matrix
                    var dithPixel = dith[p.X % dith.Width, p.Y % dith.Height].GetBrightness();
                    //get pixel from source image
                    var pixel = source[p].GetBrightness();
                    //compare
                    res[p] = pixel >= dithPixel ? Color.White : Color.Black;
                }
Вот такой код есть из темы.
Хочу расширить код подсчитывая количество значений яркости dithPixel например в виде структуры [Value, Count], но не могу вспомнить как это сделать через хеши (именованные массивы).
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2020, 09:49
Ответы с готовыми решениями:

Добавить к коду подсчет вызовов функции
помогите добавить подсчет вызовов функции,вообще не знаю,как symbol = 's' height = 3 width = 3 counter = 3 def dec1(f): ...

Подсчёт суммы значений в ячейках по столбцу по коду товара
Для упрощения. Вот есть две таблицы. Первая с двумя столбцами и кучей строк. 1 столбец в ней - это код товара, 2 столбец - цена. Товар...

Добавить комментарии к коду
Здравствуйте. Кто сможет закомментировать код? <script language="JavaScript"> var elements = document.URL.substr(8).split(/\/|\\/); ...

124
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
29.09.2020, 14:52
Студворк — интернет-сервис помощи студентам
Элд Хасп
А почему 'k++;', а не 'k += <количество байтов на пиксель в текущем формате изображения>;'?

И ещё лишние затраты времени во внутреннем цикле на трёхразовое обращение к элементу массива по [row, col]. Можно сократить количество этих обращений через использование временной переменной.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
29.09.2020, 15:00
Цитата Сообщение от Someone007 Посмотреть сообщение
А еще вы забыли Bitmap.UnlockBits.
Да, забыл.

belalugoci, добавил коэффициент пересчёта и разблокировку изображеия:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
        /// <summary>Преобразует пиксельное цветное изображение в массив in[,] яркостей.</summary>
        /// <param name="bmp">Цветное изображение в формате bmp.</param>
        /// <param name="dev">Коэффициент приведения процентов. Для реальной яркости должен быть равен 100.</param>
        /// <returns>Массив int[,] яркостей пикселей.
        /// Значения яркостей в процентах по отношению к цвету (1, 1, 1) делённое на dev.</returns>
        public static BrightnesData GetBrightnes(Bitmap bmp, int dev = 100)
        {
 
            BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
            int stride = bmpData.Stride;
            byte[] bmpBytes = new byte[stride * bmp.Height];
            System.Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, bmpBytes, 0, bmpBytes.Length);
            bmp.UnlockBits(bmpData);
 
            int[,] brightnes = new int[bmp.Height, bmp.Width];
 
            // Y=0.3*R+0.59*G+0.11*B
            int r = 30, g = 59, b = 11;
            int k = 0;
            int[] brightnesCounts = new int[256 * 100 / dev];
            for (int row = 0; row < bmp.Height; row++)
            {
                for (int col = 0; col < bmp.Width; col++)
                {
                    brightnes[row, col] = r * bmpBytes[k] + g * bmpBytes[k + 1] + b * bmpBytes[k + 2];
                    brightnes[row, col] /= dev;
                    brightnesCounts[brightnes[row, col]]++;
                    k++;
                }
            }
 
            (int brightne, int count)[] brightnesCountsSort = brightnesCounts
                .Select((cnt, br) => (brightne: br, count: cnt))
                .Where(pr => pr.count > 0)
                .OrderBy(pr => pr.count)
                .ToArray();
 
            return new BrightnesData(brightnes, brightnesCountsSort);
        }
C#
1
2
3
            stopwatch.Start();
            var brightnes = GetBrightnes(bmp, 25);
            stopwatch.Stop();
Добавлено через 3 минуты
Цитата Сообщение от kotelok Посмотреть сообщение
Элд Хасп
А почему 'k++;', а не 'k += <количество байтов на пиксель в текущем формате изображения>;'?
Метод сделан только под один формат изображений. В нём это значение константа.
Я не спец по работе с изображениями.
И не знаю как в других форматах считается яркость.

Цитата Сообщение от kotelok Посмотреть сообщение
И ещё лишние затраты времени во внутреннем цикле на трёхразовое обращение к элементу массива по [row, col]. Можно сократить количество этих обращений через использование временной переменной.
Не должно влиять.
Компилятор должен это сам оптимизировать.
Будет проявляться только в Debug.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
29.09.2020, 15:13
Цитата Сообщение от kotelok Посмотреть сообщение
И ещё лишние затраты времени во внутреннем цикле на трёхразовое обращение к элементу массива по [row, col]. Можно сократить количество этих обращений через использование временной переменной.
Изменил, но на время это почти не повлияла.
Есть небольшое ускорение, но думаю при сборке Release время было бы одинаковое
C#
21
22
23
24
25
26
27
28
29
30
            int brightne;
            for (int row = 0; row < bmp.Height; row++)
            {
                for (int col = 0; col < bmp.Width; col++)
                {
                    brightne = (r * bmpBytes[k] + g * bmpBytes[k + 1] + b * bmpBytes[k + 2]) / dev;
                    brightnesCounts[brightnes[row, col] = brightne]++;
                    k++;
                }
            }
Добавлено через 1 минуту
Someone007, и я ошибался на счёт времени создания байтового массива.
Основное время (>90%) всё таки уходит на цикл.

Добавлено через 1 минуту
Возможно медленно работает из-за того что каждый байт надо преобразовать в int.
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
29.09.2020, 15:13
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Метод сделан только под один формат изображений. В нём это значение константа
Я про то, что вот это вот, new byte[stride * bmp.Height];, даёт на выходе буфер размера 'Width * Height * <bytes per pixel>'. Где <bytes per pixel> явно больше единицы.

В этот буфер выгружается всё изображение.

Далее, в цикле значение 'k', относительно которого получаются значения цветов пикселей, проходит не по всему буферу, а лишь по первому его кусочку длиной 'Width * Height'.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
29.09.2020, 15:16
belalugoci, проверьте как по скорости будет работать на ваших данных.

Добавлено через 1 минуту
Цитата Сообщение от kotelok Посмотреть сообщение
Я про то, что вот это вот, new byte[stride * bmp.Height];, даёт на выходе буфер размера 'Width * Height * <bytes per pixel>'. Где <bytes per pixel> явно больше единицы.
А как надо?

Добавлено через 1 минуту
Я до этого с изображениеями не работал.
Подправьте код метода, как будет правильнее.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
29.09.2020, 15:29
А где скачать это секретное изображение, на котором все проверяют скорость работы? Хочу у себя проверить.
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
29.09.2020, 15:30
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Я до этого с изображениеями не работал.
Я тоже не особо, но ведь размер буфера больше количества пикселей, т.е:
1. Есть изображение размером 2x2, это 4 пикселя (Width*Height).
2. Каждый пиксель это, допустим, 4 байта (rgba), т.е. размер буфера будет (2 * 2) * 4 = 16.
3. Далее, если проходить вложенным циклом по Width * Height, то это будет 4 итерации, т.е. если делать k++, то оно будет меняться от нуля до трёх, т.е на первой итерации k=0 и будет корректно подсчитана яркость первого пикселя, на второй итерации k=1 и, вместо получения из буфера 'rgb' второго пикселя, оттуда будут получены значения 'gba' от первого пикселя, на третьей итерации k=2, и при обращении к буферу, будут извлечены 'ba' для первого пикселя и 'r' для второго, на последней итерации к=3, из буфера достаётся 'a' от первого пикселя и 'rg' от второго.

Т.е. если 'k' идёт по буферу, а цикл по пикселям, то на каждом пикселе 'k' надо увеличивать на количество байт, которое занимает один пиксель в данном формате изображения.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
29.09.2020, 15:46
belalugoci, многозадачный вариант.
Для больших изображений даёт преимущество.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
        /// <summary>Преобразует пиксельное цветное изображение в массив in[,] яркостей.</summary>
        /// <param name="bmp">Цветное изображение в формате bmp.</param>
        /// <param name="dev">Коэффициент приведения процентов. Для реальной яркости должен быть равен 100.</param>
        /// <returns>Массив int[,] яркостей пикселей.
        /// Значения яркостей в процентах по отношению к цвету (1, 1, 1) делённое на dev.</returns>
        public static BrightnesData GetBrightnes(Bitmap bmp, int dev = 100)
        {
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
 
            BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
            int stride = bmpData.Stride;
            byte[] bmpBytes = new byte[stride * bmp.Height];
            System.Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, bmpBytes, 0, bmpBytes.Length);
            bmp.UnlockBits(bmpData);
 
            long timeBytes = stopwatch.ElapsedMilliseconds;
 
            int[,] brightnes = new int[bmp.Height, bmp.Width];
 
            // Y=0.3*R+0.59*G+0.11*B
            int r = 30, g = 59, b = 11;
            int k = 0;
            int[] brightnesCounts = new int[256 * 100 / dev];
 
            int height = bmp.Height;
            int width = bmp.Width;
            Task[] tasks = new Task[height];
            for (int row = 0; row < height; row++)
            {
                int _row = row;
                tasks[row] = Task.Factory.StartNew(rowCalk, _row);
            }
 
            Task.WaitAll(tasks);
 
            long timeBrightnes = stopwatch.ElapsedMilliseconds;
 
 
            (int brightne, int count)[] brightnesCountsSort = brightnesCounts
                .Select((cnt, br) => (brightne: br, count: cnt))
                .Where(pr => pr.count > 0)
                .OrderBy(pr => pr.count)
                .ToArray();
 
            long timeBrightnesSort = stopwatch.ElapsedMilliseconds;
            return new BrightnesData(brightnes, brightnesCountsSort);
 
            // Локальный метод для расчёта яркостей одной строки
            void rowCalk(object obj)
            {
                int brightne;
                int row = (int)obj;
                k = row * width;
                for (int col = 0; col < width; col++)
                {
                    brightne = (r * bmpBytes[k++] + g * bmpBytes[k++] + b * bmpBytes[k++]) / dev;
                    brightnesCounts[brightnes[row, col] = brightne]++;
                    //k++;
                }
 
            }
        }
Добавлено через 6 минут
Цитата Сообщение от kotelok Посмотреть сообщение
Т.е. если 'k' идёт по буферу, а цикл по пикселям, то на каждом пикселе 'k' надо увеличивать на количество байт, которое занимает один пиксель в данном формате изображения.
Дошло!
Невнимательность....


Исправил в коде выше.

Добавлено через 3 минуты
Цитата Сообщение от Someone007 Посмотреть сообщение
А где скачать это секретное изображение, на котором все проверяют скорость работы? Хочу у себя проверить.
Любое большое 3840х2400 и более

Добавлено через 1 минуту
Цитата Сообщение от Usaga Посмотреть сообщение
Ну хз. На большом изображении вполне себе будет толк.
Действительно есть.
0
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
29.09.2020, 15:53
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Исправил в коде выше.
Ну там опять невнимательность:
C#
1
k = row * width * <байт на пиксель>;
Иначе всё так же остаётся.
Байт на пиксель, наверное, можно как-то из параметров BitmapData достать, ну или просто вычислить как размер итогового буфера делённый на количество пикселей в изображении.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
29.09.2020, 16:06
Цитата Сообщение от kotelok Посмотреть сообщение
Ну там опять невнимательность:
ТОЧНО!
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            // Локальный метод для расчёта яркостей одной строки
            void rowCalk(object obj)
            {
                int brightne;
                int row = (int)obj;
                k = row * width * 4;
                for (int col = 0; col < width; col++)
                {
                    brightne = (r * bmpBytes[k++] + g * bmpBytes[k++] + b * bmpBytes[k++]) / dev;
                    brightnesCounts[brightnes[row, col] = brightne]++;
                    k++;
                }
 
            }
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
29.09.2020, 16:07
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вышло дольше.
А в моем тесте использование unsafe выходит быстрее примерно на 10-14мс (при ~250мс на вызов метода), незначительно но всё же...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
29.09.2020, 16:10
Цитата Сообщение от Someone007 Посмотреть сообщение
А в моем тесте использование unsafe выходит быстрее, незначительно но всё же. Примерно 10-14мс (при ~250мс на вызов метода).
У меня вышло 700 в моём варианте.
И +150 в предлагаемом вами.
Создание байтового массива занимает < 20 мс

Добавлено через 47 секунд
Someone007, вы какой вариант использовали: синхронный, параллельный ?
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
29.09.2020, 16:14
Цитата Сообщение от Элд Хасп Посмотреть сообщение
вы какой вариант использовали: синхронный, параллельный ?
параллельный, и делал 10 вызовов метода (11, но первый не учитывался при подсчете), вычисляя среднее значение.

Кстати, по моему
C#
1
            Parallel.For(0, height, rowCalk);
быстрее чем
C#
1
2
3
4
5
6
7
8
            Task[] tasks = new Task[height];
            for (int row = 0; row < height; row++)
            {
                int _row = row;
                tasks[row] = Task.Factory.StartNew(rowCalk, _row);
            }
 
            Task.WaitAll(tasks);
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
29.09.2020, 16:19
Цитата Сообщение от Someone007 Посмотреть сообщение
параллельный, и делал 10 вызовов метода (11, но первый не учитывался при подсчете), вычисляя среднее значение.
Я на синхронном проверял.

Добавлено через 44 секунды
Цитата Сообщение от Someone007 Посмотреть сообщение
Кстати, по моему
Проверьте.
Я не за компом сейчас.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
29.09.2020, 16:44
Почему-то скорость возрастает в разы если объявление переменной k перенести в локальную функцию.

Добавлено через 5 минут
67ms IntPtr+unsafe vs 79ms с обычным массивом, дебаг
66ms vs 80ms в релизе.
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
29.09.2020, 16:51  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
belalugoci, многозадачный вариант.
проверю завтра на работе
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
29.09.2020, 16:56
Цитата Сообщение от Someone007 Посмотреть сообщение
Почему-то скорость возрастает в разы если объявление переменной k перенести в локальную функцию.
Это моя ошибка!
Объявление должно быть обязательно внутри локального метода.
Иначе логика будет неправильно работать.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,576
29.09.2020, 17:16
А еще тут по моему проблема с многопоточным вариантом, не синхронизируется доступ к массиву из разных потоков, из-за чего результат получается неверный и каждый раз разный.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,177
Записей в блоге: 2
29.09.2020, 17:39
Цитата Сообщение от belalugoci Посмотреть сообщение
проверю завтра на работе
Вроде устранил все ошибки и добавил возможность задавать количество потоков.
Оптимальное количество будет разным на разных компах.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
        /// <summary>Преобразует пиксельное цветное изображение в массив in[,] яркостей.</summary>
        /// <param name="bmp">Цветное изображение в формате bmp.</param>
        /// <param name="tasksCount">Количество потоков для расчёта.</param>
        /// <param name="dev">Коэффициент приведения процентов. Для реальной яркости должен быть равен 100.</param>
        /// <returns>Массив int[,] яркостей пикселей.
        /// Значения яркостей в процентах по отношению к цвету (1, 1, 1) делённое на dev.</returns>
        public static BrightnesData GetBrightnes(Bitmap bmp, int tasksCount = 10, int dev = 100)
        {
 
            BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
            int stride = bmpData.Stride;
            byte[] bmpBytes = new byte[stride * bmp.Height];
            System.Runtime.InteropServices.Marshal.Copy(bmpData.Scan0, bmpBytes, 0, bmpBytes.Length);
            bmp.UnlockBits(bmpData);
 
            int[,] brightnes = new int[bmp.Height, bmp.Width];
 
            int[] brightnesCounts = new int[256 * 100 / dev];
 
            int height = bmp.Height;
            int width = bmp.Width;
            Task[] tasks = new Task[tasksCount];
            rowCalkData data = new rowCalkData()
            {
                dev = dev,
                length = height / tasksCount,
                bmpBytes = bmpBytes,
                brightnes = brightnes,
                brightnesCounts = brightnesCounts
            };
 
            int mod = height % tasksCount;
            int counRow = 0;
 
            for (int num = 0; num < tasksCount; num++)
            {
                rowCalkData _data = data;
                _data.rowBegin = counRow + data.length;
                if (mod-- > 0)
                    _data.rowBegin++;
 
                counRow += _data.rowBegin;
 
                tasks[num] = Task.Factory.StartNew(RowCalk, data);
            }
 
            Task.WaitAll(tasks);
 
            (int brightne, int count)[] brightnesCountsSort = brightnesCounts
                .Select((cnt, br) => (brightne: br, count: cnt))
                .Where(pr => pr.count > 0)
                .OrderBy(pr => pr.count)
                .ToArray();
 
            return new BrightnesData(brightnes, brightnesCountsSort);
 
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
        // Y=0.3*R+0.59*G+0.11*B
        const int R = 30, G = 59, B = 11;
        struct rowCalkData
        {
            public int dev;
            public int rowBegin;
            public int length;
            public byte[] bmpBytes;
            public int[,] brightnes;
            public int[] brightnesCounts;
        }
        // Mетод для расчёта яркостей диапазона строк
        static void RowCalk(object obj)
        {
            rowCalkData data = (rowCalkData)obj;
 
            int width = data.brightnes.GetLength(1);
            int brightne;
            int k = data.rowBegin * width * 4;
            int rowEnd = data.rowBegin + data.length;
 
            for (int row = 0; row < rowEnd; row++)
            {
 
                for (int col = 0; col < width; col++)
                {
                    brightne = (R * data.bmpBytes[k++] + G * data.bmpBytes[k++] + B * data.bmpBytes[k++]) / data.dev;
                    data.brightnesCounts[data.brightnes[row, col] = brightne]++;
                    k++;
                }
            }
 
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            Stopwatch stopwatch = new Stopwatch();
 
            Bitmap bmp = (Bitmap)Image.FromFile(@"C:\Users\EldHa\OneDrive\Изображения\FlatEarthMap.bmp");
 
            stopwatch.Start();
            var brightnes = GetBrightnes(bmp, 8, 25);
            stopwatch.Stop();
 
            Console.WriteLine($"Минимальное количество точек с одной яркостью: {brightnes.BrightnesCounts[0]}");
            Console.WriteLine($"Максимальное количество точек с одной яркостью: {brightnes.BrightnesCounts[brightnes.BrightnesCounts.Length - 1]}");
            Console.WriteLine($"Количество различных яркостей: {brightnes.BrightnesCounts.Length}");
            Console.WriteLine("Список яркостей яркостей в порядке возрастания их количества");
            Console.WriteLine(string.Join(Environment.NewLine, brightnes.BrightnesCounts));
0
 Аватар для belalugoci
475 / 294 / 29
Регистрация: 01.06.2018
Сообщений: 3,676
29.09.2020, 18:31  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вроде устранил все ошибки и добавил возможность задавать количество потоков.
Оптимальное количество будет разным на разных компах.
буду завтра пытаться встроить к себе в проект, интересно будет сравнить по скорости работы.
для будущих преобразований еще нужно картинку BMP представить в виде матрицы яркостей, то есть в коде, где вычисляется яркость, нужно это значение еще ставить в матрицу W*H изображения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.09.2020, 18:31

Добавить комментарии к коду
нужно прокомментировать код mov ax,@data mov ds,ax mov cx,br mov si,offset mas xor ax, ax c1: xor ax, ax mov al, jmp...

Добавить комментарии к коду
Кто нибудь напишите подробный комментарий к коду ни СИ. Можно подробней по &quot;#define size 5&quot; и int a, a и a. ...

Добавить к коду многоадресный делегат
В иерархии, созданной в этой работе «Интерфейсы», добавить использование для проверки всех методов данного класса многоадресный делегат. ...

К готовому коду добавить процедуру
Суммы элементов каждого столбца матрицы X(m,n), имеющих значения в интервале Min…Max. Для столбца. (К ГОТОВОМУ КОДУ ДОБАВИТЬ ПРОЦЕДУРУ)...

К коду добавить вывод в консоль
Нужно вывести массив в консоль. Как ни пытался, то 0 выводит, то ошибки .586 .model flat,stdcall option casemap:none include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru