明日までの宿題で困っています【ファイルの読み込み】

このQ&Aのポイント
  • 明日までの宿題で困っています【ファイルの読み込み】
  • 明日提出の学校の宿題で、(x,y)の値が10組程入ったファイルを読み込んで、xのデータを見て昇順にソート(yの値も一緒に)したものを最小二乗法でデータを直線(y=ax+b)近似して係数a,bを算出せよ。という問題が出たのですが、ファイルの読み込みとソートの部分が理解できません。
  • データは2.00,5.00 1.00,3.00のようにコンマで区切られており、これを1.00,3.00 2.00,5.00のようにソートする方法がわかりません。
回答を見る
  • ベストアンサー

明日までの宿題で困っています【ファイルの読み込み】

明日提出の学校の宿題で、 (x,y)の値が10組程入ったファイルを読み込んで、 xのデータを見て昇順にソート(yの値も一緒に)したものを 最小二乗法でデータを直線(y=ax+b)近似して係数a,bを算出せよ。 という問題が出たのですが… まず、ファイルを読み込む、という行為とソートする、という行為を 繋げる部分がよくわかりません… 様々なサイトや質問、回答を読んでみても、応用できるほど理解できずに 困っています… データは 2.00,5.00      1.00,3.00 のようにコンマで区切ってあり、 これを           1.00,3.00      2.00,5.00 のようにソートせよ、とのことで、 構造体を使えば実現出来るようなのですが、勉強不足で手がつけれません… 回答し辛い質問だとは思いますがどうぞよろしくお願いします…!

質問者が選んだベストアンサー

  • ベストアンサー
noname#30727
noname#30727
回答No.3

構造体の使い方がわからないならqsortも使えないだろうな。 それもサンプルを書いておくので、残りは自分で頑張れ。 int vertex_compare(const void *v1, const void *v2) { double x1 = ((const vertex_t *)v1)->x; double x2 = ((const vertex_t *)v2)->x; if (x1 < x2) return -1; if (x1 > x2) return 1; return 0; } qsort(vertex, 10, sizeof(vertex_t), vertex_compare);

maruhage
質問者

お礼

お礼させていただきます^▽^*ゝ

maruhage
質問者

補足

ありがとうございましたっ!!!! inthefloiさんのアドバイス(というかプログラムそのままですね…すみませ…;) を全部繋げてみたら、なんとかソートまで実行できましたッ…!! とっても判りやすい書き方で、読み直してみたらなんとか私にも 理解することが出来ました… 本当にありえないくらい勉強不足な私にこんなに付き合っていただいて、ありがとうございました…>д<;; 続きの最小二乗法に取り組んでいきたいと思います^^!

その他の回答 (2)

noname#30727
noname#30727
回答No.2

