…さっぱりわからん。四角く表示したいってこと?
# 単に表示上の問題?
二重ループを抜けてから、再度countとturnを入れ替えた
二重ループを用意し、その中で書けば?
結局変数 A の型はなんなのですか?
「変数の型を教えてください」としても変数いっこ分しか
教えてもらえないのでは質問内容の理解はできません。
面倒ならばプログラムをここに全て掲載してください。
下手に質問するよりも人に理解してもらえます。
「配列の取り出し」というタイトルですが、
取り出したいデータが格納されている配列は、
ERですか、Aですか?
> double ER[10][10] ;
なのに、
> ptr= &A;//ここでcountごとに出力されるAを取り出します。
> ER[count][turn]= *ptr;
ってどうなんでしょうね。
ER[x][x]には本当にdouble型の値が入るのでしょうか…。
データ型の認識をキチンと整理した方がいいように思います。
> printf(%c,ER[count][turn]);
double型を%cでprintfすると、どうなるんだろう…?
思うに貞松さん自身が問題をよく整理できていないような気がします。
よく把握できていない状態で説明しようとしているためにかえって
周りが混乱しているような。
どうしてもうまく説明できないようであれば、
こういうプログラムを作る基になったものを丸のまま載せた方が良いかも
知れないです。
何か、課題とか、練習問題とかなんではないですか?
あと、ここに出てるソースって実際にあなたが作成して動かしたけれど
うまくいかなって言うコードですか?
実際には具体的なコードの提示も出来ていないような気がしますけれど。
皆さま
有難うございます。
お手数おかけしています。
以下にソースを提示します。
修正をしていたため時間がかかってしまいました。
申し訳ございません。
宜しくお願いいたします。
#includestdafx.h
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int main()
{
int turn, count ;
double k ,A, *ptr;
double ER[10][10] ;
double B[10];
srand((unsigned int)time(NULL));/**/
/* Aには*が全て格納されています。 */
int D=0;k=0;
for(count=0 ; count<10; count++){
for(turn=0 ; turn<10; turn++){//繰り返し
for (int isample=0; isample <100; isample++) {
k = (double)(rand()/(double)RAND_MAX - 0.5) * 2;
B[isample]=k;
//printf(%f\n,B[isample]);
}
for(int i=0+D ; i<10+D; i++){
A=turn+B[i];
}
ptr= &A;//ここでcountごとに出力されるAを取り出します。
ER[count][turn]= *ptr;
printf(%f\n,ER[count][turn]);
if (A >4)
{
break;
}
//ここで以下のように出力されます。
/*
1(space)
*
*
*
*
*
2(space)
*
*
3(space)
count分続く
この並びをんさんが書いてくださったような以下のような並びに変換します */
}//turn
printf(\n) ;
}//count
return 0;
}//main
/*
double A[] = { '*', '*', '*', '*', '*', '*', '*', '*',
'*', '*', '*', '*', ' ', '*', '*', '*',
'*', ' ', '*', '*', ' ', ' ', '*', '*',
'*', ' ', '*', '*', ' ', ' ', ' ', '*',
'*', ' ', ' ', '*', ' ', ' ', ' ', '*',
'*', ' ', ' ', ' ', ' ', ' ', ' ', ' ' } ;
*にはdoubleの数値が入りましてスペースには0が入るもの
を最終的に出力したいと考えています。
*/
上記のDは消し忘れです。すいません。
とりあえずインデントを整理したぞ。
//**************************************************************************
#include stdafx.h
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int main()
{
int turn, count;
double k ,A, *ptr;
double ER[10][10];
double B[10];
srand((unsigned int)time(NULL));
/* Aには*が全て格納されています。 */
k=0;
for(count=0; count<10; count++){
for(turn=0; turn<10; turn++){//繰り返し
for (int isample=0; isample <100; isample++) {
k = (double)(rand()/(double)RAND_MAX - 0.5) * 2;
B[isample]=k;
}
for(int i=0; i<10; i++){
A=turn+B[i];
}
ptr= &A;//ここでcountごとに出力されるAを取り出します。
ER[count][turn]= *ptr;
printf(%f\n,ER[count][turn]);
if (A > 4) {
break;
}
//ここで以下のように出力されます。
/*
1(space)
*
*
*
*
*
2(space)
*
*
3(space)
count分続く
この並びをんさんが書いてくださったような以下のような並びに変換します
*/
}//turn
printf(\n);
}//count
return 0;
}//main
/*
double A[] = { '*', '*', '*', '*', '*', '*', '*', '*',
'*', '*', '*', '*', ' ', '*', '*', '*',
'*', ' ', '*', '*', ' ', ' ', '*', '*',
'*', ' ', '*', '*', ' ', ' ', ' ', '*',
'*', ' ', ' ', '*', ' ', ' ', ' ', '*',
'*', ' ', ' ', ' ', ' ', ' ', ' ', ' ' } ;
*にはdoubleの数値が入りましてスペースには0が入るもの
を最終的に出力したいと考えています。
*/
RIPさん
有難うございます。
> double B[10];
> ...
> for (int isample=0; isample <100; isample++) {
> k = (double)(rand()/(double)RAND_MAX - 0.5) * 2;
> B[isample]=k;
> }
Bは10個分しか領域を確保していないのに、100まで代入しようとしていますがいいのですか?
> for(int i=0; i<10; i++){
> A=turn+B[i];
> }
iが0~8の時の計算は全て無視され、iが9の時の計算のみがAに代入されますが、いいので
すか?
結局「*」という文字を出力したいのですか? doubleの数値を出力したいのですか? 後者
ならば「12.345」のように桁数を揃えたい、という事ですか?
ひとつ付け足し。
> double B[10];
> ...
> for (int isample=0; isample <100; isample++) {
> k = (double)(rand()/(double)RAND_MAX - 0.5) * 2;
> B[isample]=k;
> }
> for(int i=0; i<10; i++){
> A=turn+B[i];
> }
Bは領域がないながらも100個分計算しているのに、それに続くforループでは10個分しか
参照されていません。最初のforループは単に10を100と間違えているだけですか?
結局こういうことをしたいのでしょうか。
多分、ポイントは「わざわざ配列変数に入れたんだから、計算する部分と出力する部分を
分ける」という事ではないかと。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define SIZE 10
int main()
{
int turn, count;
double A;
double ER[SIZE][SIZE];
double B[SIZE];
srand((unsigned int)time(NULL));
// ERを初期化 (全ての領域にゼロを代入しておく)
for( count=0; count<SIZE; count++ )
{
for( turn=0; turn<SIZE; turn++ )
{
ER[count][turn] = 0.0;
}
}
// なんらかの計算をして、その結果をERに代入
for( count=0; count<SIZE; count++ )
{
for( turn=0; turn<SIZE; turn++ )
{
for( int isample=0; isample<SIZE; isample++ )
{
B[isample] = (double)(rand()/(double)RAND_MAX - 0.5) * 2;
}
for( int i=0; i<SIZE; i++ )
{
A=turn+B[i];
}
ER[count][turn]= A;
if( A > 4 ) break;
}
}
// ERの出力 (値の入っていない所は0.000で出力する版)
for( turn=0; turn<SIZE; turn++ )
{
for( count=0; count<SIZE; count++ )
{
printf( %6.3f , ER[count][turn] );
}
printf( \n );
}
printf( \n );
// ERの出力 (値の入っていない所は空白で出力する版)
for( turn=0; turn<SIZE; turn++ )
{
for( count=0; count<SIZE; count++ )
{
if( ER[count][turn] != 0.0 ) printf( %6.3f , ER[count][turn] );
else printf( );
}
printf( \n );
}
return 0;
}
えーと、
>RIPさん
>有難うございます。
×R
○P
です。
文法的なおかしさはほかの人が突っ込んでくれると思うので、
それ以外のところを。
kの値は+1 or -1なので、double型はすべてintでいいと思います。
for(int isample=0; isample<100; ++i) {
B[isample] = (rand() % 2 - 1) * 2;
}
すいません。間違えました。
>for(int isample=0; isample<100; ++i) {
> B[isample] = (rand() % 2 - 1) * 2;
>}
for(int isample=0; isample<100; ++i) {
B[isample] = rand() % 2 * 2 - 1;
}
貞松さんが出したいようにするのであれば、
表示結果でみた時に横一列の並びは一つの文字列に編集して出すべきだと
思います。
貞松さんのソースでは、一文字出力するごとに改行しているので
今の出力結果になるのは当然の話です。
ところで、\nが改行だと言う認識はされているのですよね。
要するにひとつの二重ループで値の設定と印字を
やろうとしていたところで躓いたってことかしら?