約 2,913,178 件
https://w.atwiki.jp/sampleisbest/pages/154.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 dxbase アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode Microsoft DirectX SDK (February 2010) 参考 ここまでできる超極短DirectX基盤プログラム dxbase.cpp /* プロジェクトのプロパティ [構成プロパティ]-[VC++ ディレクトリ] [インクルード ディレクトリ] C \Program Files\Microsoft DirectX SDK (February 2010)\Include [ライブラリ ディレクトリ] C \Program Files\Microsoft DirectX SDK (February 2010)\Lib\x86 Unicode */ #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.lib") #include d3d9.h #include d3dx9.h #include stdio.h #include time.h #define WIDTH(rect) ((rect).right - (rect).left) #define HEIGHT(rect) ((rect).bottom - (rect).top) #define SAFE_RELEASE(p) { if(p) { (p)- Release(); (p)=NULL; } } #define APP_NAME L"dxbase" // 関数プロトタイプ宣言 HRESULT InitD3D(HWND hWnd); LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void Render(void); // 外部変数構造体 static struct { LPDIRECT3D9 pD3D;// Direct3D9 LPDIRECT3DDEVICE9 pDev;// レンダリングデバイス LPD3DXFONT pFont;// フォント } g; //============================================================================== int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR lpCmdLine, int nCmdShow) { // ウィンドウクラスの登録 WNDCLASSEX wcx; ZeroMemory( wcx, sizeof wcx); wcx.cbSize= sizeof wcx; //wcx.style= CS_HREDRAW | CS_VREDRAW; wcx.lpfnWndProc= WndProc; wcx.hInstance= hInstance; wcx.hCursor= LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)); wcx.lpszClassName= APP_NAME; if (RegisterClassEx( wcx) == 0) { return 0; } // ウィンドウサイズの計算 RECT rect; SetRect( rect, 0, 0, 640, 480); AdjustWindowRect( rect, WS_OVERLAPPEDWINDOW, FALSE); // ウィンドウの作成 HWND hWnd = CreateWindow( APP_NAME, APP_NAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, WIDTH(rect), HEIGHT(rect), NULL, NULL, hInstance, NULL); if (hWnd == NULL) { return 0; } // Direct3Dの初期化 if (FAILED(InitD3D(hWnd))) { return 0; } // ウィンドウ表示 ShowWindow(hWnd, nCmdShow); // メッセージループ MSG msg; do { Sleep(1); if (PeekMessage( msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage( msg); DispatchMessage( msg); } else { Render(); } } while (msg.message != WM_QUIT); SAFE_RELEASE(g.pFont); SAFE_RELEASE(g.pDev); SAFE_RELEASE(g.pD3D); return msg.wParam; } //------------------------------------------------------------------------------ HRESULT InitD3D(HWND hWnd) { // Direct3D g.pD3D = Direct3DCreate9(D3D_SDK_VERSION); if (g.pD3D == NULL) { return E_FAIL; } // デバイス作成用のパラメタ D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( d3dpp, sizeof d3dpp); d3dpp.SwapEffect= D3DSWAPEFFECT_DISCARD;// 1 d3dpp.Windowed= TRUE; // Direct3Dデバイスの作成 HRESULT hr = g.pD3D- CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, d3dpp, g.pDev); if (SUCCEEDED(hr)) { hr = D3DXCreateFont(g.pDev, 40, 0, FW_HEAVY, 1, FALSE, SHIFTJIS_CHARSET, OUT_TT_ONLY_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE, L"MS Pゴシック", g.pFont); } return hr; } //------------------------------------------------------------------------------ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } //------------------------------------------------------------------------------ void Render(void) { static int fps = 0; static int frame = 0; static time_t tmPrev = time(NULL); // fps time_t tmCurr = time(NULL); if (tmCurr != tmPrev) { fps = frame; frame = 0; tmPrev = tmCurr; } frame++; // バックバッファのクリア g.pDev- Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0x7f,0x7f,0xff), 1.0f, 0); g.pDev- BeginScene(); // 描画 TCHAR szBuf[32]; RECT rect; SetRect( rect, 0, 0, 50, 20); swprintf_s(szBuf, L"time=%lld fps=%d", tmCurr, fps); g.pFont- DrawText(NULL, szBuf, -1, rect, DT_LEFT | DT_NOCLIP, D3DCOLOR_ARGB(0xff,0xff,0xff,0xff)); // バックバッファを表画面に反映 g.pDev- EndScene(); g.pDev- Present(NULL, NULL, NULL, NULL); }
https://w.atwiki.jp/tracking_quizshow/pages/58.html
問題 問題画像 問題文 次の暗号を解読してください。らへるたかるりむゆうたのかねれゐこうちねなかこはCAMEMBERT 回答 解説 補足 Big/bq014と同じ問題です
https://w.atwiki.jp/sampleisbest/pages/189.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 プロジェクト プロジェクト名 FontTest アプリケーションの種類 Windows アプリケーション 追加のオプション 空のプロジェクト 文字セット Unicode tmExternalLeading 行間最小の高さ tmInternalLeading 発音符の高さ(tmHeightとtmAscentに含まれる) tmHeight フォントの高さ tmAscent + tmDescent tmAscent gjpqyで下にはみ出ない、発音符を含む高さ tmDescent gjpqyで下にはみ出る高さ フォント作成時に指定するフォントの高さ 正 = 発音符を含む高さ(tmHeight) 負 = 発音符を含まない高さ(tmHeight - tmInternalLeading) 推奨される最小の行の高さ = tmExternalLeading + tmHeight FACE_NAME=Arial FONT_HEIGHT=100 tmHeight=100 tmAscent=80 tmDescent=20 tmInternalLeading=11 tmExternalLeading=3 FACE_NAME=Arial FONT_HEIGHT=-100 tmHeight=112 tmAscent=90 tmDescent=22 tmInternalLeading=12 tmExternalLeading=3 FACE_NAME=MS 明朝 FONT_HEIGHT=100 tmHeight=100 tmAscent=86 tmDescent=14 tmInternalLeading=0 tmExternalLeading=0 FACE_NAME=MS 明朝 FONT_HEIGHT=-100 tmHeight=100 tmAscent=86 tmDescent=14 tmInternalLeading=0 tmExternalLeading=0 FACE_NAME=メイリオ FONT_HEIGHT=100 tmHeight=100 tmAscent=71 tmDescent=29 tmInternalLeading=33 tmExternalLeading=0 FACE_NAME=メイリオ FONT_HEIGHT=-100 tmHeight=150 tmAscent=106 tmDescent=44 tmInternalLeading=50 tmExternalLeading=0 FontTest.cpp // Unicode #include Windows.h #include stdio.h #define APP_NAME TEXT("FontTest") //#define FACE_NAME TEXT("Arial") //#define FACE_NAME TEXT("MS 明朝") #define FACE_NAME TEXT("メイリオ") //#define STRING TEXT("Wgjpqy") #define STRING TEXT("Wgjpqy漢字") #define FONT_HEIGHT -100 // 関数プロトタイプ宣言 void Trace(LPCTSTR format, ...); LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); void OnPaint(HWND hWnd); void OnCreate(void); // 外部変数構造体 static struct { HFONT hFont; int nY[3]; } g; //============================================================================== int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) { WNDCLASSEX wcx; HWND hWnd; MSG msg; // ウィンドウクラスの登録 ZeroMemory( wcx, sizeof wcx); wcx.cbSize= sizeof wcx; wcx.style= CS_HREDRAW | CS_VREDRAW; wcx.lpfnWndProc= WndProc; wcx.hInstance= hInstance; wcx.hCursor= LoadCursor(NULL, MAKEINTRESOURCE(IDC_ARROW)); wcx.hbrBackground= (HBRUSH)(COLOR_WINDOW + 1); wcx.lpszClassName= APP_NAME; if (RegisterClassEx( wcx) == 0) { return 0; } // ウィンドウの作成 hWnd = CreateWindow( APP_NAME, APP_NAME, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if (hWnd == NULL) { return 0; } ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // メッセージループ while (GetMessage( msg, NULL, 0, 0)) { TranslateMessage( msg); DispatchMessage( msg); } return msg.wParam; } //------------------------------------------------------------------------------ void Trace(LPCTSTR format, ...) { va_list arg_ptr; TCHAR buffer[256]; int size; va_start(arg_ptr, format); size = _vsnwprintf_s(buffer, _TRUNCATE, format, arg_ptr); va_end(arg_ptr); OutputDebugString(buffer); if (size 0) { OutputDebugString(TEXT("...\n")); } } //------------------------------------------------------------------------------ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_PAINT OnPaint(hWnd); return 0; case WM_CREATE OnCreate(); return 0; case WM_DESTROY DeleteObject(g.hFont); PostQuitMessage(0); return 0; } return DefWindowProc(hWnd, uMsg, wParam, lParam); } //------------------------------------------------------------------------------ void OnPaint(HWND hWnd) { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, ps); RECT rc; GetClientRect(hWnd, rc); SetBkMode(hdc, TRANSPARENT); // 補助線 HPEN hPen = CreatePen(PS_SOLID, 0, RGB(255,0,0)); HGDIOBJ hPenOld = SelectObject(hdc, hPen); for (int n = 0; n 3; n++) { MoveToEx(hdc, 0, g.nY[n], NULL); LineTo(hdc, rc.right, g.nY[n]); } SelectObject(hdc, hPenOld); DeleteObject(hPen); // テスト文字列 HGDIOBJ hFontOld = SelectObject(hdc, g.hFont); TextOut(hdc, 0, 0, STRING, wcslen(STRING)); SelectObject(hdc, hFontOld); EndPaint(hWnd, ps); } //------------------------------------------------------------------------------ void OnCreate(void) { // フォントの作成 LOGFONT lf; ZeroMemory( lf, sizeof lf); lf.lfHeight = FONT_HEIGHT; lf.lfCharSet = DEFAULT_CHARSET; wcscpy_s(lf.lfFaceName, FACE_NAME); g.hFont = CreateFontIndirect( lf); // フォント情報の取得 HDC hdc = GetDC(NULL); HGDIOBJ hFontOld = SelectObject(hdc, g.hFont); TEXTMETRIC tm; GetTextMetrics(hdc, tm); SelectObject(hdc, hFontOld); ReleaseDC(NULL, hdc); Trace(TEXT("FACE_NAME=%s\n"), FACE_NAME); Trace(TEXT("FONT_HEIGHT=%d\n"), FONT_HEIGHT); Trace(TEXT("tmHeight=%d\n"), tm.tmHeight); Trace(TEXT("tmAscent=%d\n"), tm.tmAscent); Trace(TEXT("tmDescent=%d\n"), tm.tmDescent); Trace(TEXT("tmInternalLeading=%d\n"), tm.tmInternalLeading); Trace(TEXT("tmExternalLeading=%d\n"), tm.tmExternalLeading); g.nY[0] = tm.tmInternalLeading; g.nY[1] = tm.tmHeight - tm.tmDescent; g.nY[2] = tm.tmHeight; }
https://w.atwiki.jp/tracking_quizshow/pages/104.html
問題 問題画像 問題文 次の暗号を解読し、最後の単語2つを答えて下さい。単語と単語の間は半角スペースで区切って下さい。WvVwwwVvV VVwVwWVWVWwvvvwvWwvWwVvVVWw WvwwwwwVwvWVvvVwv WvWWwVvvWvvwwwWwVw wWWVVvWWvWvVWWwvVWwVWVwvwWW WVwWVWWVW vWvwvvVwvVvvVWwWVwWVwwvWwVWvWWVwW 回答 解説 補足 Big/bq082と同じ問題です
https://w.atwiki.jp/tracking_quizshow/pages/92.html
問題 問題画像 問題文 次の暗号を解読してください。3 FYM5HG XL6IV7 ? 回答 BUQ9S 解説 ルーレット(アメリカンスタイル)のホイール配置から 01D-O3FYM5HWK7BUQ9S02EZN4GXL6IVJ8CTPAR 補足 Big/bq088と同じ問題です
https://w.atwiki.jp/tracking_quizshow/pages/98.html
問題 問題画像 問題文 次の暗号を解読してください。587 261 421 261 515847 0 160 512 262847 160 512 160 262845 675 1 163 260845 162 672 162 2601005 2 0 514 420745 333 335 333 745 回答 解説 補足 Big/bq090と同じ問題です
https://w.atwiki.jp/mustnotsearch/pages/5213.html
登録タグ PV これはひどい その発想は無かった どうしてこうなった ジョーク・ネタ セクシャル ホラー 危険度1 汚物 音楽 検索すると、youtubeで投稿されている「big bad wolf」という曲のMVがヒットする。 最初はある男性の日常が映される。しかし、なぜか股の部分が異常に膨れ上がっており、ズボンをおろすと、その男の股には大きな顔がついていた。 これだけでも少し不気味だが、 中盤では、トイレでその顔が口から黄色い液体を出す場面がある。 しかも終盤では、女性が男性のズボンをおろし、股についている顔とキスをする。(というよりは何か飲んでいる…?)女性の股にも顔がついており、その顔同士がキス。すると男の股についている顔が口から白い液体を出す。等のセクシャル要素が強い場面が出てくる。 一体このMVの世界はどうなっているのか…。 分類:ジョーク・ネタ、セクシャル、汚物、ホラー 危険度:1 コメント 人類にはまだ理解ができない動画やな -- かっき~ (2023-05-07 12 38 19) deep down lowとリズムが似てる! -- ゲーム太郎 (2023-05-07 20 11 38) 怖い -- ナイル (2023-05-07 23 16 11) big bad wolfやら、ゆりかごと狼やら、ToiletWolf.jpgやら、最近の報告ワード狼多いな -- 名無しさん (2023-05-10 20 28 41) まさかのDuck sauceさんの曲で草 -- enustikoa (2023-05-10 20 45 38) ヤバすぎて草。なんで年齢制限かかってないんだよw -- 田中大田中 (2023-05-12 18 21 46) 危険度1の中で強いような気がするんだけど、個人的には、危険度2か3ぐらいは自分には思う -- 名無しさん (2023-06-29 21 54 48) どゆこと? -- rozio (2023-10-14 09 24 40) 意外と自分の頭と同じ扱いしてあげてるのなんか優しさ感じるんだが -- めろん (2023-11-02 01 27 43) スカみたいで苦手 -- 名無しさん (2023-11-05 19 04 40) こわい -- 名無しさん (2023-12-14 16 03 38) 名前 コメント
https://w.atwiki.jp/sampleisbest/pages/91.html
開発環境 Microsoft Visual C++ 2010 Express (SP1) 実行環境 Microsoft Windows XP Home Edition (SP3) プロジェクトの種類 Win32 コンソール アプリケーション プロジェクト名 finddup アプリケーションの種類 コンソール アプリケーション 追加のオプション 空のプロジェクト finddup.cpp #include fcntl.h // _O_WTEXT #include io.h // _setmode #include stdio.h // _fileno #include string.h // memcmp #include tchar.h #include map #include set #include string #define FIRST_SIZE4096 #define SECOND_SIZE(10 * 1024 * 1024) // 型定義 typedef struct {// ファイル情報構造体 std wstring strPath; int iDelFlag;// 削除フラグ int iDupFlag;// 重複フラグ } FileInfo; typedef std multimap _fsize_t, FileInfo mmfsfi; typedef std set std wstring setstr; // 関数プロトタイプ宣言 int files(const _TCHAR *ptcDir); int filecmp(const _TCHAR *ptcFile1, const _TCHAR *ptcFile2); int filedel(void); // グローバル変数 mmfsfi g_mmap; setstr g_set; int g_iDelFlag = 0; //============================================================================== int _tmain(int argc, _TCHAR *argv[]) { mmfsfi iterator it; mmfsfi iterator itTarget; FileInfo *pfi; FileInfo *pfiTarget; _TCHAR atcDir[_MAX_PATH]; size_t size; int iCount; int i; // BOMなしUTF-16LE _setmode(_fileno(stdout), _O_WTEXT); _setmode(_fileno(stderr), _O_WTEXT); if (argc 2) { _ftprintf(stderr, _T("usage finddup [-d] dir [...]\n")); return 1; } for (i = 1; i argc; i++) { if (argv[i][0] == _T( - )) { if (argv[i][1] == _T( d )) { g_iDelFlag = 1; } } else { _tcscpy_s(atcDir, argv[i]); size = _tcslen(atcDir); if (0 size atcDir[size - 1] == _T( \\ )) { atcDir[size - 1] = _T( \0 ); } files(atcDir); } } for (it = g_mmap.begin(); it != g_mmap.end(); it++) { pfi = (it- second); if (pfi- iDupFlag) continue; iCount = 0; for (itTarget = it; ++itTarget != g_mmap.end(); ) { if (itTarget- first != it- first) break; pfiTarget = (itTarget- second); if (pfiTarget- iDupFlag) continue; if (!filecmp(pfiTarget- strPath.c_str(), pfi- strPath.c_str())) { pfiTarget- iDupFlag = 1; if (iCount == 0) { _tprintf(_T("\n%u KB (%u B)\n"), (it- first + 1023) / 1024, it- first); _tprintf(_T("%s\n"), pfi- strPath.c_str()); } _tprintf(_T("%s\n"), pfiTarget- strPath.c_str()); iCount++; } } } if (g_iDelFlag) filedel(); return 0; } //------------------------------------------------------------------------------ int files(const _TCHAR *ptcDir) { std pair setstr iterator, bool pair; struct _wfinddata_t fd; FileInfo fi; _TCHAR atcPath[_MAX_PATH]; intptr_t handle; size_t sizeDir; sizeDir = _tcslen(ptcDir); if (_MAX_PATH = sizeDir + 4) { _ftprintf(stderr, _T("error パスが長過ぎます。%u[%s]\n"), sizeDir, ptcDir); return -1; } _stprintf_s(atcPath, _T("%s\\*.*"), ptcDir); fi.iDelFlag = g_iDelFlag; fi.iDupFlag = 0; handle = _tfindfirst(atcPath, fd); if (handle == -1) { _ftprintf(stderr, _T("error _tfindfirst[%s]\n"), ptcDir); return -1; } do { if (_MAX_PATH = sizeDir + 1 + _tcslen(fd.name)) { _ftprintf(stderr, _T("error パスが長過ぎます。[%s][%s]\n"), ptcDir, fd.name); continue; } _stprintf_s(atcPath, _T("%s\\%s"), ptcDir, fd.name); if (fd.attrib _A_SUBDIR) { if (_tcscmp(fd.name, _T(".")) _tcscmp(fd.name, _T(".."))) { files(atcPath); } } else { pair = g_set.insert(atcPath); if (pair.second == true) { fi.strPath = atcPath; g_mmap.insert(mmfsfi value_type(fd.size, fi)); } } } while (_tfindnext(handle, fd) == 0); _findclose(handle); return 0; } //------------------------------------------------------------------------------ int filecmp(const _TCHAR *ptcFile1, const _TCHAR *ptcFile2) { static char acBuf1[SECOND_SIZE]; static char acBuf2[SECOND_SIZE]; FILE *pFile1 = NULL; FILE *pFile2 = NULL; size_t sizeRead1; size_t sizeRead2; size_t sizeCount; size_t size; int iRetVal = -1; if (_tfopen_s( pFile1, ptcFile1, _T("rb")) != 0) { _ftprintf(stderr, _T("%s を開けません\n"), ptcFile1); goto Exit; } if (_tfopen_s( pFile2, ptcFile2, _T("rb")) != 0) { _ftprintf(stderr, _T("%s を開けません\n"), ptcFile2); goto Exit; } size = 0; for (sizeCount = FIRST_SIZE; ; sizeCount = SECOND_SIZE) { sizeRead1 = fread(acBuf1, 1, sizeCount, pFile1); if (ferror(pFile1) != 0) { _ftprintf(stderr, _T("error fread[%s]\n"), ptcFile1); goto Exit; } sizeRead2 = fread(acBuf2, 1, sizeCount, pFile2); if (ferror(pFile2) != 0) { _ftprintf(stderr, _T("error fread[%s]\n"), ptcFile2); goto Exit; } if (sizeRead1 != sizeRead2) { iRetVal = 1; break; } if (memcmp(acBuf1, acBuf2, sizeRead1) != 0) { if (sizeCount != FIRST_SIZE) { _ftprintf(stderr, _T("\n%u\n[%s]\n[%s]\n"), size, ptcFile1, ptcFile2); } iRetVal = 1; break; } if (sizeRead1 != sizeCount) { iRetVal = 0; break; } size += sizeCount; } Exit if (pFile2) fclose(pFile2); if (pFile1) fclose(pFile1); return iRetVal; } //------------------------------------------------------------------------------ int filedel(void) { mmfsfi iterator it; FileInfo *pfi; FILE *pFile; if (_tfopen_s( pFile, _T("finddup.log"), _T("wt,ccs=UNICODE"))) { _ftprintf(stderr, _T("ログファイルの作成に失敗しました\n")); return -1; } for(it = g_mmap.begin(); it != g_mmap.end(); it++) { pfi = (it- second); if (pfi- iDupFlag pfi- iDelFlag) { _ftprintf(pFile, _T("del \"%s\"\n"), pfi- strPath.c_str()); } } fclose(pFile); return 0; }
https://w.atwiki.jp/digicre/pages/14.html
まずごく簡単な、基本的なプログラムを書いてみます。その中でまずはC言語に、あるいは変数や関数といった基本的な処理の流れについて理解しましょう。 説明pdf firstday.pdf advance説明pdf firstday-a.pdf プログラム1・2はごく基本的な処理になっています。とくに1に関しては「hello,world!」といってプログラムを始めるときのお決まりのプログラムになっています。 さて、暇があるならプログラムの「どこが変えられるか」、「どこを変えてはいけないか」を書き換えながらじっくり検討してみてください。 では、説明をしていきます。 変数 プリントでは、変数について コンピュータ(のメモリ上)に確保される作業エリアです。 という説明がなされています。また、よくなされる説明としては 数字を入れる箱のようなもの というものがあります。コンピュータが処理するに当たって、当然処理途中の数字を記憶したりしておく必要がでてきます。人間では、例えば2+3*5という計算をするならば、3*5の結果15を記憶してから2+15という処理をするわけです。この処理途中の数字を記録するために変数は確保されます。 数字をいれる箱のようなもの という説明からすればわかりやすいですが、当然箱は用意してやらなければなりません。ない箱に数字など入れることはできませんから。そのためにプログラムではその用意にあたる「宣言」が必要になります。この形は「データ型 変数名;」というものになります。データ型とはその変数が何を保存するものか、というものです。例えば「int」であれば整数ですし、「double」であれば実数になります。他のデータ方についてはデータ型のページを参照してください。 関数 xが変数ならf(x)がまさに関数にあたるわけですが、まずは関数、という言葉についてみていきましょう。かつて東西の数学の差はこの「関数の概念の有無」にあるともいわれていますが(和算は微積の直前といえるところまで発展していたが、関数の概念がなかった)、この関数という言葉はもともと英語でfunctionといいます。これが中国に入ったときに「函数:ハンシュー」という言葉に訳され、この言葉をそのまま日本でも使いました。しかし、戦後教科書に採用するに当たり、函という漢字がなかったために関という漢字が当てられ、現代に至ります。 このfunctionという言葉ですが、辞書を引くと 1 (人間・物・制度などに固有の)機能, 作用, 働き, 効用;職務, 役割, 役目 という訳が最初に出てきます。つまり、functionは「機能」という意味を持つわけです。 この概念はCにおける関数には特に顕著であります。つまり、Cの関数とは「機能のひとまとまり」を示すことになります。同じような機能が複数出てくるときに、そのまとまりを一つにわけて外部においてしまえばプログラムは簡潔になります。特によく出てくるものであれば、C言語が固有にもったり、あるいは自分で作ったものなら関数だけ外部ファイルに分けてしまうこともできるわけです。 以降プログラム2を見ながら読んでください。 関数には、特に二つの概念の理解が必要です。それは「引数(ひきすう)」と「返り値(戻り値)」です。 引数とは、関数に渡す値のことです。たとえば、a+bをさせる関数をつくれば、aとbの値を与えてやらなければなりません。プログラム2のwaruという関数でいけば、これはaを割る関数ですから、引数にaをとります。 返り値とは、関数が呼び出し元に返す値です。たとえば、上の関数であれば、a+bの計算結果になりますし、プログラム2の関数waruではaをMで割った結果になります。これが返されなければ関数を呼び出した意味が有りません。 なお、これらは必要がない場合もあります。例えば引数がいらないものとして「現在時刻を知る関数」のようなもの、あるいは返り値がいらない例として「画面に表示する命令」があげられます(Cに標準でついているこれらの機能を持つ関数は引数・返り値を持つものも多いですが)。 関数を定義するときは、「返り値の型 関数名(引数,引数…){}」という形で行います。例えばプログラム2の double waru(int a) なります。その後、{}で囲って関数の機能を記述します。その際、返り値が必要な関数であれば「return 返り値;」 を最後に書くことで実装できます。 なお、int main(){}という部分もやはり関数です。これをmain関数と言って、プログラムはここから始まります。ところで、このmain関数の後に関数を定義するとき、一見main関数が実行された時点では関数がないように見えるため、エラーが返されることがあります。そのため、main関数の前にプロトタイプ宣言を行う必要があります。これはmain関数の前に「返り値の型 関数名(引数の型,引数の型…);」だけを記述するものです。例えば、a+bを足す関数は以下のようになります。 int plus(int a,int b){ return a+b; } 標準入出力関数 文字を表示したり、あるいは入力させるための関数を入出力関数と言います。Cについている標準的な入出力関数は「printf関数」と「scanf関数」です。printfのほうが表示、scanfが入力です。 printf関数は「printf("表示文字列",引数,引数・・・)」という形になります。例えばプログラム1ではHello,world!と表示するのに printf("Hello,world\n") としていますね。 ここで引数とは、表示する変数のことです。例えば「a=(aの値)」とするときは、aを引数の中にいれることになります。そして表示文字列の中には何を入力するかというものを表す、変換指定文字というものをいれます。「%s」とすれば変数に入っているものを文字列として表示しますし、「%d」とすれば整数として、「%f」とすれば実数としてffff.ffffと小数の形で、「%e」とすれば実数としてaaaaEaaという指数表示の形で表記してくれます。プログラム2の例では割られる数aと、計算結果waru(a)を表示するのに printf("%d÷M は%f です。\n",n, waru(n)); としていますね。当然、引数にとる変数名は書いてる順番にします。ごちゃごちゃにしたらコンパイラは迷ってしまいますから。 なお、「\n」は改行文字です。これを入れることで改行できます。その他「\t」でタブ入力をしてくれます。 scanf関数は「{scanf("指定変換文字列",入力先変数のアドレス,変数のアドレス…)」という形をとります。指定変換文字列はprintfと同じですが実数だけは「%lf」になりますので注意してください。 問題は変数のアドレスですが、これはとりあえずの間気にせず変数名の前に「 」をつけなければならないとだけ考えてください。この問題については3日目に考察しましょう。 例をいくつか見ましょう。まずはプログラム2では割られる数nを入力するのに scanf("%d", n ); としています。また、n/mをさせるn,m両方入力させたいというのであれば、 scanf("%d%d", n, m); とすることで可能です。ちなみに入力時はスペースで区切ります。 また、区切らせる記号もして可能で、""の中に入れてやることで指定できます。例えば,で区切らせたければ scanf("%d,%d". n, m); とすることで可能です。 プリプロセッサ命令 プリプロセッサとは、コンパイルする前にコンパイラにさせる仕事です。これは、命令の前に「#」がつきます。代表的なものに「#include」と「#define」があります。一つずつ見ていきましょう。 「#include」は、指定したヘッダファイルと呼ばれる関数(正確には関数のプロトタイプ宣言)が書かれたファイルをコンパイル前に読み込み、プログラムに引っ付けます。これで、外部ファイルに書かれたソースコードも使えるようになります。実は「printf関数」や「scanf関数」もこの外部ファイルに書かれていたもので、「stdio.h」というファイルに書かれています。このように標準でついているものをインクルードする(#includeを使うことをこういいます)時は をつけて #include stdio.h という風にします。自作のものは""をつけるのですが、これはadvanceで扱うことにしましょう。 「#define」は、指定した単語を別の文字に自動的に置き換えてくれます。たとえばプログラム2のように #define M 5 とすることで、プログラム中のMという単語を5に変えてくれます。プログラムを分りやすくするのには結構使います。
https://w.atwiki.jp/wikiska/pages/197.html
Sister Big Stuff(Album) Sister Big Stuff(Song)?