フォートランの授業での宿題について

このQ&Aのポイント
  • フォートランの授業で、10×10マスのエリアを移動するプログラムを作成する宿題が出されました。
  • エリアは壁で囲まれており、移動はキーボードから入力します。
  • ゴールに到達するとプログラムが終了しますが、答えがわからず困っています。ヒントを教えてください。
回答を見る
  • ベストアンサー

フォートラン

今、CPad for Salford FTN77を使った授業で宿題を出されたのですが最後の問題がわかりません。 問題文は10×10マスのエリアを@が移動するプログラムを作成せよというものです。なお(1,1)をスタート、(10,10)をゴールとし、10×10マスのエリアは壁で囲われており壁をすり抜ける等の移動はできないとする。移動はキーボードから入力して行う。例えばwが上、sがした、aが左、dが右に1マス移動するように設定する。ゴールしたらプログラムを終了せよ。という問題です。 何かひらめきそうなんですがなかなか答えがでずに困っています。 申し訳ないのですがヒントだけでも教えていただけないでしょうか?よろしくお願いします。

  • Dai09
  • お礼率78% (32/41)

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

  • ベストアンサー
  • kyo-mogu
  • ベストアンサー率22% (3398/15359)
回答No.2

 配列を使った問題でしょう?  (X,Y)の。 XもYも1~10の自然数。それ以下でもそれ以上も動けない。それぞれの座標の値の加算と減算で良いと思いますが。  XもYも10になれば終了。IF X=10 AND Y=10 ということでは?  コマの動きでXとYの値の計算だけの問題。その値に合わせて画面に表示させるとか別のルーチンで作れば良いでしょうね。  プロっぽくするには指定入力のキー以外は再入力を求めるメッセージとか出す。除算0エラーに成らないように成りそうな計算式にはチェックする条件式をいれてね。変数が0になったらどうするかとか。  プログラムで分からない時には、実際に物を紙などで作って、それぞれの変数をどうしたら良いか、書きだし見たり、作成中に変数を表示させて確認するプログラムを入れ込むとかすると良いよ。  フローチャートももう一度考えて見よう。そこで考えを整理して、プログラミングですよ。  

Dai09
質問者

お礼

ありがとうございます。おかげ様で理解できました。

その他の回答 (1)

回答No.1

・駒の座標(X座標、Y座標)を管理する変数X,Yを用意。(X,Yの範囲はそれぞれ1~10) ・駒の初期座標は(1,1) ・10×10の升目を表示するサブルーチンを用意する。駒座標と異なる場合は空白を、同じ場合は@を表示する。 ・駒を移動させるコマンド文字を入力する。 ・コマンド文字に応じて駒座標を更新する。(移動禁止をチェックする。例えば左端にいたら左には移動不可)

Dai09
質問者

お礼

ご丁寧にありがとうございます。プログラムちゃんとつくれました。

