1

(6 відповідей, залишених у JavaScript)

Історію можна зберігати наприклад базах даних, сесіях чи куках

2

(1 відповідей, залишених у C/C++)

Виберіть WIN32 GUI

Ну і підключіть бібліотеку
#include <Windows.h>
та "nt" замінити на "int"

3

(5 відповідей, залишених у C/C++)

Я добавив віртуальні конструктори

Код на гітхабі
https://github.com/OleksandrMyronchuk/m … -functions

kuins_method - всі файли
Build - бібліотеки які були скомпільовані з kuins_method, MSVC - працює, Qt - ні...


Файл для тестування

#include "initkuainrule.h"
#include "normalform.h"
#include <iostream>
#include <fstream>
int main(int argc, char *argv[])
{
    std::cout<<"Start\n\n\n";        
    //
/*
    std::filebuf* fout = new std::filebuf;
    std::streambuf* backup = std::cout.rdbuf();
        if(! fout->open("A:\\qtProject\\text.txt", std::ios::out | std::ios::trunc))
            throw std::runtime_error("File A:\\qtProject\\text.txt cannot be opened");
    std::cout.rdbuf(fout);
*/
    //        
    nsKuainRule::InitKuainRule k({true, true, false, false, true, false, true, true, true, true, false, false, false, false, true, true});
    nsKuainRule::NormalForm *result = k.run();
    std::cout << k.print();
    //
/*
    fout->close();
    delete fout;
    std::cout.rdbuf(backup);
    std::cout<<"OK";
*/
    //
    std::cout<<"\n\n\nEnd";
    system("pause");
    return 0;
}

Якщо потрібно, можу скинути проект де я підключав ці бібліотеки.

4

(5 відповідей, залишених у C/C++)

Зробив DLL за допомогою QT + MinGW

pro file

#-------------------------------------------------
#
# Project created by QtCreator 2018-04-01T04:51:46
#
#-------------------------------------------------

QT       -= gui

TARGET = kuins_method
TEMPLATE = lib

DEFINES += KUAINRULE_EXPORTS

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    ../kuins_method_file/abstractnormalform.cpp \
    ../kuins_method_file/abstractobject.cpp \
    ../kuins_method_file/constituent.cpp \
    ../kuins_method_file/expression.cpp \
    ../kuins_method_file/initkuainrule.cpp \
    ../kuins_method_file/kuainrule.cpp \
    ../kuins_method_file/normalform.cpp \
    ../kuins_method_file/perfectnormalform.cpp \
    ../kuins_method_file/shortnormalform.cpp

HEADERS += \
    ../kuins_method_file/abstractnormalform.h \
    ../kuins_method_file/abstractobject.h \
    ../kuins_method_file/constituent.h \
    ../kuins_method_file/defines.h \
    ../kuins_method_file/expression.h \
    ../kuins_method_file/global.h \
    ../kuins_method_file/initkuainrule.h \
    ../kuins_method_file/kuainrule.h \
    ../kuins_method_file/normalform.h \
    ../kuins_method_file/perfectnormalform.h \
    ../kuins_method_file/shortnormalform.h

unix {
    target.path = /usr/lib
    INSTALLS += target
}

global file

#ifndef GLOBAL_H
#define GLOBAL_H

#ifdef _MSC_VER

    #ifdef KUAINRULE_EXPORTS  
    #define KUAINRULE_API __declspec(dllexport)   
    #else  
    #define KUAINRULE_API __declspec(dllimport)   
    #endif

#elif __MINGW32__

    #include <QtCore/qglobal.h>

    #ifdef KUAINRULE_EXPORTS
    #  define KUAINRULE_API Q_DECL_EXPORT
    #else
    #  define KUAINRULE_API Q_DECL_IMPORT
    #endif

#else

    #error MSVC or Qt + MinGW compiler required.

#endif

#endif // GLOBAL_H

Біля кожної імпортованої функції добавив макрос
Ось приклад:

namespace nsKuainRule {

    class NormalForm : public AbstractNormalForm, public AbstractObject
    {
        std::vector <Expression> _expressionNFs;
    public:
        /**** CONSTRUCTOR & DESTRUCTOR ****/
        KUAINRULE_API NormalForm();
        KUAINRULE_API ~NormalForm();

