このブログを検索

2019年4月10日水曜日

【C++】 指定範囲乱数の生成

【C++】 指定範囲乱数の生成
(2019年4月10日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0
 ※Windows SDK バージョンの変更方法


■手順

以下の2種類の方法を記載

rand()
std::mt19937


<rand()>

1.基本的には以下の流れ参照
【C++】 メッセージボックスの作成

2.C++ファイル(.cpp)を以下のとおり変更する。

#pragma comment(lib,"winmm.lib")
#include <windows.h>
#include <wchar.h>

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    WCHAR wcText[256];
    int iMin = 1;
    int iMax = 6;

    srand((unsigned int)timeGetTime());

    swprintf(wcText, 256, L"%d", iMin+(int)(rand()*(iMax-iMin+1)/(1+RAND_MAX)));

    MessageBox(NULL, wcText, L"指定範囲乱数の生成", MB_OK);

    return 0;
}

※timeGetTime()を使用するために#pragma comment(lib,"winmm.lib")が必要
※最小値+(int)(rand()*(最大値-最小値+1)/(1+RAND_MAX))は最小値から最大値までの
 乱数を求める式

3.1から6までの乱数が表示される。


<std::mt19937>

1.基本的には以下の流れ参照
【C++】 メッセージボックスの作成

2.C++ファイル(.cpp)を以下のとおり変更する。

#include <windows.h>
#include <wchar.h>
#include <random>

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    WCHAR wcText[256];
    int iMin = 1;
    int iMax = 6;

    std::random_device seed;
    std::mt19937 random(seed());
    std::uniform_int_distribution<> number(iMin, iMax);

    swprintf(wcText, 256, L"%lu", number(random));

    MessageBox(NULL, wcText, L"指定範囲乱数の生成", MB_OK);

    return 0;
}

※std::random_device、std::mt19937、std::uniform_int_distribution
 を使用するために#include <random>が必要

3.1から6までの乱数が表示される。

2019年4月9日火曜日

【C++】 乱数の生成

【C++】 乱数の生成
(2019年4月9日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0
 ※Windows SDK バージョンの変更方法


■手順

以下の3種類の方法を記載

rand()
std::random_device
std::mt19937


<rand()>

1.基本的には以下の流れ参照
【C++】 メッセージボックスの作成

2.C++ファイル(.cpp)を以下のとおり変更する。

#pragma comment(lib,"winmm.lib")
#include <windows.h>
#include <wchar.h>

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    WCHAR wcText[256];

    srand((unsigned int)timeGetTime());

    swprintf(wcText, 256, L"%d", rand());

    MessageBox(NULL, wcText, L"乱数の生成", MB_OK);

    return 0;
}

※timeGetTime()を使用するために#pragma comment(lib,"winmm.lib")が必要

3.乱数が表示される。


<std::random_device>

1.基本的には以下の流れ参照
【C++】 メッセージボックスの作成

2.C++ファイル(.cpp)を以下のとおり変更する。

#include <windows.h>
#include <wchar.h>
#include <random>

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    WCHAR wcText[256];

    std::random_device random;

    swprintf(wcText, 256, L"%lu", random());

    MessageBox(NULL, wcText, L"乱数の生成", MB_OK);

    return 0;
}

※std::random_deviceを使用するために#include <random>が必要

3.乱数が表示される。


<std::mt19937>

1.基本的には以下の流れ参照
【C++】 メッセージボックスの作成

2.C++ファイル(.cpp)を以下のとおり変更する。

#include <windows.h>
#include <wchar.h>
#include <random>

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    WCHAR wcText[256];

    std::random_device seed;
    std::mt19937 random(seed());

    swprintf(wcText, 256, L"%lu", random());

    MessageBox(NULL, wcText, L"乱数の生成", MB_OK);

    return 0;
}

※std::random_device、std::mt19937を使用するために#include <random>が必要

3.乱数が表示される。

2019年4月8日月曜日

【C++】 時間の計測

【C++】 時間の計測
(2019年4月8日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0
 ※Windows SDK バージョンの変更方法


■手順

以下の3種類の方法を記載

timeGetTime
std::chrono
QueryPerformanceCounter


<timeGetTime>

1.基本的には以下の流れ参照
【C++】 メッセージボックスの作成

2.C++ファイル(.cpp)を以下のとおり変更する。

#pragma comment(lib,"winmm.lib")
#include <windows.h>
#include <wchar.h>

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    DWORD Before, After;
    WCHAR wcText[256];

    timeBeginPeriod(1);
    Before = timeGetTime();
    Sleep(1000);
    After = timeGetTime();

    swprintf(wcText, 256, L"%lu", After - Before);

    MessageBox(NULL, wcText, L"時間の計測", MB_OK);

    timeEndPeriod(1);
    return 0;
}

※timeGetTime()を使用するために#pragma comment(lib,"winmm.lib")が必要

3.BeforeからAfterまでの処理にかかった時間が表示される。


<std::chrono>

1.基本的には以下の流れ参照
【C++】 メッセージボックスの作成

2.C++ファイル(.cpp)を以下のとおり変更する。

#include <windows.h>
#include <wchar.h>
#include <chrono>

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    WCHAR wcText[256];

    auto Before = std::chrono::system_clock::now();
    Sleep(1000);
    auto After = std::chrono::system_clock::now();
    auto Calc = After - Before;
    auto Time = std::chrono::duration_cast<std::chrono::milliseconds>(Calc).count();

    swprintf(wcText, 256, L"%lld", Time);

    MessageBox(NULL, wcText, L"時間の計測", MB_OK);

    return 0;
}

※std::chronoを使用するために#include <chrono>が必要

3.BeforeからAfterまでの処理にかかった時間が表示される。


<QueryPerformanceCounter>

