アプリ版:「スタンプのみでお礼する」機能のリリースについて

C言語についてです。
void lcg(int *x)
{
if (n == 0) {
return ini;
} else{
return ((53 * x(n-1,ini)+29) %65536);
}
}

int main(void){

int nmax=100;
int x=191234;
for (n=1;n<nmax;n++){
lcg(&x);
}
printf("%d\n",x);

return 0;
}
これだとエラーがでてしまいます。
どこが間違ってますか?

A 回答 (8件)

n ? ini ?

    • good
    • 0
この回答へのお礼

nです

お礼日時:2020/11/21 17:20

> void lcg(int *x)



int lcg(int x, int ini)、ですね。

> int nmax=100;
> int x=191234;
> for (n=1;n<nmax;n++){
>lcg(&x);
>}
>printf("%d\n",x);

初期値が仮に、191234で、そこから100増えた数まで、つまりx = 191334の時の値が知りたいのなら、

int nmax = 100;
int x = 191234
printf("%d\n", lcg(x + nmax, x));

です。
また、なんでlcgの引数をアドレスにしたいんだか意味が分かりません。
そんな事する必要がないです。
    • good
    • 0
この回答へのお礼

void lcgまでは指定されているからそこは変えられないのです。ごめんなさい。

お礼日時:2020/11/21 17:25

No.1:追記



n と ini は、どこから出てきたものなのでしょうか。
    • good
    • 0

あ、あと、



> void lcg(int *x)
> {
> if (n == 0) {
> return ini;
>} else{
>return ((53 * x(n-1,ini)+29) %65536);
>}
>}

改造しよう、ってのは買えるんですが、キチンと変数名を確認しましょう。
表面的にだけ改造しても駄目ですよ。

int lcg(int x, int ini) {
 if (x == 0) {
  return ini;
 } else {
  return ((53 * lcg(n-1, ini) + 29) % 65536);
 }
}

でしょう。
変数名の変更等も忘れないように。
    • good
    • 0

> void lcgまでは指定されているからそこは変えられないのです。

ごめんなさい。

それはイカんなぁ。
っつーか、問題の「前半部分」が何かあるんじゃないですか?

ちょっと説明しておきますが、voidを返り値にした関数は、コンピュータ・サイエンス用語で正確には「手続き」(procedure=プロシージャ)と呼びます。
この問題の場合、フツーに関数書いた方が自然で、プロシージャにする意味が通常は無いんですよね。
ってことは、問題に何か意図があるとしたら、そっちを知らないことには何とも言えないんですよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
もうちょっと自分で考えてみます。

お礼日時:2020/11/21 17:32

あ、ごめん。



> return ((53 * lcg(n-1, ini) + 29) % 65536);

return ((53 * lcg(x-1, ini) + 29) % 65536);

だな。
    • good
    • 0

> もうちょっと自分で考えてみます。



うん、考えてみて下さい。

基本的に、「問題の意図を読む」ってのが極めて重要なんですが。
多分これまでのやり取りを鑑みると、「漸化式を解け」が主題じゃなくって、「ポインタで数値をやり取りしろ」ってのが主題なのかなぁ。
まあ、ハッキリ言って、プログラムとして考えると無駄なんですが、宿題だとすればなるほど、とは思います。
貴方が書いたコードを考慮すれば、ひょっとしたら、こういうプログラムを書いて欲しい、って意味なのかもしれません。

#include <stdio.h>

void lcg(int *x, int nmax) {
 int n = 0;
 for (n = 0; n < nmax; n++) {
  *x = (53* *x +29) % 65536;
 }
}

int main(void) {
 int nmax = 100;
 int x = 191234;
 lcg(&x, nmax);
 printf("%d\n", x);
 return 0;
}
    • good
    • 0

>これだとエラーがでてしまいます。


>どこが間違ってますか?
エラーメッセージを書かずに質問しているところ。
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!