プロが教える店舗&オフィスのセキュリティ対策術

こちらの、画像のプログラミングを作りたいのですが、わかりません。
教えて欲しいです。
使っている言語はc++です。

「こちらの、画像のプログラミングを作りたい」の質問画像

A 回答 (4件)

c++である必然性が見えないので、敢えて「使っている言語はc++です。

」に真っ向対立しますが
以下のコードをメモ帳に張って保存し、拡張子をvbsに変更してダブルクリックすれば
さわりの部分は動きます。
ただ、完成させようとすると、全ルートを網羅すべく大変なコード量になるので
No.2さんのおっしゃる様に2次元配列を用いる事になるでしょう。

尚、「NO」ルートが2つある事に関しては感知しない事にします。
(実はこれが質問の核心などと仰るのはご勘弁下さい)

If MsgBox("興味や嗜好品など特定分野の知識には結構自信自身がある",vbYesNo)=vbYes Then
If MsgBox("飲み会に誘われると断れない方だ",vbYesNo)=vbYes Then
'どんどん書いていく
Else
'どんどん書いていく
End If
Else
If MsgBox("もっともっと稼ぎたい!",vbYesNo)=vbYes Then
'どんどん書いていく
Else
'どんどん書いていく
End If
End If
    • good
    • 0

あ、でも今気づいたけど、この仕様バグがありますね・・・。



*「商品の知識はそこそこでも売る自信がある」
*「何事もバランスが大切と思う」
*「プレゼンテーション能力には自信あり!」

の三箇所からはNoが二本出てやんの・・・・。
ありゃ、作ってたプログラムで遊んでたら気づいた(笑)。

これどっちのルートが正しいんですかね。
    • good
    • 0

全然C++は知らないんですが(ダメじゃん・笑)。


それでも一つだけ。

これは「プログラミングの問題」と言うより

「どうデータ設計するのか」

って問題に見えますね。データ設計の問題。

で、図示されてるブツ見る限り(そしてコンソールで考える限り)、

「二次元配列しかあり得ない」

でしょう。
まずはその図のままに二次元配列を使う、ってのがストレートな解法な気がします。
んで(またもやコンソールで考える限り)、取り敢えずC++のキモ、オブジェクト指向の出番なんて無いと思いますね。
まあ、C++でGUIのプログラムを作りたい、って場合、ちょっとは話が変わってくるでしょうが、基本的な発想は変わらんと思います。
(もし、C++でGUIで、とか言うのなら、それが得意な人が現れるのを待ちましょう・笑)

各質問をQ_ij、各ゴールをA〜Eで表記すると、取り敢えず暫定的に配列を[]で表記すれば、まず必要なデータ配列は上の図式に従うと

[
[Q_00 Q_01 Q02 A]
[Q_10 Q_11 Q12 B]
[Q_20 Q_21 Q22 C]
[Q_30 Q_31 Q32 D]
[Q_40 Q_41 Q42 E]
]

ってカタチになってるわけですよ。単純にこの配列からiとjに従った要素を返せば良いわけです(当然 i = 0, j = 0からスタートする)。
とすると、上の図に従うと、

* YESと答えた場合 -> jが1増える
* NOと答えた場合 -> iが1増える

ってのが基本構造なわけですよね。
基本的にはこれだけ、です。
ただし、例外があって、それも図で見れば分かるでしょうが、

*i が4でNOと答えた場合 -> iを1減らし、jが1増える
*j が2でNOと答えた場合 -> iを1減らし、jが1増える

これだけ、ですよね(しかも上の条件だと結果やるこたぁ同じなんで、||で結べばイイわけです)。

Cだと次のようなコードになるんじゃないでしょうか。
C++だとある程度Cの上位互換らしいんで、多分動く?んじゃないかしら?
良く知らんですが(ダメじゃん・笑)。
まあ、いずれにせよ、C++で書きなおしてみて下さい。

// ここから

#include <stdio.h>
#include <ctype.h>
#include <stdbool.h>

#define ROW_MAX 5
#define COL_MAX 4
#define BUF_SIZE 4

char read(void);
char* eval(char arg, int tuple[], char* message[ROW_MAX][COL_MAX]);

int main(void) {
 char* msg[ROW_MAX][COL_MAX] = {
  { "趣味や嗜好品など\n特定分野の知識に\nは結構自信がある",
   "飲み会に誘われる\nと断れない方だ",
   "政治的な\nネゴシエーション・\nコミュニケーション\nはそんなに嫌い\nではない",
   "Type\nA" },
  { "もっともっと\n稼ぎたい!",
   "人に負けることが\n異常に嫌いだ",
   "商品の知識は\nそこそこでも\n売る自信がある",
   "Type\nB" },
  { "公明正大なタイプ\nだと周囲の人に\n見られている",
   "社会に貢献したい\nという気持ちが\n他人より強いほう\nだと思う",
   "何事もバランスが\n大切と思う",
   "Type\nC" },
  { "よい意味でも\n悪い意味でも\nプライドは高い\nほうだ",
   "解らない事があると\n徹底的に調べる",
   "プレゼンテーション\n能力には自信あり!",
   "Type\nD"},
  { "お客さんに\n割と可愛がられる",
   "笑顔を誉められる\nことが結構ある",
   "コツコツ仕事を\n進めるのは好き",
   "Type\nE" }
 };
 int tuple[] = { 0, 0 };
 puts(msg[0][0]);
 while (true) {
  puts(eval(read(), tuple, msg));
  if (tuple[1] == COL_MAX-1)
   break;
 }
 return 0;
}

char read(void) {
 static char buffer[BUF_SIZE];
 char c;
 fgets(buffer, BUF_SIZE, stdin);
 c = buffer[0];
 if (isalpha(c) && (c == 'y' || c == 'Y' || c == 'n' || c == 'N'))
   return c;
 else
   return read();
}

char* eval(char arg, int tuple[], char* message[ROW_MAX][COL_MAX]) {
 if (arg == 'Y' || arg == 'y')
  tuple[1] += 1;
 else {
  if (tuple[0] == ROW_MAX-1 || tuple[1] == COL_MAX-2) {
   tuple[0] -= 1;
   tuple[1] += 1;
  } else
   tuple[0] += 1;
 }
 return message[tuple[0]][tuple[1]];
}
    • good
    • 0

どこまでわかってどこがわからないんでしょうか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!