• ベストアンサー

学生です。宿題のプログラムについてヒントお願いします。

今年、C++を始めた専門学生です。 学校で「じゃんけんプログラム」を作れという宿題が出ました。 その内容は、コマンドプロンプト上で 「5回じゃんけんをして、多く勝った方を『勝ち』と表示する」という物です。 「ポインタと構造体を使え」とのことですが 先生に何度か聞いたのですが 結局、良くわかりませんでした。 僕はアルゴリズムの理解度が曖昧だそうです。 自分ではアルゴリズムもそうですが 書き方の時点でも良くわかってないと思います。 ポインタも、構造体も、いまいち良くわかっていません。 プロトタイプ宣言も、どこに書けばよいのか・・ 他のクラスメイトは出来ているようなので、今更先生に聞けなくて フローチャートは書いてみたものの 書き方が全く思うように行かず、エラーが出て焦っています。 初歩的すぎて難しい質問かもしれませんが どなたかご享受願います。

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

  • ベストアンサー
  • kb-nike
  • ベストアンサー率36% (72/200)
回答No.3

完全な答えは、本1冊書くようなことになるので、部分的に、且つ感覚的に…。 ポインタ: 変数が置かれている場所を指す変数(ポインタ=指すもの)。(配列、構造体の場合は先頭の位置を指す。) ポインタが指す場所に値を置けば、変数に値を代入したことになります。 構造体: 型の異なる(同じでも良いが)変数の集まり。「構造体名.変数名」と言う形で取り扱う。ポインタを使ったときは「ポインタ->変数名」の形で表記する。 配列: 同じ型の変数の集合で要素は「配列名[番号]」で取り扱う。ポインタを使えば要素は「ポインタ+番号」の形で表記されます。 プロトタイプの位置: 関数の外(グローバル領域)に置く。 C時代の名残と見やすさのためにファイルの上の方にまとめて書けばよい。 (インクルードファイル(*.hファイル)があればその中でも良い。) (ただし、多分まだ「クラス」は使っていないでしょうが、クラスのメンバ関数はクラス宣言の中に置く。) C++に限らず、プログラミングは理論を学ぶだけではなく、簡単なサンプル・コードを手入力してコンパイル、実行することから始めて、徐々に自前のコードを追加して、結果を見ることで面白さも感じるようになると思います。 頑張ってください。

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

その他の回答 (2)

  • yukimican
  • ベストアンサー率70% (112/159)
回答No.2

とりあえず、あなたが思い浮かべている処理の手順をできるだけ細かく書いてみてください。 それを元にして、必要な変数、定数、処理を書き出していけばOKです。 ----------------------------------------------- 例:ハイ&ローのプログラム(簡易版)  1~13の範囲で、最初に出てきた数字が2回目に出されるものより  大きいか小さいかを当てる。同じだったら無条件でハズレ。 ・処理の手順:  1. 1~13の間からランダムな数値を取得し、変数firstに保存  2. firstの内容を表示  3. HIGH/LOWの選択をキーボードから入力し、変数judgeに保存   * 入力結果が不正ならエラー終了  4. 1~13の間からランダムな数値を取得し、変数secondに保存  5. secondの内容を表示  6. judgeの値を元にfirstとsecondを比較   - judgeの内容がHIGH → (first > second) の比較結果を変数resultに保存   - judgeの内容がLOW → (first < second) の比較結果を変数resultに保存  6. resultの値を判定   - true: プレイヤーの勝ち   - false: プレイヤーの負け ・実行例:  $ ./a.out  1番目の数字 = 6  HIGH & LOW ?(HIGH = 1, LOW = 2): 1  2番目の数字 = 3  あなたの負け。ざんねんっ  $ ./a.out  1番目の数字 = 10  HIGH & LOW ?(HIGH = 1, LOW = 2): 2  2番目の数字 = 7  あなたの勝ち。おめでとー ------------------------------------------------

全文を見る
すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.1

★回答ではなくアドバイスです。 ・下の『参考URL』をどうぞ。→『苦しんで覚えるC言語』 参考:  第1部:C言語基礎編   2.プログラムの書き方    1.書き方のルール→『http://homepage3.nifty.com/mmgames/c_guide/02-01.html』  をどうぞ。以上。おわり。

