Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 18.03.2018
Сообщений: 20

Java оптимизация кода

16.08.2019, 11:39. Показов 2892. Ответов 39

Студворк — интернет-сервис помощи студентам
Есть некий код, осуществляющий чтения числа элементов массива, а далее и сам массив, на выходе выдаётся сумма неповторяющихся элементов массива.

Java
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
import java.io.*;
import java.math.*;
import java.util.*;
 
class HelloWorld 
{ 
public static void main(String[] args)
{ 
int count;
        long X;
 
        Scanner in = new Scanner(System.in);
        count = in.nextInt();
        long[] Arr=new long[count];
        Arr[0]=in.nextInt();
        X=Arr[0];
        for (int i=1; i<count;i++)
        {
            boolean sr=true;
            Arr[i]=in.nextInt();
 
            {
                for(int j=0;j<i;j++)
                { if(Arr[i]==Arr[j])
                    {
                        sr=false;
                        break;}
                }
                if(sr==true)
                X=X+Arr[i];
            }
            
        }
        System.out.println(X);
} 
}
Проблема в том, что он работает недостаточно быстро, как можно было бы его оптимизировать с точки зрения скорости работы?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.08.2019, 11:39
Ответы с готовыми решениями:

Оптимизация кода на Java
Доброго времени суток, понимаю что данный код можно оптимизировать и по человечески переписать, но не имею представления как это сделать,...

Оптимизация кода
Добрый день, уважаемые форумчане. Вопрос несколько тривиальный, но в голову уже ничего не лезет Надо из Calendar получить время и дату....

Оптимизация кода
задача : Группа людей участвует в марафоне, их имена и время за которое они пробежали марафон вы можете увидеть ниже. Ваша задача найти...

39
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.08.2019, 21:39
Студворк — интернет-сервис помощи студентам
Java
1
2
3
4
Scanner scan = new Scanner(System.in));
ArrayList<Integer> list = new ArrayList<>();
while (scan.hasNext()) list.add(scan.nextInt());
System.out.println(list.stream().distinct().mapToInt(x -> x).sum());
А если из файла с Files.lines стримами, то еще быстрей получается

Файл на миллион рандомных чисел
Java
1
2
3
4
5
6
long time = System.currentTimeMillis();
        Scanner scan = new Scanner(new File("arr.txt"));
        ArrayList<Integer> list = new ArrayList<>();
        while (scan.hasNext()) list.add(scan.nextInt());
        System.out.println(list.stream().distinct().mapToInt(x -> x).sum());
        System.out.println(System.currentTimeMillis() - time);
Bash
1
>> 670
Java
1
2
3
4
5
6
long time = System.currentTimeMillis();
        System.out.println(Files.lines(Paths.get("arr.txt"))
                .flatMap(x -> Arrays.stream(x.split(" ")))
                .mapToInt(Integer::parseInt)
                .distinct().sum());
        System.out.println(System.currentTimeMillis() - time);
Bash
1
>> 207
2
16.08.2019, 21:56

Не по теме:

iSmokeJC, красиво, я бы еще distinct и map местами поменял.
(интересно, сколько тогда бы вышло по времени)

0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.08.2019, 21:59
ViktorFX, согласен

Добавлено через 1 минуту
Кстати дает, хоть и микроскопический, но все-таки выигрыш по времени
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
16.08.2019, 22:05
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Кстати дает, хоть и микроскопический, но все-таки выигрыш по времени
А какой разброс чисел? если разброс не максимальный или есть какая либо закономерность..

Не по теме:

кстати, интересная идея так же можно судить наскольно true-рандомные числа.