1.基本的には以下の流れ参照
【C++】 メッセージボックスの作成

2.C++ファイル(.cpp)を以下のとおり変更する。

#include <windows.h>
#include <wchar.h>

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    LARGE_INTEGER Freq = { 0 };
    LARGE_INTEGER Before = { 0 };
    LARGE_INTEGER After = { 0 };
    long long Time;
    WCHAR wcText[256];

    QueryPerformanceFrequency(&Freq);
    QueryPerformanceCounter(&Before);
    Sleep(1000);
    QueryPerformanceCounter(&After);

    Time = (After.QuadPart - Before.QuadPart) * 1000 / Freq.QuadPart;

    swprintf(wcText, 256, L"%lld", Time);

    MessageBox(NULL, wcText, L"時間の計測", MB_OK);

    return 0;
}

3.BeforeからAfterまでの処理にかかった時間が表示される。

2019年4月7日日曜日

【C++】 様々な計算

【C++】 様々な計算
(2019年4月7日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0
 ※Windows SDK バージョンの変更方法


■手順

<整数の計算>

1.基本的には以下の流れ参照
【C++】 メッセージボックスの作成

2.C++ファイル(.cpp)を以下のとおり変更する。

#include <windows.h>
#include <wchar.h>

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    int a = -18, b = 26;
    WCHAR wcText[256];

    swprintf(wcText, 256, L"%d + %d = %d", a, b, a + b);

    MessageBox(NULL, wcText, L"整数の計算", MB_OK);

    return 0;
}

a + b 足し算
a - b 引き算
a * b 掛け算
a / b 割り算
a % b 剰余

3.計算結果が表示される。


<小数点の計算>

1.基本的には以下の流れ参照
【C++】 メッセージボックスの作成

2.C++ファイル(.cpp)を以下のとおり変更する。

#include <windows.h>
#include <wchar.h>

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    double a = 735.25, b = 724.58;
    WCHAR wcText[256];

    swprintf(wcText, 256, L"%lf + %lf = %lf", a, b, a + b);

    MessageBox(NULL, wcText, L"小数点の計算", MB_OK);

    return 0;
}

3.計算結果が表示される。


<べき乗の計算>

1.基本的には以下の流れ参照
【C++】 メッセージボックスの作成

2.C++ファイル(.cpp)を以下のとおり変更する。

#include <windows.h>
#include <wchar.h>
#include <math.h>

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    double a = 2, b = 3;
    WCHAR wcText[256];

    swprintf(wcText, 256, L"%.0lf^%.0lf = %.0lf", a, b, pow(a, b));

    MessageBox(NULL, wcText, L"べき乗の計算", MB_OK);

    return 0;
}

pow(a, b) べき乗a^b
sqrt(a) 平方根√a
fabs(a) 絶対値|a|
exp(a) 指数関数e^a
log(a) 自然対数ln
log10(a) 常用対数log
sin(a) 三角関数sin(ラジアン)
cos(a) 三角関数cos(ラジアン)
tan(a) 三角関数tan(ラジアン)
※これらの数学関数を使用するために#include <math.h>が必要

3.計算結果が表示される。

2019年4月6日土曜日

【C++】 メッセージボックスの作成

【C++】 メッセージボックスの作成
(2019年4月6日)


■使用ソフト
・Visual Studio Community 2019


■言語
・C/C++


■Windows SDK バージョン
・10.0.17763.0
 ※Windows SDK バージョンの変更方法


■手順
1.Visual Studio 2019を起動する。

2.Windowsデスクトップウィザードを選択して、「次へ」を選択する。

3.プロジェクト名、保存場所、ソリューション名を適宜変更して、「作成」を選択する。

4.アプリケーションの種類を「デスクトップアプリケーション(.exe)」にし、
  追加のオプションの「空のプロジェクト」を選択し、「OK」を選択する。

5.ソリューションエクスプローラーのソースファイルを右クリック→追加→新しい項目
  の順に選択する。

6.C++ファイル(.cpp)を選択し、好きな名前を付け「追加」を選択する。

7.C++ファイル(.cpp)を以下のとおり入力する。

#include <windows.h>

int WINAPI wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCmdLine, _In_ int nCmdShow)
{
    MessageBox(NULL, L"Hello World", L"メッセージボックスの作成", MB_OK);

    return 0;
}


※tchar.hは_Tを使用するために必要。
※_TはマルチバイトとUnicode両対応するために使用。

8.ビルド→ソリューションのビルドを選択する。

9.問題なくビルドができれば、以下のような表示になる。

10.デバッグ→デバッグの開始を選択する。

11.メッセージボックスが表示される。

Windows SDK バージョンの変更方法

Windows SDK バージョンの変更方法
(2019年4月6日)


■使用ソフト
・Visual Studio Community 2019


■変更方法
1.ソリューションエクスプローラーのプロジェクトを
  右クリックし、「プロパティ」を選択する。

2.「全般」→「Windows SDK バージョン」を変更する。

2019年4月3日水曜日

【C++】 VisualStudioCommunity2019のインストール

【C++】 VisualStudioCommunity2019のインストール
(2019年4月3日)


■手順
1.Microsoftホームページを開く https://www.microsoft.com/ja-jp

2.「Visual Studio 2019を入手」の「今すぐダウンロード」をクリックする。

3.Visual Studio 2019のコミュニティの「無料ダウンロード」をクリックする。

4.ダウンロードしたファイルを開く。

5.「続行」をクリックする。

6.インストール画面が開く。

7.「C++によるデスクトップ開発」を選択する。

8.インストールの場所を指定して右下のインストールをクリックする。

9.「選択した内容のまま続ける」を選択し、「OK」をクリックする。

10.インストールされる。

11.サインインする。(アカウントがない場合は作成する)

12.Visual Studio 2019が起動される。