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);
}
calc関数
Re: calc関数
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 );
}
- purin52002
- 記事: 235
- 登録日時: 7年前
- 連絡を取る:
Re: calc関数
足し算と掛け算をするだけのプログラムにforループはいらないんじゃないかなー、
と思ったので改造してみました。
あってるかはわからないです^p^
と思ったので改造してみました。
あってるかはわからないです^p^
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
Re: calc関数
a + b は、a に 1 を b回足したもの。
a * b は、a を b個足したもの。
そんなことをしたら、b が 10 の場合と、
10億の場合で、計算時間に大きな差が出ます。
CPUの設計者に申し訳なく思います。
計算時間が一定になるようにしてみました。
ビット演算の and, or, exclusive or, shift と
整数の increment しか使っていません。
実行結果
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));
}
整数の increment しか使っていません。
実行結果
- purin52002
- 記事: 235
- 登録日時: 7年前
- 連絡を取る:
Re: calc関数
acaaさんへ
関数は以下のように書きます。
「5を足してから3をかける」というのはできると思うので説明はしません^^;
処理を関数にまとめるという作業は結構重要な作業だと思うので、早めにマスターできるといいですね^^
関数は以下のように書きます。
//最初のintは戻り値の型
//次のcalcは関数名
//次のintは引数の型
//次のxは変数名
int calc(int x)
{
int y;
//ここでいろいろな処理をかく
return y;
}
処理を関数にまとめるという作業は結構重要な作業だと思うので、早めにマスターできるといいですね^^
c++初心者を自負しています。
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^
質問者さんには今後私にプログラミングを教えてくれるようにやさしく丁寧に教えるつもりです。ぎぶあんどていく^p^
回答者さんには精一杯感謝します。ぎぶおんりー^p^