FORTRAN77のプログラミング教えてください!

このQ&Aのポイント
  • FORTRAN77のプログラムの空白部分を教えてください。
  • 九州・沖縄8件の名前、面積、人口が書かれたファイルを読み込み、面積、人口、人口密度の大きい順に県名と値を出力するプログラムの完成をお願いします。
  • 主プログラムは数、名前、値を与えるだけで、作業はサブルーチン副プログラムに任せることとします。副プログラムでは論理型変数を使う手法を使用してください。
回答を見る
  • ベストアンサー

FORTRAN77のプログラミングです。

FORTRAN77のプログラミングです。 プログラムがあと空白の部分がわからないんで教えてください。 九州・沖縄8件の名前kenと面積(km2)menと人口(人)jinが書かれたファイル'kyusyu.txt'がある。これを読み、面積、人口、人口密度(人/km2)mituの大きい順に県名と値を書き出すプログラムを完成させよ。(型宣言も必要) 主プログラムは、数、名前、値を与えるのみで、作業本体はサブルーチン副プログラムjunに任せる事とする。副プログラムは論理型変数を使う手法。 C main ken real men(8),jin(8),mitu(8) open (1,file='kyushu.txt') do 1 i=1,8 1 read (1,*) ken(i),men(i),jin(i) close (1) write (*,*)' 面積' call jun (8,ken,men) write (*,*)' 人口' call jun (8,ken,jin) write (*,*)' 人口密度' call jun (8,ken,mitu) end c sub subroutine jun (kazu,namae,atai) namae(47) atai(47) mark(47) do 1 i=1,kazu 1 mark(i)=.false. return end ここまではわかりました。空白の部分をお願いします。

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

  • ベストアンサー
回答No.2

kenとか、subroutine jun (kazu,namae,atai)下の行のnamae(47)とかの型宣言から書かれてないようですね。変数の名前から考えて、どの型を宣言するか考えてください。 間の空白は、今までの課題から使えそうなのを抜き出してまずやってみるのがよいと思います。他にもFortran77の教科書があると思うので、たとえばdo文がわからなかったら、教科書の後ろの索引からdo文を探して調べるなどしてがんばってください。 参考になるはわかりませんがURLを↓に http://www.oklab.org/program/fortran77.html

その他の回答 (1)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

いやいやいや ほとんど何もできていないじゃない。 まずは何をしなくちゃいけないかを 箇条書きなり フローチャートなりで 表現するところからはじめるのよ。 すくなくともソートくらいは実装してからにして欲しいわね。