0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.08.2019, 22:14
Цитата Сообщение от ViktorFX Посмотреть сообщение
А какой разброс чисел?
Каких чисел? Если имеешь ввиду в файле, то 0..10000. Если замерянное время, то разброс вообще ни о чем. Да и эти цифры очень субъективны, зависят от компа и подходят только для относительного сравнения.
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
16.08.2019, 22:21
Цитата Сообщение от iSmokeJC Посмотреть сообщение
А если из файла с Files.lines стримами, то еще быстрей получается
Ты стрим забыл закрыть.
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
16.08.2019, 22:23
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Если имеешь ввиду в файле, то 0..10000.
Именно это. Мне просто стало интересно если разница при перемене distinct-map не большая то какока вероятность отсеивания а значит каков разброс на млн.
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.08.2019, 22:29
Цитата Сообщение от korvin_ Посмотреть сообщение
Ты стрим забыл закрыть.
Не забыл, на время не влияет
Java
1
2
3
4
5
6
7
8
9
10
11
long time = System.currentTimeMillis();
        try (Stream<String> stream = Files.lines(Paths.get("arr.txt"))) {
            System.out.println(stream
                    .flatMap(x -> Arrays.stream(x.split(" ")))
                    .distinct()
                    .mapToInt(Integer::parseInt)
                    .sum());
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println(System.currentTimeMillis() - time);
Bash
1
>> 204
1
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
16.08.2019, 22:38
Кроме того, из формулировки не совсем понятно, сумма неповторяющихся, это

Code
1
1 2 2 3 4 = 1 + 2 + 3 + 4 = 10
или

Code
1
1 2 2 3 4 = 1 + 3 + 4 = 8
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
16.08.2019, 22:42
korvin_, да, действительно, даже в голову не пришло...
0
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
16.08.2019, 23:01
korvin_, из условия задачи, поставленной топикстартером:
Цитата Сообщение от Klaus-118 Посмотреть сообщение
Есть некий код, осуществляющий ... Проблема в том, что он работает недостаточно быстро
следует, что представленный код, собственно, и является исходными данными. Задача же заключается в его оптимизации с целью снижения времени выполнения.
А уже из контекста данного кода
Java
1
2
3
4
5
6
7
8
9
10
for(int j=0;j<i;j++)
{ 
   if(Arr[i]==Arr[j])
   {
      sr=false;
      break;}
   }
   if(sr==true)
   X=X+Arr[i];
}
можно сделать вывод, что "сумма неповторяющихся" это:
Code
1
1 2 2 3 4 = 1 + 2 + 3 + 4 = 10
Добавлено через 2 минуты
А что, реально код со стримами выполняется быстрее, чем исходник от ТС?
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
16.08.2019, 23:40
Цитата Сообщение от alicesmagic Посмотреть сообщение
А что, реально код со стримами выполняется быстрее, чем исходник от ТС?
Стримы тут не при чём. Разница в работе с IO.
1
 Аватар для alicesmagic
233 / 130 / 27
Регистрация: 24.08.2016
Сообщений: 875
17.08.2019, 01:19
Офигеть! Я сейчас проверила по времени выполнения. Массив 10000 эл-тов из файла. Случайные числа в [0...9999999]
Кликните здесь для просмотра всего текста
Java
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.Stream;
 
public class SpeedTest {
    public static void main(String[] args) {
        SpeedTest st = new SpeedTest();
        long start, delta, sum = 0, n = 100;
        for (int i = 1; i <= n; i++) {
            start = System.nanoTime();
            st.code();
            delta = System.nanoTime() - start;
            if (i > 9) sum += delta;
            System.out.println("Испытание #" + i + ": " + delta);
        }
        System.out.println("Среднее время выполнения: " + sum / (n - 10));
    }
 
//  private void code() { // Исходник ТС ~63ms
//      try (Scanner in = new Scanner(new File("arr.txt"))) {;
//          int count = 10000;
//          long X;
//          long[] Arr = new long[count];
//          Arr[0] = in.nextInt();
//          X = Arr[0];
//          for (int i = 1; i < count; i++) {
//              boolean sr = true;
//              Arr[i] = in.nextInt();
//              for (int j = 0; j < i; j++) {
//                  if (Arr[i] == Arr[j]) {
//                      sr = false;
//                      break;
//                  }
//              }
//              if (sr)
//                  X += Arr[i];
//          }
//          System.out.println(X);
//      } catch (IOException e) {
//          e.printStackTrace();
//      }
//  }
    
//  private void code() { // Быстрый стрим ~5ms
//      try (Stream<String> stream = Files.lines(Paths.get("arr.txt"))) {
//            System.out.println(stream
//                    .flatMap(x -> Arrays.stream(x.split(" ")))
//                    .distinct()
//                    .mapToLong(Long::parseLong)
//                    .sum());
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//  }
 
//  private void code() { // Медленный стрим ~24ms
//      try (Scanner scan = new Scanner(new File("arr.txt"))) {
//          ArrayList<Integer> list = new ArrayList<>();
//          while (scan.hasNext()) list.add(scan.nextInt());
//          System.out.println(list.stream().distinct().mapToInt(x -> x).sum());
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//  }
    
    private void code() { // "Убийца памяти" ~37ms
    try (Scanner in = new Scanner(new File("arr.txt"))) {;
        int count = 10000;
        long X = 0;
        long[] Arr = new long[count];
        int[] digits = new int[10000000];
        for (int i = 0; i < count; i++) {
            Arr[i] = in.nextInt();
            if (++digits[(int) Arr[i]] <= 1)
                X = X + Arr[i];
        }
        System.out.println(X);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Получилось вот что:
Исходный код ТС: Среднее время выполнения ~ 63мс
Этот код: Среднее время выполнения ~ 5мс

iSmokeJC,

Стрим со сканером ~ 24мс (тоже быстрее исходника почти в три раза)))
Мой "убийца памяти") ~ 37мс (быстрее исходника вдвое)
0
17.08.2019, 03:44

