• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++ 座標に*を打つ)

C++座標に*を打つ方法とは?

このQ&Aのポイント
  • C言語を学びたての大学生が座標に*を打つ練習問題に困っています。
  • Visual Studio 2008を使用していますが、すべての座標に*が表示されてしまいます。
  • どうしてなのかわからず、解決策を教えていただきたいです。

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

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8560/19455)
回答No.1

#include<stdio.h> int main(void){ int a[60][40]; int x,y; /*すべて0に初期化する*/ /*行は0行~59行*/ for(y=0;y<60;y++) { /*列は0列~39列*/ for(x=0;x<40;x++) { a[y][x] = 0; } } /*「*」を出す所だけ1に書き換える*/ a[29][19]=1; /*30行目なら29、20列目なら19になる*/ /*行は0行~59行*/ for(y=0;y<60;y++) { /*列は0列~39列*/ for(x=0;x<40;x++) { /*配列の中身が1の時だけ「*」を書く*/ if(a[y][x]==1) { printf("*"); } else { printf(" "); } } /*1行分書いたら改行する*/ printf("\n"); } }

hydron324
質問者

お礼

回答ありがとうございます。 丁寧な解説どうもありがとうございます。 あなたのおかげで出来ました!

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

関連するQ&A

  • C言語 座標軸の設定

    こんにちわ。私は最近プログラミングを学び始めた女学生です。 環境はVisual Studio 2008で、C++を使っています。 今回、課題として座標軸を-と|でつくり、その上にxの3乗-9xのグラフをあらわすというものが出ました。 おおよそわかったのですが、なぜかx軸を形成する軸(-)がこのプログラムだとひとつおきに表示されてしまい、軸として成立しません。なぜなのでしょうか。熟練者の方々、ご指導ご鞭撻のほど、よろしくお願いいたします。 #include<stdio.h> main(void){ int a[40][60],x,y; for(x=0;x<40;x++){ for(y=0;y<60;y++){ a[x][y]=0; if (x==20){ printf ("-");} else if (y==30) { printf ("|"); } if(y==(x-20)*(x-20)*(x-20)-9*(x-20)+30){ printf("*"); } else {printf(" "); } } printf("\n"); } }

  • Cの九九を表示するプログラムについて

    九九の表示を変えたいんですけど #include <stdio.h> int main(void) { int x,y; for (x = 1;x <= 9;x++) { for (y = 1;y <= 9;y++) { printf(" %2d ", x * y); } printf("\n"); } return 0; } これを実行すると 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 . . 9 . . . . . . . 81 となるのですが、これを 1 * 1 1 * 2 1 * 3 . . . 1 * 9 1 * 2 . . 1 * 9 . . . . . 9 * 9 と表示させたいのですがどなたか知恵を貸していただきませんでしょうか?

  • C言語の問題がわからないです。

    C言語のプログラムで、列数を自分で決めて、 (例)3列         ●(この行を最後として)   □● ●□● 上記のプログラムを作りたいのですが、 上手くいきません。途中まで作ったのですが、なかなか思うようにいかないです。どうすれば上記のようになりますでしょうか? #include <stdio.h> void disp(int x, int y); main() { int i,n; printf("表示する列:"); scanf("%d",&n); disp(3,3); for(i=1;i<=n;i++){ if(i%2==0){ disp(n-i,4); disp(i,2); } else{ disp(n-i,4); disp(i,1); } disp(1,3); } } void disp(int x, int y) { int i; for(i=0;i<x;i++){ if(y==1){ printf("●"); } else if(y==2){ printf("□"); } else if(y==3){ printf("\n"); } else{ printf("\0"); } } }

  • 座標をランダムに表示させてx座標順にソートするプログラムを考えています

    座標をランダムに表示させてx座標順にソートするプログラムを考えています とりあえず、以下の様に決まった数の座標でソートすることはできたのですが、ランダムにするとなるとどうすればいいのかわかりません。 ------------------------------------------------- #include <stdio.h> int makepoints(int * pn, double * x, double * y){ double xp,yp; int k; int i,j; int n; n = 7; *pn = n; xp = 1; for(k=0;k<n;k++) { xp = xp/2; yp = xp*xp; x[k] = xp; y[k] = yp; } printf("初期座標列:\n"); for(k=0;k<n;k++) { printf("%f_%f\n",x[k],y[k]); } for(j=1;j<n;j++) { for(i=0;i<j;i++) { if(x[i]>x[j]){ xp=x[i];x[i]=x[j];x[j]=xp; yp=y[i];y[i]=y[j];y[j]=yp; } } } printf("整列後の座標列:\n"); for(k=0;k<n;k++) { printf("%d %f %f\n",k ,x[k],y[k]); } return 0; } ------------------------------------------------- なんとなくrand関数を使えばいいのかな、というのはわかるのですが、プログラミングに弱く困っています。 この後のプログラミング教えてくださる方いればよろしくお願いします。

  • C言語 ゲーム

    このプログラムに関数を一つ増やしたいのですが、うまくできません。どこを、どうすればいいでしょう? 迷路の内容は未完成です。 #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> int KEY(int *Kn,int *Y,int *X); int main(void) { //数値格納 int kn; //入力キー int sty,stx; //座標 int fy,fx; //マップ範囲 int jm[25][40]; //移動可不判定 char mapc[3]={0};//複写されたマップ構成情報 //カウント int y,x; //判定生成、座標生成・描写用 //マップチップ char mc[2][3]={ /*mc[0] 移動可能*/" ", /*mc[1] 移動不可*/"■"}; //マップ構成 (最大値 25行x40列) char map[][81]={ /*00*/"■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■", /*01*/"■ ■                                    ■", /*02*/"■ ■■■■ ■                               ■", /*03*/"■ ■■   ■                               ■", /*04*/"■  ■ ■■■                               ■", /*05*/"■■ ■ ■                                 ■", /*06*/"■  ■ ■                                 ■", /*07*/"■ ■■ ■                                 ■", /*08*/"■    ■ ■                               ■", /*09*/"■                                      ■", /*10*/"■                                      ■", /*11*/"■                                      ■", /*12*/"■                                      ■", /*13*/"■                                      ■", /*14*/"■                                      ■", /*15*/"■                                      ■", /*16*/"■                                      ■", /*17*/"■                                      ■", /*18*/"■                                      ■", /*19*/"■                                      ■", /*20*/"■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■"}; //マップ範囲算出 fy=sizeof(map)/81; //行 fx=strlen(map[0])/2; //列 //キャラクター初期座標指定 sty=8,stx=8; /* 判定生成 */ for(y=0;y<fy;y++){ for(x=0;x<fx;x++){ strncpy(mapc ,&map[y][(x)*2] ,2 ); if(strncmp(mc[1],mapc,2)==0){jm[y][x]=1;} //移動不可判定 else if(strncmp(mc[0],mapc,2)==0){jm[y][x]=0;} //移動可能判定 } } /* 画面出力 */ while(1){ system("cls"); //画面消去 /* 座標生成、描写 */ for(y=0;y<fy;y++){ for(x=0;x<fx;x++){ strncpy(mapc ,&map[y][(x)*2] ,2); if(jm[y][x]==0){ if(y==sty&&x==stx) {printf("%s","○");} //キャラ表示 else if(strncmp(mc[0],mapc,2)==0) {printf("%s",mapc );} //移動可能表示 } else if (strncmp(mc[1],mapc,2)==0) {printf("%s",mapc );} //移動不可表示 } if(fx<40){printf("\n");} //fxが40未満の場合、改行 } if(sty==1&&stx==1){ printf("ゴールしました\n"); } /* 入力キー、移動座標出力 */ KEY(&kn,&sty,&stx); /* 壁、マップ外への侵入防止 */ for(y=0;y<sty+1;y++){ for(x=0;x<fx;x++){ if((y==sty&&x==stx&&jm[y][x]==1)||(fy<=sty||fx<=stx)){ if(kn==0x4b){stx++;} else if(kn==0x4d){stx--;} else if(kn==0x48){sty++;} else if(kn==0x50){sty--;} break; } } } /* 終了操作 */ if(kn==0x1b){printf("▼終了します。\n") ;break;} } } /* 入力キー、移動座標出力 */ int KEY(int *Kn,int *Y,int *X){ while(1){ *Kn=getch( ); //1:通常キー if (*Kn==0){ *Kn=getch( ); //2:特殊キー if (*Kn==0x4b){(*X)--;}// ← else if (*Kn==0x4d){(*X)++;}// → else if (*Kn==0x48){(*Y)--;}// ↑ else if (*Kn==0x50){(*Y)++;}// ↓ else if (*Kn==0x80){ }//特殊キー追加場所 else {continue;} break; } else if (*Kn==0x1b){}// Esc //else if (*Kn== ){} 通常キー追加場所 else {continue;} break; } return 0; }

  • C言語 ゲーム

    今回が質問初めてです。見にくかったらすいません。下のプログラムですが、これに構造体を使わなくてはいけないのですが、まったくわかりません。みなさんはどう書き換えますか? #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <string.h> int KEY(int *Kn,int *Y,int *X); int main(void) { //数値格納 int kn; //入力キー int sty,stx; //座標 int fy,fx; //マップ範囲 int jm[25][40]; //移動可不判定 char mapc[3]={0};//複写されたマップ構成情報 //カウント int y,x; //判定生成、座標生成・描写用 //マップチップ char mc[2][3]={ /*mc[0] 移動可能*/" ", /*mc[1] 移動不可*/"■"}; //マップ構成 (最大値 25行x40列) char map[][81]={ /*00*/"■■■■■■■■■■", /*01*/"■ ■      ■", /*02*/"■ ■■■■ ■ ■", /*03*/"■ ■■   ■ ■", /*04*/"■  ■ ■■■ ■", /*05*/"■■ ■ ■   ■", /*06*/"■  ■ ■ ■■■", /*07*/"■ ■■ ■   ■", /*08*/"■    ■ ■ ■", /*09*/"■■■■■■■■■■"}; //マップ範囲算出 fy=sizeof(map)/81; //行 fx=strlen(map[0])/2; //列 //キャラクター初期座標指定 sty=8,stx=8; /* 判定生成 */ for(y=0;y<fy;y++){ for(x=0;x<fx;x++){ strncpy(mapc ,&map[y][(x)*2] ,2 ); if(strncmp(mc[1],mapc,2)==0){jm[y][x]=1;} //移動不可判定 else if(strncmp(mc[0],mapc,2)==0){jm[y][x]=0;} //移動可能判定 } } /* 画面出力 */ while(1){ system("cls"); //画面消去 /* 座標生成、描写 */ for(y=0;y<fy;y++){ for(x=0;x<fx;x++){ strncpy(mapc ,&map[y][(x)*2] ,2); if(jm[y][x]==0){ if(y==sty&&x==stx) {printf("%s","○");} //キャラ表示 else if(strncmp(mc[0],mapc,2)==0) {printf("%s",mapc );} //移動可能表示 } else if (strncmp(mc[1],mapc,2)==0) {printf("%s",mapc );} //移動不可表示 } if(fx<40){printf("\n");} //fxが40未満の場合、改行 } if(sty==1&&stx==1){ printf("ゴールしました\n"); } /* 入力キー、移動座標出力 */ KEY(&kn,&sty,&stx); /* 壁、マップ外への侵入防止 */ for(y=0;y<sty+1;y++){ for(x=0;x<fx;x++){ if((y==sty&&x==stx&&jm[y][x]==1)||(fy<=sty||fx<=stx)){ if(kn==0x4b){stx++;} else if(kn==0x4d){stx--;} else if(kn==0x48){sty++;} else if(kn==0x50){sty--;} break; } } } /* 終了操作 */ if(kn==0x1b){printf("▼終了します。\n") ;break;} } } /* 入力キー、移動座標出力 */ int KEY(int *Kn,int *Y,int *X){ while(1){ *Kn=getch( ); //1:通常キー if (*Kn==0){ *Kn=getch( ); //2:特殊キー if (*Kn==0x4b){(*X)--;}// ← else if (*Kn==0x4d){(*X)++;}// → else if (*Kn==0x48){(*Y)--;}// ↑ else if (*Kn==0x50){(*Y)++;}// ↓ else if (*Kn==0x80){ }//特殊キー追加場所 else {continue;} break; } else if (*Kn==0x1b){}// Esc //else if (*Kn== ){} 通常キー追加場所 else {continue;} break; } return 0; }

  • C言語のプログラムについて

    三角形を判定するプログラムを作ったのですが直角三角形ができるはずがないのに直角三角形の判定が出てしまいます。簡単なことなのかもしれませんが自分ではわからなくなってしまったのでご指摘してもらいたいです。 #include<stdio.h> void tri(int x,int y,int z) { if((x*x==y*y+z*z)||(y*y==x*x+z*z)||(z*z==x*x+y*y)) { printf("これは直角三角形です。"); printf("これは三角形です。"); }else if((x+y>=z)||(x+z>=y)||(y+z>=x)) { printf("これは三角形ではありません。"); }else{ printf("これは三角形です。"); } } int main(void) { int e1,e2,e3; printf("3辺を入力してください"); scanf("%f,%f,%f",&e1,&e2,&e3); tri(e1,e2,e3); return(0); }

  • C言語の二次元配列について教えて下さい。

    二次元配列で、次の行列の1の要素の添え字を書き出したいです。例えばa11の場合、(0,0)の様にしたいです。 {1,0,1,0} {0,1,1,1}   {1,0,0,1} 自分で出来る範囲で組み上げたプログラムを載せます。 #include <stdio.h> int main(void) { int x,y; int a[3][4]= {{1,0,1,0}, {0,1,1,1}, {1,0,0,1}}; for(x=0;x<3;x++){ for(y=0;y<4;y++){ printf("%3d",a[x][y]); } } return (0); } 実行結果 (0,0) (0,2) (1,1) (1,2) (1,3) (2,0) (2,3) あくまで上の実行結果を出力するものを組み上げたいのですが、続きがさっぱり解りません。それと上記のプログラムには何らかの間違いがあるかもしれません。どなたか解る方、出来るだけ簡単なプログラムを教えて下さい。宜しくお願います。

  • C++ グラフ作成

    sin と cosのグラフを作成しようとしているのですが、思うように行かず、悩んでいます。 一応試行錯誤の結果、下のようなプログラムを書いたのですが、コンパイルが成功しても何も表れないという悲しい現実が待っていました。*を表示させる部分を省くと、グラフが書けるのですが、そもそも三角関数を扱っているのにxを角度で表現するということすらできません。 有識者の方の回答をお待ちしています。よろしくお願いします。 なお、開発環境はwindows visual studio 2008のC++です。 #include <stdio.h> #include <math.h> #define Xmax 40 #define Ymax 40 char a[Xmax][Ymax],x,y; int myf(float x); int main(void){ for(x=0;x<Xmax;x++){ for(y=0;y<Ymax;y++){ a[x][y]=' '; } } for(y=0;y<Ymax;y++){ a[Xmax/2][y]='-'; } for(x=0;x<Xmax;x++){ a[x][Ymax/2]='|';} a[Xmax/2][Ymax/2]='+'; for(x=0;x<Xmax;x++){ for(y=0;y<Ymax;y++){ int y = myf(sin(x)); if(y>=0&&y<=1) a[x][y]='*'; } } for(x=0;x<Xmax;x++){ for(y=0;y<Ymax;y++){ int y = myf(cos(x)); if(y>=0&&y<=1) a[x][y]='*'; } } for(x=0;x<Xmax;x++){ for(y=0;y<Ymax;y++){ printf("%c",a[x][y]); } printf("\n"); } } int myf(float x){ double sin(double x); double cos(double x); y=sin(x); y=cos(x); return 5*cos(x); }

  • 変数の表示

    プログラミングで、 y=2x+1はx座標1,y座標3を通る直線です。 と表示したいんです。 #include<stdio.h> main() { printf("y=2x+1はx座標1,y座標3を通る直線です。"); } と書いてみたのですが、これでは文章がそのまま表示されるだけです。このとき、1と3を変数で表したいのですがどうしたらいいのでしょうか・・・intとかcharを使うのでしょうか?文字と数字が両方入っているので、混乱してわかりません。お願いします。

このQ&Aのポイント
  • エクセルやワードでデータを編集すると、同じUSBフォルダ内にtmpファイルが残ってしまいます。tmpファイルの表示を非表示にする方法を教えてください。
  • また、フォルダを他のフォルダに移動しようとすると、「フォルダが開いているので移動できません」というメッセージが表示され、移動できません。この問題の解決方法を教えてください。
  • 富士通FMVを使用している際に、tmpファイルの表示を非表示にする方法と、フォルダの移動ができない問題の解決方法を知りたいです。
回答を見る