ページ 11

升目

Posted: 2011年6月27日(月) 10:43
by secound
以下のように升目を表示し、数字を入力すると入力した数字が○に換わるようにしてください。
 ただし、すでに入力されている場合は再度入力させるようにしてください。

コード:

 7|8|9			o|o|o
  -----			-----
 4|5|6		→	o|o|o
  -----			-----
 1|2|3			o|o|o
  図1              図2
という問題を解いているのですが図1の表示のさせ方、図1から図2への変換がわかりません。どなたか教えていただけないでしょうか。

Re: 升目

Posted: 2011年6月27日(月) 10:56
by softya(ソフト屋)
前提条件が良く分かりませんので、フォーラムルールのテンプレートに従って書いて頂けますか?
http://dixq.net/board/board.html

それと質問ですが
7
4
1
と表示することは出来ますか?そのコードを書いてみてください。

Re: 升目

Posted: 2011年6月27日(月) 11:11
by secound
[1] 質問文
 [1.1] 図1の表示と図1から図2への変換
 [1.2] #include "stdio.h"
     #include "stdlib.h"

     int main(void)
     {
  int i;

  printf("7|8|9\n");
  printf("--------\n");
  printf("4|5|6\n");
  printf("--------\n");
  printf("1|2|3\n");

        for(; ;);
  return 0;
     } 

[1.3]特になし
[1.4] [1.1]と同じ

[2] 環境  
 [2.1] OS : Windows,
 [2.2] コンパイラ名 : Visual Stadio2010
[3] その他
 ・C言語検定3級はとりました
 ・ライブラリがわかりません

Re: 升目

Posted: 2011年6月27日(月) 11:25
by softya(ソフト屋)
こちらの質問と同じ方ですよね?
http://dixq.net/forum/viewtopic.php?f=3&t=8768
ここのルールで名前は統一していただくようになっていますのでお願いします。

ここの部分を
  printf("7|8|9\n");
  printf("--------\n");
  printf("4|5|6\n");
  printf("--------\n");
  printf("1|2|3\n");
for文を使って出力してみてください。

それと最後の
        for(; ;);
ですが停止するためのものですよね?
これだと強制終了が必要になるので、CTRL+F5で実行すればこれは不要です。
あるいは、
getchar();[訂正] _getch();
などで入力待ちしてください。
#include <conio.h>
が必要です。

あとcodeタグを併用してもらうと読みやすくなります。

コード:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
int main(void)
{
    int i;
 
    printf("7|8|9\n");
    printf("--------\n");
    printf("4|5|6\n");
    printf("--------\n");
    printf("1|2|3\n");
 
    _getch();
    return 0;
}

Re: 升目

Posted: 2011年6月27日(月) 12:16
by secound
softya(ソフト屋) さんが書きました:こちらの質問と同じ方ですよね?
http://dixq.net/forum/viewtopic.php?f=3&t=8768
ここのルールで名前は統一していただくようになっていますのでお願いします。

ここの部分を
  printf("7|8|9\n");
  printf("--------\n");
  printf("4|5|6\n");
  printf("--------\n");
  printf("1|2|3\n");
for文を使って出力してみてください。

それと最後の
        for(; ;);
ですが停止するためのものですよね?
これだと強制終了が必要になるので、CTRL+F5で実行すればこれは不要です。
あるいは、
getchar();[訂正] _getch();
などで入力待ちしてください。
#include <conio.h>
が必要です。

あとcodeタグを併用してもらうと読みやすくなります。

コード:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
 
int main(void)
{
    int i;
 
    printf("7|8|9\n");
    printf("--------\n");
    printf("4|5|6\n");
    printf("--------\n");
    printf("1|2|3\n");
 
    _getch();
    return 0;
}
すみません。以前はfirstで質問をさせていただいてました。
ルールは守りたいと思います。

そしてfor文で表示できたのですが、見てもらえませんか

for(j = 7; j > 0; j = j - 3){
printf("%d|%d|%d|\n", j, j + 1, j + 2);
printf("------\n");
}

よろしくお願いします

Re: 升目

Posted: 2011年6月27日(月) 12:21
by non
配列は習ってますか?

Re: 升目

Posted: 2011年6月27日(月) 12:25
by softya(ソフト屋)
codeタグ使ってくださいね。

微妙に違うのですが、それは直しておいてください。|が多いです。