Не по теме:

Кстать, я тут гуглил насчёт максимальной длины массива и везде пишут, что эт где-то Integer.MAX_VALUE - 5, но конечно зависит от конкретной JVM, но вот я почему-то не могу создать массив размером хотя бы 100000, хотя это даже близко не максимальное значение. Сразу вылетает Out of memory. Никто не знает почему так?

0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
17.08.2019, 08:17
Gungala, Xmx маленький?
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
17.08.2019, 08:47
Цитата Сообщение от korvin_ Посмотреть сообщение
Gungala, Xmx маленький?
Ну, с двумя гигами начал создавать размером 100000, но Integer.MAX_VALUE - 1000 даже с 5 гб не создаёт
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
17.08.2019, 09:19
Цитата Сообщение от Gungala Посмотреть сообщение
но Integer.MAX_VALUE - 1000 даже с 5 гб не создаёт
Что значит «даже»? Размер одного int — 4 байта, вот и посчитай.

Добавлено через 8 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    private static final int KB = 1024;
    private static final int MB = 1024 * KB;
    private static final int GB = 1024 * MB;
 
    public static void main(String[] args) {
        printGB("Xmx", Runtime.getRuntime().maxMemory());
        printGB("int", 4L * Integer.MAX_VALUE);
        createIntArray(Integer.MAX_VALUE - 2);
    }
 
    private static void printGB(String name, long bytes) {
        System.out.printf("%s = %12dB = %9dkB = %6dMB = %3dGB\n", name, bytes, bytes/KB, bytes/MB, bytes/GB);
    }
 
    private static void createIntArray(int length) {
        final var xs = new int[length];
        System.out.printf("int[%d]\n", length);
    }
Code
1
2
3
Xmx =  10737418240B =  10485760kB =  10240MB =  10GB
int =   8589934588B =   8388607kB =   8191MB =   7GB
int[2147483645]
1
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
17.08.2019, 09:30
Цитата Сообщение от korvin_ Посмотреть сообщение
Размер одного int — 4 байта
Я почему-то думал, что только 2 :D
ы, бывает. Спасибо за разъяснение
0
Эксперт функциональных языков программированияЭксперт Java
 Аватар для korvin_
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
17.08.2019, 09:32
Соответственно

Java
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
    private static final int KB = 1024;
    private static final int MB = 1024 * KB;
    private static final int GB = 1024 * MB;
 
    public static void main(String[] args) {
        System.out.println();
        printGB("Xmx", Runtime.getRuntime().maxMemory());
        System.out.println();
        createByteArray(Integer.MAX_VALUE - 2);
        createIntArray(Integer.MAX_VALUE - 2);
        createLongArray(Integer.MAX_VALUE - 2);
    }
 
    private static void printGB(String name, long bytes) {
        System.out.printf("%s = %12dB = %9dkB = %6dMB = %3dGB\n", name, bytes, bytes/KB, bytes/MB, bytes/GB);
    }
 
    private static void createByteArray(int length) {
        final var xs = new byte[length];
        printArrayGB("byte", 1, xs.length);
    }
 
    private static void createIntArray(int length) {
        final var xs = new int[length];
        printArrayGB("int", 4, xs.length);
    }
 
    private static void createLongArray(int length) {
        final var xs = new long[length];
        printArrayGB("long", 8, xs.length);
    }
 
    private static void printArrayGB(String elemType, int elemSizeBytes, int length) {
        printGB(String.format("%8s[%d]", elemType, length), (long) elemSizeBytes * length);
    }
Code
1
2
3
4
5
Xmx =  19327352832B =  18874368kB =  18432MB =  18GB
 
    byte[2147483645] =   2147483645B =   2097151kB =   2047MB =   1GB
     int[2147483645] =   8589934580B =   8388607kB =   8191MB =   7GB
    long[2147483645] =  17179869160B =  16777215kB =  16383MB =  15GB
2
66 / 43 / 24
Регистрация: 18.08.2019
Сообщений: 129
19.08.2019, 00:58
Топикстартер решает задачу с сайта подобного e-olymp. Там генератор тестов грузит данные либо через System.in, либо через файлы. Для System.in рекомендовано использовать Scanner:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.io.*;
import java.util.*;
 
