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件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
> 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の引数をアドレスにしたいんだか意味が分かりません。
そんな事する必要がないです。
No.4
- 回答日時:
あ、あと、
> 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);
}
}
でしょう。
変数名の変更等も忘れないように。
No.5
- 回答日時:
> void lcgまでは指定されているからそこは変えられないのです。
ごめんなさい。それはイカんなぁ。
っつーか、問題の「前半部分」が何かあるんじゃないですか?
ちょっと説明しておきますが、voidを返り値にした関数は、コンピュータ・サイエンス用語で正確には「手続き」(procedure=プロシージャ)と呼びます。
この問題の場合、フツーに関数書いた方が自然で、プロシージャにする意味が通常は無いんですよね。
ってことは、問題に何か意図があるとしたら、そっちを知らないことには何とも言えないんですよ。
No.6
- 回答日時:
あ、ごめん。
> return ((53 * lcg(n-1, ini) + 29) % 65536);
return ((53 * lcg(x-1, ini) + 29) % 65536);
だな。
No.7
- 回答日時:
> もうちょっと自分で考えてみます。
うん、考えてみて下さい。
基本的に、「問題の意図を読む」ってのが極めて重要なんですが。
多分これまでのやり取りを鑑みると、「漸化式を解け」が主題じゃなくって、「ポインタで数値をやり取りしろ」ってのが主題なのかなぁ。
まあ、ハッキリ言って、プログラムとして考えると無駄なんですが、宿題だとすればなるほど、とは思います。
貴方が書いたコードを考慮すれば、ひょっとしたら、こういうプログラムを書いて欲しい、って意味なのかもしれません。
#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;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラムの時、フローチャートはどうなりますか?図でお願いします。 int main(void) { 1 2022/10/01 22:45
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# プログラミングのペーパーテスト 実行結果を表示せよ #include <stdio.h> int h 1 2022/07/09 15:27
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
比較回数と交換回数表示について
-
複数桁10進数の*桁目だけを抽出...
-
nCmの関数
-
構造体の勉強中です 合計点の高...
-
C言語 配列と関数の練習問題
-
[C言語] 関数を利用する計算
-
実数の整数部,小数部の取得
-
C言語での引数の省略方法
-
数字列を3桁ごとにカンマで区切...
-
アスタリスクでダイヤ型を作る
-
覆面算のプログラムが分かりません
-
C言語の基礎 . 2乗値の差につ...
-
c言語
-
プログラミング
-
【C++】関数ポインタの使い方
-
毎回違う乱数を生成するにはど...
-
if と配列の組み合わせ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
「指定されたキャストは有効で...
-
C言語 配列と関数の練習問題
-
複数桁10進数の*桁目だけを抽出...
-
(int *)の意味
-
if と配列の組み合わせ
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
c言語
-
足して100になるような乱数のア...
-
C言語初心者です、、、お助けく...
-
数字列を3桁ごとにカンマで区切...
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
課題でつまってます・・・
-
商と剰余を同時に求める(C言語)
-
C言語の配列をC++のvectorに高...
-
std::set<int> で、ある値が何...
おすすめ情報