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

FORTRAN77の問題の質問です。

授業でこんな問題が出て困ってます。

あるクラスにN人います。
そのクラスの平均身長がXです。
そのN人の中で、X以上の身長の人数Aを印刷するプログラムを作れと言う問題です。
ここで、IF~THENを使いなさい。

分かる人がいたら教えてください。

PROGRAM TEST7
WRITE(*,*)\'x人分の身長データを入力
READ(5,*)x
WRITE(*,*)\'身長のボーダーラインを入力\'
READ(5,*)G
A=A-G
B=B-G
C=C-G
D=D-G
E=E-G
F=F-G
IF(A.GT.0) THEN

STOP
END

途中までは、こんな感じかと思ったのですが、行き詰ってしまいました。

A 回答 (3件)

これが fortran ??


logic が読めない??

この回答への補足

すみません。
まだ、習ったばかりでlogicが分かりません。
よければ、問題だけを見て、これを解くプログラムを
教えてくれると助かります。

補足日時:2009/07/05 18:55
    • good
    • 0

ロジック自体は何言語で書いても変わりませんので適宜修正してください。



1) X以上の身長の人数Aを印刷する
 -> 人数が分かればよく、詳細を出せとは書いてない。
2) IF~THENを使えって事ですが
 -> 問題レベルからして配列やDO文が使用されるとは思えない
以上を踏まえて次のように解釈しました。
※ところでFORTRANだよね?変数規約(整数型は宣言しない場合はI~Nで始まる変数)は有効だよね?
※最後に使ったのが…年前だから細かいことは忘れた。
※チビが寝よう寝ようってうるさいので文法を確認する時間がありません。

PROGRAM TEST7
  WRITE(*,*)\'x人分の身長データを入力
  READ(5,*)N
  WRITE(*,*)\'身長のボーダーラインを入力\'
  READ(5,*)L
  N=0
  I=0
10 I=I+1
  READ(5,*)M
  IF (M.GE.L) THEN N=N+1
  IF (I.LT.N) THEN GOTO 10
  WRITE(*,*)N
  STOP
  END

この回答への補足

早速の解答ありがとうございます。

*Fortranで、変数規約は有効です。

このプログラムをコンパイルしたところ出来ませんでした。
ここで、このように変えたのですが

PROGRAM TEST7
WRITE(*,*)'N人分の身長データを入力
READ(5,*)N
WRITE(*,*)'身長のボーダーラインLを入力'
READ(5,*)L
N=0
I=0
10 I=I+1
READ(5,*)M
IF(M.GE.L) THEN N=N+1
IF(I.LT.N) THEN GOTO 10
WRITE(*,*)N
STOP
END

Nとは人数のことですよね?
READ(5,*)M とは、生徒のデータを入れるんえしょうか?
IF (I.LT.N) THEN GOTO 10 の文は必要なんでしょうか?

すみませんが、よければ教えてもらえると助かります。

補足日時:2009/07/06 00:28
    • good
    • 0

時間が無かったので適当に1文字変数を使用しましたが、意味の分かる変数名を付けるのが正しいやり方です。


適当にやった為に、[人数]と[ボーダーライン以上の人数のカウンタ]の両方にNを使ってしまいました。別の変数を割り当ててください。

ロジックを日本語で説明しますので説明とプログラムが合っているかは自分で確認してください。[名称]を適当な変数に置き換えて考えてください。

10 [人数]を入力する
20 [身長のボーダーライン]を入力する
30 [ボーダーライン以上の人数のカウンタ]を0に初期化
40 [入力した人数のカウンタ]を0に初期化
50 [入力した人数のカウンタ]を+1
60 [身長]を入力
70 IF [身長]≧[身長のボーダーライン] THEN [ボーダーライン以上の人数のカウンタ]を+1
80 IF [入力した人数のカウンタ] < [人数] THEN 60行に戻る
90 [ボーダーライン以上の人数のカウンタ] を出力
100 STOP
110 END

この回答への補足

解答ありがとうございます。
早速、やってみた結果が以下のプログラムになりました。

PROGRAM TEST7
WRITE(*,*)'A人分の身長データを入力
READ(5,*)A
WRITE(*,*)'身長のボーダーラインBを入力'
READ(5,*)B
D=0
C=0
10 C=C+1
WRITE(*,*)'各々の身長のデータを入力'
READ(5,*)M
IF (M.GE.A) THEN D=D+1
IF (C.LT.A) THEN GO TO 10
WRITE(*,*)N
STOP
END

これでも、コンパイルに失敗するのですが、どこが間違っているか
教えて欲しいのですが…

*よく、IF文の終わりに、endifを書いてるのを見るのですが
 この場合には必要ないのでしょうか?

補足日時:2009/07/06 09:22
    • good
    • 0

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