掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.24213

配列の値が何の操作もなく、1箇所だけ変化してしまう。
投稿者---Tetsu(2005/11/18 06:12:51)


はじめまして。初めて投稿させていただきます。
私が抱えている問題は、配列の値が、何の操作もなしに変化してしまう、という問題です。

一番下に私のソースを添付させていただきます。

私は、x,yの座標を使って、線分(具体的には真っ直ぐの線分ではなく、いくつかの直線が組み合わさったジグザグの線分です)の長さの計算をしようと思っています。2つの線分、AとBの長さを求めるために、構造体を定義し、それぞれの線分の座標をファイルから読み込みました。それを使って、点から点までの距離を測ろうとしました。ソースの最後のほうで、線分Aの長さを計算している処理中に、線分Bの一番初めのx座標であるb[0].xのみが、なぜかルート2(=1.414213・・・)に変換されてしまうのです。プログラムを動かすと、「処理前」のb[0].xの値と「処理後」のそれが違うことがわかります。
線分Bの配列をいじっていないはずなのに、b[0].xの値が変化してしまうという現象であると私はとらえていますが、これを解決するためにはどうしたらよいのでしょうか。
なお、現在使用している座標群A,Bはpatha.txtとPathb.txtに入っていますが、どちらのテキストファイルの内容も、以下のとおりです。4つの座標で構成されています。

1 1
2 2
3 3
4 4

長くなりましたが、よろしくお願いいたします。

#include <stdio.h>
#include <math.h>
#define M 4
#define N 20

//構造体(x、y座標)の定義

typedef struct {
        double x;
        double y;
} point;

void main()
{

    int i;
    int num1=0,num2=0;
    double dis_a=0,dis_b=0;
    double s,t;

    //total length of each path
    double sum_dis_a=0;


    //構造体である座標群Aの定義
    point a[M];

    //構造体である座標群Bの定義
    point b[M];

    double b_sub;
    double seg_a[M-1];

    //subtotal length of every 5%
    double subtotal_a[M+1];


    //ファイルから座標群Aの読み込み
    FILE *fpa, *fpb;
    //reading the file from pathA.txt

    if((fpa = fopen("patha.txt", "r")) == NULL)
        printf("Cannot open the file!\n");
    else{
    
        for(i=0;i<M;i++){
            fscanf(fpa,"%lf %lf", &s, &t);
            a[i].x = s;
            a[i].y = t;
            num1++;
        }
    }

    //ファイルから座標群Bの読み込み
    if((fpb = fopen("pathb.txt", "r")) == NULL)
        printf("Cannot open the file!\n");
    else{
    
        for(i=0;i<M;i++){
            fscanf(fpb,"%lf %lf", &s, &t);
            b[i].x = s;
            b[i].y = t;
            num2++;
        }

    }

    //座標群Aの表示
    for(i=0;i<M;i++){
        printf("(a[%d].x,a[%d].y)=(%1.0lf,%1.0lf)\n",i,i,a[i].x,a[i].y);
    }
    
    printf("\n");
    //座標群Bの表示
    for(i=0;i<M;i++){
        printf("(b[%d].x,b[%d].y)=(%1.0lf,%1.0lf)\n",i,i,b[i].x,b[i].y);

    }
    b_sub=b[0].x;


    printf("\n\n処理前\nb[0].x=%lf\n", b[0].x);
    printf("b_sub=%lf\n\n", b_sub);


//この次のfor文の処理で、b[0].xの値のみが変化してしまう。具体的には「1→1.414213・・・」

    subtotal_a[0]=0;
    seg_a[0]=0;

    for(i=0;i<num1;i++){
        if(i<num1-1){
            dis_a=sqrt(pow(a[i+1].x-a[i].x,2) + pow(a[i+1].y-a[i].y,2));
            seg_a[i+1]=dis_a;
            sum_dis_a=sum_dis_a+dis_a;
            subtotal_a[i+1]=sum_dis_a;
        }
    
    }
    b[0].x=b_sub;
        printf("処理後\nb[0].x=%lf\n", b[0].x);
        printf("b_sub=%lf\n", b_sub);
//この時点ですでにb[0].xは1→1.414213・・・に変化している。
    
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:配列の値が何の操作もなく、1箇所だけ変化してしまう。 24214 ぽへぇ 2005/11/18 06:47:09


No.24214

Re:配列の値が何の操作もなく、1箇所だけ変化してしまう。
投稿者---ぽへぇ(2005/11/18 06:47:09)


>#define M 4
>double seg_a[M-1];
3個しか用意されていない配列に対して

>seg_a[i+1]=dis_a;
何処まで書き込もうとしているのでしょうか?



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