A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
> void lcg(int *x)
返り値はintなんで、voidじゃないです。returnを使う限り、voidは使えません。
あと、何故にポインタを使おうとしたのか、も分かりません。
単純にint xで良いですよ。
> int main(void){
>
>int nmax=100;
>int x=190004;
>for (n=1;n<nmax;n++){
>lcg(&x);
>}
>printf("%d\n",x);
>
>return 0;
>}
何故にforループしなきゃなんない、って思ったのか知りませんが、必要ないです。
例えば、
int main(void) {
printf("%d\n", lcg(190004, なんか適当な初期値));
return 0;
}
でオシマイ、です。
No.1
- 回答日時:
うーん、こういうのって数列の初期値が無いと解けないんじゃないの?
まあ、それはさておき。
実はこのテの問題って一番カンタンな問題なんですよ。なんせ「言われた通りにプログラムすれば良い」。コツは「何も考えない事」です。いやマジで。
初見じゃビビるかもしれませんが、ハッキリ言ってハナクソです。
初期値が不明だけど、まぁやっていきましょうか。
まずプログラムを組みやすいようにちょっとだけ漸化式を弄ります。
次のように書き換えます。
x_{n+1} = [(53 * x_{n} + 29) mod 65536] => x_{n} = [(53 * x_{n-1} + 29) mod 65536]
添字を一個ズラシただけ、ですね。(n = 0, 1, ...)ってのは変わりません。
さて。
1. x_{n} =... を書く
int x(int n) { ...
で書き始めます。ただ、今回の場合、初期値が不明なんで、外部から与えるカタチにします。x_{n}は正の整数なんで、まぁ、エラーチェックを除くと、x_{n}はintだし、当然初期値x_{0}もintなんで、引数としてint iniってのを与えるようにしてみます。
int x(int n, int ini) {...
で書き始めます。
2. 初期値を書く
初期値はn = 0の時のx_{n}の値なのはいいですね。それが返るようにプログラムします。
int x(int n, int ini) {
if (n == 0) {
return ini;
} ...
プログラミング用語ではこういう初期値、ないしは初期条件を特に「終了条件」と言いますが、高校数学的なヤツでは単に数列の最初の値です。
3. [(53 * x_{n-1} + 29) mod 65536] を書く。
残りはホンマハナクソです。そのまま書けば良い。
int x(int n, int ini) {
if (n == 0) {
return ini;
} else {
return ((53 * x(n-1, ini) + 29) % 65536);
}
}
xの内部でxを呼び出してますが、これで良いです。「言われた通りにプログラム」したんで、完成です。あとは、こいつをmain関数から引数2つつけて呼び出せば良い。
ちなみに、もうちょっとプログラミングに慣れると、次のように書いても良い、って事が分かるでしょう。
/* 別解 */
int x(int n, int acc) {
if (n == 0) {
return acc;
} else {
return x(n-1, ((53 * acc) + 29) % 65536);
}
}
二引数なのは変わりませんが、全計算を引数内で行う、と言う方法へと変えています(コンパイラに依りますが、こっちの方がコンパイラの「最適化」オプションで、より効率の良い実行形式を吐き出します)。
回答ありがとうございます。
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=190004;
for (n=1;n<nmax;n++){
lcg(&x);
}
printf("%d\n",x);
return 0;
}
こんな感じになったのですが、エラーがでてしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 工学 電気関係のテキストにて以下の問題が分からず、回答をお願いします 【問題文:ブレーカーがトリップしてい 3 2023/05/22 10:43
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# プログラミングペーパーテスト 次の問題の実行結果を答えろ #include int x[ ] = { 1 2022/06/16 21:49
- 数学 線形代数の行列を勉強し直しているのですが、解き方がわからない問題があります。 画像の青印の問題(青文 2 2022/11/04 16:53
- その他(プログラミング・Web制作) 「問題も答えも画像」のクイズを簡単に作れるもの何かありませんでしょうか? 1 2022/05/30 17:29
- 数学 数列 2 2022/07/12 15:43
- 物理学 物理の単位 1 2022/08/27 11:06
- 物理学 物理学の質問です。 あなたの車が9.8m/s^2で加速できる場合、0から時速60マイルまでどのくらい 2 2022/09/19 09:50
- Java eclipse実行ができない 2 2022/07/27 04:47
- C言語・C++・C# プログラミング実行後の表示される値を答えよ #include<stdio.h> void main( 7 2022/05/20 00:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
複数桁10進数の*桁目だけを抽出...
-
c言語
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
数字列を3桁ごとにカンマで区切...
-
CでBAモデルを作りたいのですが
-
卒業研究でよく分からないとこ...
-
cinの区切り文字の書き方
-
質問です 下記のコードを分かり...
-
足して100になるような乱数のア...
-
【C++】関数ポインタの使い方
-
構造体の勉強中です 合計点の高...
-
「{ } で囲むだけ」は正しい?
-
式は定数値が必要です」という...
-
c言語の問題です 課題1 (二分探...
-
C言語の配列をC++のvectorに高...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
system関数がうまくいかない
-
(int *)の意味
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
C言語初心者です、、、お助けく...
-
std::set<int> で、ある値が何...
-
PowerShellがうまくいかない
-
read関数をノンブロッキングで...
-
ColorをRGBで指定する方法
-
(マルチスレッド)_beginthrea...
-
数字列を3桁ごとにカンマで区切...
-
C言語で分からないところがあり...
おすすめ情報