• ベストアンサー

データ構造とアルゴリズムの問題です

要素数がnである配列aの要素の合計を求めるアルゴリズムのループ端によるフローチャートを完成せよ(後判定繰返し) sum =a[0] i=1; do{sum=sum+a[i]; i++; }while i<n; a[0] → sum 1 → i 後判定繰返し | □→sum; i+1 → i | □ 後判定繰返し □の中を埋めるんですが教えてください

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

  • ベストアンサー
  • neuron-x
  • ベストアンサー率52% (139/266)
回答No.2

同じような質問を複数されていますが、宿題か何かでしょうか。 ・http://okwave.jp/qa/q8787993.htmlhttp://okwave.jp/qa/q8787999.html もしそうであれば、誰かに答えを聞くのでは無く、自分で理解できるようになる事が重要ですよ。「教えてください」という事なので、答えでは無く「解き方」について書いてみます。 ソースコードは提示してあるので、その処理の流れをフローチャートで表現するという問題ですね。 この場合、ソースコードの意味(どのような処理なのか)と、フローチャートの記述方法を理解できれば解けるはずです。 「解けない」と言うことは、どこかでつまづいていると思うのですが、どの部分が分からないのでしょうか? どこまで理解していて、どの部分が分からないのかを教えていただけると、適切な回答が得られると思いますよ。

その他の回答 (3)

回答No.4

sum + a[i]じゃねえの

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

プログラムに書いてありますが。

