乱数と2次方程式について

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

乱数と2次方程式について

#1

投稿記事 by たくみ » 17年前

1~20までの乱数を3つ発生させ二次方程式ax^2+bx+cを解け。この処理を10回繰り返させる。 という課題を学校の先生からいただいたぼですが、発生させた3つの数をうまくあてはめられず困っています どなたか教えてください お願いします

管理人

Re:乱数について

#2

投稿記事 by 管理人 » 17年前

たくみさん、こんにちは。管理人です。

えぇと、問題の意味がよくわかりません。
乱数を発生させて3点を決定し、そこを通る2次方程式を解くというものなんでしょうか?
3点はそれぞれ格子点でいいんでしょうか?
乱数を3つ発生させ、という問題文が本当なら、
y=x上の点ということになりますが、(例えば(2,2),(6,6)等)そこを通る点でいいんでしょうか?
2次関数は直線と3つの交点を持てないので、
よく調べて、問題文をもう一度かいてみてください。

Justy

Re:乱数について

#3

投稿記事 by Justy » 17年前

>>えぇと、問題の意味がよくわかりません
 私も今ひとつよくわからなかったのですが、最大限に推測すると多分
 「乱数1~20を a, b, cに代入し、ax^2+bx+c = 0の x値を解く。これを10回繰り返して結果を表示」
ということなのではないでしょうか。

 問題なのはたくみさんがどこまで習っていて、今何で詰まっているのか、ですよね。

管理人

Re:乱数について

#4

投稿記事 by 管理人 » 17年前

あ、そういうことですか。
それなら通りますね。

さすが、私とは違う・・。

でもそれならとても簡単ですね、式さえかけば解ける^^;
エックスイコールニエーブンノマイナスビープラスマイ・・って解の公式を。

特定の範囲内の乱数発生方法は、他のトピでも紹介しているので、参考にしてみてください。
それをみてもわからなかったらまた聞いてください。

box

Re:乱数について

#5

投稿記事 by box » 17年前

サンプルです。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define ITERATION (10)							/* 繰り返す回数 */
#define MAXRANDOM (20)							/* 発生させる乱数の最大値 */

void get_coefficients(int *a, int *b, int *c);
void solve_equation(int n, int a, int b, int c);

int main(void)
{
	int a, b, c, n = ITERATION, i;
	
	srand((unsigned int) time(NULL));			/* 乱数の初期化 */
	for (i = 1; i <= n; i++) {
		get_coefficients(&a, &b, &c);			/* 二次方程式の係数を得る */
		solve_equation(i, a, b, c);				/* 二次方程式を解く */
	}
	return 0;
}

void get_coefficients(int *a, int *b, int *c)
{
	/* 1~MAXRANDOMの範囲の乱数を発生させる */
	*a = rand() % MAXRANDOM + 1;
	*b = rand() % MAXRANDOM + 1;
	*c = rand() % MAXRANDOM + 1;
}

void solve_equation(int n, int a, int b, int c)
{
	double d = b * b - 4 * a * c;				/* 判別式 */
	double x1, x2, re, im, e = 2 * a;
	
	printf("%2d) %2dx^2+%2dx+%2d=0\n", n, a, b, c);
	if (d > 0) {								/* 実数解2個 */
		x1 = (-b + sqrt(d)) / e;
		x2 = (-b - sqrt(d)) / e;
		printf("x1=%f\n",   x1);
		printf("x2=%f\n\n", x2);
	}
	else if (d == 0) {							/* 実数解1個 */
		x1 = -b / e;
		printf("x(重解)=%f\n\n", x1);
	}
	else {										/* 虚数解 */
		re = -b / e;
		im = sqrt(-d) / e;
		printf("x=%f±%fi\n\n", re, im);
	}
}

たくみ

Re:乱数について

#6

投稿記事 by たくみ » 17年前

アドバイスしてくださったみなさんへ
みなさんアドバイスありがとうございます。 今学校では乱数を習い始めたばかりで、今朝先生にメールして問題の意図を教えていただいたところ 3つ乱数を発生させ二次方程式ax^2+bx+cの式にあてはめ、10回繰り返す という意味ということがわかりました 

a.k.a.dRESSING

BCC Developer のエラーについて

#7

投稿記事 by a.k.a.dRESSING » 17年前

BorlandC++ Compiler 5.5の使い方で

① BCC Developer のメニューから[プロジェクト]→[メイク]を選択。
    エラーが起きなければ実行するためのソフトがこれで作成されます。
    エラーがあった場合は画面下のウインドウにエラー内容が出てきます
    ので指示にしたがって修正してください。

② 次に[実行]→[実行]を選択してソフトを起動します。

まで手順通りに行いましたが、
エラー E2209 C:\Documents and Settings\裕樹\デスクトップ\bccdev1221\裕樹\test\DrawPixel.cpp 1: インクルードファイル 'DxLib.h' をオープンできない
エラー E2141 C:\Documents and Settings\裕樹\デスクトップ\bccdev1221\裕樹\test\DrawPixel.cpp 3: 宣言の構文エラー

というのが出てきて実行できません。どうすればいいのでしょうか?お願いします

box

Re:BCC Developer のエラーについて

#8

投稿記事 by box » 17年前

> エラー E2209 C:\Documents and Settings\裕樹\デスクトップ\bccdev1221\裕樹\test\DrawPixel.cpp 1: インクルードファイル 'DxLib.h' をオープンできない

作成しようとしているプログラムがインクルードしている
ヘッダーファイルが、Borland C++ Compilerの環境に
含まれていない、ということです。
もしかすると、Microsoftの開発環境で作成することを
前提としているプログラムなのかもしれません。

> エラー E2141 C:\Documents and Settings\裕樹\デスクトップ\bccdev1221\裕樹\test\DrawPixel.cpp 3: 宣言の構文エラー

DrawPixel.cppの3行目に何らかの文法エラーがある、ということです。

管理人

Re:BCC Developer のエラーについて

#9

投稿記事 by 管理人 » 17年前

DxLib.hがコンパイルしようとしているフォルダに入ってないんじゃないですか?

コンパイルしようとしているフォルダにDxLib.hがきちんとはいっているかどうか確認してみてください。

バグ

Re:BCC Developer のエラーについて

#10

投稿記事 by バグ » 17年前

BCC用のDXLibファイルでないとか、プロジェクト内にヘッダーファイルが登録されてない可能性もありますね。

管理人

Re:BCC Developer のエラーについて

#11

投稿記事 by 管理人 » 17年前

バグさん、お久しぶりです^^

>BCC用のDXLibファイルでないとか・・

そうですねぇ、、しかしオープンできないとなると、それ自体ないような気もします。

・フォルダ内にヘッダファイルがあるか
・Bcc用とVS用の2種類のものがありますので、Bcc用のものをきちんとダウンロードしているか

確認してみてください。

a.k.a.dRESSING

Re:BCC Developer のエラーについて

#12

投稿記事 by a.k.a.dRESSING » 17年前

できました!皆様ありがとうございました

管理人

Re:BCC Developer のエラーについて

#13

投稿記事 by 管理人 » 17年前

解決されてよかったです☆
頑張ってくださいね^^

閉鎖

“C言語何でも質問掲示板” へ戻る