基数変換とgomiarashi.c

久々にプログラミング関連のことを。
こないだ出た課題で、「基数変換をせよ」というのがあってそれの組んでみた感じがこれ。

基数変換

#include<stdio.h>
#include<string.h>
#include<math.h>

int decimal( int base , char *num )
{
	int length = strlen( num );
	int trans = 0;
	int i;
	int tmp = 0;
	
	for( i = 0; i < length; i++ )
	{
		if( 'a' <= num[ length - ( i + 1 ) ] && num[ length - ( i + 1 ) ] <= 'z' )
		{
			tmp = 10 + ( num[ length - ( i + 1 ) ] - 'a' );
		}
		
		else if( 'A' <= num[ length - ( i + 1 ) ] && num[ length - ( i + 1 ) ] <= 'Z' )
		{
			tmp = 10 + ( num[ length - ( i + 1 ) ] - 'A' );
		}
		
		else if( '0' <= num[ length - ( i + 1 ) ] && num[ length - ( i + 1 ) ] <= '9' )
		{
			tmp = ( num[ length - ( i + 1 ) ] - '0' );
		}
		
		trans +=  tmp * (int)pow( base , i );
		tmp = 0;
	}
	
	return trans;
}


void conv( int base , int dec , char *result )
{
	char num[100] = { '\0' };
	int tmp;
	int i;
	int length;
	
	for( i = 0; dec > 0; i++ )
	{
		tmp = dec % base;
		
		if( 9 < tmp )
		{
			num[i] = 'A' + ( tmp - 10 );
		}
		
		else if( tmp < 10 )
		{
			num[i] = '0' + tmp;
		}
		
		dec = dec / base;
		
	}
	
	num[i] = dec % base;
	
	
	length = strlen( num );
	
	for( i = 0; i < length; i++ )
	{
		result[i] = num[ length - ( i + 1 ) ];
	}
	
}


int main( void )
{
	int x;
	int befor;
	int after;
	char num[100];
	char result[100] = { '\0' };
	
	printf("2進数、8進数、10進数、16進数の相互変換を行います\n");
	printf("入力する数の基数:");
	scanf("%d" , &befor );
	
	printf("変換対象の数値を入力:");
	scanf("%s" , num );
	
	x = decimal( befor , num );
	
	printf("出力する数の基数:");
	scanf("%d" , &after );
	
	conv( after , x , result );
	
	printf("%d進数に変換すると\n" , after );
	printf("%s\n" , result );
	
	return 0;
}

コメントが全くありません。悪い例。
要は、入力された数を10進数に変換して、それをさらになんちゃら進数に直すという動作。入力は英大文字小文字問わず16進数以上も大丈夫。出力は16進数まで。
コメントが欲しかったら言ってください。死ぬまでには書きます。

おまけ

nikuzuki氏の書いたgomiarashi.cを本人の許可を得て掲載します。

#include<stdio.h>

int main(){
	int x;
	int i;
	do{
		printf("1:グー 2:チョキ 3:パー\n");
		do{
			scanf("%d",&x);
		}while(x<1 && x>3);
		if(x==1)printf("私はパーを出しましたwww\n");
		else if(x==2)("私はグーを出しましたwww\n");
		else printf("私はチョキを出しましたwww\n");
		
		
		for(x=0;x<=100;++x)printf("アナタのぉ・・・・・負けでーーーーすWWWWWWWWういーーーーWWWWWWW(^_^;)");
		for(i=0; ;i++){
			printf("☆彡☆彡☆彡☆彡");
		}
	}while(1);
	return 0;
}

車校に入校してきた

(最近の)車校は家まで迎えに来てくれるのね……(入校日だけです)
さて助手席に乗り込むと、後部座席に知らない二人。会話もなく超気まずい空間。しかたないか。

車高に着いて視力検査や適性検査。適性検査はなんか……アレだよね。
あと、講師の話を聞くと、さっきの二人高専生だった。知るかよ……科が違ったらもう他校でいいよ……

それからAT車に乗ってはらはらあんどぐったりした直後にMT車に乗って殺された。半クラッチ半クラッチ

覚えたこと

  • 車校では車の周りを確認して、ミラーに蜘蛛の巣が張ってないか、オイル漏れやガソリン漏れがないか、異物はないかなどを確認するけど身の回りの大人は……電話が鳴ってる
  • AT車はアクセルを踏むと加速し、ブレーキを踏むと減速する
  • MT車はまず車内に乗り込んだあとにミラー、シート、ハンドルの位置を調節し、ハンドブレーキがかかっていることを確認。この時シフトレバーはRに入っていること。シートベルトを締め、クラッチペダルを目一杯踏み込みエンジンを掛ける。そしたらアクセルをほんの少しずつ踏み込んでいく。このときアクセルは足首の力だけで踏み込むこと。低めの唸りが聞こえたらクラッチペダルをそろそろとゆるめ、動き出したところでキープ(半クラッチ)し、ある程度走り出したらクラッチペダルから左足を離しフットレストへ。そのまましばらく走ったら今度はアクセルペダルから足を離し、少し減速したあとクラッチペダルを踏み込んでギアをセカンドに入れる。セカンドに入れたらクラッチペダルをゆっくりと緩める。またギアを低いものに入れ替えるときは、クラッチペダルを半クラッチの時と同じようにゆっくりと戻す。車両停止時には、まずブレーキを少し掛け、その後クラッチペダルを踏み込む。あとは慣性で走っていくので、ブレーキをゆっくり、ゆっくりと効かせていく。駐車するときにはハンドブレーキをかけて、ギアをRに入れてエンジンを切る。

借りてきた本

読んだ

数学ガール/フェルマーの最終定理 (数学ガールシリーズ 2)

数学ガール/フェルマーの最終定理 (数学ガールシリーズ 2)

読んでる

数学ガール/ゲーデルの不完全性定理 (数学ガールシリーズ 3)

数学ガール/ゲーデルの不完全性定理 (数学ガールシリーズ 3)

まだ読んでない

数学ガール/乱択アルゴリズム (数学ガールシリーズ 4)

数学ガール/乱択アルゴリズム (数学ガールシリーズ 4)

オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―

オブジェクト指向でなぜつくるのか―知っておきたいプログラミング、UML、設計の基礎知識―



お父さんにタッチタイピングできないことで煽られた

反原発団体に話しかけられた

雨の中濡れ鼠になりながら買い物に行ったら帰りの自転車置き場で反原発団体に話しかけられた。
正直早く帰して欲しい気持ちでいっぱいだったし適当に話終わらせて帰ろうとしたら……くそ……話が終わらん……!!

新聞的なパンフレットもらって帰った。顕正会だとさ。


ひとつ思うのが、原発賛成派がこんな感じでビラ配ったりしないのはなぜなのでしょうね?

というかそろそろ日記化してきたな。