Angular, Blockchain, Science とか

Angular, Blockchain, Science全般 の情報を主に書いていきます。

C/C++

Bitcoin Base58Checksum について

Mastering Bitcoin の Base58Checksum のコードにわかりやすくコメントを付けました。 #include <bitcoin/bitcoin.hpp> int main() { // Private secret key. bc::ec_secret secret; bool success = bc::decode_base16(secret, "038109007313a5807b2eccc082c8c3fbb988a973cacf1a7d</bitcoin/bitcoin.hpp>…

C 最小値の探索

ただの最小値の探索です。 #include <stdio.h> #define maxnumber 10 int minimum(int user_array[]); main() { int number[maxnumber]; int index; printf("Give me nine numbers and I\'ll print them backwards \n"); for(index=0; index</stdio.h>

配列の並べ替え

ただの並べ替えです。 reverse です。 #include <stdio.h> #define maxnumber 10 void run_backwards(int user_array[]); main() { int number[maxnumber]; int index; printf("Give me nine numbers and I\'ll print them backwards \n"); for(index=0; index</stdio.h>

C++を真面目に勉強してPythonの簡単さに気づいた話

最近、ずっとC++の勉強していまして、二か月ぶりくらいにPythonに戻ってきてやっとPythonの簡単さに気づきました。やっぱりPythonやRubyしか実務で使わない人も、一回 C++ をちゃんと勉強すべきですね。まあもっとも僕の場合は, C++ と Go が実務(?)で使うも…

C 多次元配列とポインタ

Cでの多次元配列についてみていきます。まず初期化とアクセス #include <stdio.h> #include <stdlib.h> int main() { int matrix[2][5] = {{1,2,3,4,5}, {6,7,8,9,10}}; for(int i=0; i<2; ++i){ for(int j = 0; j<5; ++j){ printf("matrix[%d][%d] アドレス: %p 値: %d\n", i,</stdlib.h></stdio.h>…

ユークリッド 再帰

ユークリッドはこういう形の再帰が一番好きです。わかりやすいですし。 int gcd(int e, int l) { return (e==0)? l : gcd( l%e, e); } 早いかどうかは分かりません。

C++ 静的なメンバ変数とメンバ関数

C++の静的な(static)メンバ変数とメンバ関数に関するまとめ。グローバル変数でも表現できますが、まあどうせなら必要なものはクラスの中に入れておいた方がわかりやすいと思われます。 class sample{ private: static int count; ....色々 }; // このように…

Bitcoin CAmount について

ソースコードを読んでいて、CAmount ってなんだったっけ? てよくなるので、メモamount.h #ifndef BITCOIN_AMOUNT_H #define BITCOIN_AMOUNT_H #include <stdint.h> /** Amount in satoshis (Can be negative) */ typedef int64_t CAmount; // 1BTC = 100000000satoshi</stdint.h>…

C++ List (STL) まとめ

C++の標準テンプレートライブラリのListをまとめてみます。begin() 要素の先頭を返す。 end() 要素の最後を返す。 push_front() 要素を先頭に追加する。 push_back() 要素を最後に追加する。 pop_front() 要素の先頭を削除。 pop_back() 要素の最後を削除。 …

C++ キャスト演算子

C++のキャスト演算子の簡単なサンプル #include <iostream> using namespace std; int main() { char ch = -1; int i1, i2; double d1 = 123.456, d2; i1 = ch; i2 = static_cast<unsigned char>(ch); d2 = static_cast<int>(d1); cout << i1 << ' ' << i2 << ' ' << d2 << endl; return 0;</int></unsigned></iostream>…

C++ Reverse アルゴリズム

C++のクラス機能をある程度抑えたので、STLの勉強を始めました。とりあえず、string と assert #include <iostream> #include <string> #include <cassert> // assertを使う #include <algorithm> using namespace std; int main() { cout << "Reverse algorithm" << endl; string str = "reverse a</algorithm></cassert></string></iostream>…

C++ STLの技術書まとめ

