Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47

Алгоритм для многопоточности

06.09.2016, 12:49. Показов 3459. Ответов 63
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мне нужно написать алгоритм реализации задач(как я думаю делать):
Написать консольную программу, которая выполняет поиск максимального элемента в массиве с 1000000000 элементов. Массив в начале программу можно инициализировать произвольным образом. Программа должна продемонстрировать следующие подходы к решению данной проблемы.
- Поиск использует только 1 поток.
- Поиск использует 2 потока.
- Поиск использует оптимальное количество потоков, которые можно запускать на данном компьютере.
- Программа выполняет поиск используя 20 потоков.

Подскажите реализацию алгоритма

Добавлено через 2 часа 40 минут
я как думаю делать:
можно поделить 1000000000 елементов на количество потоков и искать в каждом потоке макс а потом сравнить их,то есть если потоков 20 то поделить на 20 частей и потом сравнить эти 20 элементов . Хотя как по мне лучше отсортировать массив и взять последний элемент
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.09.2016, 12:49
Ответы с готовыми решениями:

Соотношение многопоточности приложения c++ и многопоточности на уровне системы?
Возник следующий вопрос: в C++ существует два варианта работы с многопоточностью - std::theard и использование mutex. Но, оба этих...

Написать алгоритм рекурсивного перебора папок в многопоточности с использованием Fork/Join Framework
Написать алгоритм рекурсивного перебора папок в многопоточности с использованием Fork/Join Framework

Наилучшее решение для реализации многопоточности
Здравствуйте. У меня есть класс. В нем процедуры, которые делают запросы к серверу, что занимает время и приложение подвисает. Было бы...

63
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
13.09.2016, 07:24
Студворк — интернет-сервис помощи студентам
Я делаю вот так:
Миниатюры
Алгоритм для многопоточности  
0
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
13.09.2016, 09:15  [ТС]
alexu_007, я много чего не понял в вашем коде) еще надо учить )
А с двома потоками как делать? Просто создавать второй поток?
Я так сделал, верно я делаю?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef TWOTHEARD_H
#define TWOTHEARD_H
#include <QObject>
 
class TwoThread : public QObject
{
    Q_OBJECT
    public:
        TwoThread(int);
    public slots:
        void run();
    signals:
        void finished();
    private:
        int max;
};
#endif // TWOTHEARD_H
C++ (Qt)
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
#include "TwoTheard.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
 
typedef unsigned long long size_t;
 
TwoThread::TwoThread(int index)
{
    max = index;
}
 
