C++に投稿されたコード一覧

C++ 除算器

// div_u8.v
module div_u8 (
	n, d, q, r
);
	input [7:0] n, d;
	output [7:0] q, r;

	assign q = n / d;
	assign r = n % d;
endmodule

// div_8.sflp
declare div_u8 interface
{
	input n<8>, d<8>;
	output q<8>, r<8>;
}

circuit div_8
{
	input n<8>, d<8>;
	output q<8>, r<8>;
	instrin u(n, d), s(n, d);

	div_u8 div;

	instruct u par{ // unsigned div
		div.n = n;
		div.d = d;
		q = div.q;
		r = div.r;
	}

	instruct s par{ // signed div
		if(n<7>) div.n = -n;
		else div.n = n;
		if(d<7>) div.d = -d;
		else div.d = d;
		if(n<7>@d<7>) q = -div.q;
		else q = div.q;
		if(n<7>) r = -div.r;
		else r = div.r;
	}

}

// div_test.cpp
#include<stdio.h>
#include "Vdiv_8.h"

int main(void)
{
	Vdiv_8 *div = new Vdiv_8;

	int n, d;
	unsigned char q, r;

	for (n = 0; n < 256; n++){
		for (d = 1; d < 256; d++){

			div->n = n;
			div->d = d;

			div->u = 1;
			div->s = 0;
			div->eval();
			printf("H %02X / %02X = %02X . %02X\n", n, d, div->q, div->r);

			q = (unsigned char)n / (unsigned char)d;
			r = (unsigned char)n % (unsigned char)d;
			printf("U %02X / %02X = %02X . %02X\n", n, d, q, r);

			if (div->q != q || div->r != r){
				printf("err\n");
				getchar();
			}

			div->u = 0;
			div->s = 1;
			div->eval();
			printf("H %02X / %02X = %02X . %02X\n", n, d, div->q, div->r);

			q = (signed char)n / (signed char)d;
			r = (signed char)n % (signed char)d;
			printf("S %02X / %02X = %02X . %02X\n", n, d, q, r);

			if (div->q != q || div->r != r){
				printf("err\n");
				getchar();
			}

			printf("\n");
		}
	}

	div->final();
	delete div;

	return 0;
}

C++ 手芸王

#include <iostream>
#include <string>
using namespace std;

int check(const int n, const string str){
	if(n % 2 == 0) return -1;
	int p1 = n / 2, p2 = p1;
	for(int i = 0; i <= n / 2; ++i){
		switch(i % 3){
		case 0:
			if((str[p1] != 'b') || (str[p2] != 'b')) return -1;
			break;
		case 1:
			if((str[p1] != 'a') || (str[p2] != 'c')) return -1;
			break;
		case 2:
			if((str[p1] != 'c') || (str[p2] != 'a')) return -1;
			break;
		}
		--p1; ++p2;
	}
	return n / 2;
}

int main(){
	int n;
	string str;
	cin >> n >>str;
	cout << check(n, str) << "\n";
}

C++ ガチャガチャ

size_t Rand(size_t n){
	// 0 ~ (n-1)までの整数をランダムに出力する
	return x;
}

class G_Oracle{
	void Drop();
}

void G_Oracle::Drop(){
	size_t x = Rand(101);
	if(x < 20){
		cout << "緑うーぱ" << endl;
	}else if(x < 40){
		cout << "青うーぱ" << endl;
	}else if(x < 60){
		cout << "黄うーぱ" << endl;
	}else if(x < 80){
		cout << "桃うーぱ" << endl;
	}else if(x < 100){
		cout << "橙うーぱ" << endl;
	}else{
		cout << "メタルうーぱ" << endl;
	}
}

int main(){
	G_Oracle gacha;
	// 5回回してみる
	gacha.Drop();
	gacha.Drop();
	gacha.Drop();
	gacha.Drop();
	gacha.Drop();
}

C++ 赤外線パッド

/*
 VISION VJS-372 赤外線レシーバ
	clk50MHz 受信サンプリング38kHz
*/

