落書きノート

ふと自分が気になった事を書いてます

C/C++

C++で問題を解く

#include <string> #include <iostream> using namespace std; class Human { public: string name; int height; int weight; }; int main(void){ Human nakano; Human morita; nakano.name = "中野太郎"; nakano.height = 173; nakano.weight = 62; morita.name = "森田孝司";</iostream></string>…

OpenGLでテストゲーム用に視点移動を作った

結構苦戦しました…。こんな感じです。gluLookAt関数にsinやらcosやらの数式を使ってみるとあっさりと出来ました。我ながら良い! #include <stdio.h> #include <math.h> #include <stdlib.h> #include <GL/glut.h> int flag_up = 0; int flag_down = 0; int flag_left = 0; int flag_right = 0; con</gl/glut.h></stdlib.h></math.h></stdio.h>…

C++で問題を解く

最近、Gentooでzshを本格的に使い始めました。便利ですね。もう少しtmuxと組み合わせて使い込んで行きたいと思います。新たな使い方が分かってくるかもしれませんし…。 #include <iostream> using namespace std; namespace English { int x = 1; void print_x(){ cout </iostream>…

C++とJavaで問題を解く

今日は疲れてますね。あまり問題がこなせなかったなぁ。それにしてもJava,大学ではコンソールアプリケーションをやらなかったので少し新鮮味がありました。やったのはアプレットだったもんなぁ…。 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int m</ctime></cstdlib></iostream>…

C++で問題を解く

なかなか頭を使わせてくれる問題がまだありますね。なんとか解けました。 #include <iostream> #include <cstring> #include <cstdlib> using namespace std; template <class Type> Type minof(const Type a[], int n){ Type min = a[0]; for(int i = 0; i < n; i++){ if(a[i] < min) min = a[i]; } </class></cstdlib></cstring></iostream>…

OpenGL ウォークスルー機能、ここまでが限界のよう…。

OpenGL,GLUTによる手抜き入門というサイトで問題を解いてました。気になって夜も寝れません。これで終わりにするぞと思って組んだプログラムがこちら。これで本当にラストにします。結局不完全なままに終わりましたが、万策尽きたのでここまでです。でもちょ…

OpenGLでマウスドラッグでの視点移動作成失敗っぽい…。

今回は失敗ですね。数学に精通してないと厳しいかも…。クォータニオンを使えば楽だと書いてありましたが、とりあえずここまでにしておきました。 #include <stdlib.h> #include <math.h> #include <stdlib.h> #include <GL/glut.h> int flag_ld = 0; int flag_rd = 0; const double t = 0.00001; con</gl/glut.h></stdlib.h></math.h></stdlib.h>…

C++で問題を解く

#include <iostream> using namespace std; int factorial(int n){ if(n > 0) return n * factorial(n - 1); else return 1; } int main(void){ int in; cout << "整数値 : "; cin >> in; cout << factorial(in) << endl; return 0; } #include <iostream> using namespace std; </iostream></iostream>…

OpenGLでマウスの視点移動プログラム?

いろいろ調べてやってみてる最中ですが、なにかおかしいような…。数式が間違えてるんでしょうか。もう少しやってみますが、時間がかかりすぎたので今日はここまでにします。 #include <stdlib.h> #include <math.h> #include <stdlib.h> #include <GL/glut.h> static int flag_ld = 0; static int fl</gl/glut.h></stdlib.h></math.h></stdlib.h>…

OpenGLの学習

サンプルプログラムはここまでです。次は練習問題。3D空間のウォークスルーです。次回に成果を載せてみたいと思います。 #include <GL/glut.h> #include <stdlib.h> GLdouble vertex[][3] = { { 0.0, 0.0, 0.0 }, { 1.0, 0.0, 0.0 }, { 1.0, 1.0, 0.0 }, { 0.0, 1.0, 0.0 }, { 0.0</stdlib.h></gl/glut.h>…

OpenGLを学習

4回目です。 #include <GL/glut.h> #include <stdlib.h> GLdouble vertex[][3] = { { 0.0, 0.0, 0.0 }, { 1.0, 0.0, 0.0 }, { 1.0, 1.0, 0.0 }, { 0.0, 1.0, 0.0 }, { 0.0, 0.0, 1.0 }, { 1.0, 0.0, 1.0 }, { 1.0, 1.0, 1.0 }, { 0.0, 1.0, 1.0 } }; int edge[][2] = { { 0, 1 }, </stdlib.h></gl/glut.h>…

OpenGLを学習

