これ何て呼びますか Part2

出力結果が縦に100個ほど出てきたので、
縦25個、横4個に直したいのですがどうすればいいですか?

A 回答 (10件)

#include<stdio.h>



int main()
{
int Data[100];
for(int i=0;i<100;i++){Data[i]=i+1;}
for(int i=0;i<25;i++)
{
for(int j=0;j<4;j++)
{
printf("%d ",Data[i+j*25]);
}
printf("\n");
}
getchar();
return 0;
}
    • good
    • 0

またまた、#2です。



#9のソースプログラムでやりたかった事は、出力される桁数に関係なく、一桁目を右側に揃えようとした事です。ただ、このサイトの構成上、半角スペースなどがカットされて表示されているので、分かりづらくなっていると思います。実際に実行する前に、if文の中の処理を適時、修正してください。どうもすみませんでした。

今後は、[教えて!goo]も、プログラミングのカテゴリ内だけでも、フローチャートやUMLなどが使えるようになるといいんですけどね。あ~、めんどうめんどう。
    • good
    • 0

#2です。


pleaseteacherさんが作成された#5と#8のソースの違いについては、もう理解できましたか?#8の方では、言うまでも無く、「縦に100個ほど出てきた出力結果」がどういうデータなのか分からないため、擬似的にint型の配列Dataを作成して、それが出力されるようになっていますが、あとはこの部分を、元のソースプログラムに対応させるだけで、自分が考えていた通りの出力結果が得られることと思います。
もしかしたら、未だに勘違いされているかもしれませんので、あえて追記しておきますと、1から25までを縦に表示した直後に、その次のデータ(26以降)を、先程の1から25までの列の右隣に、表示させていく、という事は、ソフト的には、不可能だと思われます。(ていうか、CUI上にて、そういうことの出来るプログラミング言語が存在するのなら、僕自身、知りたいなあ。何せ、一端、標準出力をしたデータを引数として、そのデータに編集をした後、再び、標準出力の同じ場所に、その編集されたデータを出力し直すわけですからね。)
そのために、#8では、25ずつ、4つのデータを全て出力させてから改行をし、すぐ下の行をまた同じく4つずつ、・・・という風にしています。(この部分が、未だ良くわからないとしたら、それはプログラミング云々というよりも、数学でいう等差数列などの考え方がまだ、理解しきれていないのでは、と思います。)だから、もしこのデータの個数を、100から200、はたまた300、と大きくしていくと、出力されていく時の順番に少し違和感をもたれるかもしれませんが、それはいたしかたの無いことです。
ちなみに、私の開発環境は、Linuxとgccでして、一応#4や、#5と#8に関しても動作確認をしてみました。#4に関しては、main関数の戻り値をintにし、#5や#8に関しては、for文の記述をC++やJavaのようなものではなく、きちんとループ変数を外に出して、先に宣言するようにしていれば、ANCI Cでも、きちんと表示されます。私自身、pleaseteacherさんのソースを借用しまして、以下のようなソースを作成してみました。何処がどう違うのか、よく確かめてください。

#include<stdio.h>

int main(){
int Data[100];
int i;

/* 出力するデータ */
for(i=0;i<100;i++){Data[i]=i+1;}

/* 横方向に一行ずつ表示していくループ処理 */
for(i=0;i<25;i++){
if(i<9){ /* 一桁の数字がある時 */
printf(" %d %d %d %d\n",Data[i],Data[i+25],Data[i+50],Data[i+75]);
}else if(i==24){ /* 三桁の数字がある時 */
printf(" %d %d %d %d\n",Data[i],Data[i+25],Data[i+50],Data[i+75]);
}else{ /* それ以外の時 */
printf(" %d %d %d %d\n",Data[i],Data[i+25],Data[i+50],Data[i+75]);
}
}

return 0;
}


(だそく)実はというと、上記の方にある「ソフト的には、不可能」という部分は、厳密には間違いで、ユーザインターフェイスをグラフィカルなものにすれば、出来なくも無い様に思います。MFCやVB等にはあまり詳しくは分からないので、そちらの方に関しては、他の回答者さんに任せるとして、最終的なデータの表示を、例えばこのサイトのようなブラウザなどのGUI形式にすれば、JavaScriptに、JSPにと、色々な処理方式で、思っている通りの出力が可能になると思います。ただ、具体的なソースプログラムになってきますと、やはりかなり高度になってきますので、ここではCHIとGUIには、それぞれ一長一短がある、という風にでも理解しておいて下さい。実務レベルになってくると、そのような処理が必要となることもあると思いますので。
    • good
    • 0
この回答へのお礼

ありがとうございます

お礼日時:2005/06/19 10:37

#1です。


環境がtelnet端末でvi使ってるって返事が来た時点で、大きな学校のUNIX端末使ってる学生さんで初心者さんなのかなーとは思いますが・・・
しかも#4の人のプログラムはチンプンカンプンだけど#5の人のプログラムで「AAAが25×4に表示されるのでは?」くらいの知識は持ち合わせているみたいですね。
んーそこまで行ってたらもう少しなんだけどねー

「流用する」って言葉知ってますか?
なんで#5さんがAAAを出力するようにしたかわかりますか?
あなたが出力する部分は作っているだろうと思っているからですよ。
質問で出てきた縦に100行に出力してるのはあなたのプログラムではないのですか?

※ふんと、学校も変にプログラミングの知識なんか付けさせないでほしい
 そんなんだったら、何も知らないで社会に送り込んでくれたほうがマシ・・・orz
    • good
    • 0

4回に1回、改行するだけ。

    • good
    • 0

//Visual C++ にて確認


//これは分かりますか?

#include<stdio.h>

int main()
{
for(int i=0;i<25;i++)
{
for(int j=0;j<4;j++)
{
printf("AAA ");
}
printf("\n");
}
getchar();
return 0;
}
    • good
    • 0
この回答へのお礼

AAAが25×4に表示されるのでは?

このプログラムで例えば順番に出力された1~100の数字を

1  26  51  76
2  27  52  77
3  28  53  78
4  29  54  79
・   ・   ・   ・
・   ・   ・   ・
・   ・   ・   ・
25 50  75  100

と表示できるようになるんですか?

お礼日時:2005/06/14 22:48

1つの方法


#include <stdio.h>

#define COLUMN 4
#define DELIMITER " "
void print(char *str){
/* 出力を指定列数まで改行しない */
static count=0;

if(count==0){
printf("%s",str);
count++;
} else if(count<COLUMN){
printf("%s%s",DELIMITER, str);
count++;
} else {
printf("\n%s",str);
count=1;
}
}

void main(void){
char buff[128];
int i;

for(i=1;i<=100;i++){
sprintf(buff,"出力:%d",i);
print(buff);
}
}
    • good
    • 0

もし、


出力結果をテキストファイル上で編集するだけで良くて、
UNIXの環境で操作できるならば、

1.問題のものをUNIX上のテキストファイルにしてVIで開く
2.別のテキスト画面で"JJJj"という文字列をコピる
3.1のVIでカーソルを1行目に合わせて、
  2でコピったヤツを25回ほどぺー

その場しのぎだけど、楽でしょ。
    • good
    • 0

質問内容と、質問してきた時間帯から、質問者は明らかに若年者のような気が・・。

しかも、困り度3などから、提出期限が迫ってきているような気も・・。

それはさておき。

多分、コマンドプロンプトに出力結果を表示したら、どばーっと処理されるのが嫌なんだよね。以下を参考までに。

縦25個→25回、ループ処理を実行。
横4個→4回、ループ処理を実行。

実際には、縦方向の1回目のループ中に、横方向のループを4回分行い、改行を入れてから、縦方向の2回目のループに入る。
・・・
以上の事を、25回分、行う。

具体的には、縦方向のfor文の中に、横方向のfor文を記述する事となる。

以上っす。
    • good
    • 0

縦に100個ほどと言ってるってことはファイルに吐き出して、そのファイルを見ているってことですね?


あまりにも漠然としてるんで、とりあえずヒント。

ファイルに直接出さないで、バッファに取り込んでおいて・・・
ループで1文字ずつ取り出し、改行文字(\n)があったら何か区切り文字に置き換え
4回目の改行は残すように、ループするなり、4で割ってみるなり。。。

わー言い過ぎたか?ヒント出しすぎか?
    • good
    • 0
この回答へのお礼

すみません。プログラミングは素人なので
このヒントでもよくわかりません(汗
もう少し詳しくお願いします
環境はtelnet /bin/vi を使ってます

お礼日時:2005/06/14 16:17

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


おすすめ情報