関連するQ&A

  • フォートランのプログラミング

    今、CPad for Salford FTN77を使った授業で宿題を出されたのですが最後の問題の課題7がわかりません。 何かひらめきそうなんですがなかなか答えがでずに困っています。 申し訳ないのですがヒントだけでも教えていただけないでしょうか?よろしくお願いします。

  • Fortranを学校と家で両方使うには?

    これから課題でFortranを使ってプログラムしなくてはなりません。Fortranが全くわからず時間もないので学校でプログラムした続きを自宅のパソコンでもしたいと思うのですが、学校で使っているツールと違っても大丈夫なのでしょうか? 過去の質問と回答からFTN77 Personal EditionやCPad for Salford FTN77などがフリーのツールだということは分かったのですが…。 大変初歩的な質問ですが、教えて頂けたらとても助かります。よろしくお願いします。

  • FortranプログラムからC言語で実装された関数を呼ぶ方法

    Windows Vista Home PremiumにFTN95をインストールしたPCにて、Fortranのプログラミングをし始め、「Cpad for Salford FTN77」を利用してプログラミングをしています(FORTRAN77・Fortran90ともに)。FTN95でのFortranプログラミングに際し、FortranプログラムからC言語で実装された関数を呼ぶには、どのように対処すれば可能になりますでしょうか?何分初心者ですので、拙い質問かと思いますが、何卒ご教示願います。

  • FortranプログラムからC言語で実装された関数を呼ぶには?

    Windows Vista Home PremiumにFTN95をインストールしたPCにて、Fortranのプログラミングをし始め、「Cpad for Salford FTN77」を利用してプログラミングをしています(FORTRAN77・Fortran90ともに)。FTN95でのFortranプログラミングに際し、FortranプログラムからC言語で実装された関数を呼ぶには、どのように対処すれば可能になりますでしょうか? ユーザーガイドによれば、「Fortranプログラム中に、C_EXTERNALという宣言をした関数は、Cの関数と同じくアクセスできるようになり、C側では、#extern <返り値>関数名(引数)を与えれば、Cの関数として呼び込むことができる。」とのことがかかれています。 実際に使っているファイルをいくつか書き出します。 <D:\fortran\sample.f> C_EXTERNAL WRITE 'WriteFile' : INTEGER*4 INTEGER*4 RESULT RESULT=WRITE() write(*,*) result return end <D:\fortran\sample.c> #extern int Writefile(int); <C:\Program Files\Silverfrost\FTN95\ftn95c.bat> ftn95.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 /link ちなみに、「Cpad for Salford FTN77」での実行/設定/実行/コンパイル時のパラメータは「/link /dreal」です。もちろんftn95.exeへのパスは通してあります。何が問題でしょうか? 何分初心者ですので、拙い質問かと思いますが、何卒ご教示願います。

  • 迷路プログラム

    迷路プログラムの応用問題なのですが、上手くいかずに困っています。 問題 2次配列を用いて、縦横X,Yマスの迷路を作ります。 マスの数はX,Y共に最大100までの値であれば、任意の数が振れます。 迷路の一番左下がスタートS、一番右上がゴールGになります。 マスへは上下左右にしか移動出来ません。 迷路の中には任意で入力したXマスがあり、Xが入っているマスには移動出来ません。 S,G,Xが入っていないマスには、1~9までの数字を任意に入力します。 それぞれの数字は、そのマスに移動するためにかかるコストを表しています。 スタートからゴールまで、コストがもっとも小さくすむルートのコストを出力するプログラムを作りたいです。 また、Xマスでゴールが不可能な場合は-1を返します。 単純にゴールを目指すのと違い、コストがあると遠回りをしなければならない可能性があるので、そのアルゴリズムが思いつきませんでした。 例 11*7マスの迷路の場合 マスの数:11 7 迷路の値の入力: 7 9 3 3 6 3 X X 7 9 G 1 1 3 2 6 6 8 4 8 4 5 7 2 9 1 3 4 8 4 9 8 9 9 7 4 2 5 X 8 6 9 9 4 4 7 3 8 X 8 X 5 7 X 7 1 7 1 8 5 6 5 9 5 6 2 S 5 5 2 9 4 2 2 9 5 1 出力: 最小コストは59 迷路からゴールに進むだけのプログラムは作れたのですが、応用問題としてコストが入ると急に難しくなりました。 コストが絡むとどういうアルゴリズムで動けばいいのか分かりません。アドバイスをお願いします。

  • FORTRAN: WIN SalfordFTN77 → LINUX g77 (セグメントエラー)

    今まで、Salford FTN77 を使用していたのですが、 この度、LINUXのg77でプログラムを動かすことになりました。 Salford FTN77で正常に動作していたのですが、g77では、実行時に「セグメント違反」が発生してしまいます。 現在わかっていることを列挙しますと… ・Salford FTN77では、問題なく動作する ・g77で、コンパイルまでは成功する ・Salford FTN77からの書き換えはおそらく成功(同種のプログラムで確認済み) ・プログラムをループ(=50)させているのですが、特定のループ回数(=13)でセグメントエラーになる。 ・エラー前の計算は正しく行われている ・ループ回数(=10)を引き下げると実行可能になる ・ループ毎にファイルのcloseも行っている ・スタックを限界まで引き上げて実行したが、同様のエラーが発生 ・特定のループ回数(=13)から、ある特定の変数(ここでは b)を、表示(write( , ) b )もしくは代入(a=b)しようとするとエラーが発生する。 ・エラーが発生する直前までは、ある特定の変数(b)は正しく出力でき、値に異常もない。 元々、簡単な数値計算をおこなう程度にしかプログラムを扱っていない生粋の初心者です。 ネットでセグメントエラーについて検索し、手当たり次第試してみたのですが、うまくいかず困っています。 ソースは公開できないのですが、何か心当たりのある方は、回答していただけると嬉しいです。 よろしくお願いします。

  • Fortran90/Fortran95→Fortran77

    大学の授業でFortranを使ったプログラミングを勉強しています。 以下の文が大学のPCに入っているコンパイラでは問題なくコンパイルでき実行できるのですが、家のPCだとコンパイルすることが出来ません(以下の文でエラーが出ます) 大学のPCの開発環境はFujitsu-FORTRANだと思います(^ ^; 家のPCはSalford FTN77 Personal Edition CompilerとCPad for Salford FTN77を組み合わせて使用しています なぜエラーがでるのか自分なりに考えた結果、Fortran90/Fortran95のプログラムをFortran77のコンパイラでコンパイルしているからだと思います(全くの勘違いだったら指摘して下さい) Fortran90/Fortran95の開発環境がフリーで整えばいいのですが、見つからないのでプログラムを修正したいと思います そこで、力を貸していただきたいのです 前置きが長くなりましたが、エラーが出る文は以下のところです open(8,file='freq_ex13.dat',action='write',status='replace') ここを、Fortran77のコンパイラでコンパイルできるようにアドバイスを下さい よろしくお願いします

  • javaで数独を解くプログラムについて

    java初心者です。 学校で数独を解けという問題が出て、問題の意味もまったくわからないのでヒントください。 問題 数独を解くプログラムを作成せよ。ただし、すでに埋まっているマスを入力する時にはi,j,n(改行)でひとつの数字を入力できるものとし、終了条件は、0,0,0を入力するとする。 問題用紙には1問だけ数独が載ってあるのですが、 初歩的な質問で申し訳ありませんが まずこのプログラムは、その1問だけ載っているマスが少し埋まっているプログラムを打ち込んでから解くプログラムを考えるのでしょうか? 普通、数独を解くプログラムとは、空いているマスにキーボード入力して、解くのでしょうか?それとも自動に動いて解くのでしょうか? はじめにプログラムをコンパイルしたときにどう言葉が出るようにすればようのでしょうか? 終了条件0,0,0とは、000を入力したら終わる?ということでしょうか? マスを作って、クリックすると数字が…というようなjavaは習ってなくコマンドプロントでコンパイルだけなので、数字を打って入力、エンターというだけで解くのだと思うのですが、まったくわからないです。 根本的にわからなくてすいません。 ぜひご回答よろしくおねがいします。

  • 再起を使って迷路を解くプログラムを作りたいのですが

    map[7][7]={{2,2,2,2,2,2,2}, {2,3,0,0,0,0,2}, {2,2,0,2,2,0,2}, {2,0,0,0,0,2,2}, {2,0,2,0,2,0,2}, {2,2,0,0,0,4,2}, {2,2,2,2,2,2,2}}; 2が壁0が道3がスタート4がゴール の配列で迷路を解く、プログラムを作りたいのですが 再起処理関数の中を、どう書いたらいいのかいまいちわかりません。 誰か教えてください。お願いします

  • 分からないです(;_;)

    分からないです(;_;) 1 さいころを振り出た目を返す(1~6の乱数を返す)ユーザ関数int dice(void)と、そのユーザ関数int dice(void)を用いてスタートからゴールまで一本道のすごろくを行うユーザ関数int sugoroku(int goal, int toss_max, int *toss_count)を作成せよ。int sugoroku(int goal, int toss_max, int *toss_count)は以下の条件をつける。 ・さいころを振るたびに、出た目と進んだ後のマスを表示する。 ・goalをゴールとし、ゴールにちょうど止まらなかった場合、ゴールを越えた分だけ戻る。 ・さいころをtoss_max回振るまでにゴールできた場合には1を返し、toss_max回振ってもゴールできなかった場合は0を返す。 ・さいころを振った回数の合計をtoss_countに入れる。 そして、実行結果例のように、goalとtoss_maxを入力するとすごろくを行って結果を表示するプログラムを作成する。 乱数を使用するときはstdlib.hをインクルードし、rand()を用いることで実現可能。 乱数の範囲を指定するには以下の公式を用いる。 最小値+(int)( rand() * (最大値 - 最小値 + 1.0) / (1.0 + RAND_MAX)) <実行結果> input goal. 11 input toss_max. 5 sugoroku start! pip = 2, mass = 2 pip = 4, mass = 6 pip = 5, mass = 11 goal!! toss_count = 3 input goal. 11 input toss_max. 5 sugoroku start! pip = 2, mass = 2 pip = 3, mass = 5 pip = 4, mass = 9 pip = 5, mass = 8 pip = 1, mass = 9 failure...