関連するQ&A

  • FORTRAN77のプログラミングを教えて下さい。

    FORTRAN77のプログラミングを教えて下さい。 九州・沖縄8件の名前kenと面積(km2)menと人口(人)jinが書かれたファイル'kyusyu.txt'がある。これを読み、面積、人口、人口密度(人/km2)mituの大きい順に県名と値を書き出すプログラムを完成させよ。(型宣言も必要) 主プログラムは、数、名前、値を与えるのみで、作業本体はサブルーチン副プログラムjunに任せる事とする。副プログラムは論理型変数を使う手法。

  • プログラミング Fortran

    以下のプログラムの空白部分が分かる方、是非力を貸して下さい!!(> <) 次の数列ai=1,…,N(1≦N≦100)                  ai=1, ai+1=2ai-3 に対して               S=Σai(※Σの上はN、下はi=1) を計算・表示するプログラムは以下のようになる。ここでは整数Nは端末から入力する。 common num,a(100),sum read(5,*) num call [ ] call pqrstu write(6,*) ‘a=’,(a(i),i=1,num) write(6,*) ‘sum=’,sum end * subroutine abcdef common num,a(100) a(1)=[ ] do 20 i=1,num a(i+1)=a(i)*2.0-3.0 20 continue end * subroutine pqrstu common [ ] sum=[ ] do 20 i=1,num sum=[ ] 20 continue end よろしくお願いします!!

  • fortranでデータの抜き出しをしたい

    プログラムは、ド素人ですが急用です。 以下のようなCSVファイルがあります。 ido,keido,point 134.603057155416,34.1005169871047,1.07 134.603270155368,34.1005169871253,0.9 134.603499155317,34.1005129871483,0.76 134.603713155269,34.100512987169,0.54 134.604354155125,34.1005059872324,0.19 134.604567155077,34.100505987253,0.39 134.604796155026,34.100501987276,0.44 このようなものが100000個続く。 _________________________ データ数が100000個があります。 これらから、例えば、0以上0.5未満でido,keido,pointを 抜き出して、新たなCSVファイルを形成したいのです。 上の中なら、 134.604354155125,34.1005059872324,0.19 134.604567155077,34.100505987253,0.39 134.604796155026,34.100501987276,0.44 だけが抽出されたものです。 イメージとしては、(ファイル名は適当です。) OPEN (5,FILE='motod.csv', status='old') OPEN (5,FILE='newd.csv') do 10 i=1,100000 READ(5,*) ido,keido,atai IF(atai.GE.0.00).and.IF(atai.LT.0.50)then WRITE(5,*)ido,keido,atai 10 continue   stop END になりますが、配列などが必要な気がします。 新たにお示しいただくか、継ぎ足したプログラムをお示しください。 また、今後のために参考になりそうなサイトもご紹介いただけると 幸いです。 空白がおかしいところがあろうかと思いますが、 よろしくお願いいたします。

  • fortran errorについて

    fortranを勉強していたのですがエラーがでてしまい、何時間かけても理解できなかったので質問させてください。 以下プログラム program test !ここからメインルーチン !前準備 配列の用意 implicit none integer N integer,dimension(0:N,0:N) :: A integer :: i,j,k read * ,N !初期状態の代入 do i=0,N do j=0,N A(i,j)=0 end do end do do i=N/2,N-1 A(N/2,i)=1 end do do i=N/2,N-1 A(N/2+1,i)=-1 end do !ループ 50回ループさせる do k=0,50 !状態の表示 call visualize !サブルーチン visualize subroutine visualize do i=0,N do j=0,N if(A(i,j)== 1) write(*,'(A1)',advance='NO') "*" if(A(i,j)== 0) write(*,'(A1)',advance='NO') " " if(A(i,j)==-1) write(*,'(A1)',advance='NO') "+" end do write(*,*) end do !end subroutine visualize call insert !サブルーチン insert subroutine insert do i=0,N do j=0,N if(A(i,j)== 1) A(i,j)=-1 if(A(i,j)== 0) A(i,j)=max(0,A(i-1,j),A(i,j-1),A(i,j+1),A(i+1,j)) if(A(i,j)==-1) A(i,j)=0 end do end do !end subroutine insert end do end program test これでコンパイラすると In file test.f90:48 subroutine visualize 1 Error: Unclassifiable statement at (1) In file test.f90:69 subroutine insert 1 Error: Unclassifiable statement at (1) とでます いろいろ調べたのですが全くわかりませんでした できればよろしくお願いします

  • FORTRAN→Cに翻訳

     どなたか、次のFORTRANのプログラムを、Cに、翻訳して頂けないでしょうか。C++ではなく、Cです。ANSI準拠のCでお願いします。  プログラムの内容は、最小二乗法による計算プログラムです。MS-DOS Ver3.3~6.0の頃の、MS FORTRANコンパイラ仕様のものです。その頃持っていたFORTRANの本も処分してしまい、今からFORTRANを学びなおすのにも多大な労力と時間がかかりそうなので、Cに翻訳して頂ければ大変ありがたいです。よろしくお願いします。 (“□”はタブ) ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ C□LEAST SQUARE APPROXIMATION □PROGRAM MAIN9 □DIMENSION X(100),Y(100),S(0:18),T(0:9),SM(10,10),TV(10),AV(10) □WRITE(*,*) 'N ?' □READ(*,*) N □WRITE(*,*) 'x1,x2,..,xn ?' □READ(*,*) ( X(I),I=1,N ) □WRITE(*,*) 'y1,y2,..,yn ?' □READ(*,*) ( Y(I),I=1,N ) □WRITE(*,*) 'M ?' □READ(*,*) M □DO 110 K=0,M*2 □□VS=0. □□DO 100 I=1,N □100□VS=VS+X(I)**K □□S(K)=VS □110□CONTINUE □□DO 130 K=0,M □□□VS=0. □□□DO 120 I=1,N □120□VS=VS+Y(I)*X(I)**K □□□T(K)=VS □130 CONTINUE □□DO 140 I=1,M+1 □□□DO 140 J=1,M+1 □□□□K=I+J-2 □□□□SM(I,J)=S(K) □140 CONTINUE □□DO 150 I=1,M+1 □150 TV(I)=T(I-1) □□CALL SIMULE( AV, SM, TV, M+1 ) □□DO 160 I=1,M+1 □160 WRITE(*,1000) I-1,AV(I) □1000 FORMAT(1H ,'A',I1,'=',F10.5) □□STOP □□END ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆

  • 文字の分割について

    分からないことが一つ出てきました。 それは、フレーム間でのデータのやり取りで、 画面が2つからのフレームからなっており、左側のフレームでラジオ式のチェックボックスにチェックを入れるとそのvalueで指定している値が分割されて、右フレームのそれぞれのTextBoxに値が渡される。 例えば、valueで"国/県/都市"と値がある場合、右のフレームに引き渡されたときには、国、県、都市のTextboxに分割されて値が入るようにしたいのです。 そこで、以下のように左側のフレーム内(値を渡すほう)組んでは見たのですが・・・ function mname(){ var val; with(document.form1){ for(var i=0;i<list.length;i++){ if(list[i].checked){ val = list[i].value; } namae = new Array(val); namae[i] = "<cfoutput>#getnamae.kuni#/#getnamae.ken#/#getnamae.tosi#</cfoutput>"; data = namae[i].split("/"); parent.right.document.myform.kuni.value = data[0]; parent.right.document.myform.ken.value = data[2]; parent.right.document.myform.tosi.value = data[3]; } } } ちなみに、ColdFusionを使っているので、namae[i]のところは、こうなっています。まずは、基本的なロジックが間違っていると思いますがよろしくお願いします。

  • fortran モンテカルロ法

    モンテカルロ法により円周率πを計算するプログラムを作ったのですが、以下のプログラムでモンテカルロ法から推定された円周率piの値が実行すると大きな数字になってしまって、うまく計算できてない見たです。式に問題があるのでしょうか?教えて下さい。 rogram list1_9 implicit none real(8) x, y, pi, pi0 integer :: n, i, im = 2**20 pi0 = 2.0d0*acos(0.0d0) n = 0 do i = i, im call random_number(x) call random_number(y) if(x ** 2 + y ** 2 <= 1.0d0) n = n + 1 enddo pi = 4.0d0*dble(n)/dble(im) write(*,*) ' pi, pi0, er = ', pi, pi0, pi-pi0 end program list1_9

  • fortran 上三角行列

    一様乱数を要素とする上三角行列を設定するプログラミングを行ったのですが以下のプログラムで call random_number(a(1 : j , j)) a(j+1 : n , j ) = 0.0d0 の部分を理解した上で実行したのですが、実行結果がそれぞれの列に同じ一様乱数が表示されました。プログラム内容と実行結果が納得のいく物ではないのですが、果たして以下のプログラムは上三角行列を設定する正しく実行される物となっているのでしょうか?教えて下さい。よろしくお願いします。 program list2_8 implicit none real(8), allocatable :: a(:,:) integer n, i, j write(*,'(a)', advance ='no') ' input n (1<=n<=100) :' read(*,*) n if (n < 1 .or. 100 < n) stop 'stop, n is invalid' allocate (a(n,n)) call random_seed do j = 1, n call random_number(a(1:j,j)) a(j+1:n,j) =0.0d0 enddo do i = 1, n write(*,'(100e12.4)') a(1, 1:n) enddo end program list2_8

  • fortran エラーについて

    fortranで、副プログラムを使ってデータを昇順または降順に並べ替えるプログラムを入力して実行しようとしたところ、 ・Unexpected junk in formal argument list at (1) ・Two main PROGRAMs at (1) and (2) という2つのエラーが出ました。 これらの改善方法を教えて頂きたいです。 初心者ですので簡単なところで間違えている可能性もありますが、ご指摘いただければ幸いです。 以下、実際に入力したプログラムです。 ------------------------------ implicit none integer::i,n real::x(1000),a(1000),b(1000) n=1000 open(10,file='input-data-1.txt') do i=1,n read(10,*) x(i) end do close(10) open(10,file='output-data-1.txt') do i=1,n call koukan(i,x(i),a(i),b(i)) write(10,'(i4,2f10.3)') i,a(i),b(i) end do close(10) stop end subroutine koukan(i,x(i),shoujun,koujun) implicit none integer::i,n,made real::x(1000),w,shoujun,koujun do made=n-1,1,-1 do i=1,made if(x(i)>x(i+1)) then w=x(i) x(i)=x(i+1) x(i+1)=w end if end do end do shoujun=x(i) do made=n-1,1,-1 do i=1,made if(x(i)<x(i+1)) then w=x(i) x(i)=x(i+1) x(i+1)=w end if end do end do koujun=x(i) return end ------------------------------

  • FORTRAN subroutineと配列と繰り返し

     以下のように二次元配列の場合でsubroutineを使うときに、主プログラムで2重Doループ(iとj)で繰り返しをしているのですが、すでにsubroutineでDoループ(i)を用いて計算しています。これではsubroutineの利点をうまく使えていないと思うのですが、subroutineを使って配列、Doループをきれいにする方法をどなたか教えていただけませんか。  実際は4重ループ、4次元配列なので、プログラムをわかりやすくするためにサブルーチンを使いたいと思っています。 -------------------------------------------------------------- program S real,dimension(5,5) :: B real,dimension(5) :: A integer :: i,j do j=1,5 CALL sub1(A) do i=1,3 B(i,j)=A(i)*j write(*,*) B(i,j) end do end do end program S subroutine sub1(A) real,dimension(5) :: A integer :: i do i=1,3 A(i)=3.*i end do end subroutine sub1