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

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

16.08.2019, 11:39. Показов 2785. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Альцгеймер и колоссальный объем вычислений
Programma_Boinc 08.08.2026
Альцгеймер и колоссальный объем вычислений Сейчас по направлению болезни Альцгеймера идет колоссальный объем вычислений. Это один из главных приоритетов проекта. Такой массовый наплыв задач. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru