ページ 11

無題

Posted: 2010年5月30日(日) 15:02
by Ryou
『バブルの整列関数に必要な関数を付加し,任意個(<100)の正数(0以上100以下)を対象とするバブルの3種の整列プログラムを完成せよ.
整列処理中に交換、並べ替えが起きた場合,交換や並べ替えがおきた要素を文字*で,そうでない要素を文字.で表した文字列を出力せよ.整列対象のデータ(配列)内で,データで移動しているものが*となる』

という課題で、下のようなプログラムでいけると分ったのですが、
「for(k=0;k<n;printf(%s,k==j-1||k==j?*:.);k++);」
では何が起こっているのか分かりません

もっと簡単なプログラムでかけるのなら教えてください



#include <stdio.h>

int BubSort(int x[ ], int n);
void ShowData(int x[ ], int n);
int main(void);

#define NUM_DATA 10
int x[ ] = {9,8,7,6,5,4,3,2,1,0};



int BubSort(int x[ ], int n)
{
int i, j, temp;
int k;

for (i = 0; i < n - 1; i++) {
for (j = n - 1; j > i; j--) {
if (x[j - 1] > x[j]) {
temp = x[j];
x[j] = x[j - 1];
x[j - 1]= temp;


for(k=0;k<n;printf(%s,k==j-1||k==j?*:.);k++);
printf(\n);



}
}
}
}


void ShowData(int x[ ], int n)
{
int i;

for (i = 0; i < n ; i++)
printf(%d, x);
}

int main(void)
{

printf(BeforeSort:\n);
ShowData(x, NUM_DATA);
printf(\n\n);

BubSort(x, NUM_DATA);


printf(\n\nAfterSort:\n);
ShowData(x, NUM_DATA);
printf(\n);
return 0;
}

Re:無題

Posted: 2010年5月30日(日) 15:42
by box
コンパイルエラーが出ないソースを載せてください。

Re:無題

Posted: 2010年5月30日(日) 15:47
by Ryou
#include <stdio.h>

int BubSort(int x[ ], int n);
void ShowData(int x[ ], int n);
int main(void);

#define NUM_DATA 10
int x[ ] = {9,8,7,6,5,4,3,2,1,0};



int BubSort(int x[ ], int n)
{
int i, j, temp,k;

for (i = 0; i < n - 1; i++) {
for (j = n - 1; j > i; j--) {
if (x[j - 1] > x[j]) {
temp = x[j];
x[j] = x[j - 1];
x[j - 1]= temp;


for(k=0;k<n;printf("%s",k==j-1||k==j?"*":"."),k++);
printf("\n");



}
}
}
}


void ShowData(int x[ ], int n)
{
int i;

for (i = 0; i < n ; i++)
printf("%d", x);
}

int main(void)
{

printf("ソート前:");
ShowData(x, NUM_DATA);
printf("\n\n");

BubSort(x, NUM_DATA);


printf("\n\nソート後:");
ShowData(x, NUM_DATA);
printf("\n");
return 0;
}



でコンパイルエラーはでないです。

Re:無題

Posted: 2010年5月30日(日) 15:53
by asdf
BubSort関数がおかしいです。

Re:無題

Posted: 2010年5月30日(日) 16:27
by box
> for(k=0;k<n;printf("%s",k==j-1||k==j?"*":"."),k++);

三項演算子 ?: についてご存じでなければ、調べてみてください。
if文で置き換えられます。


BubSort関数の戻り値がint型になっていますが、
どこかで使っているわけではないのでvoidでよいのではないでしょうか。

Re:無題

Posted: 2010年6月18日(金) 11:17
by sage
t

Re:無題

Posted: 2010年6月18日(金) 11:19
by sage
テスト