• ベストアンサー

配列Xの最大値、最小値を求めるサブルーチンmaxminの作り方

配列Xに入っているデータの最大値、最小値を求めるサブルーチンmaxminの作り方を教えてください。(n:データ数) subroutine maxof(x,n,xmax,xmin) implicit real*8(a-h,o-z) real*8 C 最大値は変数xmaxに、最小値は変数xminに代入する  !!この部分が分かりません!! return end 教えてください。 よろしくお願いします。

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

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

!検証の都合上求められているサブルーチン以外の部分のプログラムも全て書いてます。 !個人的な信条の関係で質問文のソースコード自体を意図的に無視しているところもあります。 !(問題がmaxminを定義することなのにmaxofサブルーチンを定義するようなソースになっている地点で矛盾している) !ヒストグラムはやらない program test !暗黙の型宣言など邪道だ(笑) !こうして書いてみると !構文が非常にVBA/VB6に似ていて,派生元派生先であることを強く実感する。 implicit none integer::n real*8::x real*8::y real*8,allocatable,dimension(:)::arr allocate(arr(5)) arr(1) = 57d0 arr(2) = 24d0 arr(3) = 38d0 arr(4) = 92d0 arr(5) = 37d0 n = ubound(arr,1) call maxmin(arr,n,x,y) print *,x,y contains !fortranは参照渡しらしい。 !個人的には二つのことを同時にやるんじゃなくて, !max関数とmin関数だけを定義したい。 subroutine maxmin(x,n,xmax,xmin) ! real*8,dimension(:)::x real*8::xmax real*8::xmin integer::n integer::i xmin = x(1) xmax = x(1) do i = 2,n if (xmax < x(i)) then xmax = x(i) end if if (xmin > x(i)) then xmin = x(i) end if end do end subroutine end program

0124ponta
質問者

お礼

とても参考になりました。 留年は免れそうです。 どいつもこいつも冷やかしの回答ばっかりだったので、 あなたの回答はとてもうれしいものです。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

使っている言語とか処理系とか規格を書いてくれないかなぁ. でも, こんなのわざわざサブルーチンで作るかねぇ. 何も考えずに maxval/minval で終わりなのに.

0124ponta
質問者

補足