3回目です。 #include <GL/glut.h> GLdouble vertex[][3] = { { 0.0, 0.0, 0.0 }, { 1.0, 0.0, 0.0 }, { 1.0, 1.0, 0.0 }, { 0.0, 1.0, 0.0 }, { 0.0, 0.0, 1.0 }, { 1.0, 0.0, 1.0 }, { 1.0, 1.0, 1.0 }, { 0.0, 1.0, 1.0 } }; int edge[][2] = { { 0, 1 }, { 1, 2 }, </gl/glut.h>…

OpenGLを学習中

OpenGLを勉強している最中です。この記事は2回目です。 マウスのドラッグ機能で線を描くプログラムです。ウィンドウの描画領域内でドラッグをすると線が描画されます。 #include <GL/glut.h> #include <stdio.h> #define MAXPOINTS 100 GLint point[MAXPOINTS][2]; int pointnum </stdio.h></gl/glut.h>…

C++で問題を解く

こんな感じです。やっと文字列ポインタが終わりました。次は関数の応用かな。途中、本の解答を丸々参考にして組んだものもありますが、参考にしても動かなかったので、多分本の誤植だと思います。公式サイトに行っても正誤表が準備段階なので確認出来ません…

C++で問題を解く

文字列ポインタの問題、思ったより重いですね。なかなか難しいので、紙に書いて考えないと、頭がごちゃごちゃになりますね。とりあえず今日は1問だけ解きました。問題数あまりこなせなかったので、その代わりに別解を考えました。 #include <iostream> #include <cstdlib> #incl</cstdlib></iostream>…

OpenGLの進捗

OpenGLの入門サイトを見ながらプログラムを打ち込んで試してみてます。ここまで進みました。 #include <GL/glut.h> void display(void){ glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); glColor3d(1.0, 0.0, 0.0); glVertex2d(-0.9, -0.9); glColor3d(0.0, 1.0, 0</gl/glut.h>…

OpenGLを始めた

OpenGLを始めてみました。DirectXの知識が流用出来て順調に進んでおります。今日は環境のセットアップで時間が潰れてしまいましたが(Awesomeというデスクトップ環境にスクリーンショット機能をつけるのに)、一応ここまで進みました。ネットの入門サイトで試…

C++で問題を解く

文字列ポインタ、難しいですね…。紙に書いて考えましたとも。こんな感じです。 #include <iostream> #include <cstdlib> using namespace std; const char* strchr_ptr(const char* s, char c){ while(*s){ if(*s == c){ return s; } s++; } return NULL; } int main(void){ cha</cstdlib></iostream>…

C++で問題を解く

久しぶりに解いたような気がします。今回はこんな感じです。 #include <iostream> #include <cstdlib> using namespace std; int strcmp(const char* s1, const char* s2){ while(*s1 == *s2){ if(*s1 == '\0') return 0; s1++; s2++; } return (unsigned char)*s1 - (unsigned </cstdlib></iostream>…

C++で問題を解いてる時に起こった出来事

問題は次のコードなんですが。 #include <iostream> using namespace std; int main(void){ int n = 5; while(n--){ cout << n << endl; } while(n--){ cout << n << endl; } return 0; } while文で2回デクリメントを使って処理を実行させると、なぜか無限ループに陥っ</iostream>…

C++で問題を解く

ちょっと今回不思議な事が起こったので次回、それについて取り上げてみます。 #include <iostream> using namespace std; char* strcpy(char* s1, const char* s2){ char* p = s1; // アドレスを退避させる。s1を変化させてもpのアドレスは変更されない。ここではアド</iostream>…

C++で問題を解く

#include <iostream> using namespace std; int main(void){ char a[][5] = {"LISP", "C", "Ada"}; char* p[] = {"PAUL", "X", "MAC"}; for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++){ cout << "a[" << i << "] = \"" << a[i] << "\"" << endl; } for(int j = 0;</iostream>…

C++で問題を解く

#include <iostream> #include <cstddef> using namespace std; int main(void){ int asize; cout << "要素数 : "; cin >> asize; double* a = new(nothrow) double[asize]; if(a == NULL){ cout << "配列の生成に失敗しました。" << endl; return 1; } for(int i = 0; i < asiz</cstddef></iostream>…

C++で問題を解く

#include <iostream> using namespace std; int ary_plus_cpy(int* a, const int* b, int n){ int result_n = 0; while(n-- > 0){ if(*b > 0){ *a++ = *b; result_n++; } b++; } return result_n; } int main(void){ const int n = 5; int result_n; int x[n],y[n]; fo</iostream>…