C++の基本的な機能をある程度おさえたので、STL、標準テンプレートライブラリ、の勉強も本格的に始めました。とりあえず、2冊手に入れて、勉強しております。STL―標準テンプレートライブラリによるC++プログラミング 第2版作者: ディビッド・R.マッサー,アト…

C++ 計算機のサンプル

ただの計算機。 #include <iostream> #include <sstream> #include <string> using namespace std; class Calculator{ public: void Run(); private: bool Input(); bool Calculate(); void ShowResult() const; int m_a, m_b; char m_op; int m_result; }; void Calculator::Run(){ whi</string></sstream></iostream>…

C++ テンプレート

C++ のテンプレートの基礎。template として T のところに、 int, double, string などなどいろいろな型として使えます。 #include <iostream> #include <string> using namespace std; template <typename T> void FillArray(T* array, size_t size, T value) { for(size_t i = 0; i < siz</typename></string></iostream>…

ビットコイン マイニング報酬のソースコードリーディング

ビットコインのマイニング報酬のコードを見ていきます。マイニング報酬は、トランザクション手数料の総額 + coinbase報酬coinbase報酬(BlockSubsidy)は50bitcoinから始まって、210000ブロックごとに半減していきます。以下のコードでcoinbase報酬を出します…

C++ virtual関数とポリモーフィズム 2

ただのサンプルb #include <iostream> using namespace std; class figure{ protected: double x, y; public: void set_dim(double i, double j){x=i;y=j;} virtual void show_area(){ cout << "No area computation defined "; cout << "for this class " << endl; }</iostream>…

C++ virtual関数とポリモーフィズム

仮想関数を使った非常に簡単な、ポリモーフィズム。 #include <iostream> using namespace std; class base{ public: virtual void who(){cout << "Base"<< endl;} }; class first : public base{ public: void who(){cout << "first"<</iostream>

仮想基本クラス C++

C++での仮想クラス。virtual継承です。 #include <iostream> using namespace std; class base { public: int i; }; // virtualにしないとコンパイルエラーになる class derived1 :virtual public base{ public: int j; }; class derived2 : virtual public base { pub</iostream>…

C++ フレンド関数の基礎

フレンド関数を使えば、privateメンバにアクセスすることができます。 #include <iostream> using namespace std; class myclass{ int a, b; public: myclass(int i, int j){a=i;b=j;} friend int sum(myclass v); }; int sum(myclass x) // myclass::sum とはしない {</iostream>…

C++ で簡単なキュー

ただのキューです。 #include <iostream> using namespace std; class queue{ private: int q[100]; int sloc, rloc; public: void init(); void enqueue(int i); int dequeue(); }; void queue::init() { rloc = sloc = 0; } void queue::enqueue(int i) { if(sloc==1</iostream>…

リストとサーチ C言語

リストはこういう書き方のほうがわかりやすいですね。 #include <stdio.h> #include <stdlib.h> typedef struct tagListNode { struct tagListNode *prev; struct tagListNode *next; int data; }ListNode; int main(void) { int buf; ListNode *firstnode, *lastnode, *newnode</stdlib.h></stdio.h>…

二分探索木