void TwoThread::run()
{
    srand(time(0));
    size_t size = 1000;
    size_t oneSize = size / 2;
    size_t twoSize = size / 2;
    int* array=new int[size];
 
 
    for (int index = 0; index < size; ++index)
    {
        array[index] = rand() % size + 1;
    }
 
 
    for (int index = 0; index < oneSize; ++index)
    {
        if (max < array[index])
        max = array[index];
        std::cout << "Array: " << array[index] << std::endl;
    }
 
    for (int index = 0; index < twoSize; ++index)
    {
        if (max < array[index])
        max = array[index];
        std::cout << "Array: " << array[index] << std::endl;
    }
 
    std::cout << "Max: " << max << std::endl;
    std::cout << "Run time: " << clock()/1000.0 << std::endl;
    emit finished();
}
C++ (Qt)
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
#include <QCoreApplication>
#include "OneThread.h"
#include "TwoTheard.h"
#include <QThread>
 
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
 
    QThread thread;
 
    OneThread oneThread(1);
    TwoThread twoThread(1);
 
    //QObject::connect(&thread,SIGNAL(started()),&oneThread,SLOT(run()));
 
    //QObject::connect(&oneThread,SIGNAL(finished()),&thread,SLOT(terminate()));
    //oneThread.moveToThread(&thread);
 
    //oneThread.run();
 
 
    QObject::connect(&thread,SIGNAL(started()),&twoThread,SLOT(run()));
    QObject::connect(&twoThread,SIGNAL(finished()),&thread,SLOT(terminate()));
    oneThread.moveToThread(&thread);
 
    twoThread.run();
    thread.start();
    return app.exec();
}
0
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
13.09.2016, 10:20
Цитата Сообщение от stasJun Посмотреть сообщение
ValeryS, а как узнать время работы програмы?(для себя)
я делаю так:
C++ (Qt)
1
2
3
QTime time = QTime::currentTime();
int msec = time.msecsTo( QTime::currentTime() );
qDebug()<<msec;
1
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
13.09.2016, 10:40  [ТС]
Юрий Петренко, я уже время сделал, но спасибо)
А с двумя потоками я правильно сделал?
Переделал время как у Вас и оно 0 выводит
C++ (Qt)
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
void TwoThread::run()
{
    QTime time = QTime::currentTime();
    int msec = time.msecsTo( QTime::currentTime() );
    size_t size = 1000;
    size_t oneSize = size / 2;
    size_t twoSize = size / 2;
    int* array=new int[size];
 
 
    for (int index = 0; index < size; ++index)
    {
        array[index] = rand() % size + 1;
    }
 
 
    for (int index = 0; index < oneSize; ++index)
    {
        if (max < array[index])
        max = array[index];
        std::cout << "Array: " << array[index] << std::endl;
    }
 
    for (int index = 0; index < twoSize; ++index)
    {
        if (max < array[index])
        max = array[index];
        std::cout << "Array: " << array[index] << std::endl;
    }
 
    std::cout << "Max: " << max << std::endl;
    std::cout << "Run time: " << msec << std::endl;
    emit finished();
}
0
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
13.09.2016, 12:10
Цитата Сообщение от stasJun Посмотреть сообщение
А с двумя потоками я правильно сделал?
НЕТ. Тебе нужно распараллелить вычисления.
А ты все вычисления делаешь в одной процедуре. Причем два раза проходишься по первой половине массива, а на вторую забил.
Забудь пока про потоки, сделай все в основном на маленьких размерах и хорошенько протестируй. Для теста просто назначай много большее число в ручную и убедись что находит именно его. Для начала раздели функциональность.
Сделай два метода первый заполняет, второй ищет. Потом сделай так что бы они каждый делал это в своем куске массива, который ты передаешь параметрами. И вызывай их каждый в свое время и на заданном куске.
Потом перейдещь к потокам.

Про потоки:
Число потоков должно равняться числу объектов-вычислителей. А у тебя создан всего один объект потока.
QThread thread; для двух потоков нужно что бы было два объекта потоков. т.е.
C++ (Qt)
1
2
QThread thread1; 
QThread thread2;
В каждый из которых ты разместишь свой вычислитель.
C++ (Qt)
1
2
3
4
5
6
7
8
TwoThread twoThread0(0); 
TwoThread twoThread1(1);
 
twoThread0.moveToThread(&thread0);
twoThread1.moveToThread(&thread1);
 
thread0.start();
thread1.start();
Добавлено через 39 минут
Цитата Сообщение от stasJun Посмотреть сообщение
Переделал время как у Вас и оно 0 выводит
так:
C++ (Qt)
1
2
3
    QTime time = QTime::currentTime(); //старт замера
    //код время исполнения которого измеряем
    int msec = time.msecsTo( QTime::currentTime() );//стоп замера
1
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
14.09.2016, 07:46  [ТС]
Юрий Петренко,
а для одного потока я правильно сделал?
0
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
14.09.2016, 11:35
Цитата Сообщение от stasJun Посмотреть сообщение
а для одного потока я правильно сделал?
Нет.
C++ (Qt)
1
2
    oneThread.run();
    thread.start();