circuit VJS372_receiver
{
	input IRd;
	reg_ws pre0_IRd, pre1_IRd;

	reg_wr div<10>;

	output dout<16>;
	reg_wr dout_reg<16>;

	instrself ir_negedge, ir_posedge;

	stage_name receive_stg { task do(); }

	par{
		// 76kHzでサンプリング
		if(div==657){
			pre0_IRd := IRd;
			generate receive_stg.do();
			div := 0;
		}
		else div++;

		pre1_IRd := pre0_IRd;
		any{
			pre1_IRd & (^pre0_IRd) : ir_negedge();
			(^pre1_IRd) & pre0_IRd : ir_posedge();
		}

		dout = dout_reg;
	}

	stage receive_stg {
		reg_wr head_count<8>, data_count<8>, recv_data<16>;
		reg_wr bit_count<4>, f_push1, f_push2, f_push3;

		state_name idle, headL, headLt, headH, headHt, dataL, dataLt, dataH, dataHt, strtL, strtLt;
		first_state idle;

		par{
			finish;
		}

		state idle par{ // Low待ち
			head_count := 0;
			if(ir_negedge) goto headL;
		}

		// プリアンブル
		state headL par{
			head_count++;
			if(/&head_count) goto idle; // over (error)
			if(ir_posedge) goto headLt;
		}
		state headLt par{
			if((head_count-0x40)<7>==0b0){ // over
				head_count := 0;
				goto headH;
			}
			else goto idle;
		}
		state headH par{
			head_count++;
			if(/&head_count){
				goto idle; // over (error)
			}
			if(ir_negedge) goto headHt;
		}
		state headHt par{
			alt{
				(head_count-0x60)<7>==0b0 : par{ // over (error)
					goto idle;
				}
				(head_count-0x30)<7>==0b0 : par{ // over
					data_count := 0;
					bit_count := 0;
					recv_data := 0x0000;
					goto dataL;
				}
				else : par{ // error
					goto idle;
				}
			}
		}

		state dataL par{
			data_count++;
			f_push1 := 0;
			f_push2 := 0;
			f_push3 := 0;
			if(ir_posedge) goto dataLt;
		}
		state dataLt par{
			alt{
				(0x20-data_count)<7>==0b0 : par{ // under 0x1F
					goto dataH;
				}
				(data_count-0x60)<7>==0b0 : par{ // over (3同時押し) 0x6E
					f_push3 := 1;
					goto dataH;
				}
				(data_count-0x47)<7>==0b0 : par{ // over (2同時押し) 0x4A 0x50
					f_push2 := 1;
					goto dataH;
				}
				else : par{
					f_push1 := 1;
					goto dataH;
				}
			}
			data_count := 0;
		}
		state dataH par{
			data_count++;
			if(/&data_count) goto idle; // over (end frame)
			if(ir_negedge) goto dataHt;
		}
		state dataHt par{
			data_count := 0;
			any{
				bit_count==0 : goto strtL;
				bit_count==14 : par{
					dout_reg := 0b0 || recv_data<15:1>; // キー情報確定
					goto idle;
				}
				else : goto dataL;
			}
			alt{
				// 隣り合うビットのボタンが押されてるとLowが長い
				f_push3 : par{
					recv_data := recv_data<11:0> || 0b1110;
					bit_count += 4;
				}
				// 隣り合うビットのボタンが押されてるとLowが長い
				f_push2 : par{
					recv_data := recv_data<12:0> || 0b110;
					bit_count += 3;
				}
				// ボタンが押されると次のビット情報がパスされる
				f_push1 : par{
					recv_data := recv_data<13:0> || 0b10;
					bit_count += 2;
				}
				else : par{
					recv_data := recv_data<14:0> || 0b0;
					bit_count++;
				}
			}
		}

		// Startだけ長さが違う
		state strtL par{
			data_count++;
			f_push1 := 0;
			f_push2 := 0;
			f_push3 := 0;
			if(ir_posedge) goto strtLt;
		}
		state strtLt par{
			alt{
				(0x06-data_count)<7>==0b0 : par{ // under (error)
					goto idle;
				}
				(0x33-data_count)<7>==0b0 : par{ // under ok 0x28
					goto dataH;
				}
				(data_count-0x65)<7>==0b0 : par{ // over (同時押し) 0x69
					f_push2 := 1;
					goto dataH;
				}
				else : par{
					f_push1 := 1;
					goto dataH;
				}
			}
			data_count := 0;
		}

	}

}

