関数の作成ができません

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
m1631

関数の作成ができません

#1

投稿記事 by m1631 » 1週間前

Nを表示するプログラムをどう記述していいかさっぱりです。
数式はどういう風にりようするべきでしょうか。

コード: 全て選択

#include <stdio.h>
int hantei(int x,int y){
//ここに*とスペースの判定プログラムを記述
}
int main(){
int i,j;
//メインプログラムを記述
return 0;
}

コード: 全て選択

y/x 012345678901234
0   * * *                * * *
1   * * * *              * * *
2   * * * * *            * * *
3   * * * * * *          * * *
4   * * *  * * *         * * *
5   * * *   * * *        * * *
6   * * *    * * *       * * *
7   * * *      * * *     * * *
8   * * *        * * *   * * *
9   * * *          * * * * * *
10  * * *             * * * * *
11  * * *               * * * *
12  * * *                 * * *    y=x-2
      X =2             X =12    y=x
  

かずま

Re: 関数の作成ができません

#2

投稿記事 by かずま » 1週間前

m1631 さんが書きました:
1週間前

コード: 全て選択

12  * * *                 * * *    y=x-2
      X =2             X =12    y=x
これは何ですか?
わけが分かりません。

N の斜めの線の傾きが、折れ線になっていて、
こんな複雑なものは書くのが難しいと思います。

ということで、もっと単純な結果を出すものを、
わけの分からない数式を利用する形で書いてみました。

コード: 全て選択

#include <stdio.h>

int hantei(int x, int y)
{
	return (x-x/2*2)*(5/x+x/23+(x+1)/(y*2)*((y*2+4)/x));
}

int main(void)
{
	int i, j;
	for (i = 1; i <= 12; i++, putchar('\n'))
		for (j = 1; j < 28; j++)
			putchar(hantei(j, i) ? '*' : ' ');
	return 0;
}
実行結果

コード: 全て選択

* * *                 * * *
* * * *               * * *
* * * * *             * * *
* * * * * *           * * *
* * *   * * *         * * *
* * *     * * *       * * *
* * *       * * *     * * *
* * *         * * *   * * *
* * *           * * * * * *
* * *             * * * * *
* * *               * * * *
* * *                 * * *
参考にはならないでしょう。

m1631

Re: 関数の作成ができません

#3

投稿記事 by m1631 » 1週間前

意図したとおりの出力です。
わかりにくい質問の仕方で申し訳ありませんでした。
書いていただいたソースの意味を理解できていないのでじっくり理解しようと思います。
ありがとうございました。

かずま

Re: 関数の作成ができません

#4

投稿記事 by かずま » 1週間前

理解するのは難しいと思うので、どうやって作ったかを説明します。

まずは、普通の解答。

コード: 全て選択

/*
    \x          111111111122222222
     y\123456789012345678901234567
     1  * * *                 * * *
     2  * * * *               * * *
     3  * * * * *             * * *
     4  * * * * * *           * * *
     5  * * *   * * *         * * *
     6  * * *     * * *       * * *
     7  * * *       * * *     * * *
     8  * * *         * * *   * * *
     9  * * *           * * * * * *
    10  * * *             * * * * *
    11  * * *               * * * *
    12  * * *                 * * *
*/
#include <stdio.h>

int hantei(int x, int y)
{
	if (x % 2 == 0) return 0;                 // x が偶数の時は打たない
	if (x <= 5) return 1;                     // 左の縦線
	if (x >= 23) return 1;                    // 右の縦線
	if (x >= y*2-1 && x <= y*2 + 4) return 1; // 斜線
	return 0;
}

int main(void)
{
	for (int y = 1; y <= 12; y++) {
		for (int x = 1; x <= 27; x++)
			putchar(hantei(x, y) ? '*' : ' ');
		putchar('\n');
	}
}
これは、次のように書けます。

コード: 全て選択

int hantei(int x, int y)
{
	return x%2 != 0 && (x<=5 || x>=23 || x>=y*2-1 && x<=y*2+4);
}
これで解答としては十分ですが、数式を四則演算だけで
書いてみようという邪悪な道へ進むと。

a % b は、a - a/b*b と同じです。
a >= b を a/b != 0、または a/b と書けます。

コード: 全て選択

	return x-x/2*2 && (5/x || x/23 || x/(y*2-1) && (y*2+4)/x);
|| は +、&& は * にできます。

コード: 全て選択

	return (x-x/2*2) * (5/x + x/23 + x/(y*2-1) * ((y*2+4)/x));

返信

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