数字をシャッフルする
数字をシャッフルする
VC++2008とDXライブラリを使っています。
int X1.x2.x3.………,x24,x25;
というように、int型の25個の変数を用意します。
これに、1~25の数字をシャッフルして代入するプログラムを作りたいのですがどうすれば良いでしょうか。
実行するたびに違う数列が生成されるようにしたいのですが…
乱数を使ってなんとか出来るのでは…とは思いますが…
生成した数列の状態を、セーブデータみたいにして保存しておく必要はありません。
ええっと、つまり、リプレイみたいなことはしないので、乱数を保存する必要はないです。
簡単なプログラムなのかもしれませんが、まだ初心者で、考えたのですが分かりませんでした。
よろしくお願いいたします。
int X1.x2.x3.………,x24,x25;
というように、int型の25個の変数を用意します。
これに、1~25の数字をシャッフルして代入するプログラムを作りたいのですがどうすれば良いでしょうか。
実行するたびに違う数列が生成されるようにしたいのですが…
乱数を使ってなんとか出来るのでは…とは思いますが…
生成した数列の状態を、セーブデータみたいにして保存しておく必要はありません。
ええっと、つまり、リプレイみたいなことはしないので、乱数を保存する必要はないです。
簡単なプログラムなのかもしれませんが、まだ初心者で、考えたのですが分かりませんでした。
よろしくお願いいたします。
Re: 数字をシャッフルする
int X1.x2.x3.………,x24,x25;というのは配列を使ってはいけないんでしょうか?
とりあえずちょっと非効率な気もしますが、ぱっと思いつく方法としては
1、乱数を使ってX1に1~25のどれかを入れる
2、次の変数に入れる数を乱数で作り、X1~X25に入っている数字かどうかを調べ、入っていないなら代入
3、X25まで上記をくり返す
っていう感じでいいかと。
ただ、前述の通り配列を使わないとちょっと面倒なソースになりそうです。
とりあえずちょっと非効率な気もしますが、ぱっと思いつく方法としては
1、乱数を使ってX1に1~25のどれかを入れる
2、次の変数に入れる数を乱数で作り、X1~X25に入っている数字かどうかを調べ、入っていないなら代入
3、X25まで上記をくり返す
っていう感じでいいかと。
ただ、前述の通り配列を使わないとちょっと面倒なソースになりそうです。
Re: 数字をシャッフルする
ポインタで無理矢理配列にしてしまえば楽です。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
/*変数*/
int x1,x2,x3,x4,x5,x6,x7,x8,x9,x10;
int x11,x12,x13,x14,x15,x16,x17,x18,x19,x20;
int x21,x22,x23,x24,x25;
/*ポインタ配列*/
int* ptr[25];
/*その他*/
int i,pos,temp;
/*ポインタを代入*/
ptr[0]=&x1;ptr[1]=&x2;ptr[2]=&x3;ptr[3]=&x4;ptr[4]=&x5;
ptr[5]=&x6;ptr[6]=&x7;ptr[7]=&x8;ptr[8]=&x9;ptr[9]=&x10;
ptr[10]=&x11;ptr[11]=&x12;ptr[12]=&x13;ptr[13]=&x14;ptr[14]=&x15;
ptr[15]=&x16;ptr[16]=&x17;ptr[17]=&x18;ptr[18]=&x19;ptr[19]=&x20;
ptr[20]=&x21;ptr[21]=&x22;ptr[22]=&x23;ptr[23]=&x24;ptr[24]=&x25;
/*整数を代入*/
for(i=0;i<25;i++) {
*ptr[i]=i+1;
}
/*乱数を初期化*/
srand((unsigned int)time(NULL));
/*シャッフル*/
for(i=0;i<25;i++) {
pos=rand()%(25-i)+i;
temp=*ptr[i];
*ptr[i]=*ptr[pos];
*ptr[pos]=temp;
}
/*表示*/
printf("%3d%3d%3d%3d%3d\n",x1,x2,x3,x4,x5);
printf("%3d%3d%3d%3d%3d\n",x6,x7,x8,x9,x10);
printf("%3d%3d%3d%3d%3d\n",x11,x12,x13,x14,x15);
printf("%3d%3d%3d%3d%3d\n",x16,x17,x18,x19,x20);
printf("%3d%3d%3d%3d%3d\n",x21,x22,x23,x24,x25);
/*正常終了*/
return 0;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 数字をシャッフルする
#include <stdio.h>
#include <stdlib.h>
#define SIZE (25) // 配列の大きさ
#define TIMES (50) // シャッフルする回数(適当に決めてください)
void init(int *x, int n)
{
int i;
for (i = 0; i < n; i++) {
x[i] = i + 1;
}
}
void shuffle(int *x)
{
int m, n, t, i;
for (i = 0; i < TIMES; i++) {
m = rand() % SIZE, n = rand() % SIZE;
t = x[m], x[m] = x[n], x[n] = t;
}
}
void print(int *x, int n)
{
int i;
for (i = 0; i < n; i++) {
printf("%d ", x[i]);
}
putchar('\n');
}
int main(void)
{
int x[SIZE];
srand((unsigned int) time(NULL));
init(x, SIZE);
printf("シャッフル前\n");
print(x, SIZE);
shuffle(x);
printf("シャッフル後\n");
print(x, SIZE);
return 0;
}
Re: 数字をシャッフルする
ぱにしんさんのやり方に近いですが
シャッフルではなく重複チェック用配列を使っています。
初心者なので配列を知らないのだろうと仮定して配列で回答します。
シャッフルではなく重複チェック用配列を使っています。
初心者なので配列を知らないのだろうと仮定して配列で回答します。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void){
int x[25]; /* x[0]~x[24]の配列*/
int c[25]={0}; /*重複チェック用配列 すべて0*/
int i;
/*乱数の初期化*/
srand((unsigned)time(NULL));
/*0~24の乱数を作り配列の先頭から順番に配列の最後まで格納*/
for(i=0; i<25; i++){
do{
x[i] = rand() % 25;
}while(c[x[i]]); /*重複していた場合はやり直し*/
c[x[i]] = 1; /*既に配列に格納されているものと同じ値の数字をチェック*/
x[i]++; /*0~24の数字が入るため1~25にする*/
}
/*表示*/
for(i=0; i<25; i++){
printf("x[%d]=%d\n", i, x[i]);
}
return 0;
}
Re: 数字をシャッフルする
初級者さんのやり方だと、同じ場所を何度も入れ替える可能性があり、無駄が出ます。
hss12さんのやり方だと、最悪いつまでたっても処理が終わりません。
という訳で、自分の、配列の先頭から順番に、
その位置もしくはその位置より後ろのいずれかの要素と入れ替えていく方法をおすすめします。
hss12さんのやり方だと、最悪いつまでたっても処理が終わりません。
という訳で、自分の、配列の先頭から順番に、
その位置もしくはその位置より後ろのいずれかの要素と入れ替えていく方法をおすすめします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 数字をシャッフルする
効率が悪いコードを書いてしまって、すみませんでした。
名前のとおり初級者ですので、かんべんしてください。
まあ、みけCATさんが書かれるエレガントなコードと、
私のエレファントなコードとで、たかだか数十回ていど
の入れ替えでどれだけ効率に差がでるのかは
よくわかりませんけど。
名前のとおり初級者ですので、かんべんしてください。
まあ、みけCATさんが書かれるエレガントなコードと、
私のエレファントなコードとで、たかだか数十回ていど
の入れ替えでどれだけ効率に差がでるのかは
よくわかりませんけど。
Re: 数字をシャッフルする
25程度なら大丈夫だと思いますが、確かに無限ループする可能性もあります。
ところでDXライブラリとのことだったのでみけCATさんのやり方で書いてみました。
配列あり、ポインタなし。
ところでDXライブラリとのことだったのでみけCATさんのやり方で書いてみました。
配列あり、ポインタなし。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE), DxLib_Init(); //ウィンドウモード変更,初期化
int x[25];
int i, pos, temp;
//整数を代入
for(i=0; i<25; i++){
x[i] = i+1;
}
//シャッフル
for(i=0; i<25; i++){
pos = GetRand(24-i) + i;
temp = x[i];
x[i] = x[pos];
x[pos] = temp;
}
//表示
for(i=0; i<25; i++){
printfDx("x[%d]=%d\n", i, x[i]);
}
ScreenFlip(); // 出力した文字列を表示
WaitKey(); // キーが押されるまで待つ
DxLib_End(); //終了処理
return 0;
}
Re: 数字をシャッフルする
こちらこそきつい言い方をしてすみません。初級者 さんが書きました:効率が悪いコードを書いてしまって、すみませんでした。
名前のとおり初級者ですので、かんべんしてください。
私としては、効率よりシャッフルでどれだけきちんと混ざってくれるかの方が心配でした。初級者 さんが書きました:まあ、みけCATさんが書かれるエレガントなコードと、
私のエレファントなコードとで、たかだか数十回ていど
の入れ替えでどれだけ効率に差がでるのかは
よくわかりませんけど。
と言っても使う乱数の性能にもよると思いますが。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 数字をシャッフルする
きちんと混ざる、とは、どういう状態を指すのでしょうか。
私のコードにある50という回数が適切かどうかはわかりませんが、
とにかく何回か混ぜた結果、極端な結果として「たまたま」最初と同じ状態に
なったとしても、それはそれでシャッフルした結果の一つにすぎない、
と考える方がよいのではないかと思います。
「すべてのカードが最初の場所と異なる」ことが「きちんと混ざる」と
イコールとは限らない、と思っています。
私のコードにある50という回数が適切かどうかはわかりませんが、
とにかく何回か混ぜた結果、極端な結果として「たまたま」最初と同じ状態に
なったとしても、それはそれでシャッフルした結果の一つにすぎない、
と考える方がよいのではないかと思います。
「すべてのカードが最初の場所と異なる」ことが「きちんと混ざる」と
イコールとは限らない、と思っています。
Re: 数字をシャッフルする
トランプのシャッフルの仕方は何種類かありますが,それぞれのシャッフル方法を再現する関数を作ったら面白そうですね.Hindu(),Riffle()などなど.
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 数字をシャッフルする
為にし比べてみたらどうでしょうか?
比較は簡単だと思いますよ。
比較は簡単だと思いますよ。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 数字をシャッフルする
50回もやれば十分な気もしますが初級者 さんが書きました:きちんと混ざる、とは、どういう状態を指すのでしょうか。
1,2,3...
と初期値が決まっているので、例えば
x[0]は1である確率が高くなってしまうのでは?
なるべく均等な確率になるシャッフルが良いのでは。
Re: 数字をシャッフルする
質問はVC++2008とDXライブラリということなので余談ですが。
EZアプリ(BREW)で、重複してたらやり直すアルゴリズムでウォッチドッグに引っ掛かって端末がリセットされることがありました。
iアプリ版がそういうアルゴリズムで書かれてて移植した際に判明したことですけど。
敵隊列の中から生き残っている三体を選ぶという処理です。
個人的にはたかがプログラムできちんと混ざることを期待しないですが、重複したらやり直しとか、交換しない可能性(※)があるとかの無駄はとても気になります。
※交換して元に戻るのではなくて同じインデックス同士の可能性です。
EZアプリ(BREW)で、重複してたらやり直すアルゴリズムでウォッチドッグに引っ掛かって端末がリセットされることがありました。
iアプリ版がそういうアルゴリズムで書かれてて移植した際に判明したことですけど。
敵隊列の中から生き残っている三体を選ぶという処理です。
個人的にはたかがプログラムできちんと混ざることを期待しないですが、重複したらやり直しとか、交換しない可能性(※)があるとかの無駄はとても気になります。
※交換して元に戻るのではなくて同じインデックス同士の可能性です。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 数字をシャッフルする
表示するプログラムを作って見ました。
評価は難しかったので見た目で判断して下さい。
青いほど元の位置から離れていて赤は元の位置から変わっていない場合です。バーの長さが数値を表します。
SPACEで初期化しなおして再シャッフルします。
評価は難しかったので見た目で判断して下さい。
青いほど元の位置から離れていて赤は元の位置から変わっていない場合です。バーの長さが数値を表します。
SPACEで初期化しなおして再シャッフルします。
#include "DxLib.h"
#include <time.h>
#define SIZE (25) // 配列の大きさ
int Key[256]; // キーが押されているフレーム数を格納する
// キーの入力状態を更新する
int gpUpdateKey(){
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int i=0; i<256; i++ ){
if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
} else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}
// みけCATさん手法
int ShuffleMikeCat(int XShuffle[])
{
int pos,temp;
int count = 0;
for(int i=0;i<SIZE;i++) {
pos=rand()%(SIZE-i)+i;
temp=XShuffle[i];
XShuffle[i]=XShuffle[pos];
XShuffle[pos]=temp;
count++;
}
return count;
}
// 初級者さん手法
#define TIMES (50) // シャッフルする回数(適当に決めてください)
int ShuffleSyokyuu(int XShuffle[])
{
int m, n, t, i;
int count = 0;
for (i = 0; i < TIMES; i++) {
m = rand() % SIZE, n = rand() % SIZE;
t = XShuffle[m], XShuffle[m] = XShuffle[n], XShuffle[n] = t;
count++;
}
return count;
}
// hss12さん手法
int Shufflehss12(int XShuffle[])
{
int c[SIZE]={0}; /*重複チェック用配列 すべて0*/
int count = 0;
for(int i=0; i<SIZE; i++){
do{
XShuffle[i] = rand() % SIZE;
count++;
}while(c[XShuffle[i]]); /*重複していた場合はやり直し*/
c[XShuffle[i]] = 1; /*既に配列に格納されているものと同じ値の数字をチェック*/
XShuffle[i]++; /*0~24の数字が入るため1~25にする*/
}
return count;
}
void Shuffles( int loops[], int XShuffle[][SIZE])
{
// 初期化
for( int i=0 ; i<SIZE ; i++ ) {
for( int p=0 ; p<3 ; p++ ) {
XShuffle[p][i] = i+1;
}
}
// それぞれのシャッフル
loops[0] = ShuffleMikeCat(XShuffle[0]);
loops[1] = ShuffleSyokyuu(XShuffle[1]);
loops[2] = Shufflehss12(XShuffle[2]);
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
srand((unsigned int) time(NULL));
int XShuffle[3][SIZE];
int loops[3];
// シャッフル
Shuffles(loops,XShuffle);
// while( 裏画面を表画面に反映, メッセージ処理, 画面クリア )
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
if( Key[ KEY_INPUT_SPACE ] == 1 ){ // リターンキーが押されたら
// シャッフル
Shuffles(loops,XShuffle);
}
DrawFormatString( 20,0, GetColor(0,255,255), "みけCATさん" );
DrawFormatString( 220,0, GetColor(0,255,255), "初級者さん" );
DrawFormatString( 420,0, GetColor(0,255,255), "hss12さん" );
for( int i=0 ; i<SIZE ; i++ ) {
int y = i * 16 + 40;
DrawFormatString( 0, y-4, GetColor(255,255,255), "%2d", i+1 );
for( int p=0 ; p<3 ; p++ ) {
int x = p * 200 + 20;
int w = XShuffle[p][i] * 5;
int h = 8;
// 元と同じ場合は赤離れるほど青
int distance = abs( XShuffle[p][i]-(i+1) );
int RG = 255 / (distance+1);
int color = GetColor(RG,0,255-RG);
DrawBox( x,y, x+w,y+h, color, TRUE);
}
}
for( int p=0 ; p<3 ; p++ ) {
DrawFormatString( 20+p*200,460, GetColor(0,255,255), "回数=%d", loops[p] );
}
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 数字をシャッフルする
ちなみに、初級者さんとhss12さんのは恐ろしくシャッフルされない場合があります。あと予想通りhss12さんのはループ回数が多いです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 数字をシャッフルする
それを言ってしまうと、hss12 さんが書きました: 1,2,3...
と初期値が決まっているので、例えば
x[0]は1である確率が高くなってしまうのでは?
例えばx[1]は2である確率が高くなってしまうのでは?
例えばx[2]は3である確率が高くなってしまうのでは?
...
例えばx[24]は25である確率が高くなってしまうのでは?
という話になって、全く論理的ではなくなってしまいます。
私のコードにおける50という回数は、
10回程度だったら少なすぎる、まあ、配列要素数の2倍程度でよかろう、
というきわめてアバウトな考えに基づいているだけで、
何の理論的裏付けもありませんが…。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: 数字をシャッフルする
調子に乗って、100要素バージョン。
回数あたりの効率はみけCATさんが、やはり一番高いと思います。
#include "DxLib.h"
#include <time.h>
#define SIZE (100) // 配列の大きさ
int Key[256]; // キーが押されているフレーム数を格納する
// キーの入力状態を更新する
int gpUpdateKey(){
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int i=0; i<256; i++ ){
if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
} else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}
// みけCATさん手法
int ShuffleMikeCat(int XShuffle[])
{
int pos,temp;
int count = 0;
for(int i=0;i<SIZE;i++) {
pos=rand()%(SIZE-i)+i;
temp=XShuffle[i];
XShuffle[i]=XShuffle[pos];
XShuffle[pos]=temp;
count++;
}
return count;
}
// 初級者さん手法
#define TIMES (SIZE*2) // シャッフルする回数(適当に決めてください)
int ShuffleSyokyuu(int XShuffle[])
{
int m, n, t, i;
int count = 0;
for (i = 0; i < TIMES; i++) {
m = rand() % SIZE, n = rand() % SIZE;
t = XShuffle[m], XShuffle[m] = XShuffle[n], XShuffle[n] = t;
count++;
}
return count;
}
// hss12さん手法
int Shufflehss12(int XShuffle[])
{
int c[SIZE]={0}; /*重複チェック用配列 すべて0*/
int count = 0;
for(int i=0; i<SIZE; i++){
do{
XShuffle[i] = rand() % SIZE;
count++;
}while(c[XShuffle[i]]); /*重複していた場合はやり直し*/
c[XShuffle[i]] = 1; /*既に配列に格納されているものと同じ値の数字をチェック*/
XShuffle[i]++; /*0~24の数字が入るため1~25にする*/
}
return count;
}
void Shuffles( int loops[], int XShuffle[][SIZE])
{
// 初期化
for( int i=0 ; i<SIZE ; i++ ) {
for( int p=0 ; p<3 ; p++ ) {
XShuffle[p][i] = i+1;
}
}
// それぞれのシャッフル
loops[0] = ShuffleMikeCat(XShuffle[0]);
loops[1] = ShuffleSyokyuu(XShuffle[1]);
loops[2] = Shufflehss12(XShuffle[2]);
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
srand((unsigned int) time(NULL));
int XShuffle[3][SIZE];
int loops[3];
// シャッフル
Shuffles(loops,XShuffle);
// while( 裏画面を表画面に反映, メッセージ処理, 画面クリア )
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
if( Key[ KEY_INPUT_SPACE ] == 1 ){ // リターンキーが押されたら
// シャッフル
Shuffles(loops,XShuffle);
}
DrawFormatString( 20,0, GetColor(0,255,255), "みけCATさん" );
DrawFormatString( 220,0, GetColor(0,255,255), "初級者さん" );
DrawFormatString( 420,0, GetColor(0,255,255), "hss12さん" );
for( int i=0 ; i<SIZE ; i++ ) {
int h = 350/SIZE;
int y = i * (h+1) + 40;
DrawFormatString( 0, y-4, GetColor(255,255,255), "%2d", i+1 );
for( int p=0 ; p<3 ; p++ ) {
int x = p * 200 + 20;
int w = XShuffle[p][i] * 200/SIZE;
// 元と同じ場合は赤離れるほど青
int distance = abs( XShuffle[p][i]-(i+1) );
int RG = 255 / (distance+1);
int color = GetColor(RG,0,255-RG);
DrawBox( x,y, x+w,y+h, color, TRUE);
}
}
for( int p=0 ; p<3 ; p++ ) {
DrawFormatString( 20+p*200,460, GetColor(0,255,255), "回数=%d", loops[p] );
}
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: 数字をシャッフルする
私の場合シャッフルしているのではなく毎回ランダム関数に代入させているのでsoftya(ソフト屋) さんが書きました:ちなみに、初級者さんとhss12さんのは恐ろしくシャッフルされない場合があります。あと予想通りhss12さんのはループ回数が多いです。
シャッフルされないことはないと思いますが。そもそも初期値がありませんし。
もちろんループ数は多いでしょうけど。
100要素の場合だとループ回数が
みけCATさん 100回
初級者さん 200回
私 数百回
となりますが、初級者さんのシャッフル数を100にすると
シャッフルされていない赤が目立ちますね。
これが
例えばx[1]は2である確率が高くなってしまうのでは?
例えばx[2]は3である確率が高くなってしまうのでは?
...
例えばx[24]は25である確率が高くなってしまうのでは?
という話だと思います。
2倍やれば見た感じ大丈夫そうですが。
Re: 数字をシャッフルする
質問した本人である私の返信が遅れてしまってもうしわけありません(汗
回答してくださった皆様、ありがとうございます。
みけCAT様、初級者様、hss12様。コードをありがとうございました。
それぞれのコードを読んでいて、とても勉強になりました。
また、softya(ソフト屋)様、それぞれの方法を比較できるプログラムをありがとうございました。
まだ、始めたばかりの私にとっては、とても感動できるものでした。
とりあえず、みけCAT様の方法が効率的みたいですので、そちらを採用させていただきたいと思います。
ポインタはほとんど使ったことがなくて、少々不安なところもありますが、頑張って勉強してマスターしたいと思います。
一応、これで解決とさせていただきたいと思いますm(_ _)m
回答してくださった皆様、ありがとうございます。
みけCAT様、初級者様、hss12様。コードをありがとうございました。
それぞれのコードを読んでいて、とても勉強になりました。
また、softya(ソフト屋)様、それぞれの方法を比較できるプログラムをありがとうございました。
まだ、始めたばかりの私にとっては、とても感動できるものでした。
とりあえず、みけCAT様の方法が効率的みたいですので、そちらを採用させていただきたいと思います。
ポインタはほとんど使ったことがなくて、少々不安なところもありますが、頑張って勉強してマスターしたいと思います。
一応、これで解決とさせていただきたいと思いますm(_ _)m