Let's write β

プログラミング中にできたことか、思ったこととか

C/C++

Floydのアルゴリズム

Dijkstraも書いたのですが、そちらはコードの量が多いので割愛。 FloydのアルゴリズムをCで実装 /* * map.h */ #ifndef _MAP_H_ #define _MAP_H_ #include <limits.h> #ifndef INF #define INF (INT_MAX / 2) #endif struct map { int size; int **data; }; struct map</limits.h>…

グラフデータ構造をCで

グラフのデータ構造をCで...面倒.. #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <stdbool.h> struct edge { int into; int weight; }; struct node { bool visitedp; int distance; struct graph *g; //Index in graph int id; struct edge **edges; }; struct edge* mk_ed</stdbool.h></stdarg.h></stdlib.h></stdio.h>…

ねじれヒープを利用した優先度付きキューをCで

グラフ上でダイクストラをするのをJavaで書くとすでに優先度付きキューが提供されているので多少楽はできるのですが、Cで書きたい場面もあるのです。 そこで、Cでも優先度付きキューをつかいたいです。優先度付きキューのインターフェイスを提供するなら 実…

ファイルを画像ファイル(BMP)にしたり戻したり

普通のファイルを画像にしたり、その画像からファイルに戻したりしたら面白いだろうなぁ と思っていたので、今BMPにするものを書いてみました。 #include <stdio.h> #include <stdlib.h> #include <math.h> #include "bmp.h" main(int argc, char** argv) { FILE *fp; fpos_t sz; int v,</math.h></stdlib.h></stdio.h>…

シェルをつくりたい。

シェルの作り方の基礎は大昔にやりましたが、でも今コードに落せるかといわれると ちょっと微妙です。そこで、ゆっくり復習しようとおもってます。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <dirent.h> #include <unistd.h> char* getPath(); char* searchFile(char *,</unistd.h></dirent.h></stdbool.h></string.h></stdlib.h></stdio.h>…

変数のスコープのコンパイル

#include <stdio.h> main() { volatile int x = 0, y = 1, z = 2; printf("0. x = %d, y = %d, z = %d\n", x, y, z); { volatile y = 2, z = 3; printf("1. x = %d, y = %d, z = %d\n", x, y, z); { volatile z = 4; printf("2. x = %d, y = %d, z = %d\n", x, y, z);</stdio.h>…

XTESTでマウスカーソルを動かしてみた。

XTESTではマウスカーソルを動かす事もできるので マウスカーソルを正多角形の頂点の形にうごかすというのをやってみました。 #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <math.h> #include <X11/Xlib.h> #include <X11/extensions/XTest.h> #define PI 3.141592 void usage(); void finish(int sig); double</x11/extensions/xtest.h></x11/xlib.h></math.h></signal.h></stdlib.h></stdio.h>…

XTESTを利用してオートクリッカー

Synergyのソースコードを久々に読みなおして各OSでクリック動作など各動作を疑似再現する 方法を確認しなおしていたのでちょっと練習にとオートクリッカーをつくってみました。 #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include <X11/Xlib.h> #include <X11/extensions/XTest.h> void usage(); </x11/extensions/xtest.h></x11/xlib.h></unistd.h></signal.h></stdlib.h></stdio.h>…

GCCのコンパイル力を知った

GCCでswitchを使ってると、明確に確定値の場合はswitchが自動的に必要最小限の 演算に展開さていることを知った。 まずは子のCのコード #include <stdio.h> main() { switch('a') { case 'a': printf("hoge"); case 'b': printf("fuge"); } } みてのとおりswitch整数</stdio.h>…

Cの引き数のスタックへのつまれる順を利用して訳がわからない事を

スタックに積まれる時は後ろの引き数から順番に評価するという事で #include <stdio.h> void showargs(int x, int y) { printf("X: %d, Y: %d\n", x, y); } int main() { int x = 0; showargs((printf("case1 x: %d\n", x), x = 1, x), x); x = 0; showargs((printf("</stdio.h>…

OpenCVで顔のパーツの位置の取得

とりあえず雑にやってみました。 #include <opencv/cv.h> #include <opencv/highgui.h> void detectObj(const char *cascade_name, IplImage *img, IplImage *gImg, CvMemStorage *storage, int maxcount) { CvHaarClassifierCascade *cascade = 0; CvSeq *seq; int i; static CvScalar colo</opencv/highgui.h></opencv/cv.h>…

ICPC2009ProblemB

How Many Island? #include <stdio.h> int filledp(int map[][50],int w, int h) { int i,j; int filledp = 1; for(i = 0; i < h; i++) { for(j = 0; j < w; j++) { if(map[i][j] == 1) { filledp = 0; } } } return filledp; } void mark(int map[][50], int x, int </stdio.h>…

ICPC2006ProblemA

Mysterious Game 破壊的に更新する事になるので、Cでも良いかと。 #include <stdio.h> int main() { int m,n; int map[21][21]; int rbX, rbY; while(1) { scanf("%d",&n); if(n == 0) break; int i; int x,y; //initialize map for(y = 0; y < 21; y++) { for(x = 0;</stdio.h>…

For文の再初期化式とアセンブラ

for文の再初期化式の中に複数の文は書けるので、Hello,worldを数回出すプログラムは2通りの記述方法があるのですが: #include <stdio.h> main () { int i; for(i = 0; i < 3; i++){ printf("Hello,world\n"); } } という書きかたと #include <stdio.h> main() { int i; for(i</stdio.h></stdio.h>…

WORD DICTIONARYテスト

とりあえずForth風のWORDディクショナリのテストをする為に適当に習作プログラムを記述してます。 // main.c #include <stdio.h> #include <stdlib.h> #include "word.h" void print(void); int main(int argc, char** argv) { struct word* res; addfword("test1",NULL); addcw</stdlib.h></stdio.h>…

任意の長さの文字列を取るCの関数

意外と任意の長さの文字列を取りたい場面って有りますよね。 ネットに意外と情報がないので全然綺麗じゃないですがちょっと書いてみました。 #include <stdio.h> #include <stdlib.h> char* readLine(); char* prompt(char *s); int main(int argc, char **argv) { char *line; </stdlib.h></stdio.h>…