C++で問題を解く

ポインタの項目です。なかなか難しいですね。 #include <iostream> #include <cstdlib> #include <ctime> #include <iomanip> using namespace std; void print2d(int a[][5], int n){ int max_width[5]; for(int i = 0; i < 5; i++){ max_width[i] = 0; for(int j = 0; j < n; j++){ int value </iomanip></ctime></cstdlib></iostream>…

C++で問題を解く

ちょっと余裕があったのでC++やってみました。ちょっと難しくなって来たのでこなせる問題数が減りました。今日はSQLもやった影響あるかな…。 #include <iostream> #include <cstdlib> #include <ctime> #include <iomanip> using namespace std; void maxline(int a[][5], int m[], int n){ for(</iomanip></ctime></cstdlib></iostream>…

C++で問題を解く

ポインタの項目で、配列の問題を解いてると頭がこんがらがってきたので、最後の問題だけ答えを参考にしました。予想通り、降順に操作してましたね…。メモ帳で書いて考えれば良かったかな…。 #include <iostream> using namespace std; int sum_of(const int a[], int n</iostream>…

C++で問題を解く

諸事情により次の記事はRubyを書くかも…。障害が起きたというわけではないです。 #include <iostream> using namespace std; int main(void){ int* p; int a[5]; p = &a[0]; for(int i = 0; i < 5; i++){ a[i] = i + 1; } for(int j = 0; j < 5; j++){ cout << "a[" <<</iostream>…

C++で問題を解く

C++が終わるまでRubyは後回しにすることに。とりあえず今日はここまで。 #include <iostream> using namespace std; short absolute(short x){ return x >= 0 ? x : -x; } int absolute(int x){ return x >= 0 ? x : -x; } long absolute(long x){ return x >= 0 ? x :</iostream>…

C++で問題を解く

#include <iostream> using namespace std; const int a_size = 5; int& r(int idx){ static int a[a_size]; if(idx < 0 || idx > a_size - 1){ return const_cast<int&>(a_size); }else{ return a[idx]; } } int main(void){ for(int i = 0; i < a_size; i++){ r(i) = i; } </int&></iostream>…

C++で問題を解く

勉強になりましたが、比較的簡単な部類だと思いました。スコープやstaticの静的記憶域期間です。 #include <iostream> using namespace std; int x = 75; void print_x(){ cout << "x = " << x << endl; } int main(void){ cout << "x = " << x << endl; int x = 999; </iostream>…

C言語でサウンドプログラミング

音は、「音の大きさ」、「音の高さ」、「音色」によって特徴づけることができます。耳で聞くだけでなく、音データの波形を目で見て観察すると、こうした「音の三要素」を詳しく調べることができます。 例えば、ギターは弦を弾いて音を鳴らす楽器ですが、音の…

モデルの回転

ステージでは俳優に「右に90度回って」などと指示しますが、3Dグラフィックスの世界でこれと同じことを表現するには、座標系のY軸をつかんでくるくると回します。 このような回転のことを「Y軸周りの回転」と呼びます。同様に、X軸を中心とした回転のことを…

モデルの拡大縮小

モデルの拡大縮小は、上下方向、左右方向、手前奥方向、つまり、XYZの軸方向それぞれに「倍率」を設定することで実現できます。そして、拡大縮小マトリックスを作るための関数は、D3DXMatrixScaling()です。例えば、X軸方向に2倍、Y軸方向に0.5倍、Z軸方向に…

C++で問題を解く

#include <iostream> using namespace std; int main(void){ int x = 1; int y = 2; int& a = x; cout << "□ a = " << a << endl; cout << "□ x = " << x << endl; cout << "□ y = " << y << endl; a = 5; cout << "■ a = " << a << endl; cout << "■ x = " << x << en</iostream>…

基本的な座標変換を行うプログラム

モデルの移動 移動マトリックスを生成し、モデルに適用する方法を説明します。 今回のサンプルプログラムでは、まずD3DXMatrixIdentity()関数を使って何もしないマトリックスを生成した後、D3DXMatrixTranslation()関数を使って生成したマトリックスの成分を…

C言語でサウンドプログラミング

音データをコピーするプログラムです。 main.cpp #include <stdio.h> #include <stdlib.h> #include "wave.h" int main(void) { MONO_PCM pcm0, pcm1; int n; mono_wave_read(&pcm0, "a.wav"); /* WAVEファイルからモノラルの音データを入力する */ pcm1.fs = pcm0.fs; /* 標本</stdlib.h></stdio.h>…