色々大変そうですね(笑 最小二乗法以外の部分はおまけだろうから、あっさりできてもいいのかな・・・。 >fp = fopen( "data.txt", "rb" ); /* テキストファイルをバイナリオープン */ 入力ファイルはテキストファイルでしょ? >for(i=0;i<10;i++){ >while(fscanf(fp,"%c",&c)!=EOF){/*ファイルの末尾まで*/ >     vertex[i] = c; /*ここがエラー…*/ >    printf("%c",c); } >} あまりにも不勉強ですな。例えばこんな感じ。 for(i=0;i<10;i++){ fscanf(fp,"%f,%f", &vertex[i].x, &vertex[i].y); /* %fでうまく値が拾えないときは、%lfにしてみてください */ /*printf("%f,%f", vertex[i].x, vertex[i].y);*/ } とりあえず読めればいいのだから、data.txtは変にスペースとか入れないようにしましょう。

noname#30727
noname#30727
回答No.1

C言語? 何がわからないのか、まるでわかりませんが… 1. 構造体を作る typedef struct { double x; double y; } vertex_t; 2. 10組ぶんの配列を作る vertex_t vertex[10]; 3. 配列vertexにファイルから10組の座標を読み込む fscanfを10回まわせば読めそうです 4. 配列vertexをメンバxをキーにしてソートする qsortを使うのが普通でしょう 5. 配列vertexからaとbを算出する まあ頑張ってください ※配列vertexを表示する関数を作って、3と4のあとに呼び出してやると安心して次に進めます。

maruhage
質問者

補足

早い回答ありがとうございます! C言語です!記述忘れていました…すみません! 回答を読ませて頂いて、流れは「なるほど」と思えたのですが… やはり記述の仕方が全然思い浮かばない… まず、配列にファイルを読み込むと言うのはどのように記述すればよいのでしょうか…; 一応つぎはぎでここまでしてみたのですが… 配列への代入が全然違うみたいで… #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct{ double x; double y; }vertex_t; vertex_t vertex[10]; int main(void) { FILE *fp; char c; int i; fp = fopen( "data.txt", "rb" ); /* テキストファイルをバイナリオープン */ if( fp == NULL ) { puts( "data.txtが開けません" ); return 1; } for(i=0;i<10;i++){ while(fscanf(fp,"%c",&c)!=EOF){/*ファイルの末尾まで*/      vertex[i] = c; /*ここがエラー…*/     printf("%c",c); } } printf( "\n" ); fclose( fp ); return 0; } 本当に初歩的なことが判ってなくて申し訳ないです… どうかアドバイスの方よろしくお願いします><;;!

関連するQ&A

  • 2元一次不定方程式の説明で意味がわかりません

    自分の使っているテキストに 282x+113y=1 .......(1) (ax+by=n) これは右辺=1で0ではないから、すでに教えたように(1)をみたす(x.y)の値を一組見つければいい。 でもxとyの係数であるa,bの値が282と113とかなり大きな値なので、これを見つけるのが大変だ。 したがってこれがax+by=n型の方程式の応用問題ということになる。 この応用問題の特徴は (1) 右辺のn=1であり (2) 左辺のaとbは互いに素な整数である。 つまり ax+by=1の形であれば、係数a,bが(1)のようにかなり大きな値であっても解くことが出来る。 と書かれているのですが、 なぜ「つまり ax+by=1の形であれば、係数a,bが(1)のようにかなり大きな値であっても解くことが出来る」ということになるのかが読み取れません。 この中のどこに、この理由が書いてあるのでしょうか? 理解できる方がいましたらよろしくお願いします。

  • エクセルで1次近似式の傾きについて

    1次近似で、y=ax+bの近似式を求める場合、 傾きaは、SLOPE(yのデータ,xのデータ) y切片bは、INTERCEPT(yのデータ,xのデータ) で求めています。 そこでグラフを描いて近似式を表示する際に、グラフオプションでy切片=0にするとSLOPEで求めた傾きと違う値になってしまい悩んでいます。 y切片=0にした場合のy=aXのaを出す関数があるのでしょうか?どなたか教えて下さい。宜しくお願い致します。

  • 宿題

    数学の問題です。 (1)曲線y=ax^3+bx^2+cx+dは、点A(0,1)において直線y=x+1に、点B(3,4)において直線y=-2x+10にそれぞれ接する。このとき、定数a,b,c,dの値を求めよ。 (2)点(1,-3)を通る放物線y=ax^2+bx+cが、曲線y=x^3+bxと点(2,6)において共通の接線をもつとき?定数a,b.c.dの値を求めよ。 どちらか一つでもいいので 分かったら教えてください。 よろしくお願いします!

  • 連立方程式です。お願いします

    A、Bの2人がXとYについての連立方程式  aX-3Y=12                            5X-bY=8  をといたのですが、AはXの係数aの値を まちがえて8と書いたので、解はx=2, Y=4/3 となった。 Bは正しく解いて、解のうちYの値はY=-2であることがわかった。このとき、a,bのあたいをそれぞれ求めなさい。 回答よろしくおねがいします

  • 宿題が解けません。

    高校の数学1で宿題が出ましたが全然分かりません。 教えてください。 問題(1) a>0 のとき, 関数 y=x²-8x+9(0≦x≦a)の最大値と最小値を求めよ。 問題(2) 2x+y=1, x≧0, y≧0 を満たすx,y について,次の問いに答えよ。 (1)xがとり得る値の範囲を求めよ。 (2)3x²+y²の最大値と最小値を求めよ。 問題(3) 放物線 y=x²+ax+bをx軸方向に1,y軸方向に-3だけ平行移動した放物線が 2点(3,0),(0,3)を通るとき,定数a,bの値を求めよ。 全部で4問です。 途中の式も書いていただけると助かります。 よろしくお願いします

  • 相関係数の計算

    指数関数  y = B * e^ax  式(*) で近似できるデータがあります。 その近似がどのくらい正しいかを調べたいのですが 曲線の相関係数というのが分かりません。そのために 上式の対数を取って直線関係にしました。 相関係数をエクセルで計算できるからです。 ln(y) = ax + ln(B) この場合の相関係数は、式(*) の相関係数として使えるので しょうか? 適当な方法があるのだと思いますが ご存じの方がいらっしゃいましたら教えてください。

  • 回帰直線の求め方

    (x,y)のデータが沢山あるとします。 そしてxとyの間に直線関係(比例関係)が認められそうです。 Excelを使って、最小二乗法により回帰直線(y=ax+b)を求める際、aの値を固定してbを求める、そしてその相関係数を求めることはできますでしょうか。 ※単に回帰直線を計算させると、y=0.95x+bと算出されたのですが、 理屈から考えるとy=1x+bの関係がありそうなので、そのときのもっとも適当なbの値を知りたいのです。

  • 数学の宿題です

    数学の問題で、放物線y=x^2+2x+2…1の頂点は点(ア)である。また、放物線1をx軸方向に3 だけ平行移動した放物線の方程式がy=x^2+ax+b (a,bは定数)であるとき、a=(イ)b=(ウ)である。 頂点は(-1,1)と出せましたがa,bの値を何回も解いたのですが分からないので教えて頂きたいです。

  • 近似直線の傾きとSlope関数で求めた傾きについて

    近似直線の傾きとSlope関数で求めた傾きについて Excelでxとyについてのプロットデータに近似直線を追加しグラフにしました。そのときグラフ上にy=aX+bのような近似式を表示することができます。 ことのきの近似式の傾きaと、同じプロット点を使いSlope関数で求めたときの傾きとは別物なのでしょうか。同じになると思っていたのですが、同じ値にならないもので・・・。

  • 宿題

    数学の問題です。 (1)2つの曲線y=x^2,y=-(x-2)^2の共数接線の方程式を求めよ。 (2)2つの曲線y=x^2+2,y=x^2+ax+3の交点をPとする。Pにおけるそれぞれの曲線の接線が垂直で あるとき、定数aの値を求めよ。 よろしくお願いします!

専門家に質問してみよう