ショッピングモール  プラセンタ 原液  プラセンタ化粧品  コエンザイムQ10(CoQ10)化粧品


【掲示板ご利用上の注意】

 ※題名は具体的に!
 ※学校の課題の丸投げ禁止!
 ※ソースの添付は「HTML変換ツール」で字下げ!
 ※返信の引用は最小限に!
 ※環境(OSとコンパイラ)や症状は具体的に詳しく!
 ※マルチポスト(多重投稿)は謹んで!

 詳しくはこちら



 本当はこんなに大きく書きたくはないのですが、なかなか守っていただけなくて…。
 守ってくださいね。お願いします。(by管理人)

C言語ソース⇒HTML形式ツール   掲示板1こちら


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

No.3365

実行時に予期せぬ動作をします
投稿者---とりかい(2005/01/28 03:22:14)


今、ダイクストラ法による最短経路を求めるプログラムを作成しています
以下のソースは結果表示に使う関数をテストしたものです。
コンパイルはとうり、実行するときに正しく実行できる場合とできない場合があり、文法的にまずい部分があるのか、原因がよく分かりません。
OSはW2kコンパイラはLSI-C86を使っています。
もしよければ、教えてください。

#include <stdio.h>
/* 構造体の宣言 */
struct CityKeiro{      
    float kyori;    /*スタート地点からの距離を表す*/
    int prev;      /*直前にいた都市を表す*/
    int visited;    /*最短経路が確定したかどうか*/
};

/* 定数の宣言 */
#define CITY_NUM 6        /* 都市の数*/
#define NOT_ARRIVE 99999    /* 直接行けない事を表現*/
#define START 1    /* 都市1からスタート*/
#define TRUE 1        /* 距離確定を表す */
#define FALSE 0        /* 距離未確定を表す */


/* 関数のプロトタイプ宣言*/
void Display_kekka(int goal,struct CityKeiro keiro[]);  


int main(void){
    int mokutekiti=5;
    struct CityKeiro keiro[CITY_NUM+1]
        ={{NOT_ARRIVE,0,0},{0,0,1},{3,1,1},{2,1,1},
            {3,3,1},{4,4,1},{NOT_ARRIVE,0,1}}
        ;
    /*結果を出力する関数*/
    Display_kekka(mokutekiti,keiro);
    
    return 0;
}

void Display_kekka(int goal,struct CityKeiro keiro[]){
    int count;
    int genzai;
    int kekka[CITY_NUM+1];
    for(genzai=0;genzai<=CITY_NUM;genzai++){
        kekka[genzai]=0;
      }
    count=1;
    kekka[count]=goal;
    genzai=goal;
    
    do{
        printf("%d",count);
        count++;
        kekka[count]=keiro[genzai].prev;
        genzai=kekka[count];
    }while(genzai!=START);
    printf("\n都市 %d までの最短経路は\n",goal);
    while(count!=2){
        printf(" %d →",kekka[count]);
        count--;
    }
        printf(" %d  で\n最短時間は %3.2f です。\n",goal,keiro[goal].kyori);
}



この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> 詳しい状況を書くのを忘れてました。 3366 とりかい 2005/01/28 03:27:31


No.3366

詳しい状況を書くのを忘れてました。
投稿者---とりかい(2005/01/28 03:27:31)


予期せぬ動作とは関数自体が実行される時と関数が実行されない時があるということです。


この投稿にコメントする

削除パスワード

No.3373

Re:詳しい状況を書くのを忘れてました。
投稿者---HALLS(2005/01/28 20:37:13)


>予期せぬ動作とは関数自体が実行される時と関数が実行されない時があるということです。

Display_kekka関数が、ですか?
しかし、投稿されたプログラムではそうなることはないと思いますが…。

もしかして、ダイクストラ法の本体部分などを含めた、完全版のプログラムで
そのようになる、ということでしょうか?


この投稿にコメントする

削除パスワード

No.3375

Re:詳しい状況を書くのを忘れてました。
投稿者---とりかい(2005/01/29 02:01:26)


お返事ありがとうございます。
関数が実行されな場合があるというのは、Display_kekka関数のみの
プログラムを実行したときになりました。
main関数内ではディスプレイに表示するような処理をしていないので
ディスプレイ表示がされなかった為、関数が実行されてないと判断しました。

出力仕様は
最短経路は
1→2→4 で 最短時間は5.00

と言うようにしたくてプログラムを書きました。

実はこのような場所に自分のプログラムを載せるのは初めてで、
関数、変数の命名法や書式、コメント等、こうした方が良いよ
というような指摘が有ればお願いします。





この投稿にコメントする

削除パスワード

No.3377

Re:詳しい状況を書くのを忘れてました。
投稿者---HALLS(2005/01/29 18:58:38)


>関数が実行されな場合があるというのは、Display_kekka関数のみの
>プログラムを実行したときになりました。

そのとき、main関数はどうなっていたのですか?

mainn関数がなくて、Display_kekka関数のみからなる実行ファイルを
作成することはできません。リンク時にエラーが発生します。

関数が実行されない場合があるというのは、もしかして
上記の理由のため実行ファイルの作成がうまくいっていない、
ということではありませんか?念のためにご確認ください。

ちなみに私のところでは、くだんの内容をそのままコピー&ペーストした
状態で正しく実行ファイルを作成でき、もちろん実行もできます。


この投稿にコメントする

削除パスワード

No.3379

Re:詳しい状況を書くのを忘れてました。
投稿者---とりかい(2005/01/30 13:55:46)


HALLSさん,検証ありがとうございます。

>>関数が実行されな場合があるというのは、Display_kekka関数のみの
>>プログラムを実行したときになりました。

自分の表現が伝わりにくかったと思います。
Display_kekka関数のみのプログラムとはダイクストラ法の関数を含まない
Display_kekka関数のみのmain関数を指しています。

実行したのは貼り付けたものと全く同じです。

main関数部分が実行されているかどうか分からなかったので
main関数の中にディスプレイに”実行中”と表示させるようにしました。
自分の場合20回くらい試したんですが、1、2回の割合でディスプレイに全く表示されないということが起こりました。

普段、コンパイラを含むパッケージソフトの実行ボタンをおして実行しているので、今度はDOS窓から、直接コマンド入力で実行してみると、
こちらは全く失敗しませんでした。

ということで、原因は良く分かりませんがパッケージソフトによるものだと
思われます。
お騒がせしました。






この投稿にコメントする

削除パスワード

No.3378

Re:詳しい状況を書くのを忘れてました。
投稿者---トマトおでん(2005/01/30 02:54:29)


検討違いかもしれませんが、
入力データ(goal, keiro)の種類によっては、
Display_kekka関数は不具合が発生しそうです。

・genzai == START にならない場合、アクセスエラー???
・・・

投稿されているデータだと、
HALLS氏が書かれているように問題ないように見えます。


この投稿にコメントする

削除パスワード

No.3384

Re:詳しい状況を書くのを忘れてました。
投稿者---とりかい(2005/01/31 08:11:15)


トマトおでんさん、ご指摘ありがとうございます

>・genzai == START にならない場合、アクセスエラー???

指摘のとおりです。この場合、goal=6のような場合、上手くいかないので
これから改造したいと思います。

HALLSさん
再現性のない問題を持ち込んで申し訳ありませんでした。


この投稿にコメントする

削除パスワード

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




掲示板提供:Real Integrity