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

去年からc言語を始めた初心者の者です。
学校が休みの間に少しチャレンジしてみたくて、
2次関数を描写するプログラムに挑戦しているのですが、
なかなか検討もつかず、できない自分にあきれてます。
本やネットで検索しては、この2次関数をやっているの
ですが、まったくできません。
どうかお力をお貸ししていただけないでしょうか?
xの最大値、最小値および、yの最大値、最小値を入力し
二次関数のグラフを描写するプログラムです。
学校が始まるとまた忙しくなるので、こちらに気を取られている
暇がなくなり、どうしてもこの冬休み中にすっきりさせたい
のですが、どうでしょうか?
おねがいします。

A 回答 (5件)

とりあえず、サンプルみたいなのを作ってみました。


たたき台に使って下さい。
でも、まあ、「*」での描画は、2次関数の描画には向いてないと思う。範囲を広くしたら潰れてしまうし、狭くしたらホンの一部分しか表示できないし。
#include <stdio.h>
#include <math.h>

/* グラフィック画面座標サイズ */
#define X_V_SIZE 640
#define Y_V_SIZE 480
/* キャラクタ画面座標サイズ */
#define X_R_SIZE 80
#define Y_R_SIZE 25

/* キャラクタ画面をメモリ上に確保する:仮想的な画面 */
char Display[X_R_SIZE][Y_R_SIZE];

/* 仮想的スクリーンのクリアをする */
void ScreenCLEAR(void){
int i,j;

for(i=0;i<X_R_SIZE;i++)
for(j=0;j<Y_R_SIZE;j++)
Display[i][j]=' ';
}
void ScreenOUT(void){
int i,j;

for(i=0;i<Y_R_SIZE;i++)
for(j=0;j<X_R_SIZE;j++)
putchar(Display[j][i]);
}

/* (x,y)座標に点を打つ */
int g_point(int x, int y){

float wk_x,wk_y;

if(0>x || x>=X_V_SIZE || 0>y || y>=Y_V_SIZE)
return(-1);

wk_x = x;
wk_y = y;
x = wk_x / X_V_SIZE * X_R_SIZE;
y = wk_y / Y_V_SIZE * Y_R_SIZE;
Display[x][y] = '*';
return(0);
}

#if 0
2次関数のグラフを描く
cosのグラフを以下のように表示するプログラムを書け。(定義域は(0,4π))

g_pointが扱う座標は、グラフィック座標(x,y)=(0~639,0~479)
なので、xとyの変域をこの範囲に変更しなくちゃいけないよう
#endif

/* yの変域-10~10を0~480に変換する */
int convGY(double y){
int y_size = Y_V_SIZE/2;
return(y_size*(1.0-y/24.0));
}
/* xの変域を0~640から-10~10に変換する */
double convGX(int x){
return ((x - 320)/32.0);
}

int main(void){
int wx;
double x,y;
double a=0.2,b=-1.0,c=-2.0;/* f(x)=0.2x^2-x-2 */

ScreenCLEAR();

for(wx=0;wx<640;wx++){
x=convGX(wx);
y=a*x*x + b*x + c;
g_point(wx,convGY(y));
}

ScreenOUT();
return(0);
}

参考URL:http://okweb.jp/kotaeru.php3?qid=1099674
    • good
    • 0
この回答へのお礼

ご親切にサンプルを作っていただきありがうございました。
あと説明文が微妙ですいません。
その中で作ってもらえるとは思ってませんでした。
参考にさせていただきます。
ありがとうございました

お礼日時:2005/01/11 09:34

二次関数のグラフを書くには最低限6つの数値が必要です。


・y = a*x*x + b*x + c における 各係数
・x軸の始点(最小値)と終点(最大値)の値
・計算するx軸の間隔
です。
この値をそれぞれ、a,b,c,xs,xe,st,という変数にscanf関数を使ってキー入力し、yの値を表示するプログラムを組んでみてください。
まず、ここまでできないことには、グラフは書けません。
    • good
    • 0

回答者1の方と同意見です。



> どうかお力をお貸ししていただけないでしょうか?
どこまで出来ていて、何が分からないかを教えてください。例えば「任意の場所に*を表示する方法が分からない」とか。
現状のソースを掲示するのもいいですし。

> xの最大値、最小値および、yの最大値、最小値を入力し
> 二次関数のグラフを描写するプログラムです。
理解不能です。
    • good
    • 1

> 整理するとまず2次関数のグラフを*で表示したいのです。


> これだけでサンプルは作れないでしょうか?

作れませんね。二次関数 y = ax^2 + bx + c の a,b,c および定義域を与えない限りグラフは描けません。

まずは数値を表示するところから始めてはいかがでしょうか? それができれば数値から'*'に変換すればいいのだから。
    • good
    • 0

> どうかお力をお貸ししていただけないでしょうか?



なにがどうわからない/できないのかが明らかでない限り、力の貸しようがありません。

> xの最大値、最小値および、yの最大値、最小値を入力し
> 二次関数のグラフを描写するプログラムです。

さっぱりわかりません。それだけの入力でどうやって二次関数のグラフが描けるのですか?

この回答への補足

整理するとまず2次関数のグラフを*で表示したいのです。
これだけでサンプルは作れないでしょうか?

補足日時:2005/01/05 10:53
    • good
    • 0

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