oneThread.run(); - лишнее.
Когда ты делаешь oneThread.run(); - ты запускаешь его в основном потоке. Он отрабатывает. А затем ты запускаешь поток thread.start();, который вызывает oneThread.run(); (т.к. ты его приконнектил на старт потока), и вот уже тогда твой oneThread.run(); начинает работать в своем потоке.
0
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
14.09.2016, 12:54  [ТС]
Юрий Петренко, а можете если Вам не сложно взять мой код для одного потолка и удалить, исправить все что не так. А то я немного затупи уже)
0
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
14.09.2016, 13:13
Нет, работы много, да это и не правильный подход.
Ты лучше задавай вопросы, что не понятно. Постараюсь объяснить.
0
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
14.09.2016, 13:33  [ТС]
Юрий Петренко, ок. что не правильно у меня в коде? Код работает, правильно выводит ответ. Поэтому и попросил Вас посмотреть может быть не правильно делаю через один поток.

Добавлено через 14 минут
Юрий Петренко, я так понял , этот код для всех потоков будет одинаковый?
C++ (Qt)
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
#include "OneThread.h"
#include <iostream>
#include <cstdlib>
#include <QTime>
 
typedef unsigned long long size_t;
 
OneThread::OneThread(int index)
{
    max = index;
}
 
void OneThread::run()
{
    QTime time = QTime::currentTime();
    size_t size = 1000;
    int* array=new int[size];
 
 
    for (int index = 0; index < size; ++index)
    {
        array[index] = rand() % size + 1;
    }
 
    for (int index = 0; index < size; ++index)
    {
     if (max < array[index])
      max = array[index];
     std::cout << "Array: " << array[index] << std::endl;
    }
 
    int msec = time.msecsTo( QTime::currentTime() );
    std::cout << "Max: " << max << std::endl;
    std::cout << "Run time: " << msec << std::endl;
    emit finished();
}
а от в main просто потоки изменять
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
 
    QThread thread;
 
    OneThread oneThread(1);
 
    QObject::connect(&thread,SIGNAL(started()),&oneThread,SLOT(run()));
 
    QObject::connect(&oneThread,SIGNAL(finished()),&thread,SLOT(terminate()));
    oneThread.moveToThread(&thread);
    thread.start();
    return app.exec();
}
правильно думаю?
0
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
14.09.2016, 13:43
В правильном направлении думаешь, но ты намерен для каждого потока писать свой класс OneThread, TwoThread, ... ?

Добавлено через 2 минуты
У тебя ведь в задаче стоит условие запускать для оптимального количества потоков.
Для разных машин оно разное.
Это что для каждой машины своя программа?

Добавлено через 3 минуты
На самом деле тебе нужно что бы был один класс OneThread (лучше переименовать его в Worker)
и столько объектов этого класса сколько потоков ты хочешь запустить.
0
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
14.09.2016, 14:01  [ТС]
Юрий Петренко, я же написал что нужно переименовать клас OneThread в просто MyThread, и он не изменяется, а додавать потоки в меин. Правильно?

Добавлено через 1 минуту
На самом деле тебе нужно что бы был один класс OneThread (лучше переименовать его в Worker)
и столько объектов этого класса сколько потоков ты хочешь запустить. - это не понял , Вы имеет введу это?
OneThread oneThread(1); - тут один поток.
OneThread oneThread(2); - тут два потока

Добавлено через 16 минут
Юрий Петренко,
переименовал:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
 
    QThread thread;
 
    Worker oneThread(1);
 
    QObject::connect(&thread,SIGNAL(started()),&oneThread,SLOT(run()));
 
    QObject::connect(&oneThread,SIGNAL(finished()),&thread,SLOT(terminate()));
    oneThread.moveToThread(&thread);
 
    oneThread.run();
    return app.exec();
}
C++ (Qt)
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
#include "Worker.h"
#include <iostream>
#include <cstdlib>
#include <QTime>
 
typedef unsigned long long size_t;
 
Worker::Worker(int index)
{
    max = index;
}
 