        /**** OVERRIDE FUNCTIONS ****/
        /*!
         * \brief Get all expressions from the NF class
         * \return Vector of \a Expression objects
         */
        KUAINRULE_API std::vector<Expression> &getAllExpr() override;
        KUAINRULE_API std::string print() const override;
    };

}

скомпілював як дебаг так і резі, без помилок

Підключаю

pro file

TEMPLATE = app
CONFIG += console c++14
CONFIG -= app_bundle
CONFIG += qt

TARGET = kuins_method

TEMPLATE = lib

DEFINES += KUAINRULE_EXPORTS

DEFINES += QT_DEPRECATED_WARNINGS

QT += core
QT -= gui

SOURCES += main.cpp

HEADERS += \
    abstractnormalform.h \
    abstractobject.h \
    constituent.h \
    defines.h \
    expression.h \
    global.h \
    initkuainrule.h \
    kuainrule.h \
    normalform.h \
    perfectnormalform.h \
    shortnormalform.h



win32:CONFIG(release, debug|release): LIBS += -L$$PWD/./ -lkuins_metho
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/./ -lkuins_method

INCLUDEPATH += $$PWD/.
DEPENDPATH += $$PWD/.

при компіляції помилка error: undefined reference to `vtable for ...

*.а, *.dll, *.h - скопіював до кореневої директорії

Що зробити для того щоб позбутися помилки ?

5

(4 відповідей, залишених у C/C++)

О, справді цікава тема, я також цім цікавився...
Тут декілька посилань, можливо будуть корисні
gcc
https://gcc.gnu.org/onlinedocs/gcc/Usin … ith-C.html - How to Use Inline Assembly Language in C Code
https://gcc.gnu.org/onlinedocs/gcc-4.7. … d-Asm.html - Assembler Instructions with C Expression Operands
Microsoft C++
https://msdn.microsoft.com/en-us/library/4ks26t93.aspx - Inline Assembler
https://msdn.microsoft.com/en-us/library/45yd4tzz.aspx - __asm

6

(12 відповідей, залишених у C/C++)

Так, працює.



'П' це

http://www.utf8-chartable.de/unicode-ut … p;utf8=dec
UTF-8(dec.) = 208 159

    unsigned char text[10] = "П\0";
    std::cout<<(unsigned)text[0]<<'\n';
    std::cout<<(unsigned)text[1]<<'\n';
    std::cout<<(unsigned)text[2]<<'\n';
//208 159 0

у одинарних лапках може бути лише один символ (за стандартними налаштуваннями кодування), тому 208 відкидається (159 залишається). (не перевірено!)

std::cout<<(unsigned)(unsigned char)'П'<<'\n';
//159

у подвійних лапках можна "скільки завгодно" писати символів, вони не будуть відкидатися.

The wchar_t type is defined by MIDL as an unsigned short (16-bit) data object.
L'П' - це два байти
'П' - один байт


Оскільки Qt працює в Unicode 4.0 character, то напевно ASCII конвертується в Unicode, а вже потім порівнюється

QCeator видає попередження якщо написати 'П': "warning: multi-character character constant [-Wmultichar]
if(text1.at(1) == 'П')"

Якщо ж  написати "П" - ніяких попереджень/помилок немає


std::cout<<(unsigned short)L'П'<<'\n';//1055
std::cout<<(unsigned short)'П'<<'\n';//53407

1055 - Unicode code point (або  0x41f)
53407 (208 | 159)  - UTF-8(dec.)

7

(12 відповідей, залишених у C/C++)

koala написав:
Betterthanyou написав:
if(text.at(1) == "П")

Обклався попкорном, чекаю на спробу це реалізувати.

Щo реалізувати ? Не зрозумів, QString i QChars вже має такі перевантаження

QString stores a string of 16-bit QChars, where each QChar corresponds one Unicode 4.0 character...,QString provides dozens of overloads designed to simplify string usage...

#include <QCoreApplication>
#include <QString>
#include <iostream>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString text1 = "*Привіт*";
    QString text2 = "*Щось інше*";
    
    
    if(text1.at(1) == "П")
        std::cout<<"Success\n";
    else
        std::cout<<"Fail\n";

    if (text2.at(1) == "П")
        std::cout << "Success\n";
    else
        std::cout << "Fail\n";

    return a.exec();
}

8

(310 відповідей, залишених у Алгоритми та структури даних, технології)

Я зрозумів так:

"N натуральних чисел з однаковою сумою цифр і мінімально можливою загальною сумою (чого ? напевно чисел)"

мінімально можливою загальною сумою: 00 + 11 = 11

однаковою сумою цифр: 0 + 0 + 1 + 1 = 1 + 1

мінімально можливою загальною сумою: 00 + 11 + 22 = 33

однаковою сумою цифр: 0 + 0 + 1 + 1 + 2 + 2 = 3 + 3

9

(310 відповідей, залишених у Алгоритми та структури даних, технології)

Складність задач полягає в обмеженому часі 24 хв.
Кожна задача має пройти 100 тестів (на жаль в мене їх немає, тому не скину)

Я встиг зробити B, C, E, G приблизно за пів години. Задачі A, H забрали 1.20 год ( але всі тести так і не були пройдені )


Що до A i H. Як їх найшвидше реалізувати ?

10

(310 відповідей, залишених у Алгоритми та структури даних, технології)

Вимоги:
Мова програмування: будь-яка, можна використовувати фреймворкі, бібліотеки, т.д.
Час: 24 хв одна задача (4год для всіх)

A i B

http://i.piccy.info/i9/cb6a69c8548fd55c0970e34756aeb7d5/1521584287/422595/1230951/1.jpghttp://i.piccy.info/i9/cb6a69c8548fd55c0970e34756aeb7d5/1521584287/422595/1230951/1.jpg
C i D

http://i.piccy.info/i9/3e4057b07fcb04b2eb06bd4f2f5cdef6/1521584108/425314/1230951/11.jpghttp://i.piccy.info/i9/3e4057b07fcb04b2eb06bd4f2f5cdef6/1521584108/425314/1230951/11.jpg
E i F

http://i.piccy.info/i9/3de151f864c9c8bdcc6b1103103c6824/1521584084/308083/1230951/12.jpghttp://i.piccy.info/i9/3de151f864c9c8bdcc6b1103103c6824/1521584084/308083/1230951/12.jpg
G i H

http://i.piccy.info/i9/6329013d2b98b23763fa592c035a66ca/1521584102/282351/1230951/13.jpghttp://i.piccy.info/i9/6329013d2b98b23763fa592c035a66ca/1521584102/282351/1230951/13.jpg
I i J

http://i.piccy.info/i9/c3d5175826db83bf2b2ae3774da19e31/1521584130/476027/1230951/14.jpghttp://i.piccy.info/i9/c3d5175826db83bf2b2ae3774da19e31/1521584130/476027/1230951/14.jpg

11

(12 відповідей, залишених у C/C++)

if(text.at(1) == "П")

12

(12 відповідей, залишених у C/C++)

Для порівняння рядків (а також символів) є спеціальний метод "compare"
http://doc.qt.io/qt-5/qstring.html#compare-1
і клас QChar для символів
http://doc.qt.io/qt-5/qchar.html
bool operator==(QChar c1, QChar c2)
Returns true if c1 and c2 are the same Unicode character; otherwise returns false.

13

(12 відповідей, залишених у C/C++)

Так я вже показав проект(один файл).

#include <Windows.h>
#include <cstring>
#define sysDirBuffer 256
 
void showError()
{
    #define lastErrBuffer 128
    wchar_t *lastErr;
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
        NULL,
        GetLastError(),
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR)&lastErr,
        lastErrBuffer,
        NULL
    );
    MessageBox(
        NULL,
        lastErr,
        L"Error Box",
        MB_OK
    );
    LocalFree(lastErr);
    #undef lastErrBuffer
}
 
int CALLBACK WinMain(
    _In_ HINSTANCE hInstance,
    _In_ HINSTANCE hPrevInstance,
    _In_ LPSTR     lpCmdLine,
    _In_ int       nCmdShow
)
{
    BOOL wasGotSystemDirectory;
    LPTSTR lpBuffer = new TCHAR[sysDirBuffer];
    UINT uSize(sysDirBuffer);
    wasGotSystemDirectory = GetSystemDirectory(lpBuffer, uSize);
    if (!wasGotSystemDirectory)
    {
        showError();
    }
    
    wcscat_s(lpBuffer, sysDirBuffer, L"\\SoundRecorder.exe");
    
    LPCTSTR lpApplicationName = lpBuffer;
    PROCESS_INFORMATION lpProcessInformation;
    STARTUPINFO lpStartupInfo;
    ZeroMemory(&lpProcessInformation, sizeof(lpProcessInformation));
    ZeroMemory(&lpStartupInfo, sizeof(lpStartupInfo));
    lpStartupInfo.cb = sizeof(lpStartupInfo);
    lpStartupInfo.dwFlags = STARTF_USESHOWWINDOW;
    lpStartupInfo.wShowWindow = SW_SHOW;
 
    BOOL wasCreatedProcess = CreateProcessW(
        lpApplicationName,
        NULL,
        NULL,
        NULL,
        TRUE,
        NULL,
        NULL,
        NULL,
        &lpStartupInfo,
        &lpProcessInformation
    );
 
    if (wasCreatedProcess)
    {
        MessageBox(
            NULL,
            L"Process was opened",
            L"Message Box",
            MB_OK
        );
    }
    else
    {
        showError();
    }
 
    Sleep(10000);
 
    return 0;
}

14

(12 відповідей, залишених у C/C++)

SHGetSpecialFolderPath is not supported https://msdn.microsoft.com/en-us/librar … S.85).aspx
%windir%\system32 пробував і %systemroot%\system32, не допомагає

А хтось програму запускав ? У вас працює ?

15

(12 відповідей, залишених у C/C++)

varkon так, пробував, не працює
LoganRoss і це не допомагає
Завжди помилка "2"

Також щойно спробував змінити компілятори (пробував MiniGW, Embarcadero Technologies Builder C++)

Змінив щойно кодування символів "Debug" -> "Properties" -> "Character Set" -> "Use Unicode ..."
І в коді

#include <Windows.h>
#include <cstring>
#define sysDirBuffer 256

void showError()
{
    #define lastErrBuffer 128
    wchar_t *lastErr;
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
        NULL,
        GetLastError(),
        MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
        (LPTSTR)&lastErr,
        lastErrBuffer,
        NULL
    );
    MessageBox(
        NULL,
        lastErr,
        L"Error Box",
        MB_OK
    );
    LocalFree(lastErr);
    #undef lastErrBuffer
}

int CALLBACK WinMain(
    _In_ HINSTANCE hInstance,
    _In_ HINSTANCE hPrevInstance,
    _In_ LPSTR     lpCmdLine,
    _In_ int       nCmdShow
)
{
    BOOL wasGotSystemDirectory;
    LPTSTR lpBuffer = new TCHAR[sysDirBuffer];
    UINT uSize(sysDirBuffer);
    wasGotSystemDirectory = GetSystemDirectory(lpBuffer, uSize);
    if (!wasGotSystemDirectory)
    {
        showError();
    }
    
    wcscat_s(lpBuffer, sysDirBuffer, L"\\SoundRecorder.exe");
    
    LPCTSTR lpApplicationName = lpBuffer;
    PROCESS_INFORMATION lpProcessInformation;
    STARTUPINFO lpStartupInfo;
    ZeroMemory(&lpProcessInformation, sizeof(lpProcessInformation));
    ZeroMemory(&lpStartupInfo, sizeof(lpStartupInfo));
    lpStartupInfo.cb = sizeof(lpStartupInfo);
    lpStartupInfo.dwFlags = STARTF_USESHOWWINDOW;
    lpStartupInfo.wShowWindow = SW_SHOW;

    BOOL wasCreatedProcess = CreateProcessW(
        lpApplicationName,
        NULL,
        NULL,
        NULL,
        TRUE,
        NULL,
        NULL,
        NULL,
        &lpStartupInfo,
        &lpProcessInformation
    );

    if (wasCreatedProcess)
    {
        MessageBox(
            NULL,
            L"Process was opened",
            L"Message Box",
            MB_OK
        );
    }
    else
    {
        showError();
    }

    Sleep(10000);

    return 0;
}

також не допомогло

Відлагодка
http://replace.org.ua/misc.php?action=pun_attachment&amp;item=1772&amp;download=0

16

(12 відповідей, залишених у C/C++)

В "C:\Windows\SysWOW64" немає такої програми, я також щойно спробував програмно дізнатися директорію за допомогою "GetSystemDirectory" - також не допомогло.

#define sysDirBuffer 256

BOOL wasGotSystemDirectory;
    LPTSTR lpBuffer = new TCHAR[sysDirBuffer];
    UINT uSize(sysDirBuffer);
    wasGotSystemDirectory = GetSystemDirectory(lpBuffer, uSize);
    if (!wasGotSystemDirectory)
    {
        MessageBox(
            NULL,
            "Fail",
            "Message Box",
            MB_OK
        );
    }
    
    strcat_s(lpBuffer, sysDirBuffer, "\\SoundRecorder.exe");

    LPCTSTR lpApplicationName = lpBuffer;

Зробив release build і запустив із правами адміністратора, і це не допомогло

Оскільки програма sound recorder не багато займає місця, скопіював її у директорію з моєю програмою та змінив шлях до виконуваного файлу, тепер запускається.

До речі C# запускає з c:\windows\system32

static void Main(string[] args)
        {
            Process.Start("soundrecorder");
        }

Проблема частково вирішена, але якщо хтось знає чому C++ відмовляється знаходити цю програму - пишіть

Це версія програми до коду з шляхом c:\windows\system32\SoundRecorder.exe
https://drive.google.com/open?id=1Ix0-a … jEeKHIPWSo - exe
Я не закривав процес! тому якщо раптом запуститься, прийдеться закривати task менеджером

17

(1 відповідей, залишених у C/C++)

#include <iostream>
#include <string>

int main()
{
    int n;
    std::cin>>n;
    int l, w, h, say;
    std::string cavab = "";
    for (int i = 0; i < n; i++)
    {
        std::cin>>l>>w>>h;
        say = 2*(l*h + w*h)/16;
        if ((l*h + w*h)%8 != 0) say++;
        cavab += std::to_string(say) + "\n";
    }
    std::cout<<cavab;
    return 0;
}

18

(12 відповідей, залишених у C/C++)

Так, існує. Якщо ввести c:\windows\system32\soundrecorder.exe у File Explorer, то відкривається програма. Якщо знайти програму в c:\windows\system32\ і подивитися Location: C:\Windows\System32
Пробував з врахуванням регістру і без, завжди помилка "2"

(Як я і казав calc i notepad відкривається, тому це якось дивно...)

та ж ситуація з другим параметром lpCommandLine, якщо ввести calc (не шлях, а просто calc) - працює, a soundrecorder - ні.

Пробував system("soundrecorder"); - не працює...

19

(12 відповідей, залишених у C/C++)

Windows 8 (не 8.1)
Visual Studio 15
Якщо зайти в "Run" (win + r) і ввести команду "soundrecorder", то sound recorder відкривається. (тобто програма є)
GetLastError повертає 2 (ERROR_FILE_NOT_FOUND)

Ось код, якщо замінити sound recorder на calc або notepad то код працює, якщо замінити на soundrecorder - ні. Не розумію в чому проблема

    LPCTSTR lpApplicationName = "c:\\windows\\system32\\soundrecorder.exe";
    PROCESS_INFORMATION lpProcessInformation;
    STARTUPINFO lpStartupInfo;
    ZeroMemory(&lpProcessInformation, sizeof(lpProcessInformation));
    ZeroMemory(&lpStartupInfo, sizeof(lpStartupInfo));
    lpStartupInfo.cb = sizeof(lpStartupInfo);
    lpStartupInfo.dwFlags = STARTF_USESHOWWINDOW;

    BOOL wasCreatedProcess = CreateProcess(
        lpApplicationName,
        NULL,
        NULL,
        NULL,
        TRUE,
        NULL,
        NULL,
        NULL,
        &lpStartupInfo,
        &lpProcessInformation
    );

    if (wasCreatedProcess)
    {
        MessageBox(
            NULL,
            "OK",
            "Message Box",
            MB_OK
        );
    }
    else
    {
        #define lastErrBuffer 128
        char *lastErr;
        FormatMessage(
            FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
            NULL,
            GetLastError(),
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
            (LPTSTR)&lastErr,
            lastErrBuffer,
            NULL
        );
        MessageBox(
            NULL,
            lastErr,
            "Message Box",
            MB_OK
        );
        LocalFree(lastErr);
        #undef lastErrBuffer
    }

    Sleep(10000);

Чому не можу відкрити "sound recorder" ? Як це виправити ?

20

(640 відповідей, залишених у Інше)

Допоможіть отримати формулу послідовності
http://www.wolframalpha.com/input/?i=2, … ,+121,+197
2, 5, 9, 16, 27, 45, 74, 121, 197

z=10;
(-z^2+z+2)/(z^3-2*z+1) = -0.089704 (а має бути 320)
Там є формула генерація, але схоже що я її не правильно використовую.