C++で問題を解く

いよいよ長くなってきましたね。まだ行ける…かな。 #include <iostream> #include <cstdlib> #include <ctime> #include <cstring> using namespace std; const static int answer(const int& pattern, const int& a, const int& b, const int& c){ int ans; switch(pattern){ case 0 : ans = a </cstring></ctime></cstdlib></iostream>…

C++で問題を解く

久しぶりにクラスとか関数とかで分けたような気がします。今迄ダラダラと書く傾向にあったので。。。 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int random(int a, int b){ if(b < a) return a; else return rand() % (b - a) + a; } int main(vo</ctime></cstdlib></iostream>…

C++で問題を解く

#include <iostream> using namespace std; void hello(){ cout << "こんにちは。" << endl; } int main(void){ int count; cout << "挨拶の回数は:"; cin >> count; for(int i = 0; i < count; i++){ hello(); } return 0; } #include <iostream> using namespace std; void pri</iostream></iostream>…

C++で問題を解く

#include <iostream> using namespace std; double circ_area(double r){ return r * r * 3.14; } int main(void){ double x; cout << "半径: "; cin >> x; cout << "面積は" << circ_area(x) << "です。" << endl; return 0; } #include <iostream> using namespace std; int su</iostream></iostream>…

C++で問題を解く

#include <iomanip> #include <iostream> using namespace std; int main(void){ int a[3] = {1, 2, 3}; int b[2][3] = { {1,2,3}, {4,5,6}, }; int c[3][2] = { {0}, {2,3}, {4}, }; int d[3][2] = {0,1,2}; for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++){ cout << "a[" <</iostream></iomanip>…

C++で問題を解く

#include <iomanip> #include <iostream> using namespace std; int main(void){ int kokugo[6]; int suugaku[6]; int kokugo_sum = 0; int suugaku_sum = 0; cout << "6人の点数を入力せよ。" << endl; for(int i = 0; i < 6; i++){ cout << setw(2) << i + 1 << "番・・・国語</iostream></iomanip>…

C++で問題を解く

C++11の機能を使いかけましたが、なんとかC++のSTL止まりに抑えておきました。以下のようになります。3つあります。 #include <iostream> #include <cstdlib> #include <ctime> #include <cstring> using namespace std; int main(void){ const int n = 7; int a[n]; memset(a, 0, sizeof(a)); s</cstring></ctime></cstdlib></iostream>…

DirectX9 基本的な座標変換を行うプログラム

参考書から抜粋しています。DirectX9について以前投稿した記事の続きです。マトリックスをコードに落とし込んでいきます。 何もしないマトリックス まず、何もしないマトリックスを使って、各種のマトリックスを生成し、レンダリングパイプラインに適用する…

C++ 問題を解く

暇潰しにやっていた問題集ですが、他のプログラミング言語にも使えそうなので、やってみます。 #include <iostream> #include <ctime> #include <cstdlib> using namespace std; int main(void){ int a[6]; int t[6]; int i = 0; bool flag = false; srand(time(NULL)); memset(a, 0, s</cstdlib></ctime></iostream>…

慣習 C++で問題を解く

#include <cstdio> #include <iostream> using namespace std; int main(void){ int a[5]; for(int i = sizeof(a) / sizeof(a[0]),j = 0; i > 0; i--,j++){ a[i] = i; //printf("a[%d] = %d\n", j, a[i]); cout << "a[" << j << "] = " << a[i] << endl; } return 0; } #includ</iostream></cstdio>…

慣習 C++で問題を解く

#include <iostream> #include <iomanip> using namespace std; int main(void){ for(int i = 0; i <= 1000; i++){ float x = static_cast<float>(i) / 1000; cout << fixed << setprecision(3) << x << "\t" << setprecision(6) << x * x << endl; } return 0; } #include <iostream> using name</iostream></float></iomanip></iostream>…

慣習 C++で問題を解く

マングルされているコードをデマングルするようにコードを変更したものもあります。それに気をつければ後は簡単です。 #include <iomanip> #include <iostream> #include <typeinfo> #include <cxxabi.h> using namespace std; static char* demangle(const char *demangle){ int status; return abi</cxxabi.h></typeinfo></iostream></iomanip>…

複雑な処理を読んでみる i386編

以下のようなCソースファイルがあります。 int call_complex1() { return return_arg1(0xfe) + 1; } int call_complex2(int a, int b) { static_value = return_arg1(b); return b; } これはi386で逆アセンブルするとどうなるのでしょうか…というのが今回の…