C++ stage内でのoutput出力

circuit stagepar
{
	instrin run;
	output vol<3>;
	reg_wr count<4>;

	stage_name run_stg { task do(); }

	instruct run generate run_stg.do();

	stage run_stg {
		par{
			finish;
			count := count + 1;

			// この記述は常に接続
		//	vol = count<2:0>;
/*
verilog
   assign  vol = (count[2:0]);
*/

			// この記述だとrun_stgトリガ時のみ接続される
			any{
				count<3> : vol = count<2:0>;
				else     : vol = 0b111;
			}
/*
verilog
   assign  vol = ((_net_4)?3'b111:3'b0)|
    ((_net_3)?(count[2:0]):3'b0);
   assign  _net_2 = (count[3]);
   assign  _net_3 = (_stage_run_stg&_net_2);
   assign  _net_4 = (_stage_run_stg&(~_net_2));
*/
		}
	}
/*
VHDLに変換したときのことを考えてこうなっている?
*/

}

C++ Siv3dで立体的な音ゲー作りたいね。

# include <Siv3D.hpp>

double pickMod(double a){
	return (a - (int)a);
}

bool boolFlip(bool a){
	return !a;
}

void Main()
{

	/*
	60FPSで動作するので、60F/sec = 3600F/min

	デバッグモード表示はShift+Dで切り替え

	*/

	//譜面クラスに書く内容
	int frameCount = 0; //フレームカウント
	double recordFrameCount[5] = { 0, 0, 0, 0, 0 }; //フレームカウント位置記録
	const int startMusicFrameCount = 285; //音源gap
	const int bpm = 144;

	const Font font(16); //デバッグ表示用
	const Sound sound(L"Music/ビーネイトエルフ.mp3");
	if (!sound){ return; };

	const double fpb = 3600 / bpm; //frame per minitue
	frameCount = -1 * startMusicFrameCount;

	int i = 0;

	bool isDebugMode = false;

	sound.play();
	while (System::Update()) {

		frameCount++;

		if ((Input::KeyShift + Input::KeyD).clicked){
			isDebugMode = boolFlip(isDebugMode);
		}

		if (isDebugMode){

			font.draw(Format(L"F.count:", frameCount, L" | B.count:", (frameCount / fpb), L"(fpb:", fpb, L")"));

			if (pickMod(frameCount / fpb) <= 0.1){
				font(L"*").draw(0, 30);
			}
			else{
				font(L"-").draw(0, 30);
			}

			font(pickMod(recordFrameCount[0])).draw(0, 60);
			font(pickMod(recordFrameCount[1])).draw(0, 90);
			font(pickMod(recordFrameCount[2])).draw(0, 120);
			font(pickMod(recordFrameCount[3])).draw(0, 150);
			font(pickMod(recordFrameCount[4])).draw(0, 180);

			if (Input::KeyK.clicked){
				recordFrameCount[i % 5] = (frameCount / fpb);
				i++;
			}

			if (Input::KeySpace.clicked){
				exit(0);
			}

		}//debugmode

		if (Input::KeyK.clicked){
			if (pickMod(frameCount / fpb) <= 0.02 || pickMod(frameCount / fpb) >= 0.98){
				//Just判定
				font(L"JUST").draw(0, 0);
			}
			else if (pickMod(frameCount / fpb) <= 0.1 || pickMod(frameCount / fpb) >= 0.9){
				//Great判定
				font(L"Great").draw(0, 0);
			}
			else if (pickMod(frameCount / fpb) <= 0.2 || pickMod(frameCount / fpb) >= 0.8){
				//Good判定
				font(L"Good").draw(0, 0);
			}
			else{
				//miss判定
				font(L"miss").draw(0, 0);
			}
		}

	}//Updateループ

}