参考URL:
http://homepage3.nifty.com/mmgames/c_guide/index.html
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • プロトタイプ宣言について

    C言語で関数を作成しプロトタイプ宣言するときの質問です。 関数実体の引数に構造体のポインタを宣言します。 プロトタイプ宣言には,構造体のポインタを宣言したのと同じ位置にvoid *を宣言します。 関数実体とプロトタイプ宣言は,異なるファイルです。 このように作成した関数は,VC++2008では,コンパイルできるのですが, なぜ関数実体の宣言とプロトタイプ宣言の型が異なるのにコンパイルできるのでしょうか? また,この関数を別ファイルの関数から呼び出した場合,正しく引数を理解し,正しく処理されます。 これは,言語仕様として正しい書き方なのでしょうか? それとも環境依存の書き方なのでしょうか? ご存知の方がいましたらお答えお待ちしています。

  • Cで関数とポインタと構造体の表現法

    C言語の関数で 構造体・共用体の入った配列を関数にポインタで送りたいと思うのですが上手くいきません プロトタイプ宣言とメイン文での表現・関数そのものでの表現 が詳しく知りたいのですがサイトまたは記述方を教えてください。 上記の条件で ポインタは*をつけるつけない 関数で引数はどうやって選ぶのか 構造体名などはどのように表現すればいいのか などの見分けがいまいちつかないので悩んでいます。

  • HOSTENT構造体を宣言する必要はないのですか?

    ネットワークプログラミングを勉強しているのですが,ソケットを用いた通信のサンプルで, HOSTENT *lphost として,HOSTENT構造体へのポインタを宣言して, lphost = gethostbyname(ホスト名の文字列); で,サーバーのアドレスをHOSTENT構造体にセットするとあります。 構造体へのポインタを宣言しても,構造体自体の領域は確保されないのではないかと思うのですが,gethostbyname関数が返すポインタは,いったい誰がどこに確保した領域を指しているのか,そしてその領域はいつまで保持されるのか,よく理解できません。構造体そのものを宣言せずに,それへのポインタを宣言し,それに関数の戻り値を代入するというのが,よく理解できないです。どなたか解説していただけると幸いです。

  • 構造体のアドレス渡し

    構造体をmain()からアドレス渡しで別関数(test.cpp)に渡し、その関数の中だけでの別関数test1()にその構造体を、値渡しでもアドレス渡しでも、渡せるのでしょうか? ちなみにmain.cppと、test.cppと、myhead.hとして分割コンパイルでやりました。 /*---------main.cpp--------*/ //ヘッダファイルで構造体宣言、test()のプロトタイプ宣言済み void main() { struct data dt[10]; ・・・・・・ test(dt); //test.cppのtest関数に構造体を渡す。 } /*---------test.cpp---------*/ void test1(??????); //test1()のプロトタイプ宣言 void test(struct data *p) //構造体をアドレス渡しで受け取った { ・・・・・ test1(?????); //test.cppで宣言したtest1関数に構造体を渡したい } どうかよろしくお願いします。

  • 構造体の纏め方

    関数のポインタを使用して、 /* プロトタイプ宣言 */ void func1 ( void ); void func2 ( void ); void func3 ( void ); /*******************/ /* プロトタイプ纏める */ void ( *funcs[] ) ( void ) = { func1, func2, func3 }; /*********************/ と言うのが、構造体でも出来ないでしょうか?と言うのが質問です。 変数(添字)によって、見るべき構造体を自由に変更させたいと言うのが主な使用方法です。 typedef struct _tag { int arg1; int arg2; } tag; tag watch1 , watch2 , watch3; とある変数が1なら、watch1、とある変数が2なら、watch2、とある変数が3なら、watch3を見ると言うようなプログラムにしたくて、質問しました。 witch文を使うしかないのでしょうか? 良き回答、お待ちしています。

  • ファイルポインタが動かない・・・

    ファイルポインタがfgetしても動かなくなるような宣言の仕方や 引数の渡し方ってあるのでしょうか? C言語で書いたプログラムです(長いので構造を書きます) わかりにくければ補足します。 #include"stdio.h" static FILE fp1; main() { 変数宣言うんぬん プロトタイプ宣言うんぬん fopen(.....); a = kansuu; fclose; } int kansuu() 変数宣言うんぬん for(i=0;i<3;i++) { x=fgetc(fp1); printf("%d-%d\n",x,ftell(fp1)); } ファイルには 0123456789 出力が 0-0 0-0 0-0 ってなるんです Seek関数(SEEK_CURとか)を使うとファイルポインタは動きます。 お願いします。

  • モンテカルロ法ベースのオセロプログラムを作りたいのですが

    今、C言語でモンテカルロ法ベースのオセロプログラムを作っているのですが、なかなかうまくいきません。 エラー内容: ある程度書いてみたのですが、実行すると「Segmentation fault」とでてしまいます。 アルゴリズム内容: 構造体を用意して、ランダムに手を打ち勝ったら手の内容と勝ち数をカウントして、構造体に格納します。最後に一番勝ったてを指すというプログラムを書いています。 質問点: 「Segmentation fault」とでてしまいます。何故なのでしょうか? 解決方法と理由を教えてください。 プログラム内で他にも変な場所があれば、教えてください。 それと、モンテカルロ法だけだと弱いので、何かいい手はないでしょうか? 質問が多くて申し訳ございませんが、教えていただければ幸いです。 オセロのプログラムデータは添付しています。 開発環境のOSはubuntuを使用しています。Windowsの時、文字化けする可能性があります。 なにとぞよろしくお願いします。

  • 構造体の宣言方法について

    構造体の宣言で ヘッダーファイルに struct RAM rom_AAA[20] を宣言 Cソースファイル(上記のヘッダーファイルをインクルードする)に struct RAM { struct BBB *CCC } を宣言 とした時 rom_AAA[20]と*CCC(BBBアドレス)はリンクしてる状態になるのでしょうか? 構造体の一部の定数テーブルを参照するために 間単にポインタ使ってグルグル回したいのですが、同じものをアクセスしてる事にならないでしょうか?

  • データ構造とアルゴリズムの問題が分かりません。

    データ構造とアルゴリズムの問題が分かりません。 以下の問題で悩んでいます。 索引は書籍中の単語が書籍の何ページ目に出現するかを表す。もちろん、索引に含まれるある単語が複数のページに出現する場合や、索引に含まれる複数の単語が同一のページに出現する場合もある。 この索引で対象とする単語は、その書籍の中で重要な意味をもつものとして、また、特定の単語はたかだか数ページにのみ出現すると仮定する。 (1)単方向リストを用いてこのようなデータ構造を実現する場合、C言語ではどのように宣言をすれば適切か、struct宣言を用いて示しなさい。 (2)単方向リストを用いてデータ構造の場合、特定の単語が何ページ目に現れるか探すにはどのようなアルゴリズムを適用すれば適切か、探索に必要な時間計算量とともに示しなさい。 (3)二分探索木を用いてこのようなデータ構造を実現する場合、C言語ではどのように宣言をすれば適切か、struct宣言を用いて示しなさい。 (4)二分探索木を用いたデータ構の場合、特定の単語が何ページ目に現れるか探すにはどのようなアルゴリズムを適用すれば適切か、探索に必要な時間計算量とともに示しなさい。 (5)二分探索木を用いたデータ構の場合、アルファベット順の索引を出力するたねには、どのような整列アルゴリズムを適用すれば適切か、整列に必要な時間計算量とともに示しなさい。 テストに類題を出すと先生はおっしゃってたので、どうしてもすぐに回答が必要です。先生にも質問したのですが、テストに類題を出すから教えられない。自力で頑張れと言われ困っています。 どなたか御助力よろしくお願いいたします。

  • 関数 構造体 ポインタ

    番号、名前、年齢を一組とした構造体の変数をmain関数で宣言し、そのアドレスを副関数に引き渡す。副関数で従業員番号、氏名、年齢を入力し、main関数に戻る。main関数で構造体の内容を表示する。 困ってます、ポインタがどうにも理解できません。

このQ&Aのポイント
  • 日本で広まったキリスト教関連のお祝い・お祭りは、クリスマス、バレンタイン、ハロウィン、イースターの順に広まったと思われます。
  • また、キリスト教関連の年中行事で見落としているものはありませんでした。
  • これらのお祝い・お祭りは日本の特定の地域や都市で盛んに行われており、特に若者やカップルに人気です。
回答を見る