アルゴリズムの復習です。ただの二分探索木です。数字が大きければ右、小さければ左です。 struct node{ int Key; char info[10]; struct node *left, *right; }; struct node *root=NULL; struct node *bint_search(int target, struct node *p) { if(p==NU…

ポインタを使ったスタック C言語

ポインタを使ったスタックです。まあごく普通のスタックです。 struct cell{ char data[10]; struct cell *next; }; struct cell *stack=NULL; void push(struct cell *p) { p->next=stack; stack=p; } struct cell *pop(void) { struct cell *p; if(stack==…

キュー

普通のキューをCで書きました。基礎は大事です。ポインタの使い方にはなれましょう。 struct student { int num; char name[20]; struct student *next; }; struct student *root=NULL; //最後尾がNULL void enqueue(struct student *r) //追加する { struct…

再帰の非常に簡単な例

再帰で階乗計算です。ここでは10の階乗を求めています。階乗は、n*(n-1)*(n-2)*(n-3)・・・*(1) のあれです。 #include <iostream> using namespace std; int factorial(int n){ if (n==1) { return 1; } return n * factorial(n-1); } int main() { int data; data=</iostream>…

ソートの基礎 C言語

アルゴリズムとデータ構造の復習で、Cでちょこちょこ書いてます。ただ書いてるだけです。 #define swap(x, y){int tmp; tmp=x; x=y; y=tmp;} // シンプルなソート void simple_sort(int a[], int n) { int i, j, tmp; for(i=0; j<n; ++i){ for(j=i+1; j<n; ++j){ if(a[i]>a[j]){ swap(a[i], a[j]; } }</n;>…

線形探索 C言語 アルゴリズム

アルゴリズムをちまちま復習してます。ただの線形探索です。 #include <stdio.h> #define MAX 10 struct student { int num; char name[10]; }; struct student St[MAX]={{2, "Takagi"}, {6,"Takahasi"}, {32, "Hori"}, {10, "Azuma"}, {5, "Sasaki"}}; int Num=5; vo</stdio.h>…

C++ スタック

まあ普通にC++でスタックを書いてみただけ。基礎は重要です。 #include <iostream> #define STACK_MAX 10 double stack[STACK_MAX]; int stack_top = 0; void stack_push(double val) { if(stack_top == STACK_MAX){ // スタックが満杯 cout << "error \n"; exit(1); }</iostream>…

C++のオススメ書籍まとめ 入門から中・上級者まで

結局 C/C++ ができなくてはいけないのである。あとPython,Lisp,Haskellぐらいはやるべきでしょう。ということで一部で難しいと言われている(?)C++の技術書をまとめてみます。まずCの基本だけ抑えておいたほうがいいと思います。Cの絵本 第2版 C言語が好きに…

g++ で C++11, 14, 17 を利用する方法。

なんかオプションが必要みたいです。 なおここで述べるのは gcc g++ の2つですC++11の機能を有効にする GCC 4.3から4.6までは、-std=c++0xオプションを使用する。 GNU拡張を有効にする-std=gnu++0xオプションもある。 GCC 4.7以降は、-std=c++11オプション…

ストラウストラップC++ TRY THIS 4 コンピュテーション 4.5 関数

try this です。square関数を乗算演算子を使わずに実装ということで。多分あってます。 #include "std_lib_facilities.h" using namespace std; int square(int x){ int result = 0; for(int i = 0; i < x; ++i){ resulat += x; } return result; } int main…

ストラウストラップC++ TRY THIS 4 コンピュテーション 4.4 文

ストラウストラップの C++によるプログラミングの原則と実践 の練習問題を気まぐれで説いて今後載せていこうと思います。とりあえず、第4章コンピュテーション の while と for のところ。 #include "std_lib_facilities.h" using namespace std; int ma…

C++ ubuntu 環境構築 

C++ですが、Windowsでの環境構築がなぜかうまく行かない。なぜかできないし、なぜ出来ないかもわからないので、とりあえずC++はUbuntuマシンでやることにしました。まず、g++がインストールされているか調べます。 $ which g++これで user/bin/g++ と出てく…

C++ コンストラクタのオーバーロード

C++でのコンストラクタのオーバーロードに基本について簡単に書きます。C++もこの辺は簡単ですね。コンストラクタはクラス名を関数名として使いますのでそこだけ気を付ければOK #include <iostream> using namespace std; class Car{ private: int num; int weight; pu</iostream>…

C++ コンストラクタ 基本

C++のコンストラクタの基本 クラス名::クラス名() { ・・・ } まあ別にC++もここら辺は全然難しくないのでね。 #include <iostream> using namespace std; class Car{ private: int num; int weight ; public: Car(); void show(); }; Car::Car() { num = 0; weight = </iostream>…

C/C++ バブルソート

バブルソートがどういうアルゴリズムなのかは、アルゴリズム図鑑というアプリを見るのが一番わかりやすいと思います。 #include <stdio.h> #include <stdlib.h> #include <time.h> #define N 10 /* データの件数 */ int test[N]; void BubbleSort(void){ int i, x, end; do { flag = 0; </time.h></stdlib.h></stdio.h>…