大学の勉強でFortranを使っているからです。 マジ分からん。 助けて!!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 配列 x に入っているデータの最大値、最小値を求めるサブルーチンとそのヒストグラムの作り方

    配列 x に入っているデータの最大値、最小値を求めるサブルーチン maxmin(x,n,xmax,xmin) を作り方を教えてください。 n はデータ数。 最大値、最小値はそれぞれ xmin, xmax に代入する。 次に、そのサブルーチンを用い、x に入っているデータのヒストグラムを作成するプログラムを作り方も教えてください。 (途中までしか分かりません) implicit real*8(a-h,o-z) real*8 x(10000) integer count(100) ndiv = 40 分割数は 40 にする n = 10000 データ数は 10000 dummy = rand(13) 乱数の初期化 do 10 i=1, n sum = 0.0d0 do 20 j=1,5 sum = sum + rand(0) 5個の乱数の和 20 continue x(i) = sum 10 continue call maxmin(x,n,xmax,xmin) 最大・最小値を求める dx = (xmax - xmin)/ndiv 分割幅 !!count をゼロで初期化する do ループを追加!!(よく分かりません) !!ヒストグラムを作成する do ループを追加!!(よく分かりません) do 100 k=1, ndiv write(6,*) xmin+(k-0.5d0)*dx, count(k) データの中心値と個数を出力 100 continue stop end subroutine maxmin(x,n,xmax,xmin) implicit real*8(a-h,o-z) real*8 x(*) !!この部分を作成してサブルーチンの完成のさせ方が分かりません!! return end ところどころが分かりません。 とても困っていますし、急いでいます。 だれか教えてください。 よろしくお願いします。

  • 配列xのヒストグラムを求めるサブルーチンhist(x,n,ndiv,count)の作り方

    配列xに入っているデータのヒストグラムを求めるサブルーチンhist(x,n,ndiv,count)の作り方 が分かりません。 subroutine hist(x,n,ndiv,count) implicit real*8(a-h,o-z) real*8 x(*) integer count(*) C まずデータの最大値、最小値を求める: call maxmin(x,n,xmax,xmin) C xminからxmaxまでをndiv等分する。分割幅は dx = (xmax-xmin)/ndiv !!この部分のプログラムが分かりません!! return end 教えてください。 よろしくお願いします。

  • プログラムの勉強をしているのですが・・・・・・

    以下のプログラムを組もうとしているのですが、ある所から分からなくなりました。ぜひ、教えてください。 配列x(1)=3, x(2)=10, x(3)=4, x(4)=4, x(5)= 1 の最大値と最小値平均値を計算する関数副プログラムmaxmin( x, N, xmax, xmin, xave)を作る。  integer x(5) N=5 x(1)=3 …   ←省略 call maxmin( x, N, xmax, xmin, xave) write(6,*) “max=", xmax write(6,*) “min=“, xmin write(6,*) “xave=“, xave end subroutine maxxmin(x,N,xmax,xmin,xave) ここから先が分かりません。どうしたら良いのでしょうか? 分かる方、ぜひ教えてください。 よろしくお願いします。 ちなみに使ってるエディタはxemacsです。

  • 配列 x に入っているデータの個数を求める関数の作り方

    配列 x に入っているデータのうちで、値が正(つまり x(i) .gt. 0.0d0 ) であるデータの個数を求める関数 numpos(x,n) を作り方を教えてください。n はデータの個数。 implicit real*8(a-h,o-z) real*8 x(1000) dummy = rand(13) 乱数の初期化 n = 1000 do 10 i=1,n x(i) = rand(0)-0.4d0 テストデータ 10 continue write(6,*) 'numpos =', numpos(x,n) stop end function numpos(x,n) implicit real*8(a-h,o-z) real*8 x(*) この部分が分かりません。(関数副プログラムなので、関数の値、つまり正のデータの個数は、関数名と同じ名前の変数、つまり numpos という名前の変数へ代入すること、らしいです。) return end とても困っていますし、急いでいます。 誰か助けてください。 よろしくお願いします。

  • リファレンスをサブルーチンの戻り値にしてもOKですか?

    ■ サブルーチン内部で処理した結果を格納した、配列、ハッシュ、スカラーなどのデータを戻り値として利用する必要があります。その場合、どうするのが標準的なやり方でしょうか? ■ return (配列へのリファレンス, ハッシュへのリファレンス, スカラー); などとやってしまっても問題はないでしょうか? ■ 下のプログラムを試したところ、予想に反しちゃんと 「31415」と表示されました。 #!/usr/bin/perl -w sub subroutine{ my @a = (3, 1, 4, 1, 5); return \@a; } my $b = subroutine{}; print @$b; ■ サブルーチン内部で使用した変数へのリファレンスをサブルーチン 外で使っていいのだろうか? サブルーチンの処理が終了した時点でサブルーチン内部で使用した 変数はメモリーから消去されるのかと思ったものですから。

    • ベストアンサー
    • Perl
  • 配列Xの平均値を求める関数副プログラムaver(x,n)の作り方

    配列xに入っているデータの平均値を求める関数副プログラムaver(x,n)の作り方がよく分かりません。 function aver(x,n) implicit real*8(a-h,o-z) real*8 x(*) !!この部分が分かりません。!! return end 教えてください。 よろしくお願いします。

  • 【Perl】サブルーチンから多次元配列を戻したい

    【Perl】サブルーチンから多次元配列を戻したい サブルーチン内で作った2次元配列と1つの変数(例:@listと$i)をリターンしたいのですが、どのようにすれば良いでしょうか? ↓サブルーチン(calc) return (@list, $i); ↓メイン my $a = 12; my (@list, $i) = &calc($a); 間違っていると思いますが、現時点でのプログラムを一部書きました。 ご回答よろしくお願いします!

    • ベストアンサー
    • Perl
  • サブルーチンの戻り値

    すみません、教えてください。 サブルーチンの戻り値に、複数の配列を指定したいと思っています。 return(@data1,@data2,@data3,@data4); これら配列を戻り値として渡す時、4つの配列として渡す場合 サブルーチンを呼ぶ時はどのように記述すればよいでしょうか? それぞれ、配列のデータ量が違ったりしています。 やはり一度、一つの配列としてそれを区分していくやり方しかないですかね? よろしくお願いします。

    • ベストアンサー
    • Perl
  • 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

  • 最大値、最小値の求め方

    フォートランで、ある関数f(x)の最大値と最小値を求めたいのですがうまく出来ません。最大値と最小値のみを表示させたいのですが、下の文をどうにかして出来ないでしょうか?どなたかお願いします。 x=0 do  x=x+0.1 if(x>10) stop y=f(x) write(6,10) x,y end do 10 format(' ',f5.2,5x,f10.5) end