それでは数値を入力されたか覚えるために配列で数字の種類(1~9)の数の配列を用意して、これを初期化しておいてください。
そして数値を入力されたら、該当のする添字の場所の値を変えます。
これで入力された場所を覚えることが出来ます。
分かりますか?

Re: 升目

Posted: 2011年6月27日(月) 12:58
by first
softya(ソフト屋) さんが書きました:codeタグ使ってくださいね。

微妙に違うのですが、それは直しておいてください。|が多いです。

それでは数値を入力されたか覚えるために配列で数字の種類(1~9)の数の配列を用意して、これを初期化しておいてください。
そして数値を入力されたら、該当のする添字の場所の値を変えます。
これで入力された場所を覚えることが出来ます。
分かりますか?
すみませんが「該当のする添字の場所の値を変えます。」というとこがわからないです。
もう少し詳しく教えていただけませんか

Re: 升目

Posted: 2011年6月27日(月) 13:07
by softya(ソフト屋)
first さんが書きました:すみませんが「該当のする添字の場所の値を変えます。」というとこがわからないです。
もう少し詳しく教えていただけませんか
該当のする添字の場所とは、入力された数字を添字として使い指し示された配列の場所と言うことです。

Re: 升目

Posted: 2011年6月28日(火) 19:43
by オカピー
そのプログラムはコンソールでいいのですか?つまり黒い画面に表示されるのでいいのですね?

(不適切な文章があったので管理人が修正しました)

Re: 升目

Posted: 2011年7月01日(金) 14:10
by first
softya(ソフト屋) さんが書きました:
first さんが書きました:すみませんが「該当のする添字の場所の値を変えます。」というとこがわからないです。
もう少し詳しく教えていただけませんか
該当のする添字の場所とは、入力された数字を添字として使い指し示された配列の場所と言うことです。

こういうことでよろしいのでしょうか?

printf("整数を入力してください\n");
scanf_s("%d", &i);

for(b = 0; b < 9; b++){
      if(i == a) j = a;
}

Re: 升目

Posted: 2011年7月01日(金) 14:32
by non
短いプログラムなのだから,全部添付しませんか?

Re: 升目

Posted: 2011年7月01日(金) 14:44
by first
non さんが書きました:短いプログラムなのだから,全部添付しませんか?
#include "stdio.h"

int main(void)
{
int i, j, b, a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

for(j = 7; j > 0; j = j - 3){
printf("%d|%d|%d\n", j, j + 1, j + 2);
printf("------\n");
}

printf("整数を入力してください\n");
scanf_s("%d", &i);

for(b = 0; b < 9; b++){
if(i == a) j = a;
}
return 0;
}

Re: 升目

Posted: 2011年7月01日(金) 15:08
by non
a[]という配列を何のためにどう使うのかというのがポイントです。

コード:

	int i, j, b, a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

	for(j = 7; j > 0; j = j - 3){
		printf("%d|%d|%d\n",a[j],a[j + 1], a[j + 2]);
		printf("------\n");
	}
例えば,上のように変えてみました。配列はインデックスが0から始まります。indexと中身が
一致した方がわかりやすいと思いましたので a[10]に変更し,a[0]は使わないことにしました。
また,表示をa[]に入っている数字を使ってみました。
ここまで,理解できますか?

Re: 升目

Posted: 2011年7月01日(金) 15:16
by first
non さんが書きました:a[]という配列を何のためにどう使うのかというのがポイントです。

コード:

	int i, j, b, a[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};

	for(j = 7; j > 0; j = j - 3){
		printf("%d|%d|%d\n",a[j],a[j + 1], a[j + 2]);
		printf("------\n");
	}
例えば,上のように変えてみました。配列はインデックスが0から始まります。indexと中身が
一致した方がわかりやすいと思いましたので a[10]に変更し,a[0]は使わないことにしました。
また,表示をa[]に入っている数字を使ってみました。
ここまで,理解できますか?
softya(ソフト屋)さんが言われていたことですよね?

Re: 升目

Posted: 2011年7月01日(金) 15:50
by non
理解できたなら,scanfで入力した数の,配列aに0を代入し,
再度表示部分(上の3~6行目)を実行してみましょう。
注:最初の問題では,数字の場所を,’○’マルにするみたいですが,ここでは0ゼロにしてます。

Re: 升目

Posted: 2011年7月01日(金) 16:36
by first
できました。 nonさん、softyaさんありがとうございます。
あとの細かいところは自分で考えたいと思います。
本当にありがとうございました