読者です 読者をやめる 読者になる 読者になる

個人的自由ノート

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

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で逆アセンブルするとどうなるのでしょうか…というのが今回の…

DirectX マトリックスの表現

何もしないマトリックス まず、何もしないマトリックスを紹介します。次のような、左上から右下の対角成分だけが「1」となっているマトリックスを座標値に適用しても、座標値はまったく変更されません。 例えば、(2,5,4)という座標値にこのマトリックスを掛…

慣習 C++で問題を解く

#include <iomanip> #include <iostream> using namespace std; int main(void){ cout << boolalpha; cout << "-- 論理積 ----------------" << endl; cout << " x y x && y" << endl; cout << "-------------------------" << endl; cout << setw(7) << true << setw(7) << tru</iostream></iomanip>…

慣習 解きながら学ぶC++入門

今回はこんな感じです。 #include <iostream> #include <climits> using namespace std; int main(void){ for(int i = INT_MIN; ; i++){ cout << oct << i << ' ' << dec << i << ' ' << hex << i << endl; if(i == INT_MAX) break; } return 0; } #include <iostream> #include <climits> using na</climits></iostream></climits></iostream>…

慣習 C++で問題を解く

今回はこんな感じです。環境の調査みたいな感じですね。 #include <climits> #include <iostream> using namespace std; int main(void){ cout << "この処理系での文字列の特性" << endl; cout << "ビット数:" << CHAR_BIT << endl; cout << "char:" << CHAR_MIN << "~" << CHAR</iostream></climits>…

モデルの配置 (座標変換処理)

座標変換とマトリックス 3Dグラフィックスの世界では、モデルの配置やカメラの配置、パラメータなどを設定するために、「マトリックス」というものを利用します。マトリックスとは、数字を縦横に並べたもので、日本語で「行列」といったりもします。マトリッ…

慣習 C++で問題を解く

今回はこんな感じです。1問だけしか解いてません。しかし、問題形式上長いものとなりました。2通りのパターンを作成せよと書いてあったので2回プログラムを作成しています。 #include <iostream> #include <cstdlib> #include <ctime> #include <string> using namespace std; int main(void){ </string></ctime></cstdlib></iostream>…

慣習 C++で問題を解く

C++が手に馴染んできたかな。C言語を忘れそうです。今回はこんな感じです。 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main(void){ int r,n; const int input_max = 6; srand(time(NULL)); cout << "数当てゲーム開始!" << endl; cout << "0~</ctime></cstdlib></iostream>…

慣習 C++で問題を解く

今回はこんな感じです。ちょっと難しく作ったような気がしますね。次回からは簡単にするように心がけます。 #include <iostream> using namespace std; int main(void){ int n; cout << "何個加算しますか?" << endl; cin >> n; int *a = new int[n]; int sum = 0; in</iostream>…

慣習 C++で問題を解く

大学でやった内容が出てきました。ヒントが書かれているのでその分楽でしたが、久しぶりに満足感を感じる問題でした。 #include <iostream> using namespace std; int main(void){ int height,width; cout << "高さと幅を入力してください。" << endl; cin >> height ></iostream>…

慣習 C++で問題を解く

今回はちょっと苦戦しました。懐かしい感じの問題が出てきて少々考えこみました。それでもそれよりかは優しいわけですが、頭が衰えてるなぁ…。 #include <iostream> using namespace std; int main(void){ for(int i = 1; i < 10; i++){ for(int j = 1; j < 10; j++){ </iostream>…

慣習 C++で問題を解く

今回はこんな感じです。そろそろ難しくなってきたかな…。 #include <iostream> using namespace std; int main(void){ int n; cout << "整数値を入力してください。" << endl; cin >> n; for(int i = 1; i <= n; i++){ cout << i << "の2乗は" << i * i << endl; } ret</iostream>…

慣習 C++で問題を解く

こんな感じです。 #include <iostream> using namespace std; int main(void){ int n1,n2,per; cout << "何センチから何センチまで何センチごとかを入力してください。" << endl; cin >> n1 >> n2 >> per; cout << "身長 標準体重" << endl; cout << "-----------" << </iostream>…

慣習 C++で問題を解く

こんな感じです。 #include <iostream> using namespace std; int main(void){ int n,sum = 0; cout << "1からnまでの和を求めます。" << endl; cin >> n; for(int i = 1; i <= n; i++){ sum += i; } cout << "合計:" << sum << endl; return 0; } #include <iostream> using nam</iostream></iostream>…

慣習 C++で問題を解く

今回はこんな感じです。 #include <iostream> using namespace std; int main(void){ int n; cout << "整数値を入力してください。" << endl; cin >> n; if(n > 0){ for(int i = 0; i < n; i++){ cout << "*"; } cout << endl; } return 0; } #include <iostream> using namespac</iostream></iostream>…

習慣 C++で演習問題を解く。

今回はこんな感じです。 #include <iostream> using namespace std; int main(void){ int a,t; cout << "整数値を入力してください。" << endl; cin >> a; t = a; while(t > 0){ cout << "*"; t--; } if(a > 0){ cout << endl; } return 0; } #include <iostream> using namespac</iostream></iostream>…

「解きながら学ぶC++」 今回の成果

一日に解く問題数を少なめにしました。すぐ疲れるので。続くだろうか…。 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main(void){ int n; srand(time(NULL)); int answer = 10 + rand() % 90; while(true){ cout << "10~99の数を当ててください</ctime></cstdlib></iostream>…

「解きながら学ぶC++」 今回の成果

今回はこんな感じです。やっと本格的になってきました。それでもまだ簡単…。 #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main(void){ srand(time(NULL)); int n = rand() % 3; if(!n) cout << "グー" << endl; else if(n == 1) cout << "チョ</ctime></cstdlib></iostream>…