関連するQ&A

  • データ構造とアルゴリズムの問題です

    要素数がnである配列aの要素の最大値を求めるアルゴリズムのループ端によるフローチャートを完成せよ(前判定繰返し) max =a[0] i=1; while i<n do{ if(a[i]>max)max=a[i]; i++; } a[0] → max 1 → i 前判定繰返し □ | yes a[i]□max-----| |        □      NO i+1 → i 前判定繰返し □の中を埋めるんですが教えてください

  • フローチャートの書き方

    要素数がnである配列aの要素の最大値を求めるアルゴリズムのループ端によるフローチャートを完成せよ(前判定繰返し) max =a[0] i=1; while i<n do{ if(a[i]>max)max=a[i]; i++; } フローチャートでかくとどうなりますか?

  • アルゴリズムの問題です

    以下のフローチャートは、基本選択法でデータを昇順(小→大)にソートしたものなのですが、整数の一次元配列に格納されているデータ(100個)を降順(大→小)にソートするフローチャートを作成するには、どこの部分を変化させればいいのか教えていただけませんか? 手書きなので見にくいですがよろしくお願いします。        開始        l 整数配列A(100)と整数変数I,J,N,P,MIN,TEMPを宣言        l   データの個数N の値を読む        l     ループ1の開始     I = 1,2,3, ・・・,N        l      A(I)の値を読む        l      ループ1の終了        l      ループ2の開始      I = 1,2,3, ・・・,N        l      A(I)の値を出力        l      ループ2の終了        l      ループ3の開始      I = 1,2,3, ・・・,N-1        l      MIN = A(I)        l       P = I        l      ループ4の開始     J = I+1,I+2,I+3, ・・・,N        l        l     yes      A(J) < MIN  ーーーーーー MIN = A(J)         l no               l        l                P = J        l                 l              l←ーーーーーーーーーーー          l                  ループ4の終了        l       TEMP = A(I)        l       A(I) = A(P)        l       A(P) = TEMP        l      ループ3の終了        l      ループ5の開始      I = 1,2,3, ・・・,N        l      A(I)の値を出力        l      ループ5の終了        l        終了

  • アルゴリズムの正当性について

    線形探索法のアルゴリズムの擬似コードを書いて、そのアルゴリズムの正当性をループ不変式を用いて証明するという課題があります。 擬似コードは以下のような流れにしようと思いますが、この場合成り立つループ不変はどのようなことになりますか? 配列A[a1..an]に対してv=A[i]ならば添字iを、vがAの中になければNILを出力するアルゴリズムです。 for i ←1 to N if A[i] = v return i return NIL

  • 隣接交換法のアルゴリズムについて

    隣接交換法(バブルソート)のアルゴリズムについて悩んでいます。 Q:配列「データ」には10個の要素があり、この配列「データ」を降順に並び替えるための隣接交換法アルゴリズムは? 一応、自分なりにアルゴリズムを考えたのですが、ループを抜けるチャンスが、【『要素』の数-1】回あるといわれ、それを考慮したアルゴリズムを考えよ、と言われました。 (そのチャンスというのが、どこにくるのかがわかりません。) http://oshiete1.goo.ne.jp/kotaeru.php3?q=290051も参照しましたが、よくわかりません。 すみませんが、教えていただけないでしょうか?よろしくお願いします。

  • アルゴリズムによる整列方法について

    以下の問題を授業外課題として出されましたがわかりません。身近に分かる人物もいません。 先生も答えてくれません。 解答お待ちしております。 1.以下の文章の空欄を埋めよ.但し,((14)),((15)) については,選択肢から最も適切なものを選び,記号で答えよ.加えて,解答の過程を詳しく述べよ。 高速な整列として以下のアルゴリズムによる方法を考える.以下では,整数データを昇順に配列するも のとする. 前段階として,データを半々に二つのグループ I と II に分割し,それぞれを独立に整列する. while (両グループに要素が残っている) do    if (グループ I の最小要素 < グループ II の最小要素)    then  グループ I の最小要素を出力場所に移し,グループ I からは削除する    else  グループ II の最小要素を出力場所に移し,グループ II からは削除する    endif done while (グループ I に要素が残っている) do  グループ I の要素を出力場所に移し,グループ I からは削除する done while (グループ II に要素が残っている) do  グループ II の要素を出力場所に移し,グループ II からは削除する done この整列に要する計算量 T(n) を求める.但し,n は整列するデータの量である.前段階の整列では,半分のデータ量の整列を 2 回行うので ((1)) だけの計算を要する.次に,3 個の while 反復のいずれについても, 「反復を 1 回行うごとに要素が一つだけ出力場所に移動する」 ことから,3 個を合計すると反復の中身は正確に ((2)) 回実行されることが分かる.1 回の実行に a だけの時間がかかるものとすれば,全体で ((3)) となる.従って次の関係式が成り立つ. T(n) = ((4)) 簡単のため,n = 2^p であるとすると, T(n) = ((5))×T(2^((6)) ) + ((7))    = ((8)) × T(2^((9)) ) + 2 × ((7))    ・    ・    ・    = ((10)) × T(2^0) + ((11)) T(2^0) = ((12)) なので,T(n) を a と n のみを用いて表すと, T(n) = ((13)) であり,これは, ((14)) に比例し,計算量のオーダーは ((15)) といえる. ((14)),((15)) の選択肢 a. n b. n^2 c. 2^n d. n log n e. log n f. いわゆる「指数オーダー」であり,アルゴリズムとして全く実用に耐えない g. いわゆる「バカソート」と同じであり,n がごく小さい場合を除いて実用には適さない h. 経験上最速とされるソート法には及ばないが,それほど大きくない n に対しては実用に耐える i. 経験上最速とされるソート法と同じであり,十分大きい n に対しても実用に耐える

  • perlfaq4 で紹介されている Fisher-Yates 法について

    perldoc の perlfaq4: http://perldoc.jp/docs/perl/5.10.0/perlfaq4.pod の "How do I shuffle an array randomly?" と題された FAQ で紹介されている、配列の要素をシャッフルするアルゴリズム Fisher-Yates 法についての疑問です。 以下一部引用 ---------------- sub fisher_yates_shuffle { my $deck = shift; # $deck is a reference to an array my $i = @$deck; while (--$i) { my $j = int rand ($i+1); @$deck[$i,$j] = @$deck[$j,$i]; } } ---------------- 以上一部引用 このコードを見ると、まず始めに @$deck の要素数を $i に代入し、次に while ループを使って $i をデクリメントしていき、@$deck の末尾の要素から順番にランダムに並べ替えを行っているようですが、$i を前置デクリメントで評価しているため、配列の先頭の要素すなわち $deck -> [0] は並べ替えられないのではないでしょうか ? つまり、$deck -> [0] にアクセスするためには -- $i が 0 にならなければならず、もしそうなった場合 while 条件部で偽と判定されるため、ループが実行されないのではないかということです。 -- $i が 1 となる時点では、$j = int rand ($i+1) つまり $j = int rand (2) で、$j は 0 以上 2 未満の整数、0 か 1 になります。 したがって、この場合も確実に $deck -> [0] にはアクセスできません。 もちろん、$j が偶然 0 になることは有り得ますが、確実に 0 になるわけではなく、確率的に偏ってしまうようなことはないのでしょうか ? おそらく私の見当違いだと思いますが、配列シャッフルのアルゴリズムとして問題ないのでしょうか。ご回答よろしくお願いします。

    • ベストアンサー
    • Perl
  • アルゴリズム

    文字をカウントするフローチャートが分かりません。50この文字データが入っているhai[ ]があって配列要素にはアルファベットが入っています。配列の要素を順番に参照し、英字bの個数をshukeiに数えていくフロ-チャートが分かりません。 まず、(1)I(haiの添え字)←0、shukei←0の初期化     (2)hai[I]はbか? (3)bじゃないなら、I=I+1(次の配列に移動),bならshukei←shukei+1(カウントする)     (4)I>50なら終了 (3)のshukei←shukei+1の部分が分かりません。shukei←shukeiじゃないんですか?? 例えば、hai[1]=bで、初めてbが出できたらbの個数って1ですよね。でも、shukei←shukei+1に流れると個数は2個になってしまいますよね?? 分かりません。 宜しくお願いします。

  • 走査アルゴリズムについて

    n個の要素の配列x[]について 配列xの連続した要素(部分配列)でその和が最大になるものを見つけて、 その和を出力するアルゴリズムについてです。 これなのですが解き方の考え方に 「x[0...n]までの部分配列の最大和は、x[0...n-1]の部分配列の最大和か、x[n]から左方向に伸びた配列の和のいずれかである。」 とあり プログラムには float maxSoFar(float x[], int length){ float maxsofar = 0; float maxendinghere = 0; for(int i = 0; i < length; i++){ maxendinghere = max(0.0f, maxendinghere + x[i]); maxsofar = max(maxsofar, maxendinghere); } return maxsofar; } とあるのですが、アルゴリズムの仕組みがよくわかりません。 なぜ上のような説明でこのようにプログラムできるのかが わからないので、どなたかうまい説明できる人お願いします><

  • 配列生成される限り、ループしたい

    function arrayxml (){ urlで取得したXMLから、配列を取得 return $hairetu; //戻り値は多次元配列 } $data = arrayxml(); $cnt = count($data); do { for ($i=0; $i < $cnt; $i++) { $data = arrayxml($data[$i][0]); } } while (count($data) > 0); //関数によって配列が作られる限り このスクリプトではループはうまくされません。 $data = arrayxml($data[$i][0]);を--->arrayxml($data[$i][0]);にすると $cnt分ループされますが、do~whileのループはなされません。 関数で配列が生成される限り、do~whileループをさせたいのですが正しい方法を教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう