コンパクトに!

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ミヤマエ
記事: 1
登録日時: 5年前

コンパクトに!

#1

投稿記事 by ミヤマエ » 5年前

もっとコンパクトにしたいのですが、どのようにすればいいですか?



コード:

#include<stdio.h>

void sub0(int, int);//林檎の合計
void sub1(int, int);//全体の合計
void sub2(int, int);//蜜柑の合計
void sub3(int, int);//割引
void sub4(int);//お買い上げ
void sub5(int, int);//割り勘システム


int kan;//-お買い上げ
int zin;//-------------割り勘
int zen;//-------------割り勘
int wari;//-----割引
int goukei;//-------蜜柑
int soukei;//-----------林檎
int wa;//-------------------全体の金額


int main(void)
{
	int ringo;
	int mikan;
	int kazu;
	int kazu02;
	
	ringo = 100;
	mikan = 60;

	//入力
	printf("林檎は一つ、100円です。\n");
	printf("林檎はいくつ必要ですか → ");
	scanf("%d", &kazu);
	rewind(stdin);

	//入力
	printf("\n蜜柑は一つ、60円です。\n");
	printf("蜜柑はいくつ必要ですか → ");
	scanf("%d", &kazu02);
	rewind(stdin);
	

	//林檎の合計
	sub0(kazu, ringo);
	printf("\n林檎が%d個で%d円\n", kazu, soukei);

	//蜜柑の合計
	sub2(kazu02, mikan);
	printf("蜜柑は%d個で%d円\n", kazu02, goukei);

	//全体の金額
	sub1(soukei, goukei);
	printf("合計は%d円\n", wa);
	
	//一割引き
	sub3(soukei, goukei);
	
	//割り勘
	sub5(zen, zin);
	
	//買い上げ
	sub4(kan);
	
	
	rewind(stdin);
	getchar();

	return 0;
}

//林檎の合計金額
void sub0(int a, int b)
{
	soukei = a * b;
} 

//全体の金額
void sub1(int x, int y)
{
	wa = x + y;
}


//蜜柑の合計金額
void sub2(int i, int j)
{
	goukei = i * j;
}

//一割引き
void sub3(int t, int o)
{
	
	if (t + o > 2000)
	{
		wari = (t + o) *0.9;
		printf("\n2000円を超えたので一割引き致します。\n%d円は%d円となります。\n", wa,wari);
	}
	
}

//お買い上げ
void sub4(int kai)
{
	while (1)
	{
		printf("\n\nお買い上げでしょうか?はい:1、いいえ:0 - ");
		scanf("%d", &kai);

		if (kai == 0)
		{
			printf("\n\n喰らえっ、神殺しの剣!"); 
			break;
		}
		else if (kai == 1)
		{
			printf("\n\nお客様は神様です!!\n"); break;
		}

	}
	
}

//割り勘
void sub5(int mm,int x)
{
	printf("\n割り勘しましょう");

	printf("\n割り勘する人数 > ");
	scanf("%d", &x);

	if (wari > 1800)
	{
		printf("\n総額 %d円\n",wari);
		zen = wari / x;
		printf("\n1人辺り %d円\n", zen);
		zen = wari % x;
		if (zen > 0)
		{
			printf("\n残念なことに、%d円余りました。美喰色君が%d円払ってくれます。\n",zen, zen);
			printf("ありがとう!\n");
		}
	}
	else 
	{
		printf("\n総額 %d円\n", wa);
		zin = wa / x;
		printf("\n1人辺り %d円\n", zin);
		zin = wari % x;
		if (zin > 0)
		{
			printf("\n%d円余りました。繭銃木ちゃんが%d円払ってくれます\n", zin, zin);
		}
	}
	
		
}
(管理人がcodeタグを修正しました)

アバター
みけCAT
記事: 6311
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: コンパクトに!

#2

投稿記事 by みけCAT » 5年前

ミヤマエ さんが書きました:もっとコンパクトにしたいのですが、どのようにすればいいですか?
ショートコーディング攻略wiki
とりあえず、
  • rewindの呼び出しは全て削除する
  • main以外の関数の内容を全てmain関数内に展開し、main以外の関数の定義とプロトタイプ宣言を削除する
  • 変数名は全て1文字にする
  • コメントを全て削除する
  • 無駄な空白と改行を全て削除する
あたりが簡単だと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

turasan
記事: 21
登録日時: 6年前

Re: コンパクトに!

#3

投稿記事 by turasan » 5年前

とりあえず1箇所ですが、
下記2関数は同様の処理をしていますので、汎用的な1つの関数にするのはいかがでしょうか?

コード:

//林檎の合計金額
void sub0(int a, int b)
{
    soukei = a * b;
} 

コード:

//蜜柑の合計金額
void sub2(int i, int j)
{
    goukei = i * j;
}
その場合、soukeiとgoukeiをグローバル変数として宣言すると、
上記2関数を1関数にまとめることができないので、main内でローカル変数として宣言し、
returnで合計金額を受け取ればよいかと思います。

e.g.

コード:

void sum(int i, int j)
{
    return  i * j;
}

pg78445
記事: 10
登録日時: 7年前

Re: コンパクトに!

#4

投稿記事 by pg78445 » 5年前

似たような場所を関数化してみてはいかがでしょうか。

コード:

//商品の個数を設定する
// item_name: 商品名
// price: 値段
// 戻り値:個数
// 使用例 kazu = input_item_count("林檎", 100);
int input_item_count(const char* item_name, int price)
{
	int count;

	printf("%sは一つ、%d円です。\n", item_name, price);
	printf("%sはいくつ必要ですか → ", item_name);
	scanf("%d", &count);
	rewind(stdin);

	return count;
}
オフトピック
グローバル変数を使いたくなる気持ちは分かるのですが、プログラムが大きくなるとどの場所でグローバル変数を変えているのか分かりにくくなるので最低限で使うようにしましょう。

閉鎖

“C言語何でも質問掲示板” へ戻る