void Worker::run()
{
    QTime time = QTime::currentTime();
    size_t size = 1000;
    int* array=new int[size];
 
 
    for (int index = 0; index < size; ++index)
    {
        array[index] = rand() % size + 1;
    }
 
    for (int index = 0; index < size; ++index)
    {
     if (max < array[index])
      max = array[index];
     std::cout << "Array: " << array[index] << std::endl;
    }
 
    int msec = time.msecsTo( QTime::currentTime() );
    std::cout << "Max: " << max << std::endl;
    std::cout << "Run time: " << msec << std::endl;
    emit finished();
}
0
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
14.09.2016, 14:12
Стас, сейчас ты создаешь N маленьких массивов, каждый в своем потоке. заполняешь и сортируешь.
А по условиям задачи это должен быть один непрерывный массив.
Перенеси создание и заполнение для начала в мэин.
А сортировку делай из потока.
0
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
14.09.2016, 15:02  [ТС]
Юрий Петренко, я ничего не понял. Если я перенесу в mаin создание и заполнение, то в Worker что мне делать? мне нужно максимум найти и если я все перенесу в меин то как я буду в Worker фором работать чтобы максимум найти?.

То что я сделал, как я понял что нужно сделать:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "Worker.h"
#include <iostream>
#include <cstdlib>
#include <QTime>
 
 
 
Worker::Worker(int index)
{
    max = index;
}
 
void Worker::run()
{
    QTime time = QTime::currentTime();
 
    int msec = time.msecsTo( QTime::currentTime() );
 
    std::cout << "Run time: " << msec << std::endl;
    emit finished();
}
C++ (Qt)
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
#include <QCoreApplication>
#include "Worker.h"
#include <QThread>
 
typedef unsigned long long size_t;
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
 
    QThread thread;
 
    Worker oneThread(1);
    
    size_t size = 1000;
    int* array=new int[size];
    for (int index = 0; index < size; ++index)
    {
        array[index] = rand() % size + 1;
    }
 
    for (int index = 0; index < size; ++index)
    {
     if (max < array[index])
      max = array[index];
     std::cout << "Array: " << array[index] << std::endl;
    }
    std::cout << "Max: " << max << std::endl;
    QObject::connect(&thread,SIGNAL(started()),&oneThread,SLOT(run()));
 
    QObject::connect(&oneThread,SIGNAL(finished()),&thread,SLOT(terminate()));
    oneThread.moveToThread(&thread);
 
    oneThread.run();
    return app.exec();
}
Может всетаки вы исправите мой код как нужно, я вже запутался окочательно. И всесто того чтобы начать понимать , я уже совсем ничего не понимаю

Добавлено через 12 минут
Юрий Петренко, я дествительно хочу разобраться, но я запутался, я сделал как я думал правильно, віяснилось что совсем не правильно, и я не уловил суть как правильно сделать..... И с каждой вашей подсказкой я запутался еще дальше....
0
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
14.09.2016, 15:07
Не расстраивайся потоки это действительно сложно, сейчас потихоньку разберемся.
Цитата Сообщение от stasJun Посмотреть сообщение
как я буду в Worker фором работать чтобы максимум найти?.
Примерно так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Worker
{
public:
    Worker();
    ~Worker();
    int getMax(int array[], int firstIndex, int lastIndex); //(<указатель на массив>, <индекс начала отрезка сортировки>, <индекс конца отрезка сортировки> ); //сортирую свой кусок
}
 
 
int Worker::getMax (int array[], int firstIndex, int lastIndex) 
{
    int max = array[firstIndex];
    for (int index = firstIndex; index <= lastIndex; ++index)
    {
        if (max < array[index])
            max = array[index];
    }
    return max;
}
0
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
14.09.2016, 15:12  [ТС]
Юрий Петренко,
тоесть мне это уже не нужно в хедере?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#ifndef WORKER_H
#define WORKER_H
#include <QObject>
 
