• 締切済み

プログラミングにご助力下さい

下図のような状態で0番から矢印に沿って、全ての番号に10通の手紙を送り、送るのに何回の工程を費やしたかを数えるプログラムソースを書きたいのですが、自分のプログラム知識では上手くまとめ切れません。 C言語を軽く学び基本的な文法や変数,配列,構造体が理解できる知識です。 この例題は自分で考えだしたものですが、これのプログラムソースを把握できれば自分がこの後に行おうとしていることに活かせるため何としても理解したいと考えています。ご助力お願い致します。 1通目に関して まず0番から1番2番3番に手紙が届く(3回の工程を費やした) 続いて1番か4番と8番に、といった具合に1通目の手紙を全ての番号に届けたら、0番目から2通目の手紙を送る。

みんなの回答

回答No.2

プログラムの問題ではありません。 アルゴリズムの問題です。 その前に要件を理解すること。

全文を見る
すると、全ての回答が全文表示されます。
  • trajaa
  • ベストアンサー率22% (2662/11921)
回答No.1

処理要件が全く伝わりません 送る手紙は10通確定なのですか? でも『1通目に関して、まず0番から1番2番3番に手紙が届く(3回の工程を費やした)』 コレを読むと、0から1,2,3に3通送ったように読み取れる 3回の工程ってなに? 0から1に行き、0に戻り2に行き、0に戻り3に行くなら6工程 <-正確には、工程ではなく行程だよね? 何をどうしたらどうなって結局何になるというルールが明確でありません 目的やルールが明確でない状態では、プログラミングは始められない

pp_daburu
質問者

補足

すいません手紙という表現が逆に伝わりにくくなってしまったようです。 手紙(情報)が0から1に行き、0に戻り2に行き、0に戻り3に行くのではなく 1通目の手紙(情報)が矢印でつながっている0番から1番と2番と3番で同時に受信できるということです。 また工程(正しくは行程)の定義もわかりやすくするため、ある地点から手紙を発信した回数を行程と定義します。 例えば、0番が手紙を送る場合、1、2、3番に手紙を同時に送るため、これを1行程とします。 次に1番が8番と4番に(これで2行) 2番が4番と5番に(これで3行) 3番が5番に(これで4行程) 手紙を送信。 8番が7(5行程) 4番が7と6(6行程) 1通の手紙を送るのに6行程 10通なら6行程*10通=60行程という値が結果として集計できるプログラムソースを書きたいと考えています。

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

関連するQ&A

  • プログラミングにご助力下さい

    下図のような状態で0から各番号全ての番号当てに情報を届けるプログラムソースを書きたいと考えています。 Visual Studioを扱いプログラムソースを書いていますが、デバッグ無しで実行(コンパイル)した時に、 送信した回数を出力するプログラムを書きたいです。 前提条件として ・0番で情報を生成し、情報数は10とする。 ・各番号は次にどの番号に情報を届ければいいか予め把握している。 (図の矢印で示した通りで、例えば1番は8、4に対してのみ情報を伝える) 全体の動作の一例を書き上げます。 0番で情報生成 0番から1,2、3にその情報を伝える(3回送信したとカウント) 次に1番が8番と4番に(既に3回送信していて、新たに2回で5回送信したとカウント) 2番が4番と5番に(同様に既に5回送信、新たに2回送信で合計7回送信) 3番が5番に(既に7回送信、新たに1回送信、合計8回送信) 8番が7(既に8回送信、新たに1回送信、合計9回送信) 4番が7(既に9回送信、新たに1回送信、合計10回送信) 1つめの情報の送信終了 0番で2つめの情報生成。 以下繰り返し 10個の情報を届け終わったら終了。 出力結果;送信した回数は100回です。 (1つの情報を全てに届けるのに10回送信、情報が10個なので10*10=100回) 自分のプログラム知識では上手くまとめ切れません。 C言語を軽く学び基本的な文法や変数,配列,構造体,関数が理解できる知識です。 この例題は自分で考えだしたものですが、これのプログラムソースを把握できれば自分がこの後に行おうとしていることに活かせるため何としても理解したいと考えています。ご助力お願い致します。 先ほど、同様な質問内容で質問を投稿させて頂きましたが、伝わりにくかった部分が多かったため、送信回数の定義や、動作の一例を書き上げるなど補足し、改めて投稿させて頂きました。 よろしくお願いいたします。

  • バックトラックプログラミング

    それぞれの格子点を2回まで通り経路の総数を求め方のプログラムの書き方。 通過した回数を配列 place[][] に格納。←このように小出しで分からないのです。 この問題がバックトラックプログラミングの例題の説明になっているみたいですが,プログラムの部分ソースのみで理解に苦しんでいます。正直、全然わからないです。誰か解説していただけないでしょうか。ソースも知りたいですが,解説も加えて頂けると幸いです。

  • プログラミングに関して

    プログラミングの勉強をしているのですが、一通り基礎的な本は読破しましたが、長いソースプログラムを白紙の状態から自分で書くことなど出来そうにありません。オープンソースなどの長いソースコードは全て誰かが白紙の状態からあれ程までの長いソースコードを書いているのでしょうか?それとも何かを応用したりどこかの関数を引用したりして書かれているのでしょうか?

  • プログラミングについて

    課題1: キーボードから整数a, b の値を入力し, を計算して表示するプログラムを作成せよ.ただし,べき乗を計算するユーザ関数 int power(int a,int b) を定義し,関数の再帰的呼び出しを使用すること.なお,b >= 0 とみなし,bが負の値のときは「ここでは扱いません」と表示するようにすること.関数 power() の中で途中の計算も表示するようにすること.  作成したプログラムを以下の[プログラム]の次に貼り付けなさい.また,aの値として「学生番号下1桁 + 3 」 の値を入力し,bの値として「(学生番号下2桁を5で割った余り) + 1」の値を入力したときの結果を[実行結果]の次に貼り付けなさい. 実行結果例 :   (学生番号 0234789 の場合) ( aは a= 9+3= 12 , b は b 整数aを入力して下さい:12 整数bを入力して下さい:5 power(12,0)= 1 power(12,1)= 12 power(12,2)= 144 power(12,3)= 1728 power(12,4)= 20736 power(12,5)= 248832 12の5乗は 248832 です 課題2: キーボードから英字の氏名を「名前_苗字」の順でアンダーバー( 「_ 」の文字) で区切って入力し,その文字列を文字コード順に並び替え,さらにそれについてバイナリサーチを実行して「i」の文字を探すプログラムを作成しなさい.並び替えた文字列およびその中の何番目に「i」が見つかったのかを表示するようにせよ.見つからなかった場合は「見つかりませんでした」と表示するようにせよ.実行結果例を参考にすること. プログラムを作成したら,入力値を色々変えて何回か実行し,プログラムが正しく動作することを確認しなさい.確認が済み次第,作成したプログラムを以下の[プログラム]の次に貼り付けなさい.また,各自の名前と苗字を入力したときの実行結果を[実行結果]の次に貼り付けなさい 実行結果例 :   (氏名: 工大 太郎 の場合) 名前と苗字をアンダーバーで区切って入力してください(各先頭文字は大文字) Kodai_Taro 並び替え後 KT_aadioor i を探します lo=0 x[4]=a hi=9 lo=5 x[7]=o hi=9 lo=5 x[5]=d hi=6 lo=6 x[6]=i hi=6 i は 6番目にありました 課題3: 5桁の正の整数をキーボードより入力し、その各桁の値を降順(大→小の順)に並び換えてそれらを順番に表示するプログラムを作成しなさい.以下の手順に従うこと. (1) int 型のサイズ5の配列 A を用意する. (2) 5桁の正の整数をキーボードより入力し,その各桁の値が一桁目から順番に A の各要素に入るようにする (例:値が12345 のとき, A[0]=5, A[1]=4, A[2]=3, A[3]=2, A[4]=1 となるようにする) (3) Aのデータを選択ソートにより降順に並び替える (2)では繰り返し処理を行なうこととし,for 文を用いること. (ヒント: たとえば 12345 の3桁目を取り出したいとき,まずその数を100 で割る.int 型同士の割り算の場合,小数点以下が切り捨てられるので 123 となる.それを10で割った余りを求めれば 3 が得られる.同様に,4桁目を取り出したいときは,1000 で割った整数値の10で割った余りを求めればよい) (3)は演習(3) で作成したプログラムを参考にすること プログラムを作成したら,入力値を色々変えて何回か実行し,プログラムが正しく動作することを確認しなさい.それが済み次第,完成したプログラムを以下の[プログラム]の次に貼り付けなさい.また,各自の学生番号下5桁の値を入力したときの実行結果を[実行結果]の次に貼り付けなさい. 実行結果例 学生番号0114583の場合  5桁の正の整数値を入力してください 14583 ソート前 3 8 5 4 1 i=0 8 3 5 4 1 i=1 8 5 3 4 1 i=2 8 5 4 3 1 i=3 8 5 4 3 1 ソート後 8 5 4 3 1 課題4: 以下の内容を実行するプログラムを作成しなさい.ただしMには「(各自の学生番号下3桁を5で割った余り)+5」を用いよ.また,Nには「(各自の学生番号下2桁を3で割った余り)+2」 を用いよ.作成したプログラムを以下の [プログラム] の次の行に貼り付けること.また実行結果を[実行結果]の次の行に貼り付けなさい.入力値は,学生番号の一桁目から順に入力し,さらに必要ならば「9,8,7」の順に入力せよ.以下の実行の概念図も参考にすること 実行内容 int 型のサイズ M の一次元配列 x があり,キーボードから値を入力してその配列の各要素に代入する.それらの値を N 個ずつ右にずらしてローテーションする 実行結果例 (学生番号 0123457 の場合) M= (457 を 5で割った余り)+ 5 = 2+5 = 7 N= ( 57 を 3で割った余り)+ 2 = 0+2 = 2      よって,サイズ7の配列のデータを      右に2個ずつローテーション (0) 整数を入力してください 7 (1) 整数を入力してください 5 (2) 整数を入力してください 4 (3) 整数を入力してください 3 (4) 整数を入力してください 2 (5) 整数を入力してください 1 (6) 整数を入力してください 0 ローテーション前 7 5 4 3 2 1 0 ローテーション後 1 0 7 5 4 3 2 課題5: キーボードから文字列を入力し,その文字列の2番目の空白の次の文字以降を表示するプログラムを作成しなさい.ただし,文字列の入力には関数 gets を用いること. また,文字列のアクセスにはポインタを用い,関数 putchar を用いて一文字づつ表示させるようにすること. 実行結果は,学生番号,名前(英語),苗字(英語) をそれぞれスペースで区切って入力したときの結果を表示すること 実行結果例 : 学生番号0112345 氏名 田中健 の場合 文字列を入力してください。 0112345 Ken Tanaka 2番目の空白以降を出力します Tanaka windows vista visual studioでのプログマミングの作成を多いと思いますがとても困っていますのでなにとぞお願いします。

  • プログラミング(C言語)の勉強について

    情報系の大学1年生です。現在C言語のプログラミングの授業を受けています。 前期C言語の基礎を勉強したのですがいまだによくわかりません。 と、いいますのは、基礎の基礎のプログラムの書き方はわかりますが、難しくなると自分で書けないということです。 授業の課題が自力でできないので、友達のを写させてもらい(ほんとはいけないことはわかっています)、とりあえず提出し、あとでそのプログラムを理解する、というやり方で前期はなんとか乗り越えました。 現在、授業はアルゴリズムに入り、ますます授業についていけなくなり、情けない話ですが友達の書いたプログラムすら理解できないという状況です。 しかし、このままではまずいという思いと、もっと自分で思ったようにC言語を使えるようになりたいという思いから、今質問させていただいています。 C言語の入門書(柴田芒洋・明解 C言語入門編)を読んでいてもパソコンの知識が乏しいため、メモリや処理系など、何がどうなっているかわかりません。 ・C言語を理解するためにはある程度のパソコンの知識は必要ですよね? ・こんな私にも理解できるようなわかりやすい書籍はありますか? 今の自分の能力から考えて、授業の課題を一人でできるとは思いません。もちろん自分で書く努力はしていますが、コンパイルの時点で大量のエラー、実行してもきちんと結果がでません。エラーが出ればまだ修正できますが、実行しても結果がでない場合、自分でミスを見つけられません。 ・友達のプログラムを見せてもらって、後で理解するという勉強法には問題があると思っています。しかし、抜け出すにはどうしたらいいのでしょうか? ・本で勉強しても自分で書いてみなければ身につかないと思っているのですが、何からやればいいんでしょうか?ちなみにプログラムを書く環境はあります。 まとまりのない質問で恐縮ですが、ご指導よろしくお願いします。

  • プログラミングの質問方法について

    社会人2年目くらいの人がプログラミングの仕事でわからない所があったら どのくらい自分で調べたら先輩に質問するべきでしょうか。 先輩の仕事を邪魔したくない、聞いても知識がないから全然理解できない、 周りの目が気になり恥ずかしくて聞けないなどと思い自分は中々質問できません。 1日に何回も何回もわからない所は質問していいのでしょうか。

  • C++プログラミングの手順

    C++を勉強しはじめてすごく基本的な部分は理解できました。 でも、それはあくまで知識であり実践となりますと話は別です。 いままでは、ライブラリという他人の作ったクラスを使用してプログラミングをしてきましたが、 だんだん奥深くに入り込むと、自分のわがままに会ったクラスがほしくなってきます。 でもいざクラスを作ろうとしたら、 プログラマの方々はクラスの定義を先にするか、ソースから作ってゆくのでしょうか? クラスを作る手順を教えてください。

  • アスキーコード表

    OS は WINDOWS(HOME EDITION)XP SP2, PC はエプソンの EDICube BB-100 のコマンドプロンプトで、いまだに turbo pascal を走らせています。必要があって pascal のプログラムから、画面に、下向きの矢印を表示させたいのですが、これが出来ません。上 (コード番号 28番)、左右(30,31番)の矢印は出せますが、下向きはどうしても無理なようです。やむを得ず、メモリにあるアスキーコードを調べると、29 番には 124 番と同じ縦線が入っていて、コードのどこにも下向き矢印はありません。これは何かの間違いではないかと思うのですが、どう対処すればよいのか分かりません。これについて何かご存じの方がいらっしゃればお教え下さい。

  • プログラミングの問題です。

    下記のプログラムのソースが全くわかりません。 しっかりとした回答お願いします!結構至急なのでよろしくお願いします。 (ア) 身体測定データ保存処理:学籍番号、氏名、身長、体重を表す変数は全て文字列(char[])型とし、これをカンマ区切りで連結し一つの文字列を生成する。これを身体測定データファイル body.txt に追記する。これを、学籍番号L00000が入力されるまで繰り返す。 (イ) 身体測定データ検索処理:身体測定データファイル body.txtを開き、一行ずつ文字列に読み込む。文字列の先頭から最初のカンマが現れるまでの部分文字列が入力された学籍番号と一致するか否かを判定する。一致する場合はファイルから読み取った行をそのまま表示した上でプログラムを終了させ、一致しない場合には次の行を読み込む。これを EOF(ファイル終了)に到達するまで繰り返す。

  • javaのプログラム作成

    javaでコマンドプロンプト(下図)のように表示される プログラムを作成するにはどのようにすればいいでしょうか? 引数を3つとろうとおもいます。 testはファイル名です goodは表示する文字で 2番目は横方向に何回表示するか(3) 3番目は縦方向に何回表示するか(3) まわりも-と|で囲むプログラムです 詳しいお方ご教授願います。 c:\>java test good 3 3 -------------- |goodgoodgood| |goodgoodgood| |goodgoodgood| --------------