C++ 徐々にずれてくるframeカウント

# include <Siv3D.hpp>

void Main()
{

	/*
	60FPSで動作するので、60F/sec = 3600F/min
	*/

	const Font font(16); //デバッグ表示用
	const Sound sound(L"Music/BLmg-ルーネイトエルフ.mp3");
	if (!sound){ return; };

	int frameCount = 0; //フレームカウント
	int recordFrameCount = 0; //フレームカウント位置記録
	long int startMusicFrameCount = 268; //音源gap
	int bpm = 145;

	const double fpb = 3600 / bpm; //frame per minitue
	frameCount = -1 * startMusicFrameCount;

	sound.play();

	while (System::Update()) {

		frameCount++;

		font(frameCount).draw(0, 0);
		font((frameCount / fpb)).draw(0, 30); //どうにかしてここで1拍ごとに1増えるようにしたい

	}//Updateループ

}

C++ テスト関数

int main(int argc, char *argv[]){
  glutInit(&argc, argv);//環境の初期化
  glutInitWindowPosition(WindowPositionX, WindowPositionY);//ウィンドウの位置の指定
  glutInitWindowSize(WindowWidth, WindowHeight); //ウィンドウサイズの指定
  glutInitDisplayMode(GLUT_RGBA | GLUT_DEPTH | GLUT_DOUBLE);//ディスプレイモードの指定
  glutCreateWindow(WindowTitle);  //ウィンドウの作成
  glutDisplayFunc(Display); //描画時に呼び出される関数を指定する(関数名:Display)
  Initialize(); //初期設定の関数を呼び出す
  glutMainLoop();
  return 0;
}

C++ hoge

# include <iostream>
# include <string>
# include <random>
void main()
{
	std::string s;
	std::random_device rd;
	std::mt19937 mt(rd());
	std::string otinpo[4] =
	{
		"お",
		"ち",
		"ん",
		"ぽ",
	};

	while (s.find("おちんぽ") == std::string::npos)
	{
		s += otinpo[mt() % 4];
	}

	std::cout << s << std::endl;
	std::cout << s.length() / 2 << "回目で果てました..." << std::endl;
}

C++ Maybeモナドみたいなものが作りたかった

#include <cstdio>

#include <boost/optional.hpp>
#include <boost/type_traits.hpp>
#include <boost/utility/result_of.hpp>

template <typename T>
struct is_optional : public boost::false_type
{ };

template <typename T>
struct is_optional<boost::optional<T> > : public boost::true_type
{ };

template <typename T, typename F,
	typename Reserver = typename boost::disable_if<is_optional<typename boost::result_of<F(T)>::type>>::type,
	typename Reserver2 = typename boost::disable_if<boost::is_void<typename boost::result_of<F(T)>::type>>::type
>
inline boost::optional<typename boost::result_of<F(T)>::type> operator >> (boost::optional<T> val, F func)
{
	if (val) {
		return func(*val);
	} else {
		return boost::none;
	}
}

template <typename T, typename F, typename Reserver = typename boost::enable_if<is_optional<typename boost::result_of<F(T)>::type>>::type>
inline typename boost::result_of<F(T)>::type operator >> (boost::optional<T> val, F func)
{
	if (val) {
		return func(*val);
	} else {
		return boost::none;
	}
}

template <typename T, typename F, typename Reserver = typename boost::enable_if<boost::is_void<typename boost::result_of<F(T)>::type>>::type>
inline void operator >> (boost::optional<T> val, F func)
{
	if (val) {
		return func(*val);
	}
}

boost::optional<int> testFunc(int n) {
	return (n % 2 == 0)? n/2 : boost::optional<int>();
}

int testFunc2(int n) {
	return n / 2;
}

int main(int argc, const char * argv[])
{
	testFunc(32)
	>> [] (int r) { return testFunc(r); }
	>> [] (int r) { return testFunc2(r); }
	>> [] (int r) { std::printf("%d", r); }
	;
}
Total Pages: 1 / 41234

よく投稿されているコード

タグ

最近投稿されたコード