C言語

ファイルの単純なコピー(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>…