class Worker : public QObject
{
    Q_OBJECT
public:
    Worker();
    ~Worker();
    int getMax(int array[], int firstIndex, int lastIndex);
 
public slots:
        void run(); // это
signals:
        void finished(); // это
private:
        int max; //  это
};
0
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
14.09.2016, 15:26
Пригодится.
Теперь проблема как передать наружу из потока результат работы метода.
Для этого воспользуемся сигналом.
Но придется переделать.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Worker : public QObject
{
    Q_OBJECT    
public:
    Worker();
    ~Worker();
public slots:
        void getMax(int array[], int firstIndex, int lastIndex);
signals:
        void finished(int);
}
 
 
void Worker::getMax(int array[], int firstIndex, int lastIndex) 
{
    int max = array[firstIndex];
    for (int index = firstIndex; index <= lastIndex; ++index)
    {
        if (max < array[index])
            max = array[index];
    }
    emit finished(max);
}
0
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
14.09.2016, 15:31  [ТС]
Юрий Петренко, ок. переделал
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef WORKER_H
#define WORKER_H
#include <QObject>
 
class Worker : public QObject
{
    Q_OBJECT
public:
    Worker();
    ~Worker();
public slots:
        void getMax(int array[], int firstIndex, int lastIndex);
signals:
        void finished(int);
};
 
#endif // WORKER_H
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "Worker.h"
#include <iostream>
#include <cstdlib>
#include <QTime>
 
void Worker::getMax(int array[], int firstIndex, int lastIndex) 
{
    int max = array[firstIndex];
    for (int index = firstIndex; index <= lastIndex; ++index)
    {
        if (max < array[index])
            max = array[index];
    }
    emit finished(max);
}
0
12 / 9 / 1
Регистрация: 08.08.2016
Сообщений: 45
14.09.2016, 15:58
Теперь у тебя есть класс который может найти максимум на отрезке массива.
И ты можешь сделать, например, 10 объектов этого класса, 10 потоков.
Передать в каждый объект свой отрезок массива, каждый объект засунуть в отдельный поток.
И они будут вполняться.
0
0 / 0 / 0
Регистрация: 05.09.2016
Сообщений: 47
14.09.2016, 16:07  [ТС]
Юрий Петренко, теперь я в меине создаю и заполняю масив?
Давайте для 1 потока сделаемо, я буду делать по кроку
:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
   QThread thread;
 
    Worker oneThread();
    
    size_t size = 1000;
    int* array = new int[size];
    for (int index = 0; index < size; ++index)
    {
        array[index] = rand() % size + 1;
    }
создал поток и переменую класа Worker , создал масив и наполнил рандомно его.
Все верно?

а как тут в форе делать:
C++ (Qt)
1
2
3
4
5
6
for (int index = 0; index < size; ++index)
    {
     if (max < array[index])
      max = array[index];
     std::cout << "Array: " << array[index] << std::endl;
    }
нужно теперб getMax использовать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.09.2016, 16:07

Помогите алгоритм для char переделать в алгоритм для float
char* DecToBin(char x, char* str) { int i; for (i = sizeof(x)*8-1; i&gt;=0; i--) { str = (x&amp;1 == 1) ? '1' : '0'; x = x &gt;&gt;...

Построить алгоритм ДО и алгоритм ПОКА для вычислений значения функции на отрезке [a,b] с шагом h.
Построить алгоритм ДО и алгоритм ПОКА для вычислений значения функции на отрезке с шагом h. Написать программу: F=3+tgx Мой...

Составить алгоритм-вычисление квадрата суммы двух чисел и алгоритм для вычисления функции
Здравствуйте!Мне нужно все с самого начала и точно,помогите пожалуйста! 1.составить алгоритм-вычисление квадрата суммы двух чисел.

Кто может составить алгоритм по проге? Алгоритм нужен для отчета если вам это интересно)
uses crt; var a:array of integer; b:array of integer; i,j,m,n:integer; begin ClrScr; Randomize; Write('n='); Readln(n); ...

по многопоточности
У меня есть анимация переходов... я её применил на боди и футер так сказать.. как сделать чтобы этот код выполнялся синхронно? public...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
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
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru