C言語

選択ソート(C言語、Go言語)

選択ソートは決められた範囲の中から最小値(もしくは最大値)を選んでいくという、わかりやすいソートです。C言語版。 selection_sort.c #include <stdio.h> void selection_sort(int ar[], int len) { int i, j, min, tmp; for (i = 0; i < len - 1; i++) { min = i</stdio.h>…

ヒープソート(C言語、Go言語)

(追記)ヒープを作るのに、何だかふつうとはちがう(オリジナルの?)アルゴリズムを採用してしまったようですね。これでもちゃんと動作しますが、ふつうの方法よりも多少効率が悪いようです。最後にふつうの実装も載せます。 ヒープソートですが、まず「(…

バブルソート(C言語、Go言語)

バブルソートはわかりやすいソートです。隣どうしを比較して、前の方が値が大きければ値を交換します。それを繰り返し行うことでソートします。ただ、わかりやすく実装も簡単ですが、効率はよくありません。ソートのアルゴリズムとしてはまず使わないのでは…

『Cプログラミング診断室』を読んだ

改訂新版 Cプログラミング診断室作者: 藤原博文出版社/メーカー: 技術評論社発売日: 2003/07/12メディア: 単行本(ソフトカバー)購入: 6人 クリック: 219回この商品を含むブログ (59件) を見るたまたま BOOK OFF にあったので買って読んでみました。かなり…

クイックソート(C言語、Go言語)

クイックソートを C言語と Go言語で実装してみました。クイックソートは、配列の中からひとつ任意にサンプルを取ってきます。これを「ピボット」といいます。あとは、配列からピボットを除いたものを、その値がピボットより大きいか小さいかで二つの配列に分…

マージソート(C言語、Go言語)

マージソートを C と Go で実装してみました。このソートは二つの配列をマージ(統合)する作業がキモです。それぞれソートされた二つの配列を、統合してひとつのソートされた配列を作るわけですね。これができればあとは簡単です。C言語。 merge_sort.c #in…

挿入ソート(C言語、Go言語)

C言語で挿入ソートです。挿入ソートは遅いけれどわかりやすい。カードで考えると、(ソート済の)並んだカードの正しい位置に、残ったカードをそれぞれ一枚ずつ挿入していく(なのでそれもソート済になっている)というやり方で全体をソートします。 inserti…

Ruby FFI でエラトステネスの篩

これまで Ruby と C言語で「エラトステネスの篩」を書いたので、Ruby FFI で融合させてみました。Ruby FFI で簡単に Ruby から C言語の関数を呼ぶことができます。Linux Mint 18.2, Ruby 2.3.3 で確認しました。Ruby FFI を使うには libffi が必要ですが、Li…

ファイルの単純なコピー(C言語)

C言語の stdio(標準入出力ライブラリ)のお勉強をしたので、ファイルのコピーをする関数 my_copy() を書いてみました。Linux Mint 18.2 + gcc で確認しました。mycopy.c #include <stdio.h> #include <stdlib.h> #include <sys/stat.h> int main(){ my_copy("mycopy.c", "another_mycopy.c"</sys/stat.h></stdlib.h></stdio.h>…

『Cプログラミング診断室』について

Cプログラミング診断室 おもしろいサイトを見つけました。C言語のヒドいコード(いわゆるクソコード^^;)を眺めて、リファクタリングしようというものです。僕などのように、独学で誰もまわりにプログラミングを知っている人のいない孤独なアマチュア・プロ…

「既約分数クイズ」を解く(Ruby, C言語)

ここのところで結城先生の「既約分数クイズ」のことを知りました。結城先生らしい「お話」仕立てですので、是非参照して頂きたいですが、簡単にいうと 問題:正の整数Nが与えられているとき、 以下の条件を満たす既約分数p/qを「すべて」求めるアルゴリズム…

C言語でじゃんけんゲーム

以前 C# や Ruby で OOP を使ったじゃんけんゲームを作ってみましたが、同等の機能をもったそれを C言語のお勉強として作ってみました。C言語だから手続き型プログラミングということになりますが、C 初心者のためひどいコードでしょう。なるたけ改良してみ…

Ruby の C拡張で約数を求めるメソッドを書いた

なぜか Ruby 本体には、約数を求めるメソッドがないようですので、C拡張で作ってみました。以前書いた Utilsc への機能追加です。コードは必要な部分だけ載せます。全体のコードはここ です。 #include "utilsc.h" #include "math.h" VALUE divisors(VALUE s…

Linux Mint で C をコンパイルする

まず gcc が入っていなければ、 $ sudo apt-get install build-essentialで入れておく。eratosthenes.c をコンパイルしたかったら、まず cd でファイルのあるディレクトリに移り、 $ gcc eratosthenes.cでコンパイルされる。コンパイルに成功すると常に a.ou…

「なかなか収束しない級数の数値計算例」を自分もやってみた

id:Hyperion64 さんのブログの、 なかなか収束しない級数の数値計算例 - 完全無欠で荒唐無稽な夢 の記事が興味深かったので、ちょっと Ruby でやってみた。級数 の極限を求めようというのである。こういうコードでやってみた。Ruby は、任意の精度で 10 進表…

C言語の構造体を Ruby で表現してみる

C言語のいわゆる「K&R」本を読んでいたら、構造体というのはオブジェクト指向によく似ていると思った。ので、この本の第六章のスクリプト(p.155-159)を、Ruby で表現してみる。少なくともここでは、C言語の構造体が完全に Ruby の OOP に移植できている。 …

C言語のポインタ解析(Ruby)

いわゆる「K&R」本 p.148-152 のポインタ解析スクリプトを、Ruby に移植してみました。ポインタを使っているのを Ruby で書くのが留意点です。まったく Ruby らしくないので、Ruby らしく書き直すのが課題でしょう。例えばコマンドライン引数に「char(*(*x[3…

クイックソート(Ruby)

いわゆる「K&R」本(『プログラミング言語C 第2版 ANSI規格準拠』p.106)に載っている配列のクイックソートを、Ruby に移植してみました。メソッド(C言語では関数)の再帰呼び出しの例として使われています。コードは殆ど本そのままですが、C言語よりは読み…

C言語の関数の引数が配列であるときの不思議

C言語で、関数の引数に配列が入っている場合。例えば Ruby で stg = "Hello, World!" puts stg と書くのを、C言語では #include <stdio.h> #include <string.h> int main(void) { char stg[20]; strcpy(stg, "Hello, World!\n"); printf("%s", stg); return 0; } となるのか(追</string.h></stdio.h>…

エラトステネスの篩(C言語)

C言語でもやってみました(Ruby版)。 ※注意 この実装はまだ未熟なので、下の modify された実装を見て下さい。(2017/7/4) #include <stdio.h> int a[100000001] = {0}; void set_f(int i, int max) { int j; for ( j = 2; j <= (max / i); j++ ) a[i * j] = 2; ret</stdio.h>…