• 締切済み

C++で表を作成したいのです 初心者です

こんばんは。C++初心者です。 下に載せた表を表示したいです。 以下は、無知ながらに作成したプログラムです。 #include<stdio.h> main(void) { int i,j; int A[][]={{1,2,3,4,5,6,7}, {1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3}, {1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1}, {1,1,1,1,1,1,1,1,1,2,2,3,2,2,3,1,1,1,1,1,2}, {2,2,3,2,2,3,2,2,3,3,3,3,3,3,3,2,2,2,2,3,3}, {2,2,3,2,2,3,2,3,3,3,4,4,3,4,4,3,3,4,2,3,4}, {3,3,4,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,2,3,4}, {1,1,1,1,1,1,1,1,2,3,3,3,4,4,4,4,4,4,2,3,4}, {2,2,3,1,1,1,1,1,2,4,4,4,4,4,4,3,3,3,1,1,1}, {2,2,3,1,1,1,2,3,3,4,4,4,4,4,4,4,4,4,1,1,1}, {2,3,3,2,2,3,2,2,3,4,4,4,4,4,4,4,4,4,2,3,4}, {3,3,4,2,3,4,3,3,4,4,4,4,4,4,4,4,4,4,2,3,4}, {4,4,4,2,3,4,3,3,4,4,4,4,4,4,4,4,4,4,2,3,4}}; i=3*(A-1)+(B-1); j=3*(C-1)+(D-1); XX=A[i][j]; ・・・と、中途半端かつ意味不明なプログラムに仕上がりました。 是非ヒントでも何でもいいので教えて下さい。 宜しくお願いします。

みんなの回答

  • yama5140
  • ベストアンサー率54% (136/250)
回答No.4

×:C++で表を作成したいのです・・(質問件名) ×:下に載せた表を表示したいです。・・(質問本文) ○:4桁の数値を入力して、表中の1つの数字を出力させる・・(補足文) として、アドバイス。 なお、D が3桁あるのは、添付図のように D がなっているとして・・。 まず、4「つ」の数値を入力するために、  1.main(void) を void main( int argc, char *argv[] ) とする。  2.コマンドラインで付加された、空白区切りの文字「数」のチェック処理。  4.文字の数値化・チェック処理。    例)A = argv[ 1 ][ 0 ] - 0x30;      B = argv[ 2 ][ 0 ] - 0x30;      http://e-words.jp/p/r-ascii.html    A・・・・・1,2,3,4 のいずれかであることのチェック★。    B・・・・・1,2,3      〃    C・・・・・1,2,3,4,5,6,7  〃    D・・・・・1,2,3      〃 あとは、No.3 さんのとおり。 ++++++++++++++++++++++++++++++++++++ 実行は hoge 2 1 1 1 と空白区切りの1桁ずつ。 ☆「4桁の数値を入力」は、「時間がありません」とのことで、簡単な「1桁ずつ」としました。 なお、「数値を入力」は、沢山の方法があります。 時間ができましたら、4桁の数値 1234 から 3 を取り出す方法など挑戦してみて下さい。 ★重要なのは、数値が適正な範囲にあるか「チェックする」、ということです。 なお、処理系によっては、argv[ 1 ] に、上の例では 2 が入らないかもしれません。 ↓を実行しご確認下さい。 #include <stdio.h> void main( int argc, char *argv[] ) { printf( "%d\n", argc ); printf( "%s\n", argv[ 0 ] ); printf( "%s\n", argv[ 1 ] ); // 文字列 printf( "%d\n", ( argv[ 1 ][ 0 ] - 0x30 ) ); // 数値 } ++++++++++++++++++++++++++++++++++ 「表から法則性を見つけ出し、プログラムで表を作成したい」ではないのかなぁ。

全文を見る
すると、全ての回答が全文表示されます。
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.3

