落書きノート

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

C/C++

プログラミング言語の本まとめ

追記 学習する順番を並び替えました。また手を加えるかもしれませんけど。試行錯誤ですね。 なんとなく気になったのでまとめておきますね。ここに載せているのは一例ですので、この通りにすれば誰でも出来るというわけでは無いと思いますが、個人的にはこれ…

C言語でデータ構造とアルゴリズム

線形探索法をやる前にひっかかっていた部分があったので、そこだけやってみました。2進数等の基数変換についてのプログラムです。例題と演習問題のプログラムです。 /* 整数を2進数〜36進数に基数変換 */ #include <stdio.h> int card_convr(unsigned x, int n, char </stdio.h>…

C言語でデータ構造とアルゴリズム

最初から少し飛ばして線形探索法からやってます。この本、そこまで難しくはないですね。(後から難しくなりそうだけど・・・。) /* 線形探索 */ #include <stdio.h> #include <stdlib.h> int search(const int a[], int n, int key) { int i = 0; while(1) { if(i == n) return</stdlib.h></stdio.h>…

C++で問題を解く

#include <iostream> using namespace std; class q14_1 { int v; public: q14_1(int val) : v(val) { cout << "値が" << v << "のメンバを生成。" << endl; } ~q14_1() { cout << "値が" << v << "のメンバを破棄。" << endl; } }; class q14_1_2 { q14_1 a, b, c; pu</iostream>…

C++で問題を解く

てっきり後2問で終わりだと思っていたのですが、まだ後5問ぐらい残ってましたね・・・。甘く見てました・・・。 #ifndef q13_1 #define q13_1 class Id { private: static int counter; int no; mutable int called; static int called_total; public: Id();…

C++で問題を解く

今回は問題の形式上、全部写経しました。後2問で全部終わりです。 #ifndef __Class_Time #define __Class_Time #include <string> #include <iostream> class Time { int h; int m; int s; public: Time(); Time(const int& hh, const int& mm = 0, const int& ss = 0); const </iostream></string>…

C++で問題を解く

#include <iostream> using namespace std; class Test { public: Test() { cout << "初期化 : Test()" << endl; } Test(const Test& t){ cout << "初期化 : Test(const Test&)" << endl; } Test& operator=(const Test& t){ cout << "代入 : Test = Test" << endl; re</iostream>…

C++で問題を解く

#ifndef CLASS_BOOLEAN #define CLASS_BOOLEAN class Boolean { public: enum boolean {False, True}; private: boolean v; public: Boolean() : v(False) {} Boolean(const int& n) : v(n == 0 ? False : True) {} operator int() const { return v; } oper…

C++で問題を解く

JDKやMinGWを使って思ったことは、PowerShellでコンパイルするとき、日本語が文字化けしてしまうことです。コンパイルのオプション指定すれば回避できますが、面倒なので違うターミナルに引っ越そうかなぁと考えてます。使ってるエディタにも原因はあります…

C++で問題を解く

クラスの問題なので、コード量が多い以外は、そんなに難しくないです。ツェラーの公式ぐらいでしょうか。難しいのは。 #ifndef INCLUDED_DATE #define INCLUDED_DATE #include <string> #include <iostream> class Date { int y; int m; int d; public: Date(); Date(int yy, i</iostream></string>…

C++で問題を解く

#include <iostream> #include <sstream> #include <ctime> #include <string> class Date { int year; int month; int day; public: Date(); Date(const int& y, const int& m, const int& d); int getYear() const { return this->year; } int getMonth() const { return this->month; } int </string></ctime></sstream></iostream>…

C++で問題を解く

今回は1問だけです。 #include <string> #include <sstream> #include <iomanip> #include <iostream> class Time { int h; int m; int s; public: Time(); Time(const int& h, const int& m = 0, const int& s = 0); int getHour() const { return this->h; } int getMinute() const { return th</iostream></iomanip></sstream></string>…

C++で問題を解く

Bash on Windowsでやってみたのですが、少々バグがあるものの現時点でも結構使えます。AtomエディタでコーディングしてBash on Windowsのg++コンパイラでやってみました。/mntにCドライブがマウントされていたので、これを利用しました。ホームディレクトリ…

C++で問題を解く

問題集もそろそろ終わりに近づいてきました。次はデータ構造とアルゴリズムについてやっていこうかなと思ってます。やっと本格的な話題だ…。 #include <iostream> #include <cmath> #include <string> class Car{ std::string name; std::string number; int width; int length; int h</string></cmath></iostream>…

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()関数を使って生成したマトリックスの成分を…