calc関数

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

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: calc関数

Re: calc関数

#7

by purin52002 » 3年前

acaaさんへ

関数は以下のように書きます。

コード:

//最初のintは戻り値の型
//次のcalcは関数名
//次のintは引数の型
//次のxは変数名
int calc(int x)
{
    int y;
    //ここでいろいろな処理をかく
    return y;
}
「5を足してから3をかける」というのはできると思うので説明はしません^^;
処理を関数にまとめるという作業は結構重要な作業だと思うので、早めにマスターできるといいですね^^

Re: calc関数

#6

by かずま » 3年前

かずま さんが書きました:計算時間が一定になるようにしてみました。
mul の中で add を呼ばない時もあるので、一定とは言えませんね。

Re: calc関数

#5

by かずま » 3年前

a + b は、a に 1 を b回足したもの。
a * b は、a を b個足したもの。
そんなことをしたら、b が 10 の場合と、
10億の場合で、計算時間に大きな差が出ます。
CPUの設計者に申し訳なく思います。

計算時間が一定になるようにしてみました。

コード:

#include <stdio.h>

int full_adder(int a, int b, int c, int *sum)
{
    *sum = a ^ b ^ c;
    return a & b | b & c | c & a;
}

int add(int a, int b)
{
    int sum = 0, carry = 0, s;
    for (int i = 0; i < 32; i++) {
        carry = full_adder(a >> i & 1, b >> i & 1, carry, &s);
        sum |= s << i;
    }
    return sum;
}

int mul(int a, int b)
{
    int sum = 0;
    for (int i = 0; i < 32; i++)
        if (b >> i & 1) sum = add(sum, a << i);
    return sum;
}
 
int calc(int x)
{
    return mul(add(x, 5), 3);
}

int main(void)
{
    int n;
    while (printf("n: "), scanf("%d", &n) == 1)
        printf("  (n+5)*3: %d\n", calc(n));
}
ビット演算の and, or, exclusive or, shift と
整数の increment しか使っていません。

実行結果

コード:

n: 5
  (n+5)*3: 30
n: 0
  (n+5)*3: 15
n: -5
  (n+5)*3: 0
n: -10
  (n+5)*3: -15
n: .

Re: calc関数

#4

by box » 3年前

コード:

// 最もシンプルと思われるコード
#include <stdio.h>

int calc(int n)
{
    return (n + 5) * 3;
}

int main(void)
{
    int n;

    printf("input:"), scanf("%d", &n);
    printf("answer:%d\n", calc(n));
    return 0;
}

Re: calc関数

#3

by purin52002 » 3年前

足し算と掛け算をするだけのプログラムにforループはいらないんじゃないかなー、
と思ったので改造してみました。

あってるかはわからないです^p^

コード:

int add(int a, int b,int c)
{
    return b<=c ? a : add(b>0 ? a + 1 : a - 1, b, b>0 ? c +1 : c - 1);
}

int mul(int a,int b,int c)
{
    return b<=c ? 0 : add(b>0 ? a : -a, mul(a, b, b>0 ? c + 1 : c - 1), 0);
}

int calc(int x)
{
    return mul(add(x, 5, 0), 3, 0);
}

Re: calc関数

#2

by usao » 3年前

C言語初心者なので,間違っているかもしれません.動作確認もしていません.

コード:

int add( int a, int b )
{
	int i;
	int d = ( b>0 ? 1 : -1 );
	int n = ( b>0 ? b : -b );
	for( i=0; i<n; ++i )
	{	a += d;	}

	return a;
}

int mul( int a, int b )
{
	int i;
	int r = 0;
	int n = ( b>0 ? b : -b );
	for( i=0; i<n; ++i )
	{	r = add( r, a );	}

	return ( b>0 ? r : -r );
}

int calc( int x )
{
	return mul( add( x, 5 ), 3 );
}

calc関数

#1

by acaa » 3年前

C言語初心者です半分はできたんですがcalcの記述部分がわかりませんおしえてください
以下のプログラムは1つの整数をキーボードから入力し、その値に5を足してから3倍にした値を表示するプログラムです。
ただし、このプログラムでは整数の入力と結果の表示をmain関数内で行い、入力された値に5を足してから3倍にした値を求める作業は別の関数calc()を作成したものを利用しているこのプログラムが機能するよう関数calc()の部分をおしえてください

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


int main()
{
int x,y;
scanf(”%d”,&x);
y=calc(x);
printf(”Answer=%d”,y);
return(0);

ページトップ