やっと意味がわかりました。 それは、「表を表示したい」とは普通いいませんね。(^^; 4次元配列を用意すると楽です。 static int XX[4][3][7][3]={ { {{1,1,1},{1,1,1}..... : : } { : : }; int A,B,C,D; : int ans=XX[A-1][B-1][C-1][D-1]; という感じで。

全文を見る
すると、全ての回答が全文表示されます。
  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.2

> 中途半端かつ意味不明なプログラムに仕上がりました。 全然仕上がっていません。入り口です。 画面に表を表示するには、そこで詰まっているようでは ハードルが高過ぎるでしょう。 基本を一つずつ学んでいく必要があります。 入門書を買うことをお勧めします。 それから動かすプログラムのOSやコンパイラが何なのかに よって話が全然変わってきます。

rr2315
質問者

補足

申し訳ありません、質問の意図を間違っていたようです。 4桁の数値を入力して、表中の1つの数字を出力させるプログラムを作成したいです。 以下表の見方となっています。 4桁の数値というのは、ABCDの順に対応しています。 例えば、 2111であれば2になります。 2112であれば2になります。 2113であれば3になります。 ちなみにMicrosoft visual c++6.0を使用しています。 一から勉強したいのですが、時間がありません。 あつかましい質問になってしまいますが、 できる範囲での意見をいただきたいです。 宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。
noname#245936
noname#245936
回答No.1

IT屋の者です。 んー。 データ自身は多次元配列をべた書きしてらっしゃいますので、 そこらをこねればできると思うのですが。 「表」というGUI(画面)表示なり、帳票を印刷したいという 意味でしょうか? であれば。 我々が文書…Wordや一太郎、表…ExcelやLotus(古!)といった 専門ソフトを使うように、ここ最近はプログラム言語でも、 「表」という道具を使います。 例えば、Excelという表が作れるソフト上でVBという言語で マクロを作るであるとか。 Visual Studio というソフト上でC++でGridを用いてデータを 画面表示するであるとか。 Visual Studio というソフト上でC#でCrystal Reportを用いて データをA4印字するであるとか。 はたまた、根性でLineをひきまくって標準出力で表示するとか いろいろな方法があります。 したい事のニュアンスをもう少々詳しく問うた方がいいと思います。 普通、商売でプログラムを行う場合は、「作りたいこと」が先に あって、それができる「ツール」を選んで、言語は最後に来ます。 NativeのC++の場合は、ポインタを直接扱えるので高速処理ができ、 容量を小さく抑えられます反面、細かい操作ができるあまりコードを 大量に書く傾向があり、ポインタ操作ミスなどバグが入りやすいので 普通は、通信プロトコルや、機械組込系(ケータイ・カメラ)などの 裏っかわの細かいロジック部分を担当させて、画面などは別の言語 ソフトで作ったりします。

rr2315
質問者

補足

申し訳ありません、質問の意図を間違っていたようです。 4桁の数値を入力して、表中の1つの数字を出力させるプログラムを作成したいです。 以下表の見方となっています。 4桁の数値というのは、ABCDの順に対応しています。 例えば、 2111であれば2になります。 2112であれば2になります。 2113であれば3になります。 ちなみにMicrosoft visual c++6.0を使用しています。 一から勉強したいのですが、時間がありません。 あつかましい質問になってしまいますが、 できる範囲での意見をいただきたいです。 申し訳ございません宜しくお願いします。

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

関連するQ&A

  • C言語初心者です。

    C言語初心者です。 1^2-2^2+3^3-4^2…+99^2-100^2の値を求めるプログラムを作成したいのですが上手くいきません。 どこが足りないのですか? #include <stdio.h> int main(void) { printf("%d", 1^2 - 2^2 + 3^2 - 4^2 … + 99^2 - 100^2); return (0); } よろしくお願いします。

  • Borland C++を利用しているのですが、簡単なプログラムが実行できません。

    Borland C++を利用しているのですが、簡単なプログラムが実行できません。 以下のようなプログラムをコンパイルして実行しようとしたのですが... #include <stdio.h> void main(void) { int i,j,k; i=1; j=2; k=i+j; printf( "k=%d,k); } Borland C++は、初めて使うのですが、C言語の勉強には使えないのでしょうか? もし使えるなら、どのようにすればよいのでしょうか?

  • C++の問題についてです

    5個の数字をキーボードから受け取って、その中に同じ数字があれば、画面にその旨報告する。 というプログラムを作っているのですが、自分で作った結果、 #include "stdafx.h" #include <stdio.h> int main(void) { int i, j, a; i = 0; do{ printf("値を入力してください:"); scanf("%d", &a[i]); for(j=0; j < 5; j++) { if(a == i) { printf("%dは同じ値があります。\n", a[i]); } } i++; } while(i<5); return 0; } となりました。 このプログラムで文法がおかしいというところがあれば教えていただけませんか? 自分で考えてみたものの、全然わかりませんでした。 使用しているソフトはVisual C++2005 Express Edition というソフトです。 どうかよろしくお願いします。

  • C++ ポインタ初級

    C++で、自作関数内でメインの数字をインクリメントします。 自作関数はVOIV型でやりたいんです。 #include <stdio.h> void plus( int * ); main( ){  int a = 1;  int *&p = &a;  plus( p );  printf( "%d" , *p ); } void plus( int *i ){  ( *i )++; } int型の変数を2つ宣言したけど、1つでやる方法はないですか? #include <stdio.h> void plus( int * ); main( ){  int a = 1;  plus( &a ); // aのアドレスを渡して、  printf( "%d" , a ); } void plus( int *i ){ // アドレスの値を  ( i )++; // インクリメントしたつもりだけど } 結果は1のままでした。

  • C言語の問題で困っています。

    C言語の問題で困っています。 誰か教えてください。 下の問題ですが、intがiだけでプログラムするにはどうしたら良いでしょうか? (a)から(d)に入るプログラムをすいませんが教えてください。 お願いします。 【問題】 1以上10以下の整数を昇順に区切って表示するプログラムです。 実行例 1 2 3 4 5 #include <stdio.h> int main (void) { int i; (A) while ((b)){ (c); (d); } printf("¥n"); return(0); }

  •  現在、私はC言語を学んでいます。

     現在、私はC言語を学んでいます。  プログラミングの初期の初期の問題なんですが、 「Hello World」という有名なプログラムがありますよね? それについての質問です。 #include<stdio.h> main() { printf("Hello World"); return 0; } も #include<stdio.h> main(void) { printf("Hello World"); return 0; } も #include<stdio.h> int main() { printf("Hello World"); } もちゃんと表示できます。 ここで質問です。 int main(void) int main() main() main(void) はどう違うんですか? あと、 return 0; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?

  • C言語の初心者です。これを実行してみてください。

    「a」って打ち込んだら「a」ってでましたか? #include<stdio.h> int main(void){ char a; printf("aaa\n"); scanf_s("%c", &a); printf("%c", a); return 0; }

  • C言語についてなのですが・・・

    さきほども上げたのですがカテゴリが間違っていたのでもう一回書き込みました まだプログラムの勉強をはじめた初心者なのですが、 テキストファイルから文字を読みこみ、大文字ならば小文字に変換し辞書順に並びかえるプログラムを作っているのですがどうしてもうまくいきません。 例えばtest.txtに XXX YYY YY XX BBB aaa aa BB とあれば aa aaa bb bbb xx xxx yy yyy と表示されるよにしたいんです。 自分が作ったプログラむはこれです。 まだテキストファイルからでなくキーボードからの入力になっていますが・・・ #include<stdio.h> #include<stdlib.h> #include<string.h> #include <ctype.h> int soto( const void *x, const void *y); int main(int argc, char *argv[]){ FILE *input; char str1[1000]; int i, j; for (i = 1; i < argc; i++){ qsort(argv[i], 1000, sizeof( char *), soto); strcpy(str1, argv[i]); for(j = 0; j < 100; j++){ str1[j] = tolower( str1[j] ); } printf("%s\n", str1); } return 0; } int soto( const void *a, const void *b){ char *x, *y; x = (char*)a; y = (char*)b; return x-y; } これだと小文字にはなるんですがソートされずに表示されてしまいます・・・ どのようにすればいけるのかご指摘のほどおねがいします

  • C言語の問題で一部分からないところがあります。

    C言語の問題で2つの4x4行列の2次元配列に格納し、それらの積を求めるというプログラムで以下のような関数を作成しました。 #include <stdio.h> void m_ena(int a0[4][4], int a1[4][4], int result[4][4]); int main(void) { } void m_ena(int a0[4][4], int a1[4][4], int result[4][4]) { int a[4][4], b[4][4], r[4][4]; int i, j; for(i=0; i<4; i++){ for(j=0; j<4; j++){ scanf("%d", &a[i][j]); } } for(i=0; i<4; i++){ for(j=0; j<4; j++){ scanf("%d", &b[i][j]); } } for(i=0; i<4; i++){ for(j=0; j<4; j++){ r[4][4] = a[i][j]*b[i][j]; } } } ここまで出来たのはいいのですが、これ以降どのようにメイン関数に書けばいいのか分からず困っています。 この問題は必ず上記関数を使う必要がありますのでどうぞよろしくお願いします。

  • C言語  九九表

    九九表を作ろうとしたのですが、うまくいきません、解説お願いします。 #include<stdio.h> main() { int i ; int j ; for( i=1 ; i<=10 ; i++){ for( j = 1 ; j<=10 ; j++) { printf("%4d\n") , i*j ; } printf("\n") ; } } 結果 10 -748408832 -748408832 -748408832 -748408832 -748408832 -748408832 -748408832 -748408832 -748408832     が10個続いてました・・・・

このQ&Aのポイント
  • DCP-J1200の印刷指示に対して白紙が出るトラブルについて解決策を教えてください。
  • Windows10を使用して有線LANで接続しているDCP-J1200の印刷指示で白紙が出る問題が発生しています。関連するソフト・アプリはすべてのアプリです。
  • DCP-J1200の印刷指示で白紙が出る問題について、JCOMの電話回線を使用している場合にも発生する可能性があります。
回答を見る