public class Main
{
   public static void main(String[] args)   {//имя класса должно быть Main
      Scanner in = new Scanner(System.in);
      PrintWriter out = new PrintWriter(System.out);
 
      int a = in.nextInt();
      int b,c;
 
      b=a/10; c=a%10;
      out.println(b +" " + c);
 
      out.flush();
   }
}
Но беда в том, что код JAVA там выполняется медленнее допустим плюсов.
Для сравнения перенес код плюсов в JAVA:
C++
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
#include <iostream>
 
typedef unsigned long long int ull;
const int N = 1E6;
long a[N];
 
int ni(int i, int e, long h) {
    int d = (e > i) ? 1 : -1;
    while (true) { if (i == e || a[i+d] < h) break; i+=d; }
    return i;
}
 
ull g(int l, int c, int r) {    
    long hl = a[c], hr = a[c+1], hln = -1, hrn = -1;
    int il = ni(c, l, hl), ir = ni(c+1, r, hr), iln = 0, irn = 0;
    
    ull s = 0;
    while (true) {
        ull z = std::min(hl, hr) * (ir - il + 1);
        s = std::max(s, z);
        
        if (il == l && ir == r) break;
        
        if (hln == -1 && il > l) { hln = a[il-1]; iln = ni(il, l, hln); }
        if (hrn == -1 && ir < r) { hrn = a[ir+1]; irn = ni(ir, r, hrn); }
        if (hln > hrn) {
            hl = hln; il = iln; hln = -1;
        } else {
            hr = hrn; ir = irn; hrn = -1;
        }        
    }
    return s;
}
 
ull f(int l, int r) {
    int c = (l+r)/2;    
    return (l == r) ? a[l] : std::max(g(l, c, r), std::max(f(l, c), f(c+1, r)));
}
 
int main() {
    int n; std::cin >> n; for (int i=0; i<n; i++) std::cin >> a[i];
    std::cout << f(0, n-1);
}
и JAVA
Java
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
import java.util.Scanner;
 
public class Problem_0383n {
    
    public static long[] a = new long[1000000];
 
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // data input
        int n = in.nextInt();
        if (n == 0) {
            System.out.println(0);
            return;
        }
        
        for (int i = 0; i < n; i++) a[i] = in.nextInt();
        
        System.out.println(f(0, n - 1));
    }
 
    private static long f(int l, int r) {
        int c = (l + r) / 2;    
        return (l == r) ? a[l] : Math.max(g(l, c, r), Math.max(f(l, c), f(c + 1, r)));
    }
 
    private static long g(int l, int c, int r) {
        long hl = a[c], hr = a[c+1], hln = -1, hrn = -1;
        int il = ni(c, l, hl), ir = ni(c+1, r, hr), iln = 0, irn = 0;
 
        long s = 0;
        while (true) {
            long z = Math.min(hl, hr) * (ir - il + 1);
            s = Math.max(s, z);
 
            if (il == l && ir == r) break;
 
            if (hln == -1 && il > l) { hln = a[il-1]; iln = ni(il, l, hln); }
            if (hrn == -1 && ir < r) { hrn = a[ir+1]; irn = ni(ir, r, hrn); }
            if (hln > hrn) {
                hl = hln; il = iln; hln = -1;
            } else {
                hr = hrn; ir = irn; hrn = -1;
            }        
        }
        return s;
    }
 
    private static int ni(int i, int e, long h) {
        int d = (e > i) ? 1 : -1;
        while (true) { if (i == e || a[i+d] < h) break; i+=d; }
        return i;        
    }
    
}
Результаты отличаются по времени выполнения самого тяжелого (долгого) теста раз в 5-6.
И да, они при тестировании грузят для примера от 0 до 106 чисел принимающих значения от 0 до 109.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.08.2019, 00:58

Оптимизация кода
Есть 2 метода, изначально вводится строка допусти 2 + 3. Строка разбивается на массив(чисел и знака), затем выполняется операция. Свич...

Оптимизация кода
во всем коде много раз повторяются такие вот строчки for(int i = 0; i &lt; 9; i++) for(int j = 0; j &lt; 9; j++) ...

Посоветуйте примеры кода по Java. Теория прочтена, но с языком Java не знакома
Или может кто может дать готовый код. В теории вроде бы не очень сложно. :cry: 1.Напишите процедуру, которая по заданному сообщению...

Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода
MATLAB только начал осваивать. Попытался реализовать нахождение точки минимума методом Ньютона для функции 2*X12 - X1*X2 + 3*X22 -...

Оптимизация кода. Замер времени выполнения части кода.
Доброе утро. Есть желание посмотреть сколько времени занимает выполнение какого-то блока кода/отдельной функции или процедуры/программы...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru