配列の取り出し – 固定ページ 2 – プログラミング – Home

通知
すべてクリア

[解決済] 配列の取り出し

固定ページ 2 / 3

επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

…さっぱりわからん。四角く表示したいってこと?
# 単に表示上の問題?

二重ループを抜けてから、再度countとturnを入れ替えた
二重ループを用意し、その中で書けば?


返信引用
ん
 ん
(@ん)
ゲスト
結合: 23年前
投稿: 106
 

結局変数 A の型はなんなのですか?
「変数の型を教えてください」としても変数いっこ分しか
教えてもらえないのでは質問内容の理解はできません。

面倒ならばプログラムをここに全て掲載してください。
下手に質問するよりも人に理解してもらえます。


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 24年前
投稿: 448
 

「配列の取り出し」というタイトルですが、
取り出したいデータが格納されている配列は、
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すると、どうなるんだろう…?


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

思うに貞松さん自身が問題をよく整理できていないような気がします。
よく把握できていない状態で説明しようとしているためにかえって
周りが混乱しているような。

どうしてもうまく説明できないようであれば、
こういうプログラムを作る基になったものを丸のまま載せた方が良いかも
知れないです。

何か、課題とか、練習問題とかなんではないですか?
あと、ここに出てるソースって実際にあなたが作成して動かしたけれど
うまくいかなって言うコードですか?
実際には具体的なコードの提示も出来ていないような気がしますけれど。


返信引用
貞松
 貞松
(@貞松)
ゲスト
結合: 21年前
投稿: 13
Topic starter  

皆さま
有難うございます。
お手数おかけしています。
以下にソースを提示します。
修正をしていたため時間がかかってしまいました。
申し訳ございません。
宜しくお願いいたします。
#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が入るもの
を最終的に出力したいと考えています。
*/


返信引用
貞松
 貞松
(@貞松)
ゲスト
結合: 21年前
投稿: 13
Topic starter  

上記のDは消し忘れです。すいません。


返信引用
PIP
 PIP
(@PIP)
ゲスト
結合: 22年前
投稿: 16
 

とりあえずインデントを整理したぞ。

//**************************************************************************
#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が入るもの
を最終的に出力したいと考えています。
*/


返信引用
貞松
 貞松
(@貞松)
ゲスト
結合: 21年前
投稿: 13
Topic starter  

RIPさん
有難うございます。


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

> 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」のように桁数を揃えたい、という事ですか?


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

ひとつ付け足し。

> 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と間違えているだけですか?


返信引用
tib
 tib
(@tib)
ゲスト
結合: 23年前
投稿: 468
 

結局こういうことをしたいのでしょうか。
多分、ポイントは「わざわざ配列変数に入れたんだから、計算する部分と出力する部分を
分ける」という事ではないかと。

#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;
}


返信引用
PIP
 PIP
(@PIP)
ゲスト
結合: 22年前
投稿: 16
 

えーと、
>RIPさん
>有難うございます。
×R
○P
です。

文法的なおかしさはほかの人が突っ込んでくれると思うので、
それ以外のところを。

kの値は+1 or -1なので、double型はすべてintでいいと思います。
for(int isample=0; isample<100; ++i) {
B[isample] = (rand() % 2 - 1) * 2;
}


返信引用
PIP
 PIP
(@PIP)
ゲスト
結合: 22年前
投稿: 16
 

すいません。間違えました。

>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;
}


返信引用
PATIO
(@patio)
Famed Member
結合: 4年前
投稿: 2660
 

貞松さんが出したいようにするのであれば、
表示結果でみた時に横一列の並びは一つの文字列に編集して出すべきだと
思います。
貞松さんのソースでは、一文字出力するごとに改行しているので
今の出力結果になるのは当然の話です。
ところで、\nが改行だと言う認識はされているのですよね。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 600
 

要するにひとつの二重ループで値の設定と印字を
やろうとしていたところで躓いたってことかしら?


返信引用
